1. Pengantar Thread Programming
2. Pengantar Massage Parsing, Open MP
3. Pengantar Pemrograman CUDA CPU
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.
-
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.
2. Pengantar Massage Parsing, Open MP
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++.
3. Pengantar Pemrograman CUDA CPU
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.