Disusun Oleh :
Ignatius Vemri ( 55414102)
Jeremy Todali ( 55414632 j)
Tubagus Agastha ( 5A414899)
Dosen : Lely Prananingrum
PEMROGRAMAN CUDA (GRAPHICAL
PROCESSING UNIT)
Sebagaimana telah kita ketahui bahwa Cuda adalah platform komputasi paralel dan model pemrograman yang diciptakan oleh perusahaan perangkat keras dunia yaitu NVIDIA. hal ini memungkinkan peningkatan dramatis dalam kinerja komputasi dengan memanfaatkan kekuatan dari Graphics Processing Unit(GPU).
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.
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 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.
PENGANTAR
MESSAGE PASSING DAN OPENMP
Message
Passing
PENGANTAR
MESSAGE PASSING DAN OPENMP
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.
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.
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.
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.


