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.
thanks to: Dheni Agam, Fahrul 'Bule', Hasan, Irwan 'Jamet' for helping me to make this task.
2 komentar:
sertain permasalahannya juga dunk...
makasiiii sangat membantu. . .
satu lagi saya gak iri kook :o :v ^_^
Posting Komentar