KELOMPOK 6:
Aditia
Septiandi (
50414279 )
Ery
Febrianto (
53414654 )
Fila Suci Wursima La
Adji (
54414229 )
Ivander
Svega (
55414556 )
Muhammad Januardi
Santoso ( 57414381 )
Muhammad Sukri
Adiyanto (
57414553 )
Prazentio
Fathybetara (
58414501 )
A. 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.
Pengantar Message Passing, OpenMP
Massage Passing merupkan suatu teknik bagaimana mengatur
suatu alur komunikasi messaging terhadap proses pada system. Message passing
dalam ilmu komputer adalah suatu bentuk komunikasi yang digunakan dalam
komputasi paralel , pemrograman-berorientasi objek , dan komunikasi
interprocess . Dalam model ini, proses atau benda dapat mengirim dan menerima
pesan yang terdiri dari nol atau lebih byte, struktur data yang kompleks, atau
bahkan segmen kode ke proses lainnya dan dapat melakukan sinkronisasi. Objek didistribusikan
dan metode sistem remote doa seperti ONC RPC , CORBA , Java RMI , DCOM , SOAP ,
. NET Remoting , CTO , QNX Neutrino RTOS , OpenBinder , D-Bus , Unison RTOS dan
serupa pesan lewat sistem.Paradigma Message passing yaitu :
1. Banyak
contoh dari paradigma sekuensial dipertimbangkan bersama-sama.
2. Programmer
membayangkan beberapa prosesor, masing-masing dengan memori, dan menulis sebuah
program untuk berjalan pada setiap prosesor.
3. Proses
berkomunikasi dengan mengirimkan pesan satu sama lain
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.
Pengantar Programming CUDA
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.
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.
B. Pengantar Message Passing,
OpenMP
Pemrosesan Paralel adalah komputasi dua atau lebih tugas
pada waktu bersamaan dengan tujuan untuk mempersingkat waktu penyelesaian
tugas-tugas tersebut dengan cara mengoptimalkan resource pada sistem komputer
yang ada. Pemrosesan paralel dapat mempersingkat waktu ekseskusi suatu program
dengan cara membagi suatu program menjadi bagian-bagian yang lebih kecil yang
dapat dikerjakan pada masing-masing prosesor secara bersamaan. Suatu program
yang yang dieksekusi oleh n prosesor diharapkan dapat mempersingkat waktu
eksekusi n kali lebih cepat. Salah satu komputer yang menggunakan metode
pemrosesan paralel adalah SMP (Single Multi Processor). Sebuah sistem paralel
setidaknya terdiri dari Message Passing Interface (MPI) dan sebuah pengatur
beban kerja (job scheduler).
Pada bagian komputasi parallel ini akan dibahas tentang
Message Passing dan OpenMP.
Pembahasan Jurnal:
Algoritma genetika sekuensial untuk menyelesaikan Container
Loading Problem bekerja hanya dengan menggunakan
satu processor saja meskipun dijalankan pada system
multicore. Tujuan dari penelitian ini adalah untuk mengoptimalkan kinerja
system multicore. Untuk mengoptimalkan kinerja system multicore diperlukan
adanya paralelisasi algoritma genetika untuk menyelesaikan Container Loading
Problem.
Dalam penelitian ini paralelisasi yang digunakan adalah
paralelisasi shared memory menggunakan OpenMP. Paralelisasi dalam OpenMP
dilakukan melalui penyisipan pragma OMP paralel. Dari algoritma genetika serial
Container Loading Problem akan diparalelisasi menggunakan OpenMP menjadi
algoritma genetika parallel Container Loading Problem. Selanjutnya akan dilakukan
pengujian waktu eksekusi algoritma dan perhitungan speedup.
Hasil dari penelitian ini berupa hasil pengujian kinerja
algoritma parallel yang menunjukkan bahwa waktu komputasialgoritma paralel
lebih kecil dari algoritma sekuensial sebelum diparalelisasi menggunakan
OpenMP. Waktukomputasi yang lebih kecil ini menyatakan efisiensi kinerja
algoritma paralel yang lebih baik dari algoritmasekuensial. Peningkatan
efisiensi ini juga dapat diidentifikasi dari Speedup paralelisasi
yang semakin besar. Kesimpulan diperoleh dari penelitian ini adalah bahwa
paralelisasi terhadap algoritma genetika untuk menyelesaikan Container Loading
Problem akan meningkatkan efisiensi waktu komputasi melalui pemanfaatan
sistem multicore.
Message Passing
Massage Passing merupkan suatu teknik bagaimana mengatur
suatu alur komunikasi messaging terhadap proses pada system. Message passing
dalam ilmu komputer adalah suatu bentuk komunikasi yang digunakan dalam
komputasi paralel, pemrograman-berorientasi objek, dan komunikasi interprocess.
Dalam model ini, proses atau benda dapat mengirim dan menerima pesan yang
terdiri dari nol atau lebih byte, struktur data yang kompleks, atau bahkan
segmen kode ke proses lainnya dan dapat melakukan sinkronisasi. Paradigma
Message passing yaitu :
1. Banyak
contoh dari paradigma sekuensial dipertimbangkan bersama-sama.
2. Programmer
membayangkan beberapa prosesor, masing-masing dengan memori, dan menulis sebuah
program untuk berjalan pada setiap prosesor.
3. Proses
berkomunikasi dengan mengirimkan pesan satu sama lain.
Terdapat beberapa metode dalam pengiriman pesan yaitu :
· Synchronous
Message Passing
Pengirim menunggu untuk mengirim pesan sampai penerima siap
untuk menerima pesan. Oleh karena itu tidak ada buffering. Selain itu Pengirim
tidak bisa mengirim pesan untuk dirinya sendiri.
· Ansynchronous
Message Passing
Pengirim akan mengirim pesan kapanpun dia mau. Pengirim
tidak peduli ketika penerima belum siap untuk menerima pesan. Oleh karena itu
diperlukan buffering untuk menampung pesan sementara sampai penerima siap
menerima pesan. Selain itu pengirim dapat pesan untuk dirinya sendiri.
OpenMP (Open Multiprocessing)
OpenMP adalah Application Programing Interface (API) yang
mendukung pemrograman multiprosesing shared memory dalam bahasa C/C++ dan
fortran pada berbagai arsitektur dan sistem operasi diantaranya: Solaris, AIX,
HP-UX,GNU/Linux, Mac OS X, dan Windows.
OpenMP adalah model portabel dan skalabel yang memberikan
interface sederhana dan fleksibel bagi programer shared memory dalam membangun
aplikasi paralel. Program multithread dapat ditulis dalam berbagai cara.
Beberapa diantaranya memungkinkan untuk melakukan interaksi yang kompleks antar
thread. OpenMP mencoba untuk memberikan kemudahan pemrograman serta membantu
dalam menghindari kesalahan program, melalui pendekatan terstruktur. Pendekatan
ini dikenal sebagai model pemrograman fork-join.
OpenMP bekerja berdasarkan model shared memory, maka secara
default data dibagi diantara thread-thread dan dapat terlihat dari setiap
thread. Terkadang program akan membutuhkan variabel dengan nilai thread
spesifik. Jika setiap thread memiliki variabel duplikat akan sangat berpotensi
memiliki nilai yang berbeda-beda pada setiap variabel duplikat tersebut.
Sinkronisasi (pengkoordinasian) aksi dari thread adalah
sesuatu yang sangat penting untuk menjamin data yang harus dibagi dan untuk
mencegah terjadinya data race condition. Secara default OpenMP telah menyediakan
mekanisme untuk menunggu thread dalam suatu tim thread sehingga semua thread
menyelesaikan tugasnya dalam region, kemudian dapat melanjutkan ke proses
selanjutnya. Mekanisme ini dikenal sebagai barrier.
C. Pengantar Pemrograman CUDA GPU
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.