PENGANTAR THREAD PROGRAMMING
Dalam pemrograman komputer, sebuah thread adalah
informasi terkait dengan penggunaan sebuah program tunggal yang dapat menangani
beberapa pengguna secara bersamaan. Dari program point-of-view, sebuah thread
adalah informasi yang dibutuhkan untuk melayani satu pengguna individu atau
permintaan layanan tertentu. Jika beberapa pengguna menggunakan program atau
permintaan bersamaan dari program lain yang sedang terjadi, thread yang dibuat
dan dipelihara untuk masing-masing proses. Thread memungkinkan program untuk mengetahui
user sedang masuk didalam program secara bergantian dan akan kembali masuk atas
nama pengguna yang berbeda. Salah satu informasi thread disimpan dengan cara
menyimpannya di daerah data khusus dan menempatkan alamat dari daerah data
dalam register. Sistem operasi selalu menyimpan isi register saat program
interrupted dan restores ketika memberikan program kontrol lagi.
Sebagian besar komputer hanya dapat mengeksekusi
satu instruksi program pada satu waktu, tetapi karena mereka beroperasi begitu
cepat, mereka muncul untuk menjalankan berbagai program dan melayani banyak
pengguna secara bersamaan. Sistem operasi komputer memberikan setiap program
"giliran" pada prosesnya, maka itu memerlukan untuk menunggu
sementara program lain mendapat giliran. Masing-masing program dipandang oleh
sistem operasi sebagai suatu tugas dimana sumber daya tertentu diidentifikasi
dan terus berlangsung. Sistem operasi mengelola setiap program aplikasi dalam
sistem PC (spreadsheet, pengolah kata, browser Web) sebagai tugas terpisah dan
memungkinkan melihat dan mengontrol item pada daftar tugas. Jika program
memulai permintaan I / O, seperti membaca file atau menulis ke printer, itu
menciptakan thread. Data disimpan sebagai bagian dari thread yang memungkinkan
program yang akan masuk kembali di tempat yang tepat pada saat operasi I / O
selesai. Sementara itu, penggunaan bersamaan dari program diselenggarakan pada
thread lainnya. Sebagian besar sistem operasi saat ini menyediakan dukungan
untuk kedua multitasking dan multithreading. Mereka juga memungkinkan
multithreading dalam proses program agar sistem tersebut disimpan dan menciptakan proses baru untuk setiap thread.
1. 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.
2. 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.
PENGANTAR MASSAGE PASSING DAN OPENMP
OpenMP (Open Multi-Processing) adalah sebuah
antarmuka pemrograman aplikasi (API) yang mendukung multi prosessing 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++.
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 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.
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 :