ABSTRACT
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.
Di dalam
komputasi parallel ada yang dinamakan dengan pemrograman parallel. Pemrograman
paralel adalah teknik pemrograman komputer yang memungkinkan eksekusi perintah
atau 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 digunakanadalah sistem terdistribusi (distributed
computing).
Perlu diingat
adalah komputasi paralel berbeda dengan multitasking. Pengertian multitasking
adalah komputer dengan processor tunggal mengeksekusi beberapa tugas secara
bersamaan. Walaupun beberapa orang yang bergelut di bidang sistem operasi
beranggapan bahwa komputer tunggal tidak bisa melakukan beberapa pekerjaan
sekaligus, melainkan proses penjadwalan yang berlakukan pada sistem operasi
membuat komputer seperti mengerjakan tugas secara bersamaan. Sedangkan
komputasi paralel sudah dijelaskan sebelumnya, bahwa komputasi paralel
menggunakan beberapa processor atau komputer.Selain itu komputasi paralel tidak
menggunakan arsitektur Von Neumann.
APA SIH PARALEL COMPUTING?
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.
KENAPA MEMAKAI PARALLEL COMPUTING?
Tujuan utama penggunaan komputasi
paralel adalah untuk mempersingkat waktu eksekusi program yang menggunakan komputasi serial.
KONSEP PARALEL COMPUTING
Paralel Processing adalah kemampuan
menjalankan tugas atau aplikasi lebih dari satu aplikasi dan dijalankan secara
simultan atau bersamaan pada sebuah komputer. Secara umum, Paralel
Processingadalah sebuah teknik dimana sebuah masalah dibagi dalam beberapa
masalah kecil untuk mempercepat proses penyelesaian masalah.
Bahasa pemrograman paralel dapat didasarkan
pada satu atau kombinasi model pemrograman. Misalnya, High Performance Fortran
didasarkan pada interaksi memori bersama dan dekomposisi masalah paralel data,
dan Go menyediakan mekanisme untuk memori bersama dan interaksi pengiriman
pesan.
TERMINOLOGI PARALEL COMPUTING
Model pemrograman paralel berkaitan
erat dengan model komputasi. Model komputasi paralel adalah abstraksi yang
digunakan untuk menganalisis biaya proses komputasi, tetapi tidak harus
praktis, karena dapat diimplementasikan secara efisien dalam perangkat keras
dan / atau perangkat lunak. Model pemrograman, sebaliknya, secara khusus menyiratkan
pertimbangan praktis implementasi perangkat keras dan perangkat lunak.
Arsitektur Memori pada Komputasi Paralel
Pada umumnya, ada dua buah
arsitektur memori pada komputer paralel, yaitu shared memory dan distributed
memory.
Shared memory
Arsitektur ini menyediakan global
addressing sehingga berbagai prosesor mempunyai cara pengaksesan memori yang
seragam. Setiap perubahan pada suatu lokasi memori oleh suatu prosesor akan
selalu terlihat oleh prosesor lain. Kelebihan dari arsitektur ini antara lain
adalah pengaksesan memori yang user friendly dan performansi yang baik dalam
penggunaan data bersama antar task. Sedangkan kekurangannya antara lain adalah
kurangnya skalabilitas ketika terjadi penambahan prosesor, di mana akan terjadi
peningkatan traffic antara prosesor ke shared memory dan antara cache coherent
system dengan memori sebenarnya.
Berdasarkan frekuensi akses, ada dua jenis
shared memory :
Uniform Memory Access (UMA). Setiap prosesor
memiliki hak pengaksesan yang seragam dengan prosesor lain
Non Uniform Memory Access (NUMA). Tidak semua
prosesor memiliki hak yang sama dalam mengakses memori
Distributed memory
Arsitektur ini mempunyai
karakteristik di mana setiap prosesor memiliki memorinya masing-masing,
sehingga eksekusi instruksi dapat berjalan secara independen antara satu
prosesor dengan yang lain. Prosesor akan menggunakan jaringan ketika
membutuhkan akses ke memori non lokal. Akses ini sepenuhnya menjadi tanggung
jawab penulis program. Kelebihan dari
arsitektur ini adalah terjaganya skalabilitas ketika terjadi penambahan prosesor. Sedangkan kekurangannya
adalah penulis program harus berurusan dengan detail komunikasi data antara
prosesor dan memori non lokal.
Distributed Processing atau Distributed
Computing System adalah sekumpulan peralatan pemrosesan yang saling terhubung
melalui jaringan komputer dan saling bekerjasama untuk mengerjakan tugas-tugas
tertentu. Yang dimaksud dengan peralatan pemrosesan dataadalah peralatan
komputasi yang dapat mengeksekusi sendiri sebuah program.
Sekumpulan peralatan yang saling terhubung akan
mendistribusikan berbagai macam hal, dianataranya adalah:
Processing Logic / Pemrosesan secara logis
Fungsi. Beberapa fungsi sistem komputer dapat
didelegasikan ke beberapa hardware atau software
Data
Kontrol
Kriteria Distributed Processing
Pemrosesan terdistribusi (Distributed
Processing) dapat dikelompokkan berdasarkan beberapa kriteria, yaitu:
Degree of Computing / tingkat hubungan : Tinggi
atau rendah ? Jumlah data yang saling digunakan dibandingkan dengan jumlah
pemrosesan lokal
Struktur antar hubungan : kuat atau lemah ?
Jika komponen di Share dikatakan kuat ?
Kesalingtergantungan komponen-komponen : Kuat
atau lemah dalam mengekseskusi proses.
Keselarasan antar komponen : selaras atau tidak
selaras ?
Thread Programming
Threading / Thread adalah sebuah
alur kontrol dari sebuah proses. Konsep threading adalah menjalankan 2 proses (
proses yang sama atau proses yang berbeda ) dalam satu waktu.
Contoh:
Sebuah web browser mempunyai thread untuk
menampilkan gambar atau tulisan sedangkan thread yang lain berfungsi sebagai
penerima data dari network.
Threading dibagi menjadi 2, yaitu :
Static Threading. Teknik ini biasa
digunakan untuk komputer dengan chip multi processors 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.
Dynamic Multithreading. 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).
MODEL PARALEL :
Klasifikasi model pemrograman
paralel dapat dibagi secara luas menjadi dua area: interaksi proses dan
penguraian masalah.
PROCESS INTERACTION
Interaksi proses berhubungan dengan
mekanisme dimana proses paralel dapat berkomunikasi satu sama lain. Bentuk
interaksi yang paling umum adalah memori bersama dan pesan yang lewat, tetapi
interaksi juga bisa implisit (tidak terlihat oleh programmer).
SHARED MEMORY
Memori bersama adalah cara yang
efisien untuk melewatkan data antar proses. Dalam model memori bersama, proses
paralel berbagi ruang alamat global yang mereka baca dan tulis secara asinkron.
Akses serentak yang tidak sinkron dapat menyebabkan kondisi balapan, dan
mekanisme seperti kunci, semafor, dan monitor dapat digunakan untuk
menghindarinya. Prosesor multi-core konvensional secara langsung mendukung
memori bersama, yang banyak digunakan bahasa dan pustaka pemrograman paralel,
seperti Cilk, OpenMP dan Blok Bangunan Threading, yang dirancang untuk
dieksploitasi.
PASSING MESSAGE
Dalam model penyampaian pesan,
proses paralel bertukar data melalui menyampaikan pesan satu sama lain.
Komunikasi ini dapat tidak sinkron, di mana pesan dapat dikirim sebelum
penerima siap, atau sinkron, di mana penerima harus siap. Formalisasi proses
sekuensial (CSP) formalisasi penyampaian pesan menggunakan saluran komunikasi
sinkron untuk menghubungkan proses, dan mengarah ke bahasa-bahasa penting
seperti Occam, Limbo dan Go. Sebaliknya, model aktor menggunakan passing pesan
tidak sinkron dan telah digunakan dalam desain bahasa seperti D, Scala dan
SALSA.
IMPLICIT INTERACTION
Dalam model implisit, tidak ada
interaksi proses yang terlihat oleh programmer dan sebaliknya kompiler dan /
atau runtime bertanggung jawab untuk melakukan itu. Dua contoh paralelisme
implisit adalah dengan bahasa khusus domain di mana konkurensi dalam operasi
tingkat tinggi ditentukan, dan dengan bahasa pemrograman fungsional karena
tidak adanya efek samping memungkinkan fungsi non-dependen dieksekusi secara
paralel. Namun, paralelisme semacam ini sulit untuk dikelola dan bahasa fungsional seperti Concurrent
Haskell dan Concurrent ML menyediakan fitur untuk mengelola paralelisme secara
eksplisit.
PARALEL PROGRAM :
Bahasa pemrograman paralel
Bahasa pemrograman serentak,
perpustakaan, API, dan model pemrograman paralel (seperti kerangka algoritmik)
telah dibuat untuk pemrograman komputer paralel. Ini umumnya dapat dibagi ke
dalam kelas berdasarkan asumsi yang mereka buat tentang arsitektur memori yang
mendasarinya — memori bersama, memori terdistribusi, atau memori terdistribusi
bersama. Bahasa pemrograman memori bersama berkomunikasi dengan memanipulasi
variabel memori bersama. Memori yang didistribusikan menggunakan passing pesan.
POSIX Threads dan OpenMP adalah dua dari API memori bersama yang paling banyak
digunakan, sedangkan Message Passing Interface (MPI) adalah API sistem passing
pesan yang paling banyak digunakan. Satu konsep yang digunakan dalam
pemrograman program paralel adalah konsep masa depan, di mana satu bagian dari
suatu program berjanji untuk mengirimkan datum yang diperlukan ke bagian lain
dari suatu program di masa mendatang.
Entrepreneur CAPS dan Pathscale juga
mengoordinasikan upaya mereka untuk membuat arahan pemrograman paralel
multi-inti hybrid (HMPP) menjadi standar terbuka yang disebut OpenHMPP. Model
pemrograman berbasis direktif OpenHMPP menawarkan sintaks untuk secara efisien
menurunkan komputasi pada akselerator perangkat keras dan untuk mengoptimalkan
perpindahan data ke / dari memori perangkat keras. Arahan OpenHMPP menjelaskan
panggilan prosedur jarak jauh (RPC) pada perangkat akselerator (mis. GPU) atau
lebih umum seperangkat core. Arahan menjelaskan kode C atau Fortran untuk
menggambarkan dua set fungsionalitas: pembongkaran prosedur (dilambangkan
dengan kode) ke perangkat jarak jauh dan optimalisasi transfer data antara
memori utama CPU dan memori akselerator.
Munculnya GPU konsumen telah
menyebabkan dukungan untuk kernel komputasi, baik dalam grafik API (disebut
compute shaders), di API khusus (seperti OpenCL), atau dalam ekstensi bahasa
lainnya.
Automatic parallelization
Paralelisasi otomatis dari program
sekuensial oleh kompiler adalah "cawan suci" dari komputasi paralel,
terutama dengan batas frekuensi prosesor yang disebutkan di atas. Meskipun
sudah puluhan tahun bekerja oleh para peneliti kompiler, paralelisasi otomatis
hanya memiliki keberhasilan yang terbatas.
Mainstream bahasa pemrograman paralel tetap
paralel secara eksplisit atau (paling tidak) sebagian implisit, di mana seorang
programmer memberikan arahan kompiler untuk paralelisasi. Ada beberapa bahasa
pemrograman paralel sepenuhnya implisit — SISAL, Haskell Paralel, SequenceL,
System C (untuk FPGA), Mitrion-C, VHDL, dan Verilog.
Application checkpointing
Sebagai sistem komputer tumbuh dalam
kompleksitas, waktu rata-rata antara kegagalan biasanya berkurang.
Checkpointing aplikasi adalah teknik di mana sistem komputer mengambil
"snapshot" dari aplikasi — catatan semua alokasi sumber daya saat ini
dan status variabel, mirip dengan dump inti—; informasi ini dapat digunakan
untuk memulihkan program jika komputer gagal. Checkpointing aplikasi berarti
bahwa program harus memulai kembali dari hanya checkpoint terakhir bukan dari
awal. Meskipun pos pemeriksaan memberikan manfaat dalam berbagai situasi, pos
pemeriksaan sangat berguna dalam sistem yang sangat paralel dengan sejumlah
besar prosesor yang digunakan dalam komputasi kinerja tinggi.
CONTOH PARALEL COMPUTING:
POV-Ray
POV-Ray (Persistence Of Vision
Raytracer – www.povray.org) adalah rendering engine 3 dimensi . Program ini
menterjemahkan informasi dari file teks eksternal, mensimulasikan suatu cahaya
yang berinteraksi dengan obyek dalam suatu scene untuk menghasilkan obyek 3
dimensi yang nyata. Berawal dari file teks yang berisi deskripsi dari scene
(objects, lights, point o f view), programini dapat merender citra yang
diinginkan. Algoritmanya bekerja baris demi baris. Fasilitas yang menarik dari
POV-Ray ini adalah antialiasing. Antialiasing adalah teknik yang membantu untuk
membuang sampling error, yang dapat menghasilkan c itra lebih baik.
Dengan menggunakan antialiasing,
POV-Ray memulai tracing a ray untuk setiap pixel. Jika warna dari pixel berbeda
dengan warna pixel tetangganya (pixel yang ada di sebelah kiri dan di atas),
kemudian dari jumlahnya lebih besar dari nilai th reshold, maka pixel tersebut
adalah supersampled tracing a fixed number of additional rays. Teknik ini
disebut supersampling dan dapat meningkatkan kualitas akhir dari sebuah citra
namun itu juga meningkatkan waktu rendering menjadi lebih lama. Setelah men
guraikan data input, POV-Ray menguraikan semua pixel dari citra untuk proses
render, melalui horizontal scan dari setiap baris dari kiri ke kanan. Setelah
selesai penguraian dari suatu baris maka akan ditulis dalam sebuah file atau
ditampilkan pada layar lalu memperhitungkan baris berikutnya sampai pada yang
terakhir.
Message Passing Interface (MPI).
MPI adalah sebuah standard
pemrograman yang memungkinkan pemrogram untuk membuat sebuah aplikasi yang
dapat dijalankan secara paralel. Proses yang dijalankan oleh sebuah aplikasi
dapat dibagi untuk dikirimkan ke masing – masing compute node yang kemudian
masing – masing compute node tersebut mengolah dan mengembalikan hasilnya ke
komputer head node. Untuk merancang aplikasi paralel tentu membutuhkan banyak
pertimbangan – pertimbangan diantaranya adalah latensi dari jaringan dan lama
sebuah tugas dieksekusi oleh prosesor.
MPI ini merupakan standard yang
dikembangkan untuk membuat aplikasi pengirim pesan secara portable. Sebuah
komputasi paralel terdiri dari sejumlah proses, dimana masing-masing bekerja
pada beberapa data lokal. Setiap proses mempunyai variabel lokal, dan tidak ada
mekanisme suatu proses yang bisa mengakses secara langsung memori yang lain.
Pembagian data antar proses dilakukan dengan message passing, yaitu dengan
mengirim dan menerima pesan antar proses.
MPI menyediakan fungsi-fungsi untuk menukarkan
antar pesan. Kegunaan MPI yang lain adalah:
menulis kode paralel secara portable,
mendapatkan performa yang tinggi dalam
pemrograman paralel, dan
menghadapi permasalahan yang melibatkan
hubungan data irregular atau dinamis yang tidak begitu cocok dengan model data
paralel.
PVM (Parallel Virtual Machine)
Adalah paket software yang mendukung
pengiriman pesan untuk komputasi parallel antar komputer. PVM dapat berjalan
diberbagai macam variasi UNIX atau pun windows dan telah portable untuk banyak
arsitektur seperti PC, workstation, multiprocessor dan superkomputer.
Sistem PVM terbagi menjadi dua.
Pertama adalah daemon, pvmd, yang berjalan pada mesin virtual masing-masing
komputer. Mesin virtual akan dibuat,
ketika User mengeksekusi aplikasi PVM. PVM dapat dieksekusi melalui
prompt UNIX disemua host. Bagian kedua adalah library interface rutin yang
mempunyai banyak fungsi untuk komunikasi antar task . Library ini berisikan
rutin yang dapat dipanggil untuk pengiriman pesan, membuat proses baru,
koordinasi task dan konfigurasi mesin virtual.
Salah aturan main yang penting dalam
PVM adalah adanya mekanisme program master dan slave/worker. Programmer harus
membuat Kode master yang menjadi koordinator proses dan Kode slave yang
menerima, menjalankan, dan mengembalikan hasil proses ke komputer master. Kode
master dieksekusi paling awal dan kemudian melahirkan proses lain dari kode
master. Masing-masing program ditulis menggunakan C atau Fortran dan
dikompilasi dimasing-masing komputer. Jika arsitektur komputer untuk komputasi
paralel semua sama, (misalnya pentium 4
semua), maka program cukup dikompilasi pada satu komputer saja.
Selanjutnya hasil kompilasi didistribusikan kekomputer lain yang akan menjadi
node komputasi parallel. Program master hanya berada pada satu node sedangkan
program slave berada pada semua node.
SUMBER: