Parallelism
Concept
Komputasi
paralel merupakan salah satu teknik komputasi, dimana proses komputasinya
dilakukan oleh beberapa resources ( komputer ) yang
independen, secara bersamaan. Komputasi paralel biasanya diperlukan pada saat
terjadinya pengolahan data dalam jumlah besar ( di industri keuangan,
bioinformatika, dll ) atau dalam memenuhi proses komputasi yang sangat banyak.
Selanjutnya, komputasi paralel ini juga dapat ditemui dalam kasus kalkulasi
numerik dalam penyelesaian persamaan matematis di bidang fisika ( fisika
komputasi ), kimia ( kimia komputasi ), dll. Dalam menyelesaikan suatu masalah,
komputasi paralel memerlukan infrastruktur mesin paralel yang terdiri dari
banyak komputer yang dihubungkan dengan jaringan dan mampu bekerja secara
paralel.
Untuk
itu diperlukan aneka perangkat lunak pendukung yang biasa disebut sebagai
middleware yang berperan untuk mengatur distribusi pekerjaan antar node dalam
satu mesin paralel. Selanjutnya pemakai harus membuat pemrograman paralel untuk
merealisasikan komputasi. Tidak berarti dengan mesin paralel semua program yang
dijalankan diatasnya otomatis akan diolah secara paralel. 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 ). Tujuan utama dari pemrograman paralel adalah untuk meningkatkan
performa komputasi. Semakin banyak hal yang bisa dilakukan secara bersamaan (
dalam waktu yang sama ), semakin banyak pekerjaan yang bisa diselesaikan.
Analogi
yang paling gampang adalah, bila anda dapat merebus air sambil memotong-motong
bawang saat anda akan memasak, waktu yang anda butuhkan akan lebih sedikit
dibandingkan bila anda mengerjakan hal tersebut secara berurutan ( serial ).
Atau waktu yang anda butuhkan memotong bawang akan lebih sedikit jika anda
kerjakan berdua. Performa dalam pemrograman paralel diukur dari berapa banyak
peningkatan kecepatan ( speed up ) yang diperoleh dalam menggunakan tehnik
paralel. Secara informal, bila anda memotong bawang sendirian membutuhkan waktu
1 jam dan dengan bantuan teman, berdua anda bisa melakukannya dalam 1/2 jam
maka anda memperoleh peningkatan kecepatan sebanyak 2 kali.
Arsitektur paralel komputer
Menurut Klasifikasi Flynn’s :
·
SISD
Single Instruction – Single Data. Komputer
jenis ini hanya memiliki satu prosesor ( single processor ). Dimana semua
instruksi di eksekusi secara serial ( terurut satu demi satu ) dan memungkinkan
adanya overlapping di setiap bagian instruksi dalam pelaksanaan eksekusi.
Komputer ini adalah tipe komputer konvensional. Beberapa contoh komputer yang
menggunakan model SISD adalah UNIVAC1, IBM 360, CDC 7600, Cray 1 dan PDP 1.
·
SIMD
Single Instruction – Multiple Data. Komputer
jenis ini hanya dapat mengeksekusi satu instruksi dan memiliki lebih dari satu
prosesor. Satu eksekusi dilakukan secara paralel pada data yang berbeda pada
level lock-step. Komputer vektor adalah salah satu komputer paralel yang
menggunakan arsitektur ini. 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 ).
·
MISD
Multiple Instructions – Single Data. Belum
ada perwujudan nyata dari komputer jenis ini kecuali dalam bentuk
prototipe untuk penelitian. Teorinya komputer ini memiliki satu
prosesor dan mengeksekusi beberapa instruksi secara paralel tetapi praktiknya
tidak ada komputer yang dibangun dengan arsitektur ini karena sistemnya tidak
mudah dipahami.
·
MIMD
Multiple Instructions – Multiple Data.
Komputer jenis ini dapat mengeksekusi lebih dari satu instruksi secara paralel
dengan lebih dari satu prosesor. Tipe komputer ini yang paling banyak digunakan
untuk membangun komputer paralel, bahkan banyak supercomputer yang menerapkan
arsitektur ini. Beberapa komputer yang menggunakan model MIMD adalah IBM
POWER5, HP/Compaq AlphaServer, Intel IA32, AMD Opteron, Cray XT3 dan IBM BG/L.
Distributed Processing :
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.
Pengantar Thread Programming
Threading / Thread adalah sebuah alur kontrol
dari sebuah proses. Konsep threading adalah menjalankan 2 proses ( proses yang
sama atau proses yang berbeda ) dalam satu waktu. Contohnya sebuah web browser
mempunyai thread untuk menampilkan gambar atau tulisan sedangkan thread yang
lain berfungsi sebagai penerima data dari network. Threading dibagi menjadi 2 :
·
Static Threading
Teknik ini biasa digunakan untuk komputer
dengan chip multiprocessors dan jenis komputer shared-memory lainnya. 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.
·
Dynamic Multithreading
Teknik ini merupakan pengembangan dari teknik
sebelumnya yang bertujuan untuk kemudahan karena dengannya programmer tidak
harus pusing dengan protokol komunikasi, load balancing, dan kerumitan lain
yang ada pada static threading. Concurrency platform ini menyediakan scheduler
yang melakukan load balacing secara otomatis. Walaupun platformnya masih dalam
pengembangan namun secara umum mendukung dua fitur : nested parallelism dan
parallel loops.
Pengantar Massage Passing dan OpenMP
Message Passing Interface (MPI)
Massage Passing merupkan suatu teknik
bagaimana mengatur suatu alur komunikasi messaging terhadap proses pada system.
Message passing dalam ilmu komputer adalah suatu bentuk komunikasi yang
digunakan dalam komputasi paralel , pemrograman-berorientasi objek , dan
komunikasi interprocess . Dalam model ini, proses atau benda dapat mengirim dan
menerima pesan yang terdiri dari nol atau lebih byte, struktur data yang
kompleks, atau bahkan segmen kode ke proses lainnya dan dapat melakukan sinkronisasi.
Objek didistribusikan dan metode sistem remote doa seperti ONC RPC , CORBA ,
Java RMI , DCOM , SOAP , . NET Remoting , CTO , QNX Neutrino RTOS , OpenBinder
, D-Bus , Unison RTOS dan serupa pesan lewat sistem.Paradigma Message passing
yaitu :
- Banyak contoh dari
paradigma sekuensial dipertimbangkan bersama-sama.
- Programmer membayangkan
beberapa prosesor, masing-masing dengan memori, dan menulis sebuah program
untuk berjalan pada setiap prosesor.
- Proses berkomunikasi
dengan mengirimkan pesan satu sama lain
MPI ini merupakan standard yang dikembangkan
untuk membuat aplikasi pengirim pesan secara portable. Sebuah komputasi paralel
terdiri dari sejumlah proses, dimana masing-masing bekerja pada beberapa data
lokal. Setiap proses mempunyai variabel lokal, dan tidak ada mekanismesuatu
proses yang bisa mengakses secara langsung memori yang lain. Pembagian data
antar proses dilakukan dengan message passing, yaitu dengan mengirim dan
menerima pesan antar proses. MPI menyediakan fungsi-fungsi untuk menukarkan
antar pesan. Kegunaan MPI yang lain :
·
menulis kode paralel secara portable
·
mendapatkan performa yang tinggi dalam
pemrograman paralel
·
menghadapi permasalahan yang melibatkan
hubungan data irregular atau dinamis yang tidak begitu cocok dengan model
data paralel.
OpenMP
OpenMP merupakan API yang mendukung
multi-platform berbagi memori multiprocessing pemrograman C , C + + , dan
Fortran , pada kebanyakan arsitektur prosesor dan system operasi , termasuk
Solaris , AIX , HP-UX , GNU / Linux , Mac OS X , dan Windows platform. Ini
terdiri dari satu set perintah kompiler, rutinitas library, dan variable
lingkungan yang mempengaruhi perilaku run-time. OpenMP dikelola oleh nirlaba
teknologi konsorsium OpenMP Arsitektur Review Board (ARB atau OpenMP),
bersama-sama didefinisikan oleh sekelompok perangkat keras komputer utama dan
vendor perangkat lunak, termasuk AMD , IBM , Intel , Cray , HP , Fujitsu ,
Nvidia , NEC , Microsoft , Texas Instruments , Oracle Corporation , dan banyak
lagi.
Pengantar Pemrograman CUDA 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.
CUDA merupakan singkatan dari Compute Unified
Device Architecture, didefinisikan sebagai sebuah arsitektur komputer parallel,
dikembangkan oleh Nvidia. Teknologi ini 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.