Anda di halaman 1dari 17

Implementasi Parallel Processing

2012
07.25
Parallel processing adalah penggunaan lebih dari satu CPU untuk menjalankan sebuah program
secara simultan. Idealnya, paralel processing membuat program berjalan lebih cepat karena semakin
banyak CPU yang digunakan. Tetapi dalam praktek, seringkali sulit membagi program sehingga dapat
dieksekusi oleh CPU yang berbeda-beda tanpa ada keterkaitan diantaranya.

Sebagian besar komputer hanya mempunyai satu CPU, namun ada yang mempunyai lebih dari satu.
Bahkan juga ada komputer dengan ribuan CPU. Komputer dengan satu CPU dapat melakukan
parallel processing dengan mneghubungkannya dengan komputer lain pada jaringan. Namun,
parallel processing ini memerlukan software canggih yang disebut distributed processing software.

Paralel processing berbeda dengan multitasking, yaitu satu CPU mengeksekusi beberapa program
sekaligus. Paralel processing disebut juga parallel computing. Parallel computing adalah salah satu
teknik melakukan komputasi secara bersamaan. Biasanya digunakan saat kapasitas yang dibutuhkan
sangat besar, baik karena harus mengolah data dalam jumlah besar ataupun karena tuntutan proses
komputasi yang banyak. Untuk melakukan aneka jenis komputasi paralel ini diperlukan infrastruktur
mesin paralel yang terdiri dari banyak komputer yang dihubungkan dengan jaringan dan mampu
bekerja secara paralel untuk menyelesaikan satu masalah. Untuk itu, diperlukan berbagai perangkat
lunak pendukung yang disebut middleware yang berperan untuk mengatur distribusi pekerjaan
antar node dalam satu mesin paralel. Selanjutnya pemakai harus membuat pemrograman paralel
untuk merealisasikan komputasi.

Gambar 1. Contoh struktur pengiriman permintaan dan jawaban dari parallel processing
Arsitektur Komputer Parallel
Berikut Taksonomi Flynn dan model pemrosesan parallel:

Gambar 2. Model Pemrosesan Paralel
Keempat kelompok komputer tersebut adalah :
Komputer SISD (Single Instruction stream-Single Data stream)
Pada komputer jenis ini semua instruksi dikerjakan terurut satu demi satu, tetapi juga dimungkinkan
adanyaoverlapping dalam eksekusi setiap bagian instruksi (pipelining). Pada umumnya komputer
SISD berupa komputer yang terdiri atas satu buah pemroses (single processor). Namun komputer
SISD juga mungkin memiliki lebih dari satu unit fungsional (modul memori, unit pemroses, dan lain-
lain), selama seluruh unit fungsional tersebut berada dalam kendali sebuah unit pengendali. Skema
arsitektur global komputer SISD dapat dilihat pada gambar 3.1
Gambar 3.1 SISD
Komputer SIMD (Single Instruction stream-Multiple Data stream)
Pada komputer SIMD terdapat lebih dari satu elemen pemrosesan yang dikendalikan oleh sebuah
unit pengendali yang sama. Seluruh elemen pemrosesan menerima dan menjalankan instruksi yang
sama yang dikirimkan unit pengendali, namun melakukan operasi terhadap himpunan data yang
berbeda yang berasal dari aliran data yang berbeda pula. Skema arsitektur global komputer SIMD
dapat dilihat pada gambar 3.2

Gambar 3.2 SIMD
Komputer MISD (Multiple Instruction stream-Single Data stream)
Komputer jenis ini memiliki n unit pemroses yang masing-masing menerima dan mengoperasikan
instruksi yang berbeda terhadap aliran data yang sama, dikarenakan setiap unit pemroses memiliki
unit pengendali yang berbeda. Keluaran dari satu pemroses menjadi masukan bagi pemroses
berikutnya. Belum ada perwujudan nyata dari komputer jenis ini kecuali dalam bentuk prototipe
untuk penelitian. Skema arsitektur global komputer MISD dapat dilihat pada gambar 3.3

Gambar 3.3. MISD
Komputer MIMD (Multiple Instruction stream-Multiple Data stream)
Pada sistem komputer MIMD murni terdapat interaksi di antara n pemroses. Hal ini disebabkan
seluruh aliran dari dan ke memori berasal dari space data yang sama bagi semua pemroses.
Komputer MIMD bersifat tightly coupledjika tingkat interaksi antara pemroses tinggi dan
disebutloosely coupled jika tingkat interaksi antara pemroses rendah. Skema arsitektur global
komputer MISD dapat dilihat pada gambar 3.4


Gambar 3.4 MIMD
Paralel prosessing komputasi adalah proses atau pekerjaan komputasi di komputer dengan memakai
suatu bahasa pemrograman yang dijalankan secara paralel pada saat bersamaan. Secara umum
komputasi paralel diperlukan untuk meningkatkan kecepatan komputasi bila dibandingkan dengan
pemakaian komputasi pada komputer tunggal.
Berikut ini adalah gambar perbedaan antara komputasi tunggal dengan parallel komputasi :

Gambar 4.1. Komputasi Tunggal / serial

Gambar 4.2. Komputasi Paralel
Implementasi Parallel Processing
Implementasi Parallel Processing pada Ray Tracing Engine menggunakan POV-Ray berbasis MPI
Yaitu mengimplementasikan parallel processing pada versi asli program ray tracing yang terkenal
yaitu POV -Ray. Parallel processing pada algoritma ini melibatkan beberapa masalah yang biasa
timbul pada komputasi parallel. Proses ray tracing sangat kompleks dan membutuhkan komputasi
yang tinggi, untuk citra yang sangat kompleks dibutuhkan waktu berjam-jam bahkan berhari-hari
untuk merender suatu kode POV-Ray. Maka dari itu kebutuhan untuk menaikkan kecepatan dari
proses ini diwujudkan dalam implementasi parallel processing.
Berikut contoh kasus implementasinya:

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.
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.
Gambar 5. Program
PVM
Secara umum, langkah implementasi komputasi parallel sebagai berikut :
Jalankan PVM daemon pada setiap mesin dalam cluster
Jalankan program master pada master daemon
Master daemon akan menjalankan proses slave.










Konsep Paralel
Banyak perkembangan-perkembangan baru dalam arsitektur komputer yang didasarkan pada konsep pemrosesan paralel. Pemrosesan paralel
dalam sebuah komputer dapat didefinisikan sebagai pelaksanaan instruksi-instruksi secara bersamaan waktunya. Hal ini dapat menyebabkan
pelaksanaan kejadian-kejadian (1) dalam interval waktu yang sama, (2) dalam waktu yang bersamaan atau (3) dalam rentang waktu yang
saling tumpang tindih.

Sekalipun didukung oleh teknologi prosesor yang berkembang sangat pesat, komputer sekuensial tetap akan mengalami keterbatasan dalam
hal kecepatan pemrosesannya. Hal ini menyebabkan lahirnya konsep keparalelan (parallelism) untuk menangani masalah dan aplikasi yang
membutuhkan kecepatan pemrosesan yang sangat tinggi, seperti misalnya prakiraan cuaca, simulasi pada reaksi kimia, perhitungan
aerodinamika dan lain-lain.
Konsep keparalelan itu sendiri dapat ditinjau dari aspek design mesin paralel, perkembangan bahasa pemrograman paralel atau dari aspek
pembangunan dan analisis algoritma paralel. Algoritma paralel itu sendiri lebih banyak difokuskan kepada algoritma untuk menyelesaikan
masalah numerik, karena masalah numerik merupakan salah satu masalah yang memerlukan kecepatan komputasi yang sangat tinggi.

Arsitektur Paralel
Paralelisme dalam suatu komputer dapat diaplikasikan pada beberapa tingkatan, seperti berikut:
1. Tingkat pekerjaan: antara pekerjaan-pekerjaan atau fase-fase suatu pekerjaan. Hal ini menjadi prinsip dasar dari multiprogramming.
2. Tingkat prosedur: antara prosedur-prosedur dan di dalam loop. Hal ini harus tercakup sebagai hal yang penting bagi suatu bahasa.
3. Tingkat instruksi: antara fase-fase sebuah siklus instruksi, yaitu fetch, decode dan eksekusi suatu instruksi.
4. Tingkat aritmatika dan bit: antara bit-bit dalam sirkuit aritmatika. Salah satu contohnya adalah adder paralel.

Telah banyak usaha untuk mengklasifikasikan perancangan arsitektur komputer paralel. Namun tidak ada satupun yang mampu memisahkan
semua jenis perancangan menjadi kelompok-kelompok yang berbeda. Skema klasifikasi yang paling umum digunakan adalah taksonomi Flynn.
Kita akan membahas pula dua skema lainnya yaitu: Shore dan Feng.

Klasifikasi Flynn
Michael J. Flynn memperkenalkan suatu skema untuk mengklasifikasikan arsitektur suatu komputer dengan melihat bagaimana mesinnya
menghubungkan instruksi-instruksinya ke data yang sedang diproses. Berikut klasifikasinya:
1. SISD: single instruction stream, single data stream. Merupakan suatu komputer serial konvesional dimana instruksi-instruksi dijalankan satu
per satu dan sebuah instruksi tunggal berhubungan dengan paling banyak satu operasi data.
2. SIMD: single instruction stream, multiple data stream. Dalam sebuah komputer SIMD, suatu instruksi tunggal mengawali sejumlah besar
operasi.
3. MISD: multiple instruction stream, single data stream. Kelas MISD melaksanakan beberapa operasi instruksi secara bersamaan pada sebuah
item data tunggal.
4. MIMD: multiple instruction stream, multiple data stream. Sebuah komputer MIMD dicirikan oleh eksekusi lebih dari satu instruksi pada saat
yang bersamaan, dimana setiap instruksi beroperasi pada beberapa aliran data.

Klasifikasi Shore
J.E. Shore membuat klasifikasi arsitektur komputer yang didasarkan pada organisasi bagian-bagian penyusun suatu komputer dan
membedakannya menjadi enam jenis mesin.
1. Mesin I. Pada komputer ini, satu instruksi dikerjakan pada suatu waktu dan masing-masing beroperasi pada satu word dalam suatu waktu.
2. Mesin II. Komputer ini juga menjalankan satu instruksi pada suatu waktu, namun ia beroperasi pada sebuah irisan dari suatu bit dalam suatu
waktu, bukannya semua bit dalam suatu word data.
3. Mesin III. Sebuah komputer dalam kelas ini memiliki dua unit pengolahan yang dapat beroperasi pada data, satu word dalarn suatu waktu
atau suatu irisan bit dalam suatu waktu.
4. Mesin IV. Komputer jenis ini dicirikan oleh sejumlah elemen (unit pengolahan dan unit memori), semua di bawah kendali sebuah unit
kendali logika (CLU) tunggal.
5. Mesin V. Mesin V dihasilkan dengan mengubah Mesin IV sedemikian sehingga elemen-elemen pengolahan dapat berkomunikasi dengn
tetangga terdekat mereka.
6. Mesin VI. Komputer ini, disebut sebagai array logika-dalam-memori, merupakan sebuah mesin dengan logika prosesor yang tersebar dalam
memori.

Klasifikasi Feng
Tse-yum Feng (1972) menyarankan pengklasifikasian arsitektur komputer atas tingkatan paralelisme mereka. Tingkatan paralelisme (degree of
parallelism) diwakili oleh pasangan (n, m) dimana n merupakan panjang word dan m adalah panjang irisan bit. Pasangan ini dikl asifikasikan
menjadi empat kelompok sebagai berikut:
1. Jika n = 1 dan m = I maka tidak terjadi paralelisme. Word dan bit diproses satu per satuan waktu. Hal ini disebut sebagai word serial/bit
serial(WSBS).
2. Jika n> 1 dan m = 1 maka paralelisme itu disebut sebagai word paralel/bit serial (WPBS). Dalam hal ini, semua n irisan bit diproses satu per
satuan waktu.
3. Paralelisme word serial/bit paralel (WSBP) terjadi jika n = 1 dan m> 1. Dengan demikian sejumlah n word diproses satu per satuan waktu
tetapi sejumlah m bit dan masing-masing word diproses secara paralel.
4. Kategori terakhir disebut sebagai word paralel/bit paralel (WPBP) dan merupakan suatu paralelisme dimana n > 1 dan m > 1. Dalam hal ini,
sejumlah nm bit diproses secara bersamaan.

Komputer sekuensial - berdasarkan klasifikasi Flynn adalah kelompok komputer SISD - hanya mempunyai satu unit pengendali untuk
menentukan instruksi yang akan dieksekusi. Pada setiap satuan waktu hanya satu instruksi yang dapat dieksekusi, dimana kecepatan akses ke
memori dan kecepatan piranti masukan dan keluaran dapat memperlambat proses komputasi. Beberapa metoda dibangun untuk menghindari
masalah tersebut, seperti penggunaan cache memory. Namun komputer sekuensial ini tetap mengalami keterbatasan jika menangani masalah
yang memerlukan kecepatan tinggi. Hal-hal tersebut di atas pada akhirnya melatarbelakangi lahirnya sistem komputer paralel.
Berdasarkan klasifikasi Flynn, komputer paralel termasuk kelompok SIMD atau MIMD. Komputer paralel mempunyai lebih dari satu unit
pemroses dalam sebuah komputer yang sama. Hal yang membuat suatu komputer dengan banyak prosesor disebut sebagai komputer paralel
adalah bahwa seluruh prosesor tersebut dapat beroperasi secara simultan. Jika tiap-tiap prosesor dapat mengerjakan satu juta operasi tiap
detik, maka sepuluh prosesor dapat mengerjakan sepuluh juta operasi tiap detik, seratus prosesor akan dapat mengerjakan seratus juta
operasi tiap detiknya[Les93].
Pada dasarnya aktivitas sebuah prosesor pada komputer paralel adalah sama dengan aktivitas sebuah prosesor pada komputer sekuensial. Tiap
prosesor membaca (read) data dari memori, memprosesnya dan menuliskannya (write) kembali ke memori. Aktivitas komputasi ini dikerjakan
oleh seluruh prosesor secara paralel.

PVM (Parallel Virtual Machine)
PVM adalah perangkat lunak yang membuat sekumpulan komputer menjadi tampak seperti sebuah sistem komputer virtual yang besar.
Sekumpulan komputer yang akan terlibat dalam proses penyelesaian masalah harus didefinisikan trelebih dahulu, agar dapat menjalankan
fungsinya. Komputer-komputer yang terlibat dalam komputasi bisa homogen, dengan platform yang sama, maupun heterogen, dengan
platform yang berbeda, asal di antara mereka bisa saling berkomunikasi. PVM dapat menangani semua pengiriman proses, konversi data, dan
penjadwalan task secara message passing untuk sistem yang tidak kompatibel sekalipun.
Sistem PVM terdiri dari dua bagian. Bagian pertama adalah daemon yang diberi nama pvmd. Pvmd diaktifkan di setiap komputer yang akan
membentuk mesin virtual. Bagian kedua adalah pustaka rutin antarmuka PVM yang berisi koleksi perintah-perintah primitif untuk
mengoperasikan proses-proses pustaka tersebut. Pustaka rutin ini digunakan dalam program aplikasi paralel yang ditulis dengan bahasa
pemrograman C, C++, atau FORTRAN 77. Aplikasi dalam bahasa pemrograman C dan C++ dihubungkan melalui pustaka libpvm3.lib, sedangkan
aplikasi dalam bahasa pemrograman FORTRAN 77 dapat mengambil rutin-rutin dalam libfpvm3.lib. Kedua pustaka tersebut telah tersedia pada
saat instalasi.
PVM memberi fasilitas untuk membuat sejumlah proses yang tidak tergantung dari jumlah prosesor. Setiap proses diidentifikasi menggunakan
kode (task ID) dan dipetakan ke prosesor secara otomatis, atau dapat juga diatur oleh programmer. Program PVM umumnya diatur dengan
model master-slave, yaitu satu proses yang dieksekusi pertama kali menjadi master dan mengaktifkan semua client dengan memanggil
pvm_spawn. Rutin tersebut otomatis akan menjalankan semua proses dalam sistem PVM. Cara lain untuk menjalankan proses adalah dengan
memanggil rutin pvm_mytid yang mengembalikan kode task ID dari proses tersebut. Sebelum keluar dari sistem PVM, semua proses client
harus dimatikan dari PVM dengan memanggil rutin pvm_exit.
Komunikasi antar proses di dalam sistem PVM dilakukan secara message passing menggunakan perintah rutin PVM seperti pvm_send dan
pvm_recv. Semua rutin pengiriman pesan dilakukan secara asinkron, sedangkan semua rutin penerimaan pesan dapat dilakukan secara sinkron
maupun asinkron. Ada tiga tahap dalam mengirim pesan dalam PVM, yaitu :
> Menginisialisasi buffer pengiriman dengan rutin pvm_initsend
> Mengemas isi pesan ke dalam buffer dengan memanggil rutin pvm_pk*.
Data yang dikemas dapat bertipe byte, complex, double, float, integer, dan character. Tipe tersebut dinyatakan dengan mengganti tanda *
dan memberi tipe yang sesuai untuk tiap parameter di dalam rutin pvm_pk*. Misalnya data yang akan dikemas bertipe float, maka digunakan
pvm_pkfloat().
> Mengirim pesan ke prosesor tujuan dengan memanggil pvm_send atau pvm_mcast. Proses yang menerima pesan harus membuka paket pesan
pada buffer penerima sesuai dengan format pengiriman pesan.
PVM juga menyediakan rutin pvm_setopt untuk mengatur pilihan dalam sistem PVM, seperti pencetakan pesan kesalahan secara otomatis,
tingkat pencarian kesalahan (debugging level), dan metode pengaturan jalur komunikasi. Contoh yang paling umum dari penggunaan
pvm_setopt adalah memungkinkan jalur komunikasi langsung antar task dalam PVM. Pvm_setopt(PvmRoute, PvmRouteDirect);Dengan perintah
ini otomatis bandwidth komunikasi di dalam jaringan akan digandakan.

MPI (Message Passing Interface)
MPI(Message Passing Interface) adalah bahasa pemrograman dengan basis petukaran pesan. Dalam implementasinya MPI menggunakan fungsi-
fungsi pustaka yang dapat dipanggil dari program C, C++, atau Fortran. Hampir sama dengan PVM, MPI juga portable untuk berbagai arsitektur.
Salah satu implementasi terbaru pada saat ini yang berjalan pada lingkungan Windows adalah MPICH. Versi terakhirnya adalah MPICH versi
1.2.5. Ditinjau dari sisi aplikasi, MPI hanya dapat digunakan dengan model single program multiple data (SPMD), sedangkan PVM dapat
digunakan dengan model SPMD maupun multiple program multiple data (MPMD). Model SPMD secara fisik ditunjukkan dengan program master
dan slave yang menyatu, sedangkan MPMD ditunjukkan dengan program master dan slave yang terpisah, sehingga slave dapat mengerjakan
tugas yang berbeda-beda antara satu node dengan node lainnya.
MPI adalah bahasa-independen protokol komunikasi yang digunakan untuk program paralel komputer. Keduanya baik point-to-point dan
kolektif komunikasi didukungnya. MPI "adalah pesan-melewati pemrogram aplikasi antarmuka, bersama-sama dengan semantik protokol dan
spesifikasi untuk fitur-fiturnya bagaimana harus berlaku dalam setiap pelaksanaannya." MPI tujuan kinerja tinggi, skalabilitas, dan portabilitas.
MPI tetap dominan model yang digunakan dalam komputasi kinerja tinggi hari ini.
MPI tidak disetujui oleh badan standar utama meskipun demikian, hal itu telah menjadi de facto standar untuk komunikasi di antara proses-
proses yang model program paralel berjalan pada sistem memori terdistribusi. Meskipun demikian, program-program MPI secara teratur
dijalankan pada komputer memori bersama. Walaupun MPI termasuk dalam lapisan 5 dan yang lebih tinggi dari OSI Reference Model,
implementasi dapat mencakup sebagian besar lapisan model referensi, dengan soket dan TCP yang digunakan pada lapisan transport.
Kebanyakan implementasi MPI terdiri dari serangkaian rutinitas tertentu (yakni, sebuah API) callable dari Fortran, C, C + + atau Java dan dari
bahasa apa pun mampu berinteraksi dengan routine libraries. Keuntungan dari MPI diantaranya: portabilitas (karena MPI telah diterapkan
untuk hampir semua arsitektur memori terdistribusi) dan kecepatan (karena setiap pelaksanaan pada prinsipnya dioptimalkan untuk perangkat
keras yang dijalankan).
MPI sering dibandingkan dengan PVM, yang merupakan lingkungan dan didistribusikan populer lewat pesan sistem yang dikembangkan pada
tahun 1989, dan yang merupakan salah satu sistem yang termotivasi kebutuhan standar sistem lewat pesan paralel. Memori bersama
pemrograman threaded model (seperti pthreads dan OpenMP) dan pesan lewat pemrograman (MPI / PVM) dapat dianggap sebagai pelengkap
pendekatan pemrograman, dan kadang-kadang dapat dilihat digunakan bersama-sama dalam aplikasi di mana arsitektur setelan ini, misalnya
di server dengan beberapa besar bersama memori node.





Untuk kasus yang dicoba masih sama seperti artikel sebelumnya matriks multiplication atau
perkalian matriks. Ordo matriks yang digunakan adalah 44, 88, 1616, 3232, 6464, 100100,
200200, 400400, 800800,16001600. Perbedaanya, ketika kita menggunakan posix, kita sangat
memperhatikan pembagian task pada setiap thread secara eksplisit, berbeda dengan openMP ,
openmp akan meng-handle segala bentuk parallelism progress yang kita butuhkan, kita cukup
menentukan looping mana atau task mana atau proses mana yang ingin diselesaikan secara parallel,
dalam uji coba kali ini dicoba kedalam 3 jenis thread yaitu single thread, 2 thread, dan 4 thread.
Dalam OpenMP pun kita bisa dengan mudah menentukan varieble-variable mana yang harus dibuat
dengan mode shared, atau dengan mode private. Tentunya dalam penentuan variable shared dan
private ini diserahkan sepenuhnya pada programmer, programmer yang bertanggung jawab untuk
menentukan resource yang ada apakah digunakna secara bersama-sama (oleh lebih dari satu task
atau proses atau operasi) atau setiap task itu memiliki resource yang sama tetapi dengan referensi
yang berbeda, artinya variable itu merupakan objek yang berbeda untuk setiap tasknya, sehingga
memperkecil kemungikinan terjadi data depedensi antara proses yang berjalan secara bersama-
sama. Pengaturan oleh programmer dalam script code pun dapat membantu untuk memaksimalkan
load ballencing yang terjadi dan granuality yang akan maksimalkan rasio komputasi dibandingkan
rasio komunikasi antar task atau process yang mungkin terjadi saat program di eksekusi.
Pada saat program di eksekusi untuk kasus matriks multipilcation ini kita/programmer tidak
mengetahui bagaimana pembagian task untuk setiap matriks apakah dia dibagi berdasarkan kolom-
kolom atau bagaiman strategi yang terjadi pada proses matriks multiplication secara eksplisit
programmer tidak dapat memonitor task tersebut. Artinya directive (karenaopenMP menggunkan
directive sendiri sebagai penanda process atau bagian yang dikenakan parallelism) yang akan
menghandle code parallel yang pada posix itu terlihat cukup rumit, menjadi lebih sederhana, dengan
efeknya adalah programmer menjadi kehilangan informasi yang terjadi dalam pembagian task pada
matriks multiplication.
Untuk perkalian matriks secara parallel dilakukan dengan menggunakan 2 kondisi
jumlah thread, dengan 2 thread dan dengan 4 thread. Ketika proses
berlasung, jumlah kolom akan dibagi kedalam jumlah thread (N-Thread atau 2 atau 4 thread)secara
merata untuk setiap masing-masing thread. Lalu akan dihasilkan output printf banyak pembagian
kolom untuk di proses untuk setiap threadnya dan informasi urutanthread mana yang dieksekusi
terlebih dahulu dan mana yang diselesaikan lebih dahulu. Lalu hasil akhir dikeluarkan waktu yang
dibutuhkan untuk menyelesaikan komputasi perkalian matriks tersebut.
Resource report hasil uji coba bisa dilihat pada url scribd berikut
: http://www.scribd.com/doc/113621393/Hasil-Uji-Coba-Parallel-Programming-OpenMP
Sedangkan resource source code dapat dilihat pada url akun github berikut
: https://github.com/situkangsayur/MatrixMxNOpenMP
Uraian Hasil Uji Coba
Dari hasil eksperimen yang didapat terdapat perbedaan yang cukup besar antarakecepatan proses
ketika suatu proses (dalam kasus ini adalah perkalian 2 matriks)menggunakan prallel atau posix atau
menggunakan lebih dari satu thread dibandingkandengan yang hanya menggunakan 1 thread.
Terlihat dalam grafik 1 dan 2, dalam
proses perhitungan matriks pun banyak ordo yang dimiliki matriks, semakin besar ordomatriks,
semakin besar pula waktu yang dibutuhkan untuk menyelesaikan perkalianmatriks tersebut. Dalam
Figure 1 pun yang merupakan screen shot ketika CPU 1 danCPU 2 sedang dalam proses pengerjaan
perhitungan matriks dari ordo 16 hingga ordo
1600 dengan 2 threads, resource dari CPU 1 dan CPU 2 terlihat hampir 100% digunakan untuk
menyelesaikan perkalian matriks, artinya setiap CPU menangani 1threads untuk menyelesaikan
perkalian matriks. Code yang dibuat dalam program
inimemanfaatkan pragma dengan melakukan shared untuk variable yang menampungnilai-nilai
matriks baik matrik A dan B yang merupakan 2 matrik yang akan dikenakanoperasi multiplikasi dan
juga matriks C yang merupakan variable penampung matrikshasil perkalian matriks A dan B. Dan
untuk variable yang berfungsi hanya sebagai
iterator dan variable temporary dijadikan private karena untuk menghindarikemungkinan race condi
tion terhadap setiap variable tersebut, karena variable tersebutsaling independent ketika thread
dibagi menjadi lebih dari satu sehingga tidak adaketergantungan antara 1 variable iterator atau
temporary dengan variable lainnya.
Setelah dilakukan perbandingan hasil uji coba antara penggunaan library openMP dan POSIX, terlihat
hasil performasi dari masing-masing library ketika di implementasikan pada kasus operasi perkalian
2 matriks secara parallel. Cara POSIX menghasilkan performasi yang lebih baik, hasilnya jika diambil
rata-rata hasil uji coba maka dapat dilihat bahwa POSIX menyelesaikan operasi tersebut lebih cepat
dibandingkan dengan OpenMP, perkiraan yang terjadi adalah, bahwa ketika menggunkan POSIX,
programmer dapat membentuk algoritma tertentu untk mempercepat proses perhitungan salah
satunya adalah jumlah matriks yang akan dihitung dan dibebankan pada setiap thread itu dapat
dihitung ataupun strategi perhitungan matriks yang dapat diatur secara manual. Dan mungkin
openMP dapat berjalan sama cepatnya dengan POSIX namun perlu explorasi lebih dalam mengenai
bebagai fitur dai openMP itu sendiri sehingga dapat emmanfaatkan fitur yang tersedia secara efisien
dan efektif.

Peningkatan Kecepatan[sunting | sunting sumber]
Peningkatan kecepatan dapat diformulasikan dalam persamaan berikut ini

Dimana adalah waktu yang dibutuhkan untuk menyelesaikan pekerjaan (program komputer) bila dijalankan dalam satu
komputer. Dan adalah waktu yang dibutuhkan jika pekerjaan dikerjakan bersamaan oleh beberapa komputer.
Ada limitasi dalam usaha membuat suatu program komputer berjalan lebih efisien melalui peningkatan kecepatan, hukum yang
menetapkan batasan ini dikenal sebagai Hukum Amdahl. Ide dari hukum amdahl ini adalah bahwa anda hanya akan bisa
meningkatkan efisiensi program komputer anda, sebatas pada bagian tertentu dari program tersebut yang dapat di paralelkan.
Sementara bagian yang memang harus dilaksanakan secara berurutan, akan menjadi penentu performa akhir.
Kembali ke analogi memasak tadi, bila anda harus menggunakan sarung tangan sebelum menyalakan kompor ataupun
memotong bawang, maka waktu yang anda butuhkan untuk memakai sarung tangan ini adalah waktu serial, yang tidak dapat
dihindari. Sementara waktu untuk memasak dan memotong bawang tadi adalah bagian yang bisa diparalelkan.
Hukum Amdahl[sunting | sunting sumber]
Telah dijelaskan bahwa dari (waktu yg dibutuhkan menjalankan pekerjaan dalam satu komputer) tadi, ada sebagian yg
tidak bisa diparalelkan. Untuk menyatakan ini kita gunakan notasi dimana menunjukkan berapa bagian
dari yang tidak bisa dijadikan paralel (atau bagian serial dari program ini).
Maka kita ketahui adalah waktu yg tidak akan terpengaruh oleh bertambahnya komputer yg digunakan (a).
Sisanya adalah waktu yang akan berkurang menjadi bila kita menggunakan N
komputer tambahan {b) .
Sehingga waktu total yang dibutuhkan untuk menjalankan pekerjaan dalam N komputer adalah (a) + (b) alias :

Peningkatan kecepatan yang kita peroleh dari persamaan ini adalah :

Mungkin anda akan mendapati persamaan speed up yang terlihat berbeda tapi pada dasarnya sama. Persamaan
dibawah, bisa didapat dari persamaan diatas, dengan mengeliminasi komponen (pada bagian atas dan bawah
persamaan), lalu mengatur N dan

Bila anda cermati persamaan di atas, bisa dilihat bahwa jika kita menggunakan komputer yang amat banyak (
) komponen (b) akan dapat diabaikan, menyisakan persamaan :

Inilah batas maksimum peningkatan kecepatan yang bisa dicapai menurut hukum Amdahl yaitu
perbandingan terbalik dari seberapa banyak bagian serial dari suatu pekerjaan.
Dalam sistem terdistribusi dimana anda berusaha menggunakan lebih banyak prosesor untuk
menyelesaikan masalah, akan ada imbal balik. Menggunakan komputer tambahan dari lokasi yang
berbeda memberikan anda sumber komputasi baru, tapi juga melibatkan biaya komunikasi tambahan,
saat anda harus memberikan pekerjaan tersebut pada komputer yg terpisah.

Hukum Amdahl (Inggris: Amdahl's law) adalah prinsip dasar dalam peningkatan kecepatan proses suatu komputer jika
hanya sebagian dari peralatan perangkat keras ataupun perangkat lunak-nya yang diperbaharui/ditingkatkan kinerjanya. Nama
Amdahl diambil dari nama seorang arsitektur komputer terkenal di perusahaan IBM, Gene Amdahl yang pertama kali
mencetuskan bentuk formulasi ini.
Formulasi atau hukum ini banyak dipakai dalam bidang komputasi paralel untuk meramalkan peningkatan kecepatan
maksimum pemrosesan data (secara teoritis) jika jumlah prosesor di dalam komputer paralel tersebut ditambah.
Hukum Amdahl ini dinyatakan dalam bentuk:

dengan
adalah prosentase jumlah instruksi yang ditingkatkan,
adalah faktor percepatannya (1 menyatakan tanpa percepatan),
menyatakan tiap bagian yang dipercepat/diperlambat, dan
adalah jumlah bagian atau prosesor keseluruhan dalam proses percepatan ini.















































SUMBER :
http://id.wikipedia.org/wiki/Hukum_Amdahl
http://id.wikipedia.org/wiki/Komputasi_paralel

Anda mungkin juga menyukai