Parallel PROCESSING
Pemrosesan paralel (parallel processing) adalah penggunakan
lebih dari satu CPU untuk menjalankan sebuah program secara simultan.
Idealnya, parallel processing membuat program berjalan lebih
cepat karena semakin banyak CPU yang digunakan.
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.
TUJUAN PARALLEL PROCESSING
Tujuan utama dari pemrosesan paralel adalah untuk
meningkatkan performa komputasi. Semakin banyak hal yang bisa dilakukan secara
bersamaan (dalam waktu yang sama), semakin banyak pekerjaan yang bisa
diselesaikan.
PARALLEL PROCESSING
Komputasi paralel
Komputasi paralel adalah salah satu teknik melakukan
komputasi secara bersamaan dengan memanfaatkan beberapa komputer secara
bersamaan.
Biasanya diperlukan saat kapasitas yang diperlukan 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 aneka perangkat lunak pendukung yang biasa
disebut sebagai middleware yang berperan untuk mengatur distribusi pekerjaan
antar node dalam satu mesin paralel. Selanjutnya pemakai harus membuat
pemrograman paralel untuk merealisasikan komputasi.
Pemrograman Paralel sendiri adalah teknik pemrograman
komputer yang memungkinkan eksekusi perintah/operasi secara bersamaan. Bila
komputer yang digunakan secara bersamaan tersebut dilakukan oleh
komputer-komputer terpisah yang terhubung dalam satu jaringan komputer,
biasanya disebut sistem terdistribusi. Bahasa pemrograman yang populer digunakan
dalam pemrograman paralel adalah MPI (Message Passing Interface) dan PVM
(Parallel Virtual Machine).
Yang 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.
Untuk lebih memperjelas lebih dalam mengenai perbedaan
komputasi tunggal (menggunakan 1 processor) dengan komputasi paralel
(menggunakan beberapa processor), maka kita harus mengetahui terlebih dahulu
pengertian mengenai model dari komputasi. Ada 4 model komputasi yang digunakan,
yaitu:
SIMD
SIMD
MISD
MIMD
SISD
Yang merupakan singkatan dari Single Instruction, Single
Data adalah satu-satunya yang menggunakan arsitektur Von Neumann. Ini
dikarenakan pada model ini hanya digunakan 1 processor saja. Oleh karena itu
model ini bisa dikatakan sebagai model untuk komputasi tunggal. Sedangkan
ketiga model lainnya merupakan komputasi paralel yang menggunakan beberapa
processor. Beberapa contoh komputer yang menggunakan model SISD adalah UNIVAC1,
IBM 360, CDC 7600, Cray 1 dan PDP 1.
SIMD
Yang merupakan singkatan dari Single Instruction, Multiple
Data. SIMD menggunakan banyak processor dengan instruksi yang sama, namun
setiap processor mengolah data yang berbeda. Sebagai contoh kita ingin mencari
angka 27 pada deretan angka yang terdiri dari 100 angka, dan kita menggunakan 5
processor. Pada setiap processor kita menggunakan algoritma atau perintah yang
sama, namun data yang diproses berbeda. Misalnya processor 1 mengolah data dari
deretan / urutan pertama hingga urutan ke 20, processor 2 mengolah data dari
urutan 21 sampai urutan 40, begitu pun untuk processor-processor yang lain.
Beberapa contoh komputer yang menggunakan model SIMD adalah ILLIAC IV, MasPar,
Cray X-MP, Cray Y-MP, Thingking Machine CM-2 dan Cell Processor (GPU).
MISD
Yang merupakan singkatan dari Multiple Instruction, Single
Data. MISD menggunakan banyak processor dengan setiap processor menggunakan
instruksi yang berbeda namun mengolah data yang sama. Hal ini merupakan
kebalikan dari model SIMD. Untuk contoh, kita bisa menggunakan kasus yang sama
pada contoh model SIMD namun cara penyelesaian yang berbeda. Pada MISD jika
pada komputer pertama, kedua, ketiga, keempat dan kelima sama-sama mengolah
data dari urutan 1-100, namun algoritma yang digunakan untuk teknik
pencariannya berbeda di setiap processor. Sampai saat ini belum ada komputer
yang menggunakan model MISD.
MIMD
Yang merupakan singkatan dari Multiple Instruction, Multiple
Data. MIMD menggunakan banyak processor dengan setiap processor memiliki
instruksi yang berbeda dan mengolah data yang berbeda. Namun banyak komputer
yang menggunakan model MIMD juga memasukkan komponen untuk model SIMD. Beberapa
komputer yang menggunakan model MIMD adalah IBM POWER5, HP/Compaq AlphaServer, Intel
IA32, AMD Opteron, Cray XT3 dan IBM BG/L.
Singkatnya untuk perbedaan antara komputasi tunggal dengan
komputasi paralel, bisa digambarkan pada gambar di bawah ini:

Penyelesaian Sebuah Masalah pada Komputasi Tunggal

Penyelesaian Sebuah Masalah pada Komputasi Paralel
Dari perbedaan kedua gambar di atas, kita dapat menyimpulkan
bahwa kinerja komputasi paralel lebih efektif dan dapat menghemat waktu untuk
pemrosesan data yang banyak daripada komputasi tunggal.
Dari penjelasan-penjelasan di atas, kita bisa mendapatkan
jawaban mengapa dan kapan kita perlu menggunakan komputasi paralel. Jawabannya
adalah karena komputasi paralel jauh lebih menghemat waktu dan sangat efektif
ketika kita harus mengolah data dalam jumlah yang besar. Namun keefektifan akan
hilang ketika kita hanya mengolah data dalam jumlah yang kecil, karena data
dengan jumlah kecil atau sedikit lebih efektif jika kita menggunakan komputasi
tunggal.
Komputasi paralel membutuhkan :
· algoritma
· bahasa pemrograman
· compiler
Pemrograman paralel adalah teknik pemrograman komputer yang
memungkinkan eksekusi perintah/operasi secara bersamaan baik dalam komputer
dengan satu (prosesor tunggal) ataupun banyak (prosesor ganda dengan mesin
paralel) CPU.
Tujuan utama dari pemrograman paralel adalah untuk
meningkatkan performa komputasi.
* Message Passing Interface (MPI)
MPI adalah sebuah standard pemrograman yang memungkinkan
pemrogram
untuk membuat sebuah aplikasi yang dapat dijalankan secara
paralel.
MPI menyediakan fungsi-fungsi untuk menukarkan
antar pesan. Kegunaan MPI yang lain adalah
1. menulis kode paralel secara portable
2. mendapatkan performa yang tinggi dalam pemrograman
paralel, dan
3. menghadapi permasalahan yang melibatkan hubungan data
irregular atau dinamis yang tidak
begitu cocok dengan model data paralel.
* Message Passing Interface (MPI)
MPI adalah sebuah standard pemrograman yang memungkinkan
pemrogram
untuk membuat sebuah aplikasi yang dapat dijalankan secara
paralel.
MPI menyediakan fungsi-fungsi untuk menukarkan
antar pesan. Kegunaan MPI yang lain adalah
1. menulis kode paralel secara portable
2. mendapatkan performa yang tinggi dalam pemrograman
paralel, dan
3. menghadapi permasalahan yang melibatkan hubungan data
irregular atau dinamis yang tidak
begitu cocok dengan model data paralel.
Hubungan antara Komputasi Modern dengan Paralel Processing
Hubungan antara komputasi modern dan parallel processing
sangat berkaitan, karena penggunaan komputer saat ini atau komputasi dianggap
lebih cepat dibandingkan dengan penyelesaian masalah secara manual. Dengan
begitu peningkatan kinerja atau proses komputasi semakin diterapkan, dan salah
satu caranya adalah dengan meningkatkan kecepatan perangkat keras. Dimana
komponen utama dalam perangkat keras komputer adalah processor. Sedangkan
parallel processing adalah penggunaan beberapa processor (multiprocessor atau
arsitektur komputer dengan banyak processor) agar kinerja computer semakin
cepat.
Kinerja komputasi dengan menggunakan paralel processing itu
menggunakan dan memanfaatkan beberapa komputer atau CPU untuk menemukan suatu
pemecahan masalah dari masalah yang ada. Sehingga dapat diselesaikan dengan
cepat daripada menggunakan satu komputer saja. Komputasi dengan paralel
processing akan menggabungkan beberapa CPU, dan membagi-bagi tugas untuk
masing-masing CPU tersebut. Jadi, satu masalah terbagi-bagi penyelesaiannya.
Tetapi ini untuk masalah yang besar saja, komputasi yang masalah kecil, lebih
murah menggunakan satu CPU saja.
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 dengán 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 diklasifikasikan 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.
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 dengán 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 diklasifikasikan 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.
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 dengán
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 diklasifikasikan 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.
Pemrosesan Paralel PVM dan MPI
Pemrosesan Paralel
Pemrosesan paralel (parallel processing) adalah penggunakan lebih dari
satu CPU untuk menjalankan sebuah program secara
simultan. Parallel processing membuat program berjalan lebih cepat karena
semakin banyak CPU yang digunakan.
Tujuan utama dari pemrosesan paralel adalah untuk meningkatkan performa
komputasi. Semakin banyak hal yang bisa dilakukan secara bersamaan (dalam waktu
yang sama), semakin banyak pekerjaan yang bisa diselesaikan.
Komputasi paralel
Komputasi paralel adalah salah satu teknik melakukan komputasi secara
bersamaan dengan memanfaatkan beberapa komputer secara bersamaan.
Biasanya diperlukan saat kapasitas yang diperlukan 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 aneka perangkat lunak pendukung yang biasa
disebut sebagai middleware yang berperan untuk
mengatur distribusi pekerjaan antar node dalam satu mesin paralel. Selanjutnya
pemakai harus membuat pemrograman paralel untuk merealisasikan komputasi.
Pemrograman Paralel sendiri adalah teknik pemrograman komputer yang
memungkinkan eksekusi perintah/operasi secara bersamaan. Bila komputer yang
digunakan secara bersamaan tersebut dilakukan oleh komputer-komputer terpisah
yang terhubung dalam satu jaringan komputer, biasanya disebut sistem
terdistribusi. Bahasa pemrograman yang populer digunakan dalam pemrograman
paralel adalah MPI (Message Passing Interface)
dan PVM (Parallel Virtual Machine).
Komputasi paralel membutuhkan :
- Algroritma
- Bahasa Pemrograman
- Compiler
Pemrograman Paralel
Pemrograman paralel adalah teknik pemrograman komputer yang
memungkinkan eksekusi perintah/operasi secara bersamaan baik dalam komputer
dengan satu (prosesor tunggal) ataupun banyak (prosesor ganda dengan mesin
paralel) CPU. Tujuan utama dari pemrograman paralel adalah untuk meningkatkan
performa komputasi.
Komunikasi data pada sistem
paralel memori terdistribusi, memerlukan alat bantu komunikasi. Alat bantu yang
sering digunakan oleh sistem seperti PC Jaringan pada saat ini adalah standar
MPI (Message Passing Interface) atau standar PVM
(Parallel Virtual Machine)yang keduanya bekerja
diatas TCP/IP communication layer. Kedua standar ini memerlukan fungsi remote
access agar dapat menjalankan program pada masing-masing unit prosesor.
Mesin virtual parallel atau
Parallel Virtual Machine (PVM) dan Antarmuka
Pengiriman Pesan (MPI) adalah kumpulan library yang memungkinkan kita untuk
menulis program pengiriman pesan paralel menggunakan bahasa pemrograman C dan
FORTRAN agar bisa berjalan pada system paralel.
Kemampuan sistem paralel
tergantung dari kemampuan pemrogram untuk membuat aplikasi terdistribusi ketika
dijalankan pada sistem paralel. Jika node slave mempunyai prosessor lebih dari
satu maka pemrogram harus memperhitungkan kemungkinan paralelisme 2 level: Paralelisme
di dalam slave node (intra-node parallelism) dan paralelisme antar slave node
(inter-node parallelism).
Inter-node parallelism
menggunakan shared memory dalam node sehingga
tidak melakukan pertukaran data secaraexplicit. Sedangkan Inter-node parallelism
melakukan pertukaran data lewat media yang menghubungkan antara node slave yang
ada.
Terdapat
tiga metode untuk mengimplementasikan Inter-node parallelism yaitu :
- Dengan cara membuat protokol komunikasi ad hoc level rendah. Contohnya dengan menggunakan socket interface.
- Dengan menggunakan distributed communication library. Contohnya dengan menggunakan Message Passing Interface (MPI) library
- Dengan memanfaatkan layer software dengan maksud untuk menyembunyikan interconnect dari programmer.
Passing Message
Passing Message adalah secara
luas menggunakan model programming yang paralel Pesan yang lewat/ sampaikan
perbentengan dengan menciptakan ditetapkan perbaiki jumlah tugas yang serupa
dengan uniknya yang saling berhubungan dengan mengirimkan dan menerima pesan ke
dan dari satu sama lain.
Message passing adalah paradigma
fundamental untuk aplikasi DS. Suatu proses mengirimkan message yang mewakili
suatu request, Message di sampaikan ke penerima yang kemudian memproses request
tsb dan mengirim pesan balasan.
Kemudian, balasan tersebut memicu
request lainnya, yang berlanjut pada balasan berikutnya dan seterusnya. Operasi
dasar yang dibutuhkan untuk mendukung paradigma message passing adalah send dan
receive. Untuk komunikasi yang connection-oriented, operasi connect dan
disconnect juga dibutuhkan Dengan abstrasi yang disediakan oleh model ini,
proses yang saling terkoneksi melakukan operasi input dan output satu sama
lainnya, seperti halnya pada operasi I/O pada file. Operasi I/O menyembunyikan
detail komunikasi jaringannya pada level sistem operasi. Antar muka pemrograman
aplikasi soket berdasarkan pada paradigma ini.
PVM (Parsing 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 paralel. Bila nama user pada semua komputer sama misailnya 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.
- Dapatkan IP masing-masing komputer pada file /etc/hosts/ host.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 dilakukan.
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 Program PVM
|
MPI (Message Passing Interface)
Message Passing Interface (MPI)
adalah sebuah standard pemrograman yang memungkinkan pemrogram untuk membuat
sebuah aplikasi yang dapat dijalankan secara parallel dengan spesifikasi
library pemrograman untuk meneruskan pesan (message-passing), yang diajukan
sebagai standar oleh berbagai komite dari vendor, pelaksana dan Pemakai. MPI
menyediakan fungsi-fungsi untuk menukarkan antar pesan.
Message Passing Interface
bertugas untuk mengirim data antar komputer di dalam sistem paralel (biasanya
disebut sebagai node atau host). Job scheduler seperti yang tersirat dari
namanya bertugas menerima tugas dari user dan menjadwalkan tugas tersebut pada
beberapa node didalam sistem parallel sesuai kebutuhan.
MPI digunakan secara luas
mengingat :
- telah memiliki standar;
- dirancang berkinerja tinggi pada mesin-mesin paralel;
- tersedia secara bebas maupun komersial;
- dikembangkan banyak pihak;
- informasi penerapan dan pengujian dalam berbagai bahasa pemrograman dan sistem telah tersedia.
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 parallel.
Kemampuan MPI digunakan untuk menginterpretasikan bahasa pemrograman
matrik kemampuan dynamic linking dari bahasa tersebut. Fungsi library dari
paket MPI dapat digabungkan dengan dynamic extension dengan cara menghubungkan
bahasa pemrograman tersebut dengan bahasa C, C++, atau FORTRAN. Hal ini telah
dilakukan untuk menciptakan toolbox MPI (MPITB) untuk kebutuhan MATLAB, dan bahasa
pemrograman GNU Octave oleh Fernandez Baldomero .
Penggunaan MPITB dengan
pertimbangan fungsionalitas dan kelengkapannya disamping fakta bahwa MPITB dan
GNU Octave adalah bebas digunakan bahkan untuk keperluan komersial.
Ada beberapa versi MPI, salah satu
yang open source adalah open MPI http://www.open-mpi.org/.
Dalam pemodelan
menggunakan message-passing, suatu proses (process) adalah sebuah pencacah
program dan ruang alamat. Proses dapat memiliki banyak thread (pencacah program
dan memory lokal) yang saling berbagi ruang
alamat. MPI dalam hal ini berfungsi sebagai alat komunikasi di antara proses,
yang saling memiliki ruang terpisah. Komunikasi ini terutama berupa
sinkronisasi dan perpindahan data antar proses. Informasi dari domain
komunikasi seluruh proses disimpan di sebuah variabel yang disebut
commun-cators, misalnya MPI_COMM_WOLRD yang mencakup keseluruhan proses.
Paralelisme dalam MPI bersifat Multiple Instruction Multiple Data (MIMD).
Pemrograman paralel
menggunakan MPI bersifat eksplisit, yaitu ditentukan dalam program secara
jelas. Dalam melakukan komunikasi data antar proses, pembuat program perlu
menentukan mekanisme apa yang digunakan dari fungsi-fungsi yang tersedia.
Disediakan beberapa fungsi dasar untuk keperluan ini, yaitu MPI_Send
(mengirim), MPI_Recv (menerima), dan MPI_Sendrecv (mengirim dan menerima
sekali-gus). Fungsi-fungsi ini masuk dalam kelompok ko-munikasi titik-ke-titik
(point-to-point). Komunikasi dalam MPI bersifat kooperatif, yaitu tiap-tiap
proses saling bekerjasama.
Parameter data atau message dalam fungsi-fungsi komunikasi memiliki struktur dasar, yaitu:
Parameter data atau message dalam fungsi-fungsi komunikasi memiliki struktur dasar, yaitu:
- Alamat buffer data untuk mengirim atau menerima.
- Ukuran dari buffer data.
- Jenis data pada buffer, berupa konstanta tertentu misalnya MPI_INTEGER, MPI_CHAR dan MPI_DOUBLE.
- Proses tujuan, berupa suatu integer rank dari proses.
- Tag dari message, dapat digunakan sebagai penanda oleh proses.
Operasi dari
fungsi-fungsi komunikasi titik-ke-titik memiliki 2 mode, yaitu blocking dan
non-blocking. Pada bentuk blocking maka proses akan menunggu operasi kirim dan
terima data selesai, sedangkan non- blocking menggunakan event untuk
memberitahu proses ketika terjadi kirim atau terima data. Dalam tiap mode
adalah penting untuk menjaga agar setiap proses yang berkomunikasi tidak
mengalami deadlock, yaitu saling tunggu yang tidak berkesudahan.
MPI telah memiliki
mekanisme agar deadlock tidak terjadi, tetapi dalam kondisi tertentu ini tidak
terhindarkan, misalnya ketika buffer tujuan penuh atau tidak tersedia.
http://sellyinthewords.blogspot.com/2013/01/pemrosesan-paralel-pvm-dan-mpi.html


Tidak ada komentar:
Posting Komentar