Message-Passing Computing

Slides:



Advertisements
Presentasi serupa
Rujukan Mata Kuliah Sistem Operasi #04.
Advertisements

Pertemuan 6 (Organisasi Input/Output)
Teknik Pemrograman Terstruktur
Struktur Sistem Komputer
Sistem Input/output (I/O)
PERTEMUAN MINGGU KE-11 SISTEM INPUT / OUTPUT.
Komunikasi antar Proses
KONSEP PROSES Minggu ke 5.
Sistem Operasi Konsep Dasar Sistem Operasi Prepared By Team Teaching Presented by WIN & TGW.
Computer System Structure
Struktur Sistem Operasi
Struktur Sistem Operasi
ALGORITMA & PEMROGRAMAN 1 C KONSEP DASAR PEMROGRAMAN
Slides for Parallel Programming Techniques & Applications Using Networked Workstations & Parallel Computers 2nd ed., by B. Wilkinson & M
Sinkronisasi dan Deadlock Proses
Network Software (Perangkat Lunak Jaringan)
Struktur Sistem Komputer
Organisasi dan Arsitektur Komputer
Inter Process Communication
REMOTE SERVICE.
11. STRATEGI PARTISI DAN DIVIDE & CONQUER 11.1 Partisi Strategi Divide & Conquer Divide & Conquer M-ary 11.2 Contoh Divide & Conquer Sortir dengan Bucket.
Slide 6 – Management Proses
Pendahuluan Definisi :
MANAJEMEN PROSES.
KOMUNIKASI DATA.
1 Pertemuan Fungsi Matakuliah: T0016 / Algoritma dan Pemrograman Tahun: 2007 Versi: 6.
PENJADWALAN PROSES.
Struktur Sistem Komputer
Fungsi dan Prosedur.
PCB (Process Control Block)
TIU Memahami konsep I/O system Memahami mekasnisme dasar dalam I/O system.
Thread. Thread Proses dengan thread tunggal – proses menjalankan satu tugas pada satu waktu Proses dengan thread tunggal – proses menjalankan satu tugas.
Sistem Input/output (I/O)
I/O Device and I/O Module
Manajemen Memori.
SISTEM OPERASI (RANGKUMAN)
STRUKTUR SISTEM KOMPUTER
Paralel Processing Sistem Terdistribusi.
Model Sistem.
Proses Dosen: Abdillah S.Si., MIT.
Sistem Operasi Terdistribusi
PERTEMUAN MINGGU KE-11 SISTEM INPUT / OUTPUT.
Struktur Sistem Komputer
Organisasi dan Arsitektur Komputer
PENGANTAR LOGIKA & TEKNIKPEMROGRAMAN
Pertemuan 4 PROGRAMMING LANGUAGE.
Struktur Sistem Komputer
IV. Proses-proses Terdapat beberapa definisi proses, diantaranya proses sebagai program yang sedang dalam keadaan eksekusi Proses membutuhkan sumber daya.
STRUKTUR SISTEM OPERASI
THREAD.
Manajemen Proses Firdaus, M.T..
PENGANTAR LOGIKA & TEKNIK PEMROGRAMAN
ORGANISASI & ARSITEKTUR KOMPUTER
Pipelined Computations Dalam teknik pipeline, problem dibagi menjadi deretan yang harus dilaksanakan satu setelah lainnya. Setiap tugas nantinya akan dieksekusi.
Oleh : Rahmat Robi Waliyansyah, M.Kom.
Algoritma Paralel.
I/O Device and I/O Module
PARALEL PROCESSING.
Struktur Sistem Komputer
Pipelined Computations
Struktur Sistem Komputer
KONSEP PROSES Minggu ke 5.
Teknik Pemrograman Terstruktur
KOMUNIKASI DATA.
I/O Device and I/O Module
Struktur Sistem Komputer
Struktur Sistem Komputer
Struktur Sistem Komputer
Fathiah, S.T.,M.Eng Universitas Ubudiyah Indonesia
Struktur Sistem Komputer
Transcript presentasi:

Message-Passing Computing Chapter 2 Message-Passing Computing

Message-Passing Programming menggunakan User-level Message-Passing Libraries Diperlukan dua mekanisme utama: 1. Metode untuk membuat proses yang terpisah untuk eksekusi pada komputer yang berbeda-beda. 2. Metode untuk mengirim dan menerima messages

Model Multiple program, multiple data (MPMD) Source Source fi le fi le Compile untuk menyesuaikan Dengan prosesor Executable Prosesor 0 Prosesor p - 1

Model Single Program Multiple Data (SPMD) . Berbagai proses bergabung menjadi satu program. Control statements memilih bagian-bagian yang berbeda untuk dieksekusi setiap prosesor. Semua executables mulai pada saat yang sama started together - static process creation Source fi le Basic MPI w a y Compile untuk menyesuaikan dengan prosesor Ex ecutab les Prosesor 0 Prosesor p - 1

Model Multiple Program Multiple Data (MPMD) Program yang berbeda untuk setiap prosesor. Satu prosesor mengeksekusi master process. Proses lain dimulai dari dalam master process - dynamic process creation. Proses 1 Mulai eksekusi spawn(); proses 2 Proses 2 Waktu

Basic “point-to-point” Send and Receive Routines Passing message antar proseses dengan menggunakan send() and recv() library calls: Proses 1 Proses 2 x y Pergerakan send(&x, 2); data recv(&y, 1); Generic syntax (actual formats later)

Synchronous Message Passing Rutin yang benar-benar kembali ketika message transfer selesai. Synchronous send routine Menunggu sampai message diterima dengan lengkap oleh proses penerima sebelum mengirimkan message. Synchronous receive routine Menunggu sampai message yang ditunggu tiba. Synchronous routines secara intrinsik melakukan dua hal: transfer data dan mensinkronisasi proses.

Synchronous send() and recv() menggunakan 3-way protocol Proses 1 Proses 2 Waktu Request to send send(); Proses dihentikan Ac kno wledgment recv(); Kedua proses Message berlanjut (a) Ketika send() terjadi sebelum recv() Proses 1 Proses 2 Waktu recv(); Proses Request to send send(); dihentikan Kedua proses Message berlanjut Ac kno wledgment (b) Ketika recv() terjadi sebelum send()

Asynchronous Message Passing Rutin yang tidak menunggu sampai selesai sebelum kembali. Biasanya membutuhkan local storage untuk message. Lebih dari 1 versi bergantung pada semantik yang sebenarnya sebelum kembali. Pada umumnya, proses tidak disinkronisasi tetapi dimungkinkan berlanjut lebih cepat. Cara ini harus digunakan dengan hati-hati.

Definisi MPI untuk Blocking dan Non-Blocking Blocking – kembali setelah local actions selesai, walalupun message transfer mungkin belum selesai. Non-blocking – segera kembali. Mengasumsikan bahwa data storage yang digunakan untuk transfer tidak dimodifikasi oleh statement berikutnya. Hal ini harus dipastikan oleh programmer. Istilah-istilah ini bisa memiliki interpretasi yang berbeda pada sistem lain.

Bagaimana rutin message-passing kembali sebelum message transfer selesai Dibutuhkan message buffer antara sumber (source) dan tujuan (destination) untuk menyimpan message: Proses 1 Proses 2 Message b uff er Waktu send(); Proses recv(); dilanjutkan Baca message b uff er

Asynchronous (blocking) routines berubah menjadi synchronous routines Setelah local actions selesai dan message terkirim, proses pengirim bisa melanjutkan pekerjaan berikutnya. Ukuran buffer terbatas dan bisa terjadi keadaan ketika rutin send tertahan karena ruang buffer penuh. Kemudian, rutin send akan menunggu sampai storage tersedia kembali – yaitu, rutin ini berlaku seperti rutin synchronous.

Message Tag Digunakan untuk membedakan antara berbagai tipe message yang dikirim. Message tag dibawa di dalam message. Jika tidak diperlukan type matching, digunakan wild card message tag, sehingga recv() akan sesuai dengan send() yang manapun.

Contoh Message Tag Untuk mengirim message, x, dengan message tag 5 dari proses sumber, 1, ke proses tujuan, 2, dan assign ke y: Proses 1 Proses 2 x y Perpindahan send(&x,2, 5 ); data recv(&y,1, 5 ); Menunggu message dari proses 1 dengan tag 5

“Group” message passing routines Rutin yang mengirim message ke sekelompok proses atau menerima message dari satu kelompok proses. Memiliki efisiensi yang lebih tinggi dari rutin point-to- point yang terpisah, walaupun tidak benar-benar penting.

Broadcast Mengirim message yang sama ke semua proses yang berhubungan dengan masalah yang sedang diselesaikan. Multicast – mengirim message yang sama ke sekelompok proses tertentu. Proses 0 Proses 1 Proses p - 1 data data data Action buf bcast(); bcast(); bcast(); Code MPI f or m

Scatter Mengirim setiap elemen arry di proses root ke proses yang terpisah. Isi lokasi ke-i dikirim ke proses ke-i. Proses 0 Proses 1 Proses p - 1 data data data Action buf scatter(); scatter(); scatter(); Code MPI f or m

Gather Satu proses mengumpulkan nilai-nilai individu dari satu kelompok proses. Proses 0 Proses 1 Proses p - 1 data data data Action buf gather(); gather(); gather(); Code MPI f or m

Reduce Operasi Gather dikombinasikan dengan operasi aritmetik/logika. Contoh: Nilai-nilan dapat dikumpulkan dan kemudian dijumlahkan oleh root: Proses 0 Proses 1 Proses p - 1 data data data Action buf + reduce(); reduce(); reduce(); Code MPI f or m

PVM (Parallel Virtual Machine) Mungkin merupakan usaha pertama yang diadopsi secara luas dalam menggunakan workstation cluster sebagai multicomputer platform, dikembangkan oleh Oak Ridge National Laboratories. Tersedia gratis. Programmer membagi program menjadi program-program terpisah (biasanya master dan sekelompok program slave yang identik). Program di-compile untuk dieksekusi oleh jenis komputer tertentu. Kelompok komputer yang digunakan untuk menyelesaikan masalah harus didefinisikan dahulu sebelum mengeksekusi program (dalam suatu hostfile).

Message routing antar komputer yang dilakukan oleh PVM daemon processes yang diinstal oleh PVM pda komputer yang membentuk virtual machine. W or kstation PVM Bisa lebih dari satu proses daemon berjalan pada tiap komputer . Program aplikasi r (e x ecutab le) Messages sent through W or kstation netw or k W or kstation PVM daemon Program PVM aplikasi daemon (e x ecutab le) Program aplikasi r (e x ecutab le) Implementasi MPI yang digunakan hampir sama .

MPI (Message Passing Interface) Message passing library standard dikembangkan oleh sekelompok akademisi dan partner industri untuk menyesuaikan dengan penggunaan yang lebih luas dan portabilitas. Mendefinisikan rutin, bukan implementasi. Tersedia beberapa implementasi gratis.

MPI Process Creation and Execution Sengaja tidak didefinisikan – akan bergantung pada implementasi. Hanya static process creation yang didukung oleh MPI version 1. Semua proses harus didefinisikan sebelum eksekusi dan dimulai bersama-sama. Awalnya merupakan model komputasi SPMD. MPMD juga bisa dengan static creation – setiap program yang akan dimulai bersama harus dispesifikasi.

Communicator Mendefinisikan cakupan operasi komunikasi. Proses memiliki peringkat yang berhubungan dengan communicator. Pada awalnya, semua proses terdaftar dalam “universe” yang disebut MPI_COMM_WORLD, dan setiap proses diberi peringkat yang unik, berupa angka dari 0 sampai p - 1, dengan p proses. Communicator lain dapat ditentukan untuk kelompok proses.

Menggunakan Model Komputasi SPMD main (int argc, char *argv[]) { MPI_Init(&argc, &argv); . MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /*find process rank */ if (myrank == 0) master(); else slave(); MPI_Finalize(); } di mana master() akan dieksekusi oleh proses master dan slave() dieksekusi oleh proses slave process.

Unsafe message passing - Contoh Proses 0 Proses 1 Tujuan send(…,1,…); lib() send(…,1,…); Sumber (a) Yang diinginkan recv(…,0,…); lib() recv(…,0,…); Proses 0 Proses 1 send(…,1,…); lib() send(…,1,…); (b) Yang bisa terjadi recv(…,0,…); lib() recv(…,0,…);

Solusi MPI “Communicator” Mendefinisikan domain komunikasi – satu set proses yang boleh berkomunikasi antar mereka sendiri. Domain komunikasi library dapat dipisahkan dari domain komunikasi program user. Digunakan dalam point-to-point dan komunikasi MPI message-passing kolektif.

Default Communicator MPI_COMM_WORLD Merupakan communicator pertama untuk semua proses pada aplikasi. Tersedia satu set rutin MPI untuk membentuk communicator. Proses memiliki “peringkat (rank)” pada communicator.

Komunikasi MPI Point-to-Point Menggunakan rutin send dan receive dengan message tags (dan communicator). Tersedia wild card message tag.

MPI Blocking Routines Kembali (return) ketika “locally complete” - ketika lokasi yang digunakan untuk menyimpan message dapat dipakai kembali atau diubah tanpa mempengaruhi message yang dikirim. Blocking send akan mengirim message dan kembali – tidak berarti bahwa message telah diterima, hanya bahwa proses tersebut bebas untuk lanjut tanpa mempengaruhi message.

Parameter blocking send MPI_Send(buf, count, datatype, dest, tag, comm) Alamat Tipe data Message tag send buffer setiap item Jumlah item Peringkat proses Comm unicator Yang akan dikirim tujuan

Parameter blocking receive MPI_Recv(buf, count, datatype, src, tag, comm, status) Status Alamat Tipe data Message tag setelah operasi receive buffer Setiap item Jumlah maksimum Peringkat proses Comm unicator Item yang akan diterima sumber

Contoh Untuk mengirim integer x dari proses 0 ke proses 1, MPI_Comm_rank(MPI_COMM_WORLD,&myrank); /* find rank */ if (myrank == 0) { int x; MPI_Send(&x, 1, MPI_INT, 1, msgtag, MPI_COMM_WORLD); } else if (myrank == 1) { MPI_Recv(&x, 1, MPI_INT, 0,msgtag,MPI_COMM_WORLD,status); }

MPI Nonblocking Routines Nonblocking send - MPI_Isend() - akan “langsung” kembali bahkan sebelum lokasi sumber aman untuk diubah. Nonblocking receive - MPI_Irecv() - akan kembali bahkan jika tidak ada message yang akan diterima.

Format Nonblocking Routine MPI_Isend(buf,count,datatype,dest,tag,comm,request) MPI_Irecv(buf,count,datatype,source,tag,comm, request) Kondisi selesai dideteksi oleh MPI_Wait() dan MPI_Test(). MPI_Wait() menunggu setelah operasi selesai dan kemudian kembali. MPI_Test() kembali dengan flag yang sudah 'set', menunjukkan apakah operasi telah selesai pada saat itu. Perlu mengetahui apakah suatu operasi tertentu telah selesai. Ditentukan dengan mengakses parameter request.

Contoh Untuk mengirim integer x dari proses 0 ke proses 1 dan memungkinkan proses 0 berlanjut, MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* find rank */ if (myrank == 0) { int x; MPI_Isend(&x,1,MPI_INT, 1, msgtag, MPI_COMM_WORLD, req1); compute(); MPI_Wait(req1, status); } else if (myrank == 1) { MPI_Recv(&x,1,MPI_INT,0,msgtag, MPI_COMM_WORLD, status); }

Mode Komunikasi Send Standard Mode Send - Tidak mengasumsikan bahwa rutin receive yang menjadi pasangannya telah mulai. Jumlah buffer tidak didefinisikan oleh MPI. Jika disediakan buffering, send dapat selesai sebelum receive dicapai. Buffered Mode - Send bisa mulai dan kembalisebelum receive yang menjadi pasangannya. Perlu dispesifikasi ruang buffer melalui rutin MPI_Buffer_attach(). Synchronous Mode - Send dan receive bisa mulai sebelum pasangannya tetapi hanya bisa selesai jika pasangannya sudah ada. Ready Mode - Send hanya bisa mulai jika receive yang menjadi pasangannya telah dicapai, jika tidak, akan terjadi kondisi error. Gunakan dengan hati-hati.

Keempat mode tersebut dapat diterapkan pada rutin send blocking maupun nonblocking. Hanya tersedia standard mode untuk rutin receive blocking dan nonblocking. Semua tipe rutin send dapat digunakan dengan rutin receive yang manapun.

Komunikasi Kolektif Melibatkan satu set proses, didefinisikan oleh intra-communicator. Tidak ada message tag. Operasi kolektif yang penting: MPI_Bcast() - Broadcast dari root ke semua proses lain MPI_Gather() - Mengumpulkan nilai sekelompok proses MPI_Scatter() - Membagi bagian buffer ke sekelompok proses MPI_Alltoall() - Mengirim data dari semua proses ke semua proses MPI_Reduce() - Menggabungkan nilai dari semua proses menjadi satu nilai MPI_Reduce_scatter() - Menggabungkan nilai dan menyebarkan hasilnya MPI_Scan() - Menghitung reduksi prefiks data pada proses

Contoh Mengumpulkan item dari kelompok proses ke dalam proses 0, dengan menggunakan dynamically allocated memory dalam proses root: int data[10]; /*data yang akan dikumpulkan dari proses-proses*/ MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* find rank */ if (myrank == 0) { MPI_Comm_size(MPI_COMM_WORLD, &grp_size); /*find group size*/ buf = (int *)malloc(grp_size*10*sizeof (int)); /*allocate memory*/ } MPI_Gather(data,10,MPI_INT,buf,grp_size*10,MPI_INT,0,MPI_COMM_WORLD) ; MPI_Gather() mengumpulkan dari semua proses, termasuk root.

Barrier routine Suatu cara sinkronisasi proses dengan menghentikan masing-masingnya hingga mencapai “barrier” call yang spesifik.

Contoh program MPI #include “mpi.h” #include <stdio.h> #include <math.h> #define MAXSIZE 1000 void main(int argc, char *argv) { int myid, numprocs; int data[MAXSIZE], i, x, low, high, myresult, result; char fn[255]; char *fp; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); if (myid == 0) { /* Open input file and initialize data */ strcpy(fn,getenv(“HOME”)); strcat(fn,”/MPI/rand_data.txt”); if ((fp = fopen(fn,”r”)) == NULL) { printf(“Can’t open the input file: %s\n\n”, fn); exit(1); } for(i = 0; i < MAXSIZE; i++) fscanf(fp,”%d”, &data[i]); MPI_Bcast(data, MAXSIZE, MPI_INT, 0, MPI_COMM_WORLD); /* broadcast data */ x = n/nproc; /* Add my portion Of data */ low = myid * x; high = low + x; for(i = low; i < high; i++) myresult += data[i]; printf(“I got %d from %d\n”, myresult, myid); /* Compute global sum */ MPI_Reduce(&myresult, &result, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); if (myid == 0) printf(“The sum is %d.\n”, result); MPI_Finalize(); Contoh program MPI

Evaluasi Program Paralel

Waktu eksekusi sekuensial, ts: di-estimasi dengan menghitung langkah komputasi dari algoritma sekuensial yang terbaik. Waktu eksekusi paralel, tp: Selain jumlah langkah komputasi, tcomp, perlu diestimasi communication overhead, tcomm: tp = tcomp + tcomm

tcomp = tcomp1 + tcomp2 + tcomp3 + … Waktu Komputasi Hitung jumlah langkah komputasi. Jika ada lebih dari satu proses yang dieksekusi secara simultan, hitung jumlah langkah komputasi proses yang paling kompleks. Umumnya, merupakan fungsi dari n dan p, yaitu tcomp = f (n, p) Waktu komputasi seringkali harus dibagi, sehingga tcomp = tcomp1 + tcomp2 + tcomp3 + … Analisis biasanya dilakukan dengan mengasumsikan bahwa semua prosesor sama dan beroperasi dengan kecepatan yang sama.

tcomm = tstartup + ntdata Waktu Komunikasi Ditentukan oleh banyak faktor, termasuk struktur jaringan dan aturan jaringan. Many factors, including network structure and network contention. Sebagai aproksimasi pertama, gunakan tcomm = tstartup + ntdata tstartup adalah waktu startup, yaitu waktu mengirim message tanpa data. Diasumsikan konstan. tdata merupakan waktu transmisi satu word data, juga diasumsikan konstan, dan ada n word data.

Waktu Komunikasi yang Ideal Waktu Startup Jumlah item data(n)

Waktu komunikasi final, tcomm Merupakan jumlah waktu komunikasi semua message sekuensial dari suatu proses, yaitu tcomm = tcomm1 + tcomm2 + tcomm3 + … Pola komunikasi semua proses diasumsikan sama dan berlangsung pada saat yang sama sehingga hanya satu proses yang perlu diperhitungkan. tstartup dan tdata diukur dalam satuan satu langkah komputasi, sehingga tcomp and tcomm bisa dijumlahkan untuk mendapat waktu eksekusi paralel, tp.

Faktor Benchmark Dengan ts, tcomp, and tcomm, dapat ditentukan faktor speedup dan rasio komputasi/komunikasi ratio untuk suatu algoritma/implementasi tertentu: Keduanya merupakan fungsi jumlah prosesor, p, dan jumlah elemen data, n.

Faktor memberikan indikasi skalabilitas solusi paralel dengan bertambahnya jumlah prosesor dan ukuran masalah. Rasio komputasi/komunikasi akan akan memberi gambaran efek komunikasi dengan bertambahnya ukuran masalah dan ukuran sistem.

Debug/Evaluasi Program Paralel Secara Empiris

Visualization Tools Program dapat diawasi sementara dieksekusi dengan diagram ruang-waktu (atau diagram proses-waktu): Proses 1 Proses 2 Proses 3 Computing Waktu W aiting Message-passing system routine Message

Implementasi visualization tools tersedia untuk MPI. Satu contoh adalah sistem visualisasi program Upshot.

Evaluasi Programs secara Empiris Mengukur Waktu Eksekusi Untuk mengukur waktu eksekusi antara point L1 dan point L2 pada code, bisa dipakai konstruksi seperti: . L1: time(&t1); /* start timer */ L2: time(&t2); /* stop timer */ elapsed_time = difftime(t2, t1); /* elapsed_time = t2 - t1 */ printf(“Elapsed time = %5.2f seconds”, elapsed_time); MPI menyediakan rutin MPI_Wtime() untuk memebri informasi waktu (dalam detik).

Parallel Programming Home Page http://www.cs.uncc.edu/par_prog Memberikan instruksi step-by-step untuk compile dan eksekusi, dan informasi lain.

Kompilasi/Eksekusi Program MPI Pendahuluan Set up paths Buat struktur direktori yang dibutuhkan Buat file (hostfile) listing machines untuk digunakan (required) Rincian dijelaskan pada home page.

Hostfile Contoh hostfile Sebelum memulai MPI untuk pertama kali, perlu dibuat hostfile Contoh hostfile ws404 #is-sm1 //Currently not executing, commented pvm1 //Active processors, UNCC sun cluster called pvm1 - pvm8 pvm2 pvm3 pvm4 pvm5 pvm6 pvm7 pvm8

Kompilasi/eksekusi program MPI (SPMD) Untuk LAM MPI versi 6.5.2. Pada command line: Untuk memulai MPI: Pertama kali: lamboot -v hostfile Berikutnya: lamboot Untuk compile program MPI: mpicc -o file file.c atau mpiCC -o file file.cpp Untuk eksekusi program MPI: mpirun -v -np no_processors file Untuk remove proses untuk reboot lamclean -v Terminate LAM lamhalt Jika gagal wipe -v lamhost

Kompilasi/Eksekusi Multiple MPI Programs Buat file untuk spesifiikasi program: Contoh 1 master dan 2 slave, “appfile” berisi n0 master n0-1 slave Untuk eksekusi: mpirun -v appfile Sample output 3292 master running on n0 (o) 3296 slave running on n0 (o) 412 slave running on n1