Parallel Computation ( Komputasi Pararel )




1. Pengertian Komputasi Pararel


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.

Secara prinsip komputer paralel membagi permasalahan sehingga menjadi lebih kecil untuk dikerjakan oleh setiap prosesor (CPU) dalam waktu yang bersamaan/simultan (concurrent). Prinsip ini disebut paralelisme.


Dari gambar diatas, kita dapatkan beberapa tingkat paralelisme dalam komputasi khususnya pada
prosesor, di antaranya :
1) Paralelisme bit-level. Contoh : prosesor 32 bit dan prosesor 64 bit.
2) Paralelisme instruction set-level. Contoh : CISC dan RISC.
3) Paralelisme thread-level. Contoh : Intel hyperthreading.

Paralelisme lain yang juga berkembang dalam komputasi paralel adalah paralelisme data dan paralelisme fungsi (task). Perkembangan teknologi prosesor memberikan pengaruh yang besar pada komputasi paralel. Mulai dari prosesor singlecore superscalar, chip multiprocessor, prosesor multicore, hingga prosesor cell memberikan kontribusi terhadap peningkatan performansi komputer paralel.

Komputasi paralel membutuhkan:

- Algoritma
- Bahasa pemrograman
- Compiler

2. Pemrograman Pararel 


Di dalam komputasi parallel ada yang dinamakan dengan pemrograman parallel. Pemrograman paralel adalah teknik pemrograman komputer yang memungkinkan eksekusi perintah/operasi secara bersamaan (komputasi paralel), baik dalam komputer dengan satu (prosesor tunggal) ataupun banyak (prosesor ganda dengan mesin paralel) CPU. Bila komputer yang digunakan secara bersamaan tersebut dilakukan oleh komputer-komputer terpisah yang terhubung dalam suatu jaringan komputer lebih sering istilah yang digunakan adalah sistem terdistribusi (distributed computing).

Tujuan utama dari pemrograman paralel adalah untuk meningkatkan performa komputasi. Semakin banyak hal yang bisa dilakukan secara bersamaan (dalam waktu yang sama), semakin banyak pekerjaan yang bisa diselesaikan. Analogi yang paling gampang adalah, bila anda dapat merebus air sambil memotong-motong bawang saat anda akan memasak, waktu yang anda butuhkan akan lebih sedikit dibandingkan bila anda mengerjakan hal tersebut secara berurutan (serial). Atau waktu yg anda butuhkan memotong bawang akan lebih sedikit jika anda kerjakan berdua.


3. Bahasa Pemrograman pada Pemrograman Parallel

a. MPI


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.

Kegunaan MPI:
1. Menyediakan fungsi-fungsi untuk menukar pesan. 
2. Menulis kode paralel secara portable. 
3. Mendapatkan performa yang tinggi dalam pemrograman paralel. 
4. Menghadapi permasalahan yang melibatkan hubungan data irregular atau dinamis yang tidak begitu cocok dengan model data paralel.

b. PVM

Private Virtual Machine adalah perangkat lunak yang memungkinkan sekumpulan komputer yang heterogen terlihat seperti satu sistem komputer paralel dan dapat digunakan sebagai sebuah sumber daya komputasi yang koheren. 

Istilah virtual machine mengacu pada konfigurasi komputer dengan memori tersebar, sedangkan istilah host ditujukan untuk komputer yang merupakan anggota dari virtual machine. Host dapat terdiri dari komputer yang berbeda-beda dan terpisah lokasinya secara fisik.

PVM terdiri dari beberapa komponen yaitu:

  • PVM daemon 

Daemon dari PVM, atau disebut PVM daemon (PVMD). Daemon merupakan semacam program yang berjalan di “belakang” dan biasanya menangani program dari klien. Komponen ini berada pada setiap komputer yang terhubung dalam virtual machine. PVM Berguna untuk membentuk konfigurasi host dalam PVM dan mengkoordinir komunikasi antar host.

  • PVM libraries 
Komponen ini berisi rutin-rutin antarmuka pemakai PVM untuk melakukan pengiriman pesan, pembuatan proses, koordinasi proses dan modifikasi virtual machine. Pustaka PVM ini memungkinkan adanya interaksi antar task, yang bisa dilakukan dengan menggunakan fungsi packing dan unpacking pesan.

 
4. Arsitektur Komputer Paralel




Berdasarkan jumlah dan prinsip kerja prosesor pada komputer paralel, A.J. Van der Steen dan J.Donggara menyebutkan terdapat empat arsitektur utama komputer paralel menurut Flynn (1972) yaitu


a. SISD (Single Instruction – Single Data). 

Komputer ini memiliki hanya satu prosesor dan satu instruksi yang dieksekusi secara serial. Komputer ini adalah tipe komputer konvensional. Menurut mereka tipe komputer ini tidak ada dalam praktik komputer paralel karena bahkan mainframe pun tidak lagi menggunakan satu prosesor. Klasifikasi ini sekedar untuk melengkapi definisi komputer paralel. Skema SISD ditunjukkan pada Gambar di bawah ini.



Contoh SISD:
1. UNIVAC1
2. CDC 7600
3. PDP 1
4. IBM 360 
5. Cray 1 


b. SIMD (Single Instruction – Multiple Data)

Komputer ini memiliki lebih dari satu prosesor, tetapi hanya mengeksekusi satu instruksi secara paralel pada data yang berbeda pada level lock-step. Komputer vektor adalah salah satu komputer paralel yang menggunakan arsitektur ini. Skema SIMD ditunjukkan pada Gambar di bawah.


Contoh SIMD:
1. ILLIAC IV
2. MasPar
3. Cray X-MP, 
4. Cray Y-MP 
5. Thingking Machine CM-2 
6. Cell Processor (GPU)


c. MISD (Multiple Instructions – Single Data). 

Teorinya komputer ini memiliki satu prosesor dan mengeksekusi beberapa instruksi secara paralel tetapi praktiknya tidak ada komputer yang dibangun dengan arsitektur ini karena sistemnya tidak mudah dipahami. Skema MISD ditunjukkan pada Gambar di bawah ini.




d. MIMD (Multiple Instructions – Multiple Data). 

Komputer ini memiliki lebih dari satu prosesor dan mengeksekusi lebih dari satu instruksi secara paralel. Tipe komputer ini yang paling banyak digunakan untuk membangun komputer paralel, bahkan banyak supercomputer yang menerapkan arsitektur ini. Skema MIMD ditunjukkan pada Gambar di bawah ini.


Contoh MIMD:
1. IBM POWER5
2. Intel IA32
3. Cray XT3 
4. HP/Compaq AlphaServer 
5. AMD Opteron 
6. IBM BG/L


5. Perkembangan di Indonesia


Di Indonesia, usaha untuk membangun infrastruktur mesin paralel sudah dimulai sejak era 90-an, meski belum pada tahap serius dan permanen. Namun untuk pemrograman paralel sudah sejak awal menjadi satu mata-kuliah wajib di banyak perguruan tinggi terkait. Baru pada tahun 2005 dimulai pembuatan infrastruktur mesin paralel permanen, misalnya yang dikembangkan oleh Grup Fisika Teoritik dan Komputasi di P2 Fisika LIPI. Didorong oleh perkembangan pemrograman paralel yang lambat, terutama terkait dengan sumber daya manusia (SDM) yang menguasainya, mesin paralel LIPI ini kemudian dibuka untuk publik secara cuma-cuma dalam bentuk LIPI Public Cluster (LPC). Saat ini LPC telah dikembangkan lebih jauh menjadi gerbang komputasi GRID di Indonesia dengan kerjasama global menjadi IndoGRID.

Pada tahun berikutnya, dengan dukungan dana dari proyek Inherent Dikti, Fasilkom UI juga membangun mesin paralel. Sementara itu pada tahun 2009, ITB membuat kluster hibrid CPU dan GPU yang pertama di Indonesia dengan kemampuan hingga 60 inti CPU dan 1920 inti GPU.




Referensi: