Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Message-Passing Computing

Presentasi serupa


Presentasi berjudul: "Message-Passing Computing"— Transcript presentasi:

1 Message-Passing Computing
Chapter 2 Message-Passing Computing

2 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

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

4 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

5 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

6 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)

7 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.

8 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()

9 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.

10 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.

11 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

12 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.

13 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.

14 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

15 “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.

16 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

17 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

18 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

19 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

20 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).

21 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 .

22 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.

23 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.

24 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.

25 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.

26 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,…);

27 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.

28 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.

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

30 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.

31 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

32 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

33 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); }

34 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.

35 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.

36 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); }

37 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.

38 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.

39 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

40 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.

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

42 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

43 Evaluasi Program Paralel

44 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

45 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.

46 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.

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

48 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.

49 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.

50 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.

51 Debug/Evaluasi Program Paralel Secara Empiris

52 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

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

54 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).

55 Parallel Programming Home Page
Memberikan instruksi step-by-step untuk compile dan eksekusi, dan informasi lain.

56 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.

57 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

58 Kompilasi/eksekusi program MPI (SPMD)
Untuk LAM MPI versi 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

59 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


Download ppt "Message-Passing Computing"

Presentasi serupa


Iklan oleh Google