Algoritma Paralel
Algoritma paralel adalah algoritma untuk menyelesaikan masalah
numerik, karena masalah numerik merupakan salah satu masalah yang memerlukan
kecepatan komputasi yang sangat tinggi. Untuk dapat mengadaptasi suatu
algoritma sekuensial ke dalam algoritma paralel, terlebih dahulu harus
dipelajari mengenai konsep pemrosesan paralel dan bagaimana proses-proses dapat
berlangsung secara paralel.
Contoh proses Algoritma
Paralel :
Dalam
beberapa kasus, algoritma sekuensial dengan mudah dapat diadaptasi ke dalam
lingkungan paralel. Namun dalam kebanyakan kasus, problem komputasi harus
dianalisa ulang dan menghasilkan algoritma paralel yang baru. Terdapat beberapa
penelitian mengenai perancangan algoritma paralel untuk problem-problem praktis
seperti pengurutan, pemrosesan geraf, solusi untuk persamaan lanjar, solusi
untuk persamaan diferensial, dan untuk simulasi. Teknik pembangunan algoritma
paralel dapat dibedakan sebagai berikut :
Paralisme Data
Paralisme Data
Teknik
paralelisme data merupakan teknik yang paling banyak digunakan dalam program
paralel. Teknik ini lahir dari penelitian bahwa aplikasi utama komputasi
paralel adalah dalam bidang sain dan engineer, yang umumnya melibatkan array
multi-dimensi yang sangat besar. Dalam program sekuensial biasa, array ini
dimanipulasi dengan mempergunakan perulangan bersarang untuk mendapatkan hasil.
Kebanyakan program paralel dibentuk dengan mengatur ulang algoritma sekuensial
agar perulangan bersarang tersebut dapat dilaksanakan secara paralel.
Paralelisme data menunjukkan bahwa basis data dipergunakan sebagai dasar untuk
membentuk aktifitas paralel, dimana bagian yang berbeda dari basis data akan
diproses secara paralel. Dengan kata lain paralelisme dalam program ini dibentuk
dari penerapan operasi-operasi yang sama ke bagian array data yang berbeda.
Prinsip paralelisme data ini berlaku untuk pemrograman multiprosesor dan
multikomputer.
Partisi Data
Merupakan
teknik khusus dari Paralelisme Data, dimana data disebar ke dalam memori-memori
lokal multikomputer. Sebuah proses paralel kemudian ditugaskan untuk
mengoperasikan masingmasing bagian data. Proses tersebut harus terdapat dalam
lokal memori yang sama dengan bagian data, karena itu proses dapat mengakses
data tersebut secara lokal. Untuk memperoleh kinerja yang baik, setiap proses
harus memperhatikan variabel-variabel dan data-data lokalnya masing-masing.
Jika suatu proses membutuhkan akses data yang terdapat dalam remote memori,
maka hal ini dapat dilakukan melalui jaringan message passing yang
menghubungkan prosesor-prosesor. Karena komunikasi antar prosesor ini
menyebabkan terjadinya waktu tunda, maka messsage passing ini sebaiknya
dilakukan dalam frekuensi yang relatif kecil. Dapat disimpulkan bahwa tujuan
dari partisi data adalah untuk mereduksi waktu tunda yang diakibatkan
komunikasi messsage passing antar prosesor. Algoritma paralel mengatur agar
setiap proses dapat melakukan komputasi dengan local data masing-masing.
Algoritma Relaksasi
Pada
algoritma ini, setiap proses tidak membutuhkan sinkronisasi dan komunikasi
antar proses. Meskipun prosesor mengakses data yang sama, setiap prosesor dapat
melakukan komputasi sendiri tanpa tergantung pada data antara yang dihasilkan
oleh proses lain. Contoh algoritma relaksasi adalah algoritma perkalian matrik,
pengurutan dengan mengunakan metode ranksort dan lain sebagainya.
Paralelisme Sinkron
Aplikasi
praktis dari komputasi paralel adalah untuk problem yang melibatkan array
multi-dimensi yang sangat besar. Problem tersebut mempunyai peluang yang baik
untuk paralelisme data karena elemen yang berbeda dalam array dapat diproses
secara paralel. Teknik komputasi numerik pada array ini biasanya iteratif, dan
setiap iterasi akan mempengaruhi iterasi berikutnya untuk menuju solusi akhir.
Misalnya saja untuk solusi persamaan numerik pada sistem yang besar. Umumnya,
setiap iterasi mempergunakan data yang dihasilkan oleh iterasi sebelumnya dan
program akhirnya menuju suatu solusi dengan akurasi yang dibutuhkan. Algoritma
iterasi ini mempunyai peluang paralelisme pada setiap iterasinya. Beberapa
proses parallel dapat dibentuk untuk bekerja pada array bagian yang berbeda.
Namun setelah setiap iterasi, prosesproses harus disinkronkan, karena hasil
yang diproduksi oleh satu proses dipergunakan oleh prosesproses lain pada
iterasi berikutnya. Teknik pemrograman paralel seperti ini disebut paralelisme
sinkron. Contohnya adalah perhitungan numerik pada Metode Eliminasi Gauss. Pada
paralelisme sinkron ini, struktur umum programnya biasanya terdiri dari
perulangan FORALL yang akan membentuk sejumlah besar proses paralel untuk
dioperasikan pada bagian array data yang berbeda. Setiap proses diulang dan
disinkronkan pada akhir iterasi. Tujuan dari sinkronisasi ini adalah untuk
meyakinkan bahwa seluruh proses telah menyelesaikan iterasi yang sedang
berlangsung, sebelum terdapat suatu proses yang memulai iterasi berikutnya.
Komputasi Pipeline
Komputasi Pipeline
Pada
komputasi pipeline, data dialirkan melalui seluruh struktur proses, dimana
masing-masing proses membentuk tahap-tahap tertentu dari keseluruhan komputasi
. Algoritma ini dapat berjalan dengan baik pada multikomputer, karena adanya
aliran data dan tidak banyak memerlukan akses ke data bersama. Contoh komputasi
pipeline adalah teknik penyulihan mundur yang merupakan bagian dari metoda
Eliminasi.
Dalam merancang suatu algoritma paralel kita harus mempertimbangkan pula hal-hal yang dapat mengurangi kinerja program paralel. Hal-hal tersebut adalah :
Dalam merancang suatu algoritma paralel kita harus mempertimbangkan pula hal-hal yang dapat mengurangi kinerja program paralel. Hal-hal tersebut adalah :
1.
Memory Contention
Eksekusi prosesor tertunda ketika
prosesor menunggu hak ases ke sel memori yang sedang dipergunakan oleh prosesor
lain. Problem ini muncul pada arsitektur multiprosesor dengan memori bersama.
2.
Excessive Seqential Code
Pada beberapa algoritma paralel,
akan terdapat kode sekuensial murni dimana tipe tertentu dari operasi pusat
dibentuk, seperti misalnya pada proses inisialisasi. Dalam beberapa algoritma,
kode sekuensial ini dapat mengurangi keseluruhan speedup yang dapat dicapai.
Process Creation Time Pembentukan proses paralel akan membutuhkan waktu
eksekusi. Jika proses yang dibentuk relative berjalan dalam waktu yang relatif
lebih singkat dibandingkan dengan waktu pembentukan proses itu sendiri, maka
overhead pembuatan akan lebih besar dibandingkan dengan waktu eksekusi paralel
algoritma. Communication Delay Overhead ini muncul hanya pada multikomputer.
Hal ini disebabkan karena interaksi antar prosesor melalui jaringan komunikasi.
Dalam beberapa kasus, komunikasi antar dua prosesor mungkin melibatkan beberapa
prosesor antara dalam jaringan komunikasi. Jumlah waktu tunda komunikasi dapat
menurunkan kinerja beberapa algoritma paralel.
Synchronization Delay
Ketika
proses paralel disinkronkan, berarti bahwa suatu proses akan harus menunggu
proses lainnya. Dalam beberapa program paralel, jumlah waktu tunda ini dapat
menyebabkan bottleneck dan mengurangi speedup keseluruhan. Load Imbalance Dalam
beberapa program paralel, tugas komputasi dibangun secara dinamis dan tidak
dapat diperkirakan sebelumnya. Karena itu harus selalu ditugaskan ke
prosesor-prosesor sejalan dengan pembangunan tugas tersebut. Hal ini dapat
menyebabkan suatu prosesor tidak bekerja (idle), sementara prosesor lainnya
tidak dapat mengerjakan task yang ditugaskannya.
Komputasi Paralel dengan
Parallel Virtual Machine (PVM)
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.
Penggunaan komputasi parallel
prosessing merupakan pilihan yang cukup handal untuk saat ini untuk pengolahan
data yang besar dan banyak, hal ini apabila dibandingkan dengan membeli suatu
super komputer yang harganya sangat mahal maka penggunaan komputasi parallel
prosessing merupakan pilihan yang sangat tepat untuk pengolahan data tersebut.
Aspek keamanan merupakan suatu
aspek penting dalam sistem parallel prosessing komputasi ini, karena di dalam
sistem akan banyak berkaitan dengan akses data, hak pengguna, keamanan data,
keamanan jaringan terhadap peyerangan sesorang atau bahkan virus sehingga akan
menghambat kinerja dari system komputasi ini.
Komputasi
parallel adalah
melakukan perhitungan
komputasi dengan menggunakan 2 atau lebih CPU/Processor
dalam suatu komputer yang sama atau komputer yang berbeda dimana dalam hal ini
setiap instruksi dibagi kedalam beberapa instruksi kemudian dikirim ke processor
yang terlibat komputasi dan dilakukan secara bersamaan. Untuk proses pembagian
proses komputasi tersebut dilakukan oleh suatu software yang betugas untuk
mengatur komputasi dalam hal makalah ini akan digunakan Parallel Virtual
Machine (PVM).
Pada sistem komputasi parallel
terdiri dari beberapa unit prosesor dan beberapa unit memori. Ada dua teknik
yang berbeda untuk mengakses data di unit memori, yaitu shared memory address
dan message passing. Berdasarkan cara mengorganisasikan memori ini komputer
paralel dibedakan menjadi shared memory parallel machine dan distributed memory
parallel machine.
Prosesor dan memori ini didalam
mesin paralel dapat dihubungkan (interkoneksi) secara statis maupun dinamis.
Interkoneksi statis umumnya digunakan oleh distributed memory system (sistem
memori terdistribusi). Sambungan langsung peer to peer digunakan untuk
menghubungkan semua prosesor. Interkoneksi dinamis umumnya menggunakan switch
untuk menghubungkan antar prosesor dan memori.
Komunikasi data pada sistem paralel
memori terdistribusi, memerlukan alat bantu komunikasi. Contoh alat bantu yang
sering digunakan oleh sistem seperti PC Jaringan pada saat ini adalah standar
PVM (Parallel Virtual Machine) yang bekerja diatas TCP/IP communication layer.
Standar ini memerlukan fungsi remote access agar dapat menjalankan program pada
masing-masing unit prosesor.
Salah satu protocol yang
dipergunakan pada komputasi parallel adalah Network File System (NFS), NFS
adalah protokol yang dapat membagi sumber daya melalui jaringan. NFS dibuat
untuk dapat independent dari jenis mesin, jenis sistem operasi, dan jenis
protokol transport yang digunakan. Hal ini dilakukan dengan menggunakan RPC.
NFS memperbolehkan user yang telah diijinkan untuk mengakses file-file yang
berada di remote host seperti mengakses file yang
berada di lokal. Protokol yang digunakan
protokol mount menentukan host remote dan jenis file sistem yang akan diakses
dan menempatkan di suatu direktori, protokol NFS melakukan I/O pada remote file
system. Protokol mount dan protokol NFS bekerja
dengan menggunakan RPC dan mengiri dengan protokol TCP
dan UDP. Kegunaan dari NFS pada komputasi parallel adalah untuk melakukan
sharing data sehingga setiap node slave dapat mengakses program yang sama pada
node master.
Sekilas tentang PVM
(Parallel Virtual Machine)
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.
Komunikasi dapat berlangsung
bila masing-masing komputer mempunyai hak akses ke filesystem semua komputer.
Akses kefile system dilakukan melalui protokol rsh yang berjalan di unix atau
windows.
Berikut adalah langkah
pengaturan pada masing-masing komputer :
• Buat file
hostfile yang berisi daftar node komputer dan nama user yang akan dipakai untuk
komputasi parallel. Bila nama user pada semua komputer sama misalnya nama user
riset pada komputer C1, C2,C3 dan C4, maka hostfile ini boleh tidak ada.
Hostfile ini dapat digunakan bila nama user di masing-masing komputer berbeda.
•
Daftarkan IP masing-masing komputer pada file/etc/hosts/hosts.allow
dan /etc/hosts/hosts.equiv.
•
Penambahan dan penghapusan host secara dinamis
dapat dilakukan melalui konsole PVM. Bila IP tidak
didefinisikan pada hostfile¸ cara ini dapat digunakan.
Program PVM terdiri dari master
dan slave, dimana program master dieksekusi paling awal dan kemudian melahirkan
proses lain. PVM memanggil rutin pvm_spawn() untuk melahirkan satu atau dua
proses lebih yang sama. Fungsi-fungsi untuk PVM versi bahasa C mempunyai rutin
awalan pvm. Pengiriman dan penerimaan task diidentifikasi dengan TID (Task
Identifier). TID ini bersifat unik dan digenerate oleh pvmd lokal. PVM berisi
beberapa rutine yang mengembalikan nilai TID sehingga aplikasi user dapat
mengidentifikasi task lain disistem.
Secara umum, langkah
implementasi komputasi parallel sebagai berikut :
1. Jalankan PVM daemon
pada setiap mesin dalam cluster
2. Jalankan program master
pada master daemon
3. Master daemon akan
menjalankan proses slave.
Untuk mengimplementasikannya,
kita dapat memakai tools :
- PVM,
virtual machine dan routine untuk komputasi parallel
- rsh
(remote shell), aplikasi untuk authentikasi
dan komunikasi proses antar komputer.
- Xpvm
versi 1.2, , interface grafis untuk PVM dengan animasi eksekusi komputasi
parallel yang dapat dilihat dilayar
Pola Pemrograman Paralel
pada PVM
Komputasi paralel dapat didekati
dengan 3 tinjauan dasar yaitu
a. Crowd Computation
Adalah model paling umum dan
terdiri dari kumpulan proses yang saling berhubungan sangat erat. Melakukan
komputasi pada bagian-bagian yang berbeda dari workload. Contoh untuk pola ini
adalah Model Master-Slave, seperti digambarkan di bawah ini.
Program master bertugas
penyebaran proses (spawn proses), inisialisasi, collection, display hasil dan
mungkin display fungsi-fungsi waktu. Sedang program slave bertugas melaksanakan
komputasi yang sebenarnya, menerima alokasi task/workload dari master baik
secara statis maupun dinamis dan melakukan komputasi task-task dari alokasi
dirinya sendiri.
b. Tree Computation
Adalah pola pemrograman dimana
proses disebar secara dinamis seperti tree. Hubungan antar node
sebagai hubungan parent-child. Cocok untuk aplikasi dimana total
proses yang akan terbentuk tidak diketahui sebelumnya. Biasanya tree
computation ini dipakai urituk algoritma-algoritma branch and bound,
alpa beta search dan algoritma recursive divide and conquer.
c. Hybrid Computation
Adalah model
komputasi yang merupakan kombinasi model tree dan model crowd. Model
ini memiliki struktur penyebaran proses yang lebih
bebas.
PENGUKURAN DAN ANALISA
Parameter-parameter yang akan
diukur dalam komputasi paralel ini adalah speedup dan c/c ratio. Dengan
menghitung speedup bisa diketahui efisiensi penggunaan prosesor dan dengan
menghitung c/c ratio dapat diketahui granularitas. Speedup adalah
perbandingan kecepatan eksekusi suatu program yang dijalankan pada komputer
paralel terhadap kecepatan eksekusi program tersebut pada komputer sekuensial.
Efisiensi Penggunaan Prosesor,
untuk memperoieh efisiensi yang tinggi, usahakan agar semua prosesor dalam
sistem digunakan secara optimal, tidak ada prosesor yang idle selama prosesor
lain bekerja.
Computation to communication
ratio adalah perbandingan waktu komputasi terhadap waktu komunikasi dalam
komputer MIMD berbasis message passing. c/c ratio adalah salah satu
cara memprediksi kinerja dari komputer paralel.
c/c ratio = t_komp_par/ t_komu
Granularitas adalah jumlah
operasi yang dilaksanakan sebelum sinkronisasi berlangsung. Berdasarkan
Granularitas, algoritma paralel dikategorikan dalam tiga kelompok yaitu fine
grain (lebih banyak komunikasi dari pada komputasi), medium-grain (komputasi
dan komunikasi seimbang) dan coarse-grain (lebih banyak komputasi dari
pada komunikasi), Ditunjukkan hubungan antara c/c ratio dengan
granularitas. Jika 0<c/cratio<l makafine grain, jika c/cratio=l
maka medium grain, sedang bila c/cratio>l maka coarse grain.
Tidak ada komentar:
Posting Komentar