1. Parallel
Computing
Pemrograman paralel adalah teknik
pemrograman komputer yang memungkinkan eksekusi perintah/operasi secara
bersamaan baik dalam komputer dengan satu (prosesor tunggal) ataupun banyak
(prosesor ganda dengan mesin paralel) CPU. 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.
Komputasi paralel membutuhkan:
- Algoritma
- Bahasa Pemrograman, dan
- Compiler
Sebagai besar komputer hanya mempunyai
satu CPU, namun ada yang mempunyai lebih dari satu. Bahkan juga ada komputer
dengan ribuan CPU. Komputer dengan satu CPU dapat melakukan parallel processing
dengan menghubungkannya dengan komputer lain pada jaringan. Namun, parallel
processing ini memerlukan software canggih yang disebut distributed processing
software.
2. Parallelism
Concept
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 (1) dalam
interval waktu yang sama, (2) dalam waktu yang bersamaan atau (3) 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.
Adapun
proses kerja , pemrosesan paralel membagi beban kerja dan mendistribusikannya
pada komputer-komputer lain yang terdapat dalam sistem untuk menyelesaikan
suatu masalah. Sistem yang akan dibangun akan tidak akan menggunakan komputer
yang didesikasikan secara khusus untuk keperluan pemrosesan paralel melainkan
menggunakan komputer yang telah ada. Artinya, sistem ini nantinya akan terdiri
dari sejumlah komputer dengan spesifikasi berbeda yang akan bekerjasama untuk
menyelesaikan suatu masalah.
3. Distributed
Processing
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).
Pemrosesan
terdistribusi
merupakan proses pendistribusian pengolahan paralel dalam pemrosesan paralel
menggunakan beberapa mesin. Jadi, bisa di bilang kemampuan dari suatu
komputer-komputer yang dijalankan secara bersamaan untuk memecahkan suatu
masalah dengan proses yang cepat.
Didistribusikan pengolahan paralel
menggunakan pemrosesan paralel pada beberapa mesin. Salah satu contoh dari hal
ini adalah bagaimana beberapa komunitas memungkinkan pengguna untuk mendaftar
dan mendedikasikan komputer mereka sendiri untuk memproses beberapa data set
yang diberikan kepada mereka oleh server. Ketika ribuan pengguna mendaftar
untuk ini, banyak data dapat diproses dalam jumlah yang sangat singkat.
Contoh dari proses terdistribusi adalah
ketika terdapat macam masalah diberikan pada satu master, maka dengan
menggunakan komputer paralel masalah terseut akan terpecah menjadi beberapa
bagian secara terdistribusi.
4. Architectural
Parallel
Menurut seorang Designer Processor,
taksonomi Flynn, Arsitektur Komputer dibagi menjadi 4 bagian, yaitu :
SISD
(Single Instruction, Single Data)
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.
SIMD
(Single Instruction, Multiple Data)
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).
MISD
(Multiple Instruction, Single Data)
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.
MIMD
(Multiple Instruction, Multiple Data)
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.
5. 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.
6. Pengantar
Massage Passing dan OpenMP
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
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.
7. 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.
sumber :