A.
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.
B.
Distributed Processing
Distributed
Processing adalah aktivitas memproses informasi dalam suatu organisasi yang
dijalankan oleh jaringan komputer yang tersambung oleh saluran telekomunikasi
yang terpusat pada fasilitas induk komputer.
Proses
ini menggunakan pemrosesan paralel pada beberapa mesin. Misalnya proses
transaksi yang terjadi pada beberapa mesin ATM sebuah bank. Ketika ribuan
nasabah menggunakan mesin ATM pada saat yang bersamaan, bayangkan berapa banyak
proses yang harus dikerjakan jika hanya terdapat 1 komputer server. Oleh karena
itu dengan menggunakan Distributed Processing, beban pemrosesan yang besar
dapat di kerjakan oleh beberapa komputer yang terhubung oleh jaringan dalam
waktu yang bersamaan secara simultan. Beban pemrosesan yang besar itu dipecah
menjadi beberapa beban kecil guna mempercepat proses.
C.
Architectural Parallel Computer
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.
D.
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.
E.
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.
F.
Pengantar Pemrograman CUDA GPU
CUDA,
Compute Unified Device Architecture merupakan suatu framework dari bahasa
pemrograman yang mendukung bahas C language, dimana mampu berkomunikasi
langsung dengan GPU dan sangat mudah bekerjasama untuk segala
multi-threading parallel execution hampir diseluruh prosesor pada GPU.
CUDA menggukan konsep nvcc sebagai ORM dalam object programmingnya. CUDA
merupakan produk dari NVIDIA sebagai produsen graphic komputer ternama.
Platform
CUDA dapat diakses oleh pengembang perangkat lunak melalui library
CUDA-accelerated , perintah kompiler (seperti OpenACC ), dan ekstensi untuk
bahasa pemrograman standar industri, termasuk C, C++ dan Fortran . C / C++
programmer menggunakan CUDA C / C + +, yang disusun dengan "nvcc",
NVIDIA LLVM berbasis C / C++ compiler, dan Fortran programmer dapat menggunakan
'CUDA Fortran', yang disusun dengan PGI CUDA Fortran compiler dari The Portland
Grup. Selain library, arahan compiler, CUDA C / C++ dan CUDA Fortran, platform
CUDA mendukung interface komputasi lainnya, termasuk Khronos Grup 's OpenCL ,
Microsoft DirectCompute , dan C++ AMP . Pemrograman pihak ketiga juga tersedia
untuk Python , Perl , Fortran , Java , Ruby , Lua , Haskell, Matlab , IDL , dan
dukungan asli di Mathematica.
Dalam
permainan komputer industri, GPU yang digunakan tidak hanya untuk rendering
grafis tetapi juga dalam perhitungan fisika permainan (efek fisik seperti
puing-puing, asap, api, cairan), contoh termasuk PhysX dan Bullet . CUDA juga
telah digunakan untuk mempercepat aplikasi non-grafis dalam biologi komputasi ,
kriptografi dan bidang lainnya oleh urutan besarnya atau lebih.
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.