Chapter 2 MessagePassing Computing MessagePassing Programming menggunakan Userlevel

  • Slides: 59
Download presentation
Chapter 2 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

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 file Compile untuk menyesuaikan Dengan prosesor Executable

Model Multiple program, multiple data (MPMD) Source file 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

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 file Basic MPI w ay Compile untuk menyesuaikan dengan prosesor Executab les Prosesor 0 Prosesor p - 1

Model Multiple Program Multiple Data (MPMD) Program yang berbeda untuk setiap prosesor. Satu prosesor

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 spawn(); Waktu Mulai eksekusi proses 2 Proses 2

Basic “point-to-point” Send and Receive Routines Passing message antar proseses dengan menggunakan send() and

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

Synchronous Message Passing Rutin yang benar-benar kembali ketika message transfer selesai. Synchronous send routine

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 Waktu Proses dihentikan send();

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

Asynchronous Message Passing • Rutin yang tidak menunggu sampai selesai sebelum kembali. Biasanya membutuhkan

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

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)

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

Asynchronous (blocking) routines berubah menjadi synchronous routines • Setelah local actions selesai dan message

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

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,

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 send(&x, 2, y Perpindahan 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

“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-topoint yang terpisah, walaupun tidak benar-benar penting.

Broadcast Mengirim message yang sama ke semua proses yang berhubungan dengan masalah yang sedang

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 data Proses 1 data Proses p- 1 data Action buf Code MPI for m bcast();

Scatter Mengirim setiap elemen arry di proses root ke proses yang terpisah. Isi lokasi

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

Gather Satu proses mengumpulkan nilai-nilai individu dari satu kelompok proses. Proses 0 Proses 1

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

Reduce Operasi Gather dikombinasikan dengan operasi aritmetik/logika. Contoh: Nilai-nilan dapat dikumpulkan dan kemudian dijumlahkan

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

PVM (Parallel Virtual Machine) Mungkin merupakan usaha pertama yang diadopsi secara luas dalam menggunakan

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

Message routing antar komputer yang dilakukan oleh PVM daemon processes yang diinstal oleh PVM

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

MPI (Message Passing Interface) • Message passing library standard dikembangkan oleh sekelompok akademisi dan

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.

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.

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

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

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

Solusi MPI “Communicator” • Mendefinisikan domain komunikasi – satu set proses yang boleh berkomunikasi

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

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

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

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 send buffer Tipe data

Parameter blocking send MPI_Send(buf, count, datatype, dest, tag, comm) Alamat send buffer Tipe data Message tag 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

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); /*

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

MPI Nonblocking Routines • Nonblocking send - MPI_Isend() - akan “langsung” kembali bahkan sebelum

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,

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

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, req 1); compute(); MPI_Wait(req 1, status); } else if (myrank == 1) { int x; MPI_Recv(&x, 1, MPI_INT, 0, msgtag, MPI_COMM_WORLD, status); }

Mode Komunikasi Send • Standard Mode Send - Tidak mengasumsikan bahwa rutin receive yang

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

• 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

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

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

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

#include “mpi. h” #include <stdio. h> #include <math. h> #define MAXSIZE 1000 void main(int

#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: %snn”, 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 %dn”, 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

Evaluasi Program Paralel

Waktu eksekusi sekuensial, ts: di-estimasi dengan menghitung langkah komputasi dari algoritma sekuensial yang terbaik.

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

Waktu Komputasi Hitung jumlah langkah komputasi. Jika ada lebih dari satu proses yang dieksekusi

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 = tcomp 1 + tcomp 2 + tcomp 3 + … Analisis biasanya dilakukan dengan mengasumsikan bahwa semua prosesor sama dan beroperasi dengan kecepatan yang sama.

Waktu Komunikasi Ditentukan oleh banyak faktor, termasuk struktur jaringan dan aturan jaringan. Many factors,

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 yang Ideal Waktu Startup Jumlah item data(n)

Waktu komunikasi final, tcomm Merupakan jumlah waktu komunikasi semua message sekuensial dari suatu proses,

Waktu komunikasi final, tcomm Merupakan jumlah waktu komunikasi semua message sekuensial dari suatu proses, yaitu tcomm = tcomm 1 + tcomm 2 + tcomm 3 + … 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

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

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

Debug/Evaluasi Program Paralel Secara Empiris

Debug/Evaluasi Program Paralel Secara Empiris

Visualization Tools Program dapat diawasi sementara dieksekusi dengan diagram ruang-waktu (atau diagram proses-waktu): Proses

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

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

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 L

Evaluasi Programs secara Empiris Mengukur Waktu Eksekusi Untuk mengukur waktu eksekusi antara point L 1 dan point L 2 pada code, bisa dipakai konstruksi seperti: . L 1: time(&t 1); /* start timer */. . L 2: time(&t 2); /* stop timer */. elapsed_time = difftime(t 2, t 1); /* elapsed_time = t 2 - t 1 */ printf(“Elapsed time = %5. 2 f 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

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

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 Sebelum memulai MPI untuk pertama kali, perlu dibuat hostfile Contoh hostfile ws 404

Hostfile Sebelum memulai MPI untuk pertama kali, perlu dibuat hostfile Contoh hostfile ws 404 #is-sm 1 //Currently not executing, commented pvm 1 //Active processors, UNCC sun cluster called pvm 1 - pvm 8 pvm 2 pvm 3 pvm 4 pvm 5 pvm 6 pvm 7 pvm 8

Kompilasi/eksekusi program MPI (SPMD) Untuk LAM MPI versi 6. 5. 2. Pada command line:

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. c atau mpi. CC -o 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

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