Komputasi Paralel dan GPU

Komputasi Pararel

Komputasi Paralel adalah salah satu dari banyak teknik untuk melakukan komputasi secara bersamaan. Ini biasa diperlukan saat kapasitas yang dibutuhkan sangatlah besar, karena harus mengolah data dalam jumlah besar. Baik dari industry keuangan, bioinformatika, dan lain lain.
Komputasi parallel sendiri ada yang dinamakan dengan pemrograman parallel. Pemrograman parallel adalah teknik perograman komputer yang memungkinkan eksekusi perintah atau komputasi parallel, baik dalam komputer prosesor tunggal atau prosesor ganda dengan mesis parallel CPU. Apabila komputer yang digunakan secara bersamaan tersebut di lakukan oleh banyak komputer terpisah yang terhubung dalam suatu jaringan computer atau biasa di sebut distributed komputing.
Komputasi parallel berbeda dengan multitasking. Komputer Multitasking adalah computer dengan prosessor tunggal mengeksekusi beberapa tugas secara bersamaan. Beberapa orang yang berkecimpung di bidang system operasi menganggap bahwa computer tunggal tidak bisa melakukan beberapa pekerjaan sekaligus, melaikan proses penjadwalan yang berlakukan pada system operasi membuat computer seperti mengerjakan tugas secara bersamaan. Sedangkan untuk komputasi parallel sudah di jelaskan sebelumnya, bahwa komputasi parallel menggunakan beberapa prosessor atau computer.

Tujuan Komputasi Paralel adalah mempersingkat waktu eksekusi program yang menggunakan komputasi serial. Beberapa alasan menggunakan komputasi parallel antara lain :
  1. Mengatasi permasalahan yang besar, terkadang sumber daya komputasi yang ada belum cukup mampu untuk mendukung penyelesaian dari masalah tersebut.
  2. Terdapat sumber daya non-lokal yang dapat digunakan memlalui internet atau jaringan. 
  3. Menghemat biaya penyediaan hardware, menggunakan beberapa mesin yang murah sebagai alternative dengan menggunakan satu mesin tapi bagus dan mahal, walaupun memakai n buah untuk prosessor.
  4. Keterbatasan kepasistas memori pada mesin untuk komputasi serial. 

Distributed Processing

Mengerjakan semua proses pengolahan data secara bersama antara komputer pusat dengan beberapa komputer yang lebih kecil dan saling dihubungkan melalui jalur komunikasi. Setiap komputer tersebut memiliki prosesor mandiri sehingga mampu mengolah sebagian data secara terpisah, kemudian hasil pengolahan tadi digabungkan menjadi satu penyelesaian total. Jika salah satu prosesor mengalami kegagalan atau masalah yang lain akan mengambil alih tugasnya.

Arsitektur Paralel

Dalam menerapkan konsep komputasi parallel memiliki tersendiri. Di klasifikasikan Flynn, arsitektur parallel ini terbagi menjadi empat. Berikut penjelasannya :
  • SISD ( Single Instrution Single Data )

Konsep ini adalah konsep yang paling primitive, dengan sebuah data yang ditangani oleh sebuah proses juga. Hanya memiliki satu prosesor dijalankan secara seri. Jadi SISD tidak termasuk ke dalam konsep parallel.
  • SIMD ( Single Instruction Multiple Data )

Konsep ini mirip dengan yang sebelumnya, masih memiliki satu prosesor dengan instruksi tunggal. Bedanya pada data yang ditangani. Biarpun instruksi nya tunggal, data yang di proses berupa jamak.
  • MISD ( Multiple Instuction Single Data )

Menerpakan banyak data pada konsep ini terhadap sebuah data. Maksut nya data tunggal proses oleh banyak instruksi terhadap data. Karena rumit nya sistem dari arsitektur ini tidak computer yang di bangun dengan cara ini.

Thread Programming

Dalam ilmu komputer, sebuah thread eksekusi adalah urutan terkecil instruksi diprogram yang dapat dikelola secara mandiri olehscheduler, yang biasanya bagian dari sistem operasi . Pelaksanaan benang dan proses berbeda antara sistem operasi, tetapi dalam kebanyakan kasus benang adalah komponen dari sebuah proses. Beberapa thread dapat eksis dalam sumber yang sama proses dan berbagi seperti memori, sedangkan proses yang berbeda tidak berbagi sumber daya tersebut. Secara khusus, benang dari sebuah proses berbagi instruksi (code executable) dan konteksnya (nilai-nilai variabel yang pada saat tertentu).

Pada prosesor tunggal, multithreading umumnya dilaksanakan oleh waktu mengiris (seperti dalam multitasking ), dan unit pengolahan pusat (CPU) beralih antara benang perangkat lunak yang berbeda. Ini konteks switching umumnya terjadi cukup sering bahwa pengguna merasakan benang atau tugas sebagai berjalan pada waktu yang sama. Pada multiprosesor atau multi-core sistem, benang dapat dijalankan secara bersamaan benar, dengan setiap prosesor atau inti mengeksekusi thread terpisah secara bersamaan pada prosesor atau inti dengan benang hardware, software benang terpisah juga dapat dijalankan secara bersamaan oleh benang hardware terpisah.

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 Multi Processing)

OpenMP adalah sebuah antarmuka pemrograman aplikasi (API) yang mendukung multi processingshared 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, danvariabel 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.

Pemrograman CUDA pada Graphical Processing Unit (GPU)

CUDA (Compute Unified Device Architecture) adalah suatu skema yang dibuat oleh NVIDIA agar NVIDIA selaku GPU(Graphic Processing Unit) mampu melakukan komputasi tidak hanya untuk pengolahan grafis namun juga untuk tujuan umum. Jadi, dengan CUDA, kita dapat memanfaatkan cukup banyak processor yang dimiliki oleh NVIDIA untuk berbagai perhitungan. GPU yang ada saat ini seperti ATI pun sudah memiliki banyak processor di dalamnya. Pada ATI, skema yang mereka bangun disebut ATI Stream.

Saat ini pemrograman paralel menjadi sangat penting karena kebutuhan kemampuan komputasi komputer yang terus meningkat seperti kemampuan multitasking dan pengolahan grafis yang andal. Metode saat ini dalam peningkatan peforma komputer juga berbeda dengan masa lampau dimana peningkatan clock dari processor yang diutamakan. Peningkatanclock juga dibatasi oleh kemampuan fisik dari perangkat digital yaitu persoalan daya dan panas. 

Platform CUDA dapat diakses oleh pengembang perangkat lunak melalui library CUDA-accelerated, perintah kompiler (seperti OpenACC ), dan ekstensi untuk bahasa pemrograman standar industri, termasuk C, C++ dan Fortran . C / C++ programmer menggunakan CUDA C / C++, yang disusun dengan “nvcc”, NVIDIA LLVM berbasis C / C++ compiler, dan Fortran programmer dapat menggunakan ‘CUDA Fortran’, yang disusun dengan PGI CUDA Fortran compiler dari The Portland Grup. Selain library, arahan compiler, CUDA C / C++ dan CUDA Fortran, platform CUDA mendukung interface komputasi lainnya, termasuk Khronos Grup OpenCL, Microsoft Direct Compute, dan C++ AMP . Pemrograman pihak ketiga juga tersedia untuk Python, Perl, Fortran, Java, Ruby, Lua, Haskell, Matlab, IDL, dan dukungan asli di Mathematica. 

Dalam permainan komputer industri, GPU yang digunakan tidak hanya untuk rendering grafis tetapi juga dalam perhitungan fisika permainan (efek fisik seperti puing-puing, asap, api, cairan), contoh termasuk PhysX dan Bullet . CUDA juga telah digunakan untuk mempercepat aplikasi non-grafis dalam biologi komputasi, kriptografi dan bidang lainnya oleh urutan besarnya atau lebih. Beberapa kelebihan dari pemrograman CUDA :
  1. Tersebar membaca – kode dapat membaca dari alamat sewenang-wenang dalam memori.
  2. Memori bersama – CUDA memperlihatkan cepat memori bersama wilayah (sampai 48KB per Multi-Processor) yang dapat dibagi di antara benang. Ini dapat digunakan sebagai cache dikelola pengguna, memungkinkan bandwidth yang lebih tinggi daripada yang mungkin menggunakan pencarian tekstur.
  3. Download lebih cepat dan readbacks ke dan dari GPU.
  4. Dukungan penuh untuk integer dan bitwise operasi, termasuk pencarian tekstur bulat.


Refrensi: 


Komentar