D. 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.
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 MASSAGE PASSING
DAN OPENMP
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 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:
http://dpamudji.wordpress.com/2011/04/01/komputasi-parallel/
http://seto.citravision.com/berita-47-parallel-computation–distributed-processing.html
http://seto.citravision.com/berita-49-parallel-computation—pengantar-thread-programming.html
http://afrilieya.blogspot.com/2013/04/parallel-computation_20.html
Tidak ada komentar:
Posting Komentar