Komputasi Paralel
1. Konsep Paralelisme
Banyak perkembangan-perkembangan baru dalam arsitektur komputer yang
didasarkan pada konsep pemrosesan paralel. Pemrosesan paralel dalam
sebuah komputer dapat didefinisikan sebagai pelaksanaan
instruksi-instruksi secara bersamaan waktunya. Hal ini dapat menyebabkan
pelaksanaan kejadian-kejadian, dalam interval waktu yang sama, dalam waktu yang bersamaan atau dalam rentang waktu yang saling
tumpang tindih.
Sekalipun didukung oleh teknologi prosesor yang berkembang sangat pesat,
komputer sekuensial tetap akan mengalami keterbatasan dalam hal
kecepatan pemrosesannya. Hal ini menyebabkan lahirnya konsep keparalelan
(parallelism) untuk menangani masalah dan aplikasi yang membutuhkan
kecepatan pemrosesan yang sangat tinggi, seperti misalnya prakiraan
cuaca, simulasi pada reaksi kimia, perhitungan aerodinamika dan
lain-lain.
Konsep keparalelan itu sendiri dapat ditinjau dari aspek design mesin
paralel, perkembangan bahasa pemrograman paralel atau dari aspek
pembangunan dan analisis algoritma paralel. Algoritma paralel itu
sendiri lebih banyak difokuskan kepada algoritma untuk menyelesaikan
masalah numerik, karena masalah numerik merupakan salah satu masalah
yang memerlukan kecepatan komputasi yang sangat tinggi.
2. Pemrosesan Terdistrubusi
Pemrosesan Terdistribusi atau Sistem Terdistribusi adalah Sekumpulan komputer otonom yang terhubung ke suatu jaringan, dimana bagi pengguna sistem terlihat sebagai satu komputer. Maksud komputer otonomi adalah walaupun komputer tidak terhubung ke jaringan, komputer tersebut tetap data berjalan. Dengan menjalankan sistem terdistribusi, komputer dapat melakukan :
- Koordinasi Aktifitas
- Berbagi sumber daya : hardware, software dan data
3. Arsitektur Komputer Paralel
Paralelisme dalam suatu komputer dapat diaplikasikan pada beberapa tingkatan, seperti berikut:
A. Tingkat pekerjaan: antara pekerjaan-pekerjaan atau fase-fase suatu pekerjaan. Hal ini menjadi prinsip dasar dari multiprogramming.
B. Tingkat prosedur: antara prosedur-prosedur dan di dalam loop. Hal ini harus tercakup sebagai hal yang penting bagi suatu bahasa.
C. Tingkat instruksi: antara fase-fase sebuah siklus instruksi, yaitu fetch, decode dan eksekusi suatu instruksi.
D. Tingkat aritmatika dan bit: antara bit-bit dalam sirkuit aritmatika. Salah satu contohnya adalah adder paralel.
4. 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 :
Threading dibagi menjadi 2 :
A. 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.
B. 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.
5. Pengantar Message Parsing, Open MP
Message Passing Interface (MPI)
MPI adalah sebuah standard pemrograman yang memungkinkan pemrogram untuk
membuat sebuah aplikasi yang dapat dijalankan secara paralel. Proses
yang dijalankan oleh sebuah aplikasi dapat dibagi untuk dikirimkan ke
masing-masing compute node yang kemudian masing-masing compute node
tersebut mengolah dan mengembalikan hasilnya ke komputer head node.Untuk
merancang aplikasi paralel tentu membutuhkan banyak
pertimbangan-pertimbangan diantaranya adalah latensi dari jaringan dan
lama sebuah tugas dieksekusi oleh prosesor.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 :
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
Open MP 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.
6. 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 (Compute Unified Device Architecture) merupakan teknologi anyar dari produsen kartu grafis Nvidia, dan
mungkin belum banyak digunakan orang secara umum. Teknologi ini dapat digunakan untuk menjalankan proses
pengolahan gambar, video, rendering 3D, dan lain sebagainya. 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
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.