Komputasi paralel (Paralell Computation) adalah
salah satu teknik melakukan komputasi secara bersamaan dengan memanfaatkan
beberapa komputer independen secara bersamaan. Biasanya diperlukan saat
kapasitas yang diperlukan sangat besar, baik karena harus mengolah data dalam
jumlah besar ataupun karena tuntutan proses komputasi yang banyak. Untuk
melakukan berbagai jenis komputasi paralel diperlukan infrastruktur mesin
paralel yang terdiri dari banyak komputer yang dihubungkan dengan jaringan dan
mampu bekerja secara paralel untuk menyelesaikan satu masalah. Adapun tujuan
utama komputasi paralel adalah meningkatkan kinerja komputer dalam
menyelesaikan berbagai masalah. Dengan membagi sebuah masalah besar ke dalam
beberapa masalah kecil, membuat kinerja menjadi cepat.
Komputasi
paralel membutuhkan :
1.
Algoritma
2.
Bahasa Pemrogaman
3.
Compiler
Masalah komputasi harus bisa dipecah menjadi
potongan-potongan diskrit pekerjaan yang bisa dipecahkan secara bersamaan, jalankan
beberapa instruksi program setiap saat, dipecahkan dalam waktu yang lebih
singkat dengan beberapa sumber daya komputasi dibandingkan dengan satu sumber
komputasi. Sumber daya perhitungan biasanya satu komputer dengan beberapa
prosesor / core, sejumlah komputer seperti itu sewenang-wenang yang dihubungkan
oleh sebuah jaringan
Mengapa
Menggunakan Komputasi Paralel Dibandingkan dengan komputasi serial, komputasi
paralel jauh lebih cocok untuk pemodelan, simulasi dan pemahaman fenomena dunia
nyata yang kompleks, diantaranya :
·
Save Time
Secara teori, membuang lebih banyak sumber daya
pada suatu tugas akan memperpendek waktu sampai selesai, dengan penghematan
biaya potensial. Komputer paralel bisa dibangun dari komponen komoditas murah.
·
Solve Larger (Lebih Kompleks Masalah)
Banyak masalah begitu besar dan / atau rumit
sehingga tidak praktis atau tidak mungkin untuk menyelesaikannya di satu
komputer, terutama mengingat keterbatasan memori komputer.
·
Provide Concurrency (Menyediakan
Konflik)
Sumber daya komputasi tunggal hanya bisa melakukan
satu hal pada satu waktu. Beberapa sumber daya komputasi dapat melakukan banyak
hal sekaligus.
Gambar 1. Proses Konsep Paralel
Di dalam komputasi parallel ada yang dinamakan
dengan pemrograman parallel. Pemrograman paralel adalah teknik pemrograman
komputer yang memungkinkan eksekusi perintah/operasi secara bersamaan
(komputasi paralel), baik dalam komputer dengan satu (prosesor tunggal) ataupun
banyak (prosesor ganda dengan mesin paralel) CPU. Bila komputer yang digunakan
secara bersamaan tersebut dilakukan oleh komputer-komputer terpisah yang
terhubung dalam suatu jaringan komputer lebih sering istilah yang digunakan
adalah sistem terdistribusi (distributed computing).
Bahasa
Pemrograman yang digunakan pada Pemrograman Parallel :
1.
MPI (Message Passing Interface)
Sebuah standard pemrograman yang memungkinkan
pemrogram untuk membuat sebuah aplikasi yang dapat dijalankan secara paralel.
2.
PVM (Parallel Virtual Machine)
Perangkat lunak yang memungkinkan sekumpulan
komputer yang heterogen terlihat seperti satu sistem komputer paralel dan dapat
digunakan sebagai sebuah sumber daya komputasi yang koheren.
Parelel
Komputasi terbagi atas 6 bagian, diantaranya :
1.
Parallelism Concept
2.
Distributed Processing
3.
Architectural Parallel Computer
4.
Pengantar Thread Programming
5.
Pengantar Massage Passing, OpenMP
6.
Pengantar Pemrograman CUDA GPU
1.
Parallelism Concept
Konsep dari Paralel Komputasional adalah bentuk
dari perhitungan menggunakan computer yang dapat melakukan tugas secara banyak
dan serentak dalam waktu yang bersamaan. Konsep ini digunakan untuk mempermudah
untuk memecahkan masalah besar. Konsep ini dapat menyebabkan pelaksanaan
komputasi dalam interval waktu yang sama, dalam waktu yang bersamaan, dan dalam
rentang waktu yang saling tumpang tindih.
Lahirnya konsep Paralel Komputasional dikarenakan
komputer tetap akan mengalami keterbatasan dalam hal kecepatan pemrosesannya,
walaupun teknologi processor saat ini berkembang sangat pesat. Beberapa contoh
tugas yang membutuhkan kecepatan pemrosesan yang tinggi diantaranya prakiraan
cuaca, simulasi reaksi kimia, perhitugan aerodinamika, dan sebagainya.
Konsep Paralel Komputasional dapat ditinjau dari
aspek desain mesin parallel, perkembangan bahasa pemrograman parallel dan dari
aspek analisis algoritma parallel. Algoritma konsep itu sendiri memang
difokuskan khusus kepada alhoritma yang berfungsi untuk menyelesaikan masalah
numeric, sebab masalah numeric merupakan masalah yang memerlukan kecepatan
komputasi yang sangat tinggi.
2.
Distributed
Processing
Distribusi Processing adalah mengerjakan semua
proses pengolahan data secara bersama antara komputer pusat dengan beberapa
komputer yang lebih kecil dan saling dihubungkan melalui jalur komunikasi.
Setiap komputer tersebut memiliki prosesor mandiri sehingga mampu mengolah
sebagian data secara terpisah, kemudian hasil pengolahan tadi digabungkan
menjadi satu penyelesaian total. Jika salah satu prosesor mengalami kegagalan
atau masalah yang lain akan mengambil alih tugasnya.
Tujuan lain yang ingin dicapai dalam komputasi
terdistribusi adalah transparansi. Kenyataan bahwa sumber daya yang dipakai
oleh pengguna sistem terdistribusi berada pada lokasi fisik yang terpisah,
tidak perlu diketahui oleh pengguna tersebut. Transparansi ini memungkinkan
pengguna sistem terdistribusi untuk melihat sumber daya yang terpisah tersebut
seolah-olah sebagai satu sistem komputer tunggal, seperti yang biasa
digunakannya. Dalam prosesnya setiap komputer berinteraksi satu sama lain untuk
mencapai tujuan bersama.
Contoh dari Distributed Data Processing System
adalah:
·
ATM, komputer yang dirancang untuk
tugas-tugas melaksanakan proyek, analisis finansial, penjadwalan waktu dan
akuntansi.
·
Pengolahan data pada server yahoo
yang tersebar hampir di seluruh dunia secara distribusi, setiap wilayah
mempunyai server masing-masing. Seperti di indonesia mempunyai server
tersendiri sehingga pengolahan data tidak di pusat melainkan di wilayah
masing-masing, dll.
3.
Architectural
Parallel Computer
Komputasi paralel adalah salah satu teknik
melakukan komputasi secara bersamaan dengan memanfaatkan beberapa komputer
secara bersamaan. Biasanya diperlukan saat kapasitas yang diperlukan sangat
besar, baik karena harus mengolah data dalam jumlah besar ataupun karena
tuntutan proses komputasi yang banyak. Untuk melakukan aneka jenis komputasi
paralel ini diperlukan infrastruktur mesin paralel yang terdiri dari banyak
komputer yang dihubungkan dengan jaringan dan mampu bekerja secara paralel
untuk menyelesaikan satu masalah.
Arsitektur paralel komputer menurut Klasifikasi
Flynn’s :
1.
SISD
Merupakan singkatan dari Single Instruction, Single
Data adalah satu-satunya yang menggunakan arsitektur Von Neumann. Ini
dikarenakan pada model ini hanya digunakan 1 processor saja. Oleh karena itu
model ini bisa dikatakan sebagai model untuk komputasi tunggal. Sedangkan
ketiga model lainnya merupakan komputasi paralel yang menggunakan beberapa
processor. Beberapa contoh komputer yang menggunakan model SISD adalah UNIVAC1,
IBM 360, CDC 7600, Cray 1 dan PDP 1.
Gambar 2. Arsitektur / Komputer Von Neumann
2.
SIMD
Merupakan singkatan dari Single Instruction,
Multiple Data. SIMD menggunakan banyak processor dengan instruksi yang sama,
namun setiap processor mengolah data yang berbeda. Sebagai contoh kita ingin
mencari angka 27 pada deretan angka yang terdiri dari 100 angka, dan kita
menggunakan 5 processor. Pada setiap processor kita menggunakan algoritma atau
perintah yang sama, namun data yang diproses berbeda. Misalnya processor 1
mengolah data dari deretan / urutan pertama hingga urutan ke 20, processor 2
mengolah data dari urutan 21 sampai urutan 40, begitu pun untuk
processor-processor yang lain. Beberapa contoh komputer yang menggunakan model
SIMD adalah ILLIAC IV, MasPar, Cray X-MP, Cray Y-MP, Thingking Machine CM-2 dan
Cell Processor (GPU).
3.
MISD
Merupakan singkatan dari Multiple Instruction,
Single Data. MISD menggunakan banyak processor dengan setiap processor
menggunakan instruksi yang berbeda namun mengolah data yang sama. Hal ini
merupakan kebalikan dari model SIMD. Untuk contoh, kita bisa menggunakan kasus
yang sama pada contoh model SIMD namun cara penyelesaian yang berbeda. Pada
MISD jika pada komputer pertama, kedua, ketiga, keempat dan kelima sama-sama
mengolah data dari urutan 1-100, namun algoritma yang digunakan untuk teknik
pencariannya berbeda di setiap processor. Sampai saat ini belum ada komputer
yang menggunakan model MISD.
4.
MIMD
Merupakan singkatan dari Multiple Instruction,
Multiple Data. MIMD menggunakan banyak processor dengan setiap processor
memiliki instruksi yang berbeda dan mengolah data yang berbeda. Namun banyak
komputer yang menggunakan model MIMD juga memasukkan komponen untuk model SIMD.
Beberapa komputer yang menggunakan model MIMD adalah IBM POWER5, HP/Compaq
AlphaServer, Intel IA32, AMD Opteron, Cray XT3 dan IBM BG/L.
4.
Pengantar Thread
Programming
Threading / Thread adalah sebuah alur kontrol dari
sebuah proses layanan informasi yang diminta oleh user. Konsep threading adalah
menjalankan 2 proses yang sama atau proses yang berbeda dalam satu waktu.
Banyak sistem operasi modern telah memiliki konsep yang memungkinkan sebuah
proses untuk memiliki eksekusi multi-threads. Keuntungan dari multithreaded
meliputi peningkatan respon dari pengguna, pembagian sumber daya proses,
ekonomis, dan kemampuan untuk mengambil keuntungan dari arsitektur
multiprosesor.
Gambar 3. Alur Threading
Multithreaded
Process, Benefits / manfaat:
-
Kemampuan reaksi
-
Sumber daya berbagi
-
Ekonomi
-
Scalabilas
Thread
bermanfaat untuk Multithreading yang berguna untuk Multiprocessor dan
Singleprocessor. Kegunaan untuk system Multiprocessor, adalah :
-
Sebagai unit pararel atau tingkat granularitas pararelisme.
-
Peningkatan kinerja disbanding berbasis proses.
Kegunaan
Multithreading pada singleprocessor, adalah :
-
Kerja foreground dan background sekaligus di satu aplikasi.
-
Penanganan asynchronous processing menjadi lebih baik.
-
Mempercepat eksekusi program.
-
Pengorganisasian program menjadi lebih baik.
Multicore
Programming
Multicore
systems mendesak/memaksa para programmer untuk melewati tantangan yang meliputi
:
•
Pembagian aktivitas
•
Saldo/Timbangan
•
Data yang telah hancur
•
Ketergantungan Data
•
Pengujian dan Debugging
Kegunaan
Thread
Multithreading
berguna untuk multiprocessor dan singleprocessor. Kegunaan untuk system
multiprocessor adalah :
-
Sebagai unit pararel atau tingkat granularitas pararelisme.
-
Peningkatan kinerja disbanding berbasis proses.
Kegunaan
multithreading pada singleprocessor, adalah :
-
Kerja foreground dan background sekaligus di satu aplikasi.
-
Penanganan asynchronous proseccing menjadi baik.
-
Mempercepat eksekusi program.
-
Pengorganisasian program menjadi lebih baik.
Manfaat
utama banyak thread di satu proses adalah memaksimumkan derajat kongkurensi
antara operasi-operasi yang terkait erat. Aplikasi jauh lebih efisien
dikerjakan sebagai sekumpulan thread disbanding sekumpulan proses.
Threading
dibagi menjadi 2 diantaranya :
•
Static Threading
Teknik
ini biasa digunakan untuk komputer dengan chip multiprocessors. Teknik ini
memungkinkan thread berbagi memori yang tersedia, menggunakan program counter
dan mengeksekusi program secara independen. Sistem operasi menempatkan satu
thread pada prosesor dan menukarnya dengan thread lain yang hendak menggunakan
prosesor itu. Mekanisme ini disebut static karena lambat. Teknik ini juga tidak
mudah diterapkan dan beresiko mengalami kesalahan. Alasannya, pembagian
pekerjaan yang dinamis di antara thread-thread menyebabkan load balancing-nya
cukup rumit. Programmer harus menggunakan protocol komunikasi yang kompleks
untuk menerapkan scheduler load balancing. Kondisi ini mendorong pemunculan
concurrency platforms yang menyediakan layer untuk mengkoordinasi,
menjadwalkan, dan mengelola sumberdaya komputasi paralel. Sebagian platform
dibangun sebagai runtime libraries atau sebuah bahasa pemrograman paralel
lengkap dengan compiler dan pendukung runtime-nya.
•
Dynamic Multithreading
Concurrency
platform ini menyediakan scheduler yang melakukan load balacing secara
otomatis. Platformnya masih dalam pengembangan namun sudah mendukung dua fitur,
yaitu nested parallelism dan parallel loops. Nested parallelism memungkinkan
sebuah subroutine dimunculkan dalam jumlah banyak sehingga program utama tetap
berjalan sementara subroutine menghitung hasilnya. Sedangkan parallel loops
seperti halnya fungsi for namun memungkinkan iterasi loop dilakukan secara
bersamaan.
5.
Pengantar Massage
Passing, OpenMP
OpenMP (Open Multi-Processing) adalah sebuah
antarmuka pemrograman aplikasi (API) yang mendukung multi processing shared
memory pemrograman di C, C++ dan Fortran pada berbagai arsitektur, termasuk
UNix dan Microsoft Windows platform. OpenMP Terdiri dari satu set perintah
kompiler, perpustakaan rutinitas, dan variabel lingkungan yang mempengaruhi
run-time. Banyak Aplikasi dibangun dengan model hibrida pemrograman paralel
dapat dijalankan pada komputer cluster dengan menggunakan OpenMP dan Message
Passing Interface (MPI), atau lebih transparan dengan menggunakan ekstensi
OpenMP non-shared memory systems. OpenMP merupakan model portabel dan skalabel
yang memberikan interface sederhana dan fleksibel bagi programer shared memory
dalam membangun aplikasi paralel. Program multithread dapat ditulis dalam
berbagai cara. Beberapa diantaranya memungkinkan untuk melakukan interaksi yang
kompleks antar thread. OpenMP mencoba untuk memberikan kemudahan pemrograman
serta membantu dalam menghindari kesalahan program, melalui pendekatan
terstruktur. Pendekatan ini dikenal sebagai model pemrograman fork-join.
Sejarah OpenMP dimulai dari diterbitkannya API
pertama untuk Fotran 1.0 pada Oktober 1997 oleh OpenMP Architecture Review
Board (ARB). Oktober tahun berikutnya OpenMP Architecture Review Board (ARB)
merilis standart C / C++. Pada tahun 2000 mengeluarkan versi 2.0 untuk fotran
dan poda tahun 2002 dirilis versi 2.0 untuk C / C++. Pada tahun 2005 dirilis
versi 2.5 yang merupakan pengabungan fotran, C, dan C++/ pada mei 2008 versi
3.0 yang terdapat didalmnya konsept tasks dan task construct.
Kegunaan
dari Message Passing ialah :
1.
Menyediakan fungsi-fungsi untuk menukar pesan.
2.
Menulis kode paralel secara portable.
3.
Mendapatkan performa yang tinggi dalam pemrograman paralel.
4.
Menghadapi permasalahan yang melibatkan hubungan data irregular atau dinamis
yang tidak begitu cocok dengan model data paralel.
OpenMP mengimplementasi multithreading. Bagian kode
yang akan dijalankan secara parallel ditandai sesuai dengan Preprocessor
directif sehingga akan membuat thread-thread sebelum dijalnkan. Setiap thread
memiliki id yang di buat menggunakan fungsi (omp_get_thread_num() pada C/C++
dan OMP_GET_THREAD_NUM() pada Fortran). Secara default, setiap thread
mengeksekusi kode secara parallel dan independent. “Work-sharing constructs”
dapat dapat digunakan untuk membagi tugas antar thread sehingga setiap thread
menjalankan sesuai bagian alokasi kodenya. Fungsi OpenMP berada pada file
header yang berlabel “omp.h” di C / C++.
Gambar 4. OpenMP Language Exntensions
OpenMP bekerja berdasarkan model shared memory,
maka secara default data dibagi diantara thread-thread dan dapat terlihat dari
setiap thread. Terkadang program akan membutuhkan variabel dengan nilai thread
spesifik. Jika setiap thread memiliki variabel duplikat akan sangat berpotensi
memiliki nilai yang berbeda-beda pada setiap variabel duplikat tersebut.
Sinkronisasi (pengkoordinasian) aksi dari thread
adalah sesuatu yang sangat penting untuk menjamin data yang harus dibagi dan
untuk mencegah terjadinya data race condition. Secara default OpenMP telah
menyediakan mekanisme untuk menunggu thread dalam suatu tim thread sehingga
semua thread menyelesaikan tugasnya dalam region, kemudian dapat melanjutkan ke
proses selanjutnya. Mekanisme ini dikenal sebagai barrier.
6. Pengantar Pemrograman CUDA GPU
CUDA (Compute Unified Device Architecture)
merupakan platform komputasi paralel dan model pemrograman yang membuat
penggunaan GPU untuk komputasi tujuan umum sederhana dan elegan. Pengembang
masih memprogram di C, C ++, Fortran yang familiar, atau daftar bahasa
pendukung yang terus berkembang, dan menggabungkan ekstensi bahasa ini dalam
bentuk beberapa kata kunci dasar.Kata kunci ini membiarkan pengembang
mengekspresikan sejumlah besar paralelisme dan mengarahkan kompilator ke bagian
aplikasi yang memetakan ke GPU.
GPU ( Graphical Processing Unit ) awalnya adalah
sebuah prosesor yang berfungsi khusus untuk melakukan rendering pada kartu
grafik saja, tetapi seiring dengan semakin meningkatnya kebutuhan rendering,
terutama untuk mendekati waktu proses yang realtime, maka meningkat pula
kemampuan prosesor grafik tersebut. akselerasi peningkatan teknologi GPU ini
lebih cepat daripada peningkatan teknologi prosesor sesungguhnya ( CPU ), dan
pada akhirnya GPU menjadi General Purpose, yang artinya tidak lagi hanya untuk
melakukan rendering saja melainkan bisa untuk proses komputasi secara umum.
Penggunaan Multi GPU dapat mempercepat waktu proses
dalam mengeksekusi program karena arsitekturnya yang natively parallel. Selain
itu Peningkatan performa yang terjadi tidak hanya berdasarkan kecepatan
hardware GPU saja, tetapi faktor yang lebih penting adalah cara membuat kode
program yang benarbenar bisa efektif berjalan pada Multi GPU.
CUDA merupakan teknologi anyar dari produsen kartu
grafis Nvidia, dan mungkin belum banyak digunakan orang secara umum. Kartu
grafis lebih banyak digunakan untuk menjalankan aplikasi game, namun dengan
teknologi CUDA ini kartu grafis dapat digunakan lebih optimal ketika
menjalankan sebuah software aplikasi. Fungsi kartu grafis Nvidia digunakan
untuk membantu Processor (CPU) dalam melakukan kalkulasi dalam proses data.
Teknologi CUDA dapat digunakan untuk menjalankan
proses pengolahan gambar, video, rendering 3D, dan lain sebagainya. VGA – VGA
dari Nvidia yang sudah menggunakan teknologi CUDA antara lain : Nvidia GeForce
GTX 280, GTX 260,9800 GX2, 9800 GTX+,9800 GTX,9800 GT,9600 GSO, 9600 GT,9500
GT,9400 GT,9400 mGPU,9300 mGPU,8800 Ultra,8800 GTX,8800 GTS,8800 GT,8800
GS,8600 GTS,8600 GT,8500 GT,8400 GS, 8300 mGPU, 8200 mGPU, 8100 mGPU, dan seri
sejenis untuk kelas mobile ( VGA notebook ).
Singkatnya, CUDA dapat memberikan proses dengan
pendekatan bahasa C, sehingga programmer atau pengembang software dapat lebih
cepat menyelesaikan perhitungan yang komplek. Bukan hanya aplikasi seperti
teknologi ilmu pengetahuan yang spesifik. CUDA sekarang bisa dimanfaatkan untuk
aplikasi multimedia. Misalnya meng-edit film dan melakukan filter gambar.
Sebagai contoh dengan aplikasi multimedia, sudah mengunakan teknologi CUDA.
Software TMPGenc 4.0 misalnya membuat aplikasi editing dengan mengambil
sebagian proces dari GPU dan CPU. VGA yang dapat memanfaatkan CUDA hanya versi
8000 atau lebih tinggi.