Apa itu komputasi parallel?
Menurut Michael j. Flynn membagi komputer dalam 4 kategori
yaitu :
a. SISD (Single Instruction, Single Data Stream)
b. MISD (Multiple Instruction, Single Data Stream)
c. SIMD (Single Instruction, Multiple Data Streams)
d. MIMD (Multiple Instruction, Multiple Data Streams)
Disini akan saya jelaskan
komputasi paralel yang terdiri dari konsep paralelisme, pemrosesan
distribusi, arsitektur komputer, pengantar thread programming dan Pengantar message
Parsing, Open MP.
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 :
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 :
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.
Referensi :
http://blogdedy.blogspot.com/
http://ananda-syaifullah.blogspot.com/
http://mojomakearocket.blogspot.com
http://arditoadi.blogspot.com
https://krustybrain.wordpress.com/2013/05/25/tugas-4-softskill-pengantar-komputasi-modern-sem-8/
http://wwwpengembanganblogspot.blogspot.com/
http://rrezzablog.blogspot.com/2009/11/parallel-processing.html
http://id.wikipedia.org/wiki/Komputasi_paralel