Komputasi paralel adalah salah satu teknik melakukan komputasi secara bersamaan dengan memanfaatkan beberapa komputer independen secara bersamaan. Ini umumnya diperlukan saat kapasitas yang diperlukan sangat besar, baik karena harus mengolah data dalam jumlah besar (di industri keuangan, bioinformatika, dll) ataupun karena tuntutan proses komputasi yang banyak. Kasus kedua umum ditemui di kalkulasi numerik untuk menyelesaikan persamaan matematis di bidang fisika (fisika komputasi), kimia (kimia komputasi) dll.
Pemrograman paralel adalah teknik
pemrograman komputer yang memungkinkan eksekusi perintah/operasi secara
bersamaan (komputasi paralel), baik dalam komputer dengan satu (prosesor
tunggal) ataupun banyak (prosesor ganda dengan mesin paralel) CPU. Bila
komputer yang digunakan secara bersamaan tersebut dilakukan oleh
komputer-komputer terpisah yang terhubung dalam suatu jaringan komputer lebih
sering istilah yang digunakan adalah sistem terdistribusi (distributed
computing).
B. Pemrosesan
Terdistribusi
Tujuan dari komputasi terdistribusi adalah menyatukan kemampuan dari sumber daya (sumber komputasi atau sumber informasi) yang terpisah secara fisik, ke dalam suatu sistem gabungan yang terkoordinasi dengan kapasitas yang jauh melebihi dari kapasitas individual komponen-komponennya.
Tujuan lain yang ingin dicapai
dalam komputasi terdistribusi adalah transparansi. Kenyataan bahwa sumber daya
yang dipakai oleh pengguna sistem terdistribusi berada pada lokasi fisik yang
terpisah, tidak perlu diketahui oleh pengguna tersebut. Transparansi ini
memungkinkan pengguna sistem terdistribusi untuk melihat sumber daya yang
terpisah tersebut seolah-olah sebagai satu sistem komputer tunggal, seperti
yang biasa digunakannya.
Salah satu masalah yang dihadapi
dalam usaha menyatukan sumber daya yang terpisah ini antara lain adalah
skalabilitas, dapat atau tidaknya sistem tersebut dikembangkan lebih jauh untuk
mencakup sumber daya komputasi yang lebih banyak.
C. Arsitektur
Komputer Paralel
Sesuai taksonomi Flynn, seorang
Designer Processor, Organisasi Prosesor dibagi menjadi 4 :
A. SISD (Single Instruction Single Data
Stream)
Arus Instruksi Tunggal dan Data
Tunggal
B. SIMD (Single Instruction Multiple Data
Stream)
Arus Instruksi Tunggal dan
Multiple Data
C. MISD (Multiple Instruction Single Data
Stream)
Arus Multiple Instruksi dan Data
Tunggal
D. MIMD (Multiple Instruction Multiple Data
Stream)
Arus Multiple Instruksi dan
Multiple Data
Single Instruction – Single Data.
Komputer ini memiliki hanya satu prosesor dan satu instruksi yang dieksekusi
secara serial. Komputer ini adalah tipe komputer konvensional. Menurut mereka
tipe komputer ini tidak ada dalam praktik komputer paralel karena bahkan
mainframe pun tidak lagi menggunakan satu prosesor.
SIMD
Single Instruction – Multiple Data. Komputer ini memiliki lebih dari satu prosesor, tetapi hanya mengeksekusi satu instruksi secara paralel pada data yang berbeda pada level lock-step.
Multiple Instructions – Single
Data. Teorinya komputer ini memiliki satu prosesor dan mengeksekusi beberapa
instruksi secara paralel tetapi praktiknya tidak ada komputer yang dibangun
dengan arsitektur ini karena sistemnya tidak mudah dipahami.
MIMD
Multiple Instructions – Multiple Data. Komputer ini memiliki lebih dari satu prosesor dan mengeksekusi lebih dari satu instruksi secara paralel. Tipe komputer ini yang paling banyak digunakan untuk membangun komputer paralel, bahkan banyak supercomputer yang menerapkan arsitektur ini.
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.
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
Message Passing, 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.
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 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.
Refrensi :
http://nazaruddin.blog.unigha.ac.id/2013/08/24/pengertian-komputasi-paralel/
http://seto.citravision.com/berita-48-parallel-computation--architectural-parallel-computer.html
http://seto.citravision.com/berita-49-parallel-computation---pengantar-thread-programming.html
http://seto.citravision.com/berita-50-parallel-computation--pengantar-message-passing-openmp.html
http://organisasiarsitekturkomputernaro.blogspot.com/
Nama : Fitra Darmawan
NPM : 52411910
Kelas : 4IA13