D. Pengantar
Thread Programming
Dalam
pemrograman computer, thread adalah sebuah alur kontrol dari sebuah proses.
Suatu proses yang multithreaded mengandung beberapa perbedaan alur kontrol
dengan ruang alamat yang sama. Keuntungan dari multithreaded meliputi
peningkatan respon dari user, pembagian sumber daya proses, ekonomis, dan
kemampuan untuk mengambil keuntungan dari arsitektur multiprosesor.
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.
Mekanisme
ini terhitung lambat, karenanya disebut dengan static. Selain itu teknik ini
tidak mudah diterapkan dan rentan kesalahan. Alasannya, pembagian pekerjaan
yang dinamis di antara thread-thread menyebabkan load balancing-nya cukup
rumit. Untuk memudahkannya programmer harus menggunakan protocol komunikasi
yang kompleks untuk menerapkan scheduler load balancing. Kondisi ini mendorong
pemunculan concurrency platforms yang menyediakan layer untuk mengkoordinasi,
menjadwalkan, dan mengelola sumberdaya komputasi paralel.
Sebagian
platform dibangun sebagai runtime libraries atau sebuah bahasa pemrograman
paralel lengkap dengan compiler dan pendukung runtime-nya.
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. Nested
parallelism memungkinkan sebuah subroutine di-spawned (ditelurkan dalam jumlah
banyak seperti telur katak) sehingga program utama tetap berjalan sementara
subroutine menghitung hasilnya. Sedangkan parallel loops seperti halnya fungsi
for namun memungkinkan iterasi loop dilakukan secara bersamaan.
E. Pengantar
Message passing, Open MP
MPI
(Message Passing Interface) yaitu suatu standard dan message passing interface
partabel system yang didesain oleh grup penelitian untuk mengembangkan fungsi
dan macam-macam dari computer parallel.
OpenMP
(Open Multi-Processing) adalah sebuah antarmuka pemrograman aplikasi (API) yang
mendukung multi processing shared memory pemrograman di C, C++ dan Fortran pada
berbagai arsitektur, termasuk UNix dan Microsoft Windows platform. OpenMP
Terdiri dari satu set perintah kompiler, perpustakaan rutinitas, dan variabel
lingkungan yang mempengaruhi run-time. Banyak Aplikasi dibangun dengan model
hibrida pemrograman paralel dapat
dijalankan pada komputer cluster dengan menggunakan OpenMP dan Message Passing
Interface (MPI), atau lebih transparan dengan menggunakan ekstensi OpenMP
non-shared memory systems.
Sejarah
OpenMP dimulai dari diterbitkannya API pertama untuk Fotran 1.0 pada Oktober
1997 oleh OpenMP Architecture Review Board (ARB). Oktober tahun berikutnya
OpenMP Architecture Review Board (ARB) merilis standart C / C++. Pada tahun
2000 mengeluarkan versi 2.0 untuk fotran dan poda tahun 2002 dirilis versi 2.0
untuk C / C++. Pada tahun 2005 dirilis versi 2.5 yang merupakan pengabungan
fotran, C, dan C++/ pada mei 2008 versi 3.0 yang terdapat didalmnya konsept
tasks dan task construct.
OpenMP
mengimplementasi multithreading. Bagian kode yang akan dijalankan secara
parallel ditandai sesuai dengan Preprocessor directif sehingga akan membuat
thread-thread sebelum dijalnkan. Setiap thread memiliki id yang di buat
menggunakan fungsi (omp_get_thread_num() pada C/C++ dan OMP_GET_THREAD_NUM()
pada Fortran). Secara default, setiap thread mengeksekusi kode secara parallel
dan independent. "Work-sharing constructs" dapat dapat digunakan
untuk membagi tugas antar thread sehingga setiap thread menjalankan sesuai
bagian alokasi kodenya. Fungsi OpenMP berada pada file header yang berlabel
“omp.h” di C / C++.
F. Pengantar
Pemrograman CUDA GPU
Sebuah
GPU (Graphical Processing Unit) pada 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 /sebagaimana kenyataan sesungguhnya, 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 platform parallel computing dan
model pemrograman yang telah dibuat oleh NVIDIA dan diimplementasikan oleh
GPU(Graphic Processing Unit). CUDA memberikan akses pengembangan untuk kumpulan
visual instruction dan ingatan dari parallel computasional elemen CUDA GPU.
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 GTX
Keuntungan
dengan CUDA sebenarnya tidak luput dari teknologi aplikasi yang ada. CUDA akan
mempercepat proses aplikasi tertentu, tetapi tidak semua aplikasi yang ada akan
lebih cepat walaupun sudah mengunakan fitur CUDA. Hal ini tergantung seberapa
cepat procesor yang digunakan, dan seberapa kuat sebuah GPU yang dipakai. Dan
bagian terpenting adalah aplikasi apa yang memang memanfaatkan penuh kemampuan
GPU dengan teknologi CUDA. Kedepan seperti pengembang software Adobe akan ikut
memanfaatkan fitur CUDA pada aplikasi mereka. Jawaban akhir adalah, untuk
memanfaatkan CUDA kembali melihat aplikasi software yang ada. Apakah software
yang ada memang mampu memanfaatkan CUDA dengan proses melalui GPU secara penuh.
Hal tersebut akan berguna untuk mempercepat selesainya proses pada sebuah
aplikasi. Dengan kecepatan proses GPU, aplikasi akan jauh lebih cepat.
Khususnya teknologi ilmu pengetahuan dengan ramalan cuaca, simulator
pertambangan atau perhitungan yang rumit dibidang keuangan. Sedangkan aplikasi
umum sepertinya masih harus menunggu.
Sumber: