Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Message-Passing Computing Chapter 2. Message-Passing Programming menggunakan User-level Message-Passing Libraries Diperlukan dua mekanisme utama: 1.Metode.

Presentasi serupa


Presentasi berjudul: "Message-Passing Computing Chapter 2. Message-Passing Programming menggunakan User-level Message-Passing Libraries Diperlukan dua mekanisme utama: 1.Metode."— Transcript presentasi:

1 Message-Passing Computing Chapter 2

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 file Executable Prosesor 0 Prosesor p - 1 Compile untuk menyesuaikan Dengan prosesor Source file

4 Model Single Program Multiple Data (SPMD). Source file Executables Prosesor 0Prosesorp - 1 Compile untuk menyesuaikan dengan prosesor Basic MPI way 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

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

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

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 1Proses 2 send(); recv(); Proses dihentikan Waktu Acknowledgment Message Kedua proses berlanjut (a) Ketika send() terjadi sebelum recv() Proses 1Proses 2 recv(); send(); Proses Waktu dihentikan Acknowledgment Message Kedua proses berlanjut (b) Ketika recv() terjadi sebelum send() Request to 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 Proses 1Proses 2 send(); recv(); Message buffer Baca message buffer Proses dilanjutkan Waktu Dibutuhkan message buffer antara sumber (source) dan tujuan (destination) untuk menyimpan message:

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 Proses 1Proses 2 send(&x,2,5); recv(&y,1,5); xy Perpindahan data Menunggu message dari proses 1 dengan tag 5 Untuk mengirim message, x, dengan message tag 5 dari proses sumber, 1, ke proses tujuan, 2, dan assign ke y:

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. bcast(); buf bcast(); data bcast(); data Proses 0Prosesp - 1Proses 1 Action Code MPI form

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

18 Gather gather(); buf gather(); data gather(); data Proses 0Prosesp - 1Proses 1 Action Code MPI form Satu proses mengumpulkan nilai-nilai individu dari satu kelompok proses.

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

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. PVM Program daemon aplikasi Workstation PVM daemon Program aplikasir Program aplikasir PVM daemon Workstation Workstation Messages sent through network (executable) (executable) (executable) Implementasi MPI yang digunakan hampir sama. Bisa lebih dari satu proses berjalan pada tiap komputer.

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 lib() send(…,1,…); recv(…,0,…); Proses 0Proses 1 send(…,1,…); recv(…,0,…); (a) Yang diinginkan (b) Yang bisa terjadi lib() send(…,1,…); recv(…,0,…); Proses 0Proses 1 send(…,1,…); recv(…,0,…); Tujuan Sumber

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 Jumlah item Tipe data Peringkat proses Message tag Communicator send buffer Yang akan dikirim setiap item tujuan

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

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) { int x; 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) { int x; 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 #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(); }

43 Evaluasi Program Paralel

44 Waktu eksekusi sekuensial, t s : di-estimasi dengan menghitung langkah komputasi dari algoritma sekuensial yang terbaik. Waktu eksekusi paralel, t p : Selain jumlah langkah komputasi, t comp, perlu diestimasi communication overhead, t comm : t p = t comp + t comm

45 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 t comp = f (n, p) Waktu komputasi seringkali harus dibagi, sehingga t comp = t comp1 + t comp2 + t comp3 + … Analisis biasanya dilakukan dengan mengasumsikan bahwa semua prosesor sama dan beroperasi dengan kecepatan yang sama.

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

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

48 Waktu komunikasi final, t comm Merupakan jumlah waktu komunikasi semua message sekuensial dari suatu proses, yaitu t comm = t comm1 + t comm2 + t comm3 + … Pola komunikasi semua proses diasumsikan sama dan berlangsung pada saat yang sama sehingga hanya satu proses yang perlu diperhitungkan. t startup dan t data diukur dalam satuan satu langkah komputasi, sehingga t comp and t comm bisa dijumlahkan untuk mendapat waktu eksekusi paralel, t p.

49 Faktor Benchmark Dengan t s, t comp, and t comm, 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 Waktu Computing Waiting 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 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 Chapter 2. Message-Passing Programming menggunakan User-level Message-Passing Libraries Diperlukan dua mekanisme utama: 1.Metode."

Presentasi serupa


Iklan oleh Google