SlideShare a Scribd company logo
1 of 24
Download to read offline
PARALLEL PROCESSING dengan MESSAGE
PASSING INTERFACE (MPI)
7 Mei 2007
Tonny Kusdarwanto [2203 100 030]
Dwi Joko Susilo [2204 100 164]
1
Daftar Isi
1 Pendahuluan 3
1.1 The Message Passing Model . . . . . . . . . . . . . . . . . . . . 3
1.2 Penggunaan MPI . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Fitur dasar dari program-program Message Passing . . . . . . . . 3
2 Implementasi Sistem 4
2.1 Kebutuhan Sistem . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Instalasi Paket . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Kongurasi : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3.1 LAM/MPI . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3.2 SSH ( Secure Shell ) . . . . . . . . . . . . . . . . . . . . . 6
2.3.3 NFS (Netwok File System) . . . . . . . . . . . . . . . . . 7
2.4 Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3 Percobaan-percobaan 8
3.1 Memulai LAM/MPI . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2 Meng-compile dan menjalankan program parallel dengan MPI . . 10
3.2.1 Mengkompile Program parallel dengan MPI . . . . . . . . 10
3.2.2 Menjalankan MPI . . . . . . . . . . . . . . . . . . . . . . 10
3.3 Pemrograman Parallel dengan MPI . . . . . . . . . . . . . . . . . 11
3.3.1 Communicator . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3.2 Point-to-Point Communications and Messages . . . . . . . 13
3.3.3 Collective Communication . . . . . . . . . . . . . . . . . . 16
3.4 Reduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.5 Gather . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.6 Scatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2
1 Pendahuluan
Salah satu metode pemrograman yang digunakan untuk komputasi parallel
adalah dengan menggunakan library-library dari message passing. Library-
library ini mengatur transfer data antar instan-instan program parallel yang
biasanya berjalan pada multi prosessor dalam arsitektur komputasi parallel.
1.1 The Message Passing Model
Message Passing Interface (MPI) merupakan implementasi standar dari model
message passing komputasi parallel.
Sebuah komputasi parallel terdiri dari sejumlah proses, dimana masing-
masing bekerja pada beberapa data lokal. Setiap prsoses mempunyai variabel
lokal, dan tidak ada mekanisme suatu proses yang bisa mengakses secara lang-
sung memori yang lain.
Sharing data antar proses-proses dilakukan dengan message passing., yaitu
dengan mengirim dan menerima message antar proses-proses. Alasan menggu-
nakan model ini sudah sangat umum. Dan tipe komputasi parallel dapat dibuat
dalam bentuk message passing. Model ini juga dapat diimplementasikan pa-
da bermacam-macam platform, seperti shared-memory multiprocessors maupun
single processor.
1.2 Penggunaan MPI
MPI perlu digunakan ketika kita menginginkan :
1. Menulis kode parallel yang portable
2. Mendapatkan performa yang tinggi dalam pemrograman parallel
3. Menghadapi permasalahan yang melibatkan hubungan data irregular atau
dinamis yang tidak begitu cocok dengan model data-parallel.
1.3 Fitur dasar dari program-program Message Passing
Program message passing terdiri dari multiple instan dari program serial yang
berkomunikasi dengan pemanggilan library. Pemanggilan ini dapat dibagi men-
jadi empat kelas :
1. Pemanggilan untuk inisialisasi, mengatur, dan memutuskan komunikasi.
2. Pemanggilan untuk mengkomunikasikan beberapa pasang prosesor.
3. Pemanggilan yang mewujudkan operasi-operasi komunikasi diantara kelompok-
kelompok prosesor.
4. Pemanggilan untuk membuat tipe data acak (arbitrary)
3
Kelas pertama dari pemanggilan terdiri dari pemanggilan-pemanggilan untuk
memulai komunikasi, mengidentikasi jumlah prosesor yang sedang digunakan,
membuat subgrup dari prosesor-prosesor dan mengidentikasi prosesor mana
yang sedang menjalankan instan khusus dari program.
Kelas kedua dari pemanggilan, dinamakan komunikasi point-to-point, terdiri
atas tipe pengiriman dan penerimaan yang berbeda.
Kelas ketiga dari pemanggilan adalah operasi kolektif yang memberikan
sinkronisasi antar grup proses dan pemanggilan yang melakukan operasi ko-
munikasi/kalkulasi.
Kelas terakhir dari pemanggilan memberikan eksibilitas dalam berurusan
dengan struktur data yang rumit.
2 Implementasi Sistem
2.1 Kebutuhan Sistem
Dalam implementasi LAM/MPI yang kami lakukan di sini menggunakan 4 buah
komputer yagn terhubung dengan LAN dengan spesikasi sebagai berikut :
Tabel 1: Resource Komputer
Node 0 (induk) Node 1 (anak) Node 2 (anak) Node 3 (anak)
IP Address 10.122.67.8 10.122.67.5 10.122.67.7 10.122.67.9
Prosesor Pentium IV 2.4 GHz Pentium IV 2.4 GHz Pentium IV 2.4 GHz Pentium IV 2.4 GHz
Memori 512 MB 512 MB 512 MB 512 MB
Sistem Operasi Debian Etch Debian Etch Ubuntu Edgy Debian Etch
Kernel 2.6.18 2.6.18 2.6.18 2.6.18
Topologi jaringan yang dipakai adalah star. Desainnya adalah sebagai berikut:
Gambar 1: Desain jaringan
4
2.2 Instalasi Paket
Paket-paket yang dibutuhkan untuk mengimplementasikan LAM/MPI ini an-
tara lain :
1. Paket-paket LAM/MPI yang terdiri dari :
(a) lam4c2
(b) lam-runtime
(c) lam4-dev
2. Paket-paket SSH yang terdiri dari :
(a) openssh-server
(b) openssh-client
3. Paket-paket NFS (Network File System) yang terdiri dari :
(a) nfs-common
(b) nfs-kernel-server
2.3 Kongurasi :
2.3.1 LAM/MPI
Booting LAM
Sebelum program mpi dijalankan, LAM runtime environment harus dijalankan.
Hal ini biasa disebut booting LAM. Proses booting yang sukses akan membuat
instan dari LAM runtime environment yang biasa disebut dengan LAM uni-
verse.
Untuk booting LAM, pada cluster of workstation dibutuhkan remote shell,
seperti rsh dan ssh, yang digunakan untuk mengeksekusi lamd (lam daemon),
dan program pada workstation.
Ketika menggunakan remote shell, le boot schema diperlukan sebagai daftar
dari komputer sebagai node yang akan dijalankan LAM runtime. Nama lain
dari bootschema adalah host le atau machine le. Contoh isi dari bootschema
adalah
Kode 1 Kongurasi le bootschema
# My Boot Schema
10.122.67.8
10.122.67.5
10.122.67.7
10.122.67.9
File bootschema ini secara default berada di /etc/lam/bhost.def , namun
apabila setiap user ingin memiliki kongurasi node-node yang berbeda bisa
membuat le bootschema sendiri.
5
2.3.2 SSH ( Secure Shell )
SSH (Secure Shell) merupakan sebuah program untuk untuk login ke remote
machine dan mengeksekusi perintah-perintah di remote machine. Ssh mem-
berikan komunikasi terenkripsi yang aman antara dua untrusted hosts dalam
sebuah jaringan yan tidak secure. SSH ditujukan sebagai pengganti rlogin, rsh,
rcp dan dapat digunakan untuk memberikan kanal komunikasi yang aman untuk
aplikasi-aplikasi.
Dalam LAM/MPI SSH diperlukan untuk membuat node master dapat me-
remote node slave tanpa menggunakan password. Node master me-remote node
slave untu menjalankan lamd, dan menjalankan program MPI non interactively,
sehingga tujuan dari portabilitas standar MPI dapat tercapai.
Sebelumnya servis SSH pada node slave harus distart terlebih dahulu:
Kode 2 Perintah menjalankan server SSH
# /etc/init.d/ssh start
Kemudian membuat RSA-key pada node master, dengan cara :
Kode 3 Kongurasi membuat RSA-key
sasuke@debian8:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/sasuke/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sasuke/.ssh/id_rsa.
Your public key has been saved in /home/sasuke/.ssh/id_rsa.pub.
The key fingerprint is:
7a:43:03:53:73:0e:a1:8e:47:66:40:4d:f5:3b:32:a6 sasuke@debian8
Untuk membuat node master dapat me-remote need slave tanpa password
maka passphrase pada saat pembuatan RSA-key tidak perlu diisikan seperti
pada contoh diatas.
Saat pembuatan RSA-ke, dibuat pasangan dari key , yaitu public key dan
private key, yang secara defaults diletakkan pada memory pada directory .ssh.
File id_rsa.pub adalah public key sedangkan id_rsa adalah private-key. Agar
node-master dapat login tanpa password, public-key yang sudah dibuat oleh
node master harus dimiliki oleh node slave. OpenSSH menyediakan tools untu
mengkopi public key yaitu ; ssh-copy-id.
6
Kode 4 Perintah mengkopi public-key ke node slave
sasuke@debian8:~$ ssh-copy-id -i .ssh/id_rsa.pub sasuke@10.122.67.5
15
sasuke@10.122.67.5's password:
Now try logging into the machine, with ssh 'sasuke@10.122.67.5', and
check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
Setelah mengkopi public key ke node slave, koneksi melalui ssh perlu ditest
untuk remote ke OpenSSH server yang telah menerima public-key dari node
master, dengan cara:
Kode 5 Mengetes koneksi SSH
sasuke@debian8:~$ ssh 10.122.67.5
Linux debian5 2.6.18-4-686 #1 SMP Mon Mar 26 17:17:36 UTC 2007 i686
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri May 4 18:26:59 2007 from 10.122.67.8
Test berhasil apabila node master dapat me-remote node slave tanpa ada
permintaan password.
2.3.3 NFS (Netwok File System)
Setelah berhasil menginstall dari paket nfs-kernel-server, perlu dilakukan kong-
urasi dari /etc/exports, untuk menentukan computer mana saja yang menjadi
NFS client.
Kode 6 Kongurasi /etc/exports pada node master
/home/sasuke/parallel2
10.122.67.5(rw,insecure,no_root_squash,sync,no_subtree_check)
10.122.67.7(rw,insecure,no_root_squash,sync,no_subtree_check)
10.122.67.9(rw,insecure,no_root_squash,sync,no_subtree_check)
kongurasi diatas artinya hosts yang tercantum pada /etc/exports diatas
diberi hak baca tulis, synchronous I/O , dan hak root pada NFS server dan
client sama pada saat nfs client melakukan mounting .
setelah dilakukan kongurasi NFS server dapat dijalankan dengan perintah:
Kode 7 Perintah Menjalankan NFS server
# /etc/init.d/nfs-kernel-server start
7
Kongurasi Pada Client
Untuk menggunakan servis NFS yang disediakan oleh server, maka client
hanya membutuhkan utility mount yang biasanya sudah terpasang dengan wak-
tu instalasi system Linux. Pada aplikasi ini shared storage diletakkan pada path
yang sama pada semua node dengan tujuan untuk memudahkan dalam men-
jalankan program MPI yang menggunakan model SPMD ( Single Program Mul-
tiple Data ). Direktori yang di-share akan dimount pada path /home/sasuke/parallel2.
Sehingga perlu dibuatkan direktori /home/sasuke/parallel2 apabila belum ada.
Untuk melakukan mounting secara otomatis setiap kali sistem direstart maka
le /etc/fstab perlu diedit sebagaimana berikut :
Kode 8 Kongurasi le /etc/fstab untuk mounting NFS
10.122.67.8:/home/sasuke/parallel2 /home/sasuke/parallel2 nfs defaults 0
0
selanjutnya untuk melakukan mounting nfs dari kongurasi yang ada di le
/etc/fstab digunakan perintah sbb :
Kode 9 Perintah mounting NFS
mount /home/sasuke/parallel2
Contoh diatas adalah perintah untuk melakukan mount volume /home/sasuke/parallel2
pada nfs-server 10.122..67.8 dan dimount pada directory target /home/sasuke/parallel2.
Dengan cara diatas berarti isi direktori /home/sasuke/parallel2 pada client akan
sama persis dengan direktori /home/sasuke/parallel2 pada nfs-server. Sebelum
melakukan mounting NFS harus dibuat terlebih dulu direktori /home/sasuke/parallel2.
2.4 Permissions
Permissions disini menyangkut soal hak akses terhadap le resource yang digu-
nakan. Sebelum memulai LAM/MPI harus dipastikan bahwa user yang ingin
mengakses le resource mempunyai hak akses atas le/program resource yang
ingin diproses secara parallel, yaitu le/program yang dishare dengan NFS. Pa-
da percobaan yang kami lakukan, kami menyamakan uid dan gid dari user yang
bersangkutan. Kalau hanya untuk menjalankan program yang diparallel tidak
perlu mengubah uid dan gid, cukup dengan chmod saja dengan menambahkan
option executable untuk other user.
3 Percobaan-percobaan
3.1 Memulai LAM/MPI
1. Perintah booting untuk LAM adalah dengan mengetikan lamboot pada
shell. Contohnya:
8
Kode 10 Perintah mencoba booting LAM
sasuke@debian8:~$ lamboot -v bootschema
LAM 7.1.2/MPI 2 C++/ROMIO - Indiana University
n-114131 ssi:boot:base:linear: booting n0 (10.122.67.8)
n-114131 ssi:boot:base:linear: booting n1 (10.122.67.5)
n-114131 ssi:boot:base:linear: booting n2 (10.122.67.7)
n-114131 ssi:boot:base:linear: booting n3 (10.122.67.9)
n-114131 ssi:boot:base:linear: finished
2. Untuk mengetahui berapa banyak node dan CPU pada LAM universe
adalah menggunakan perintah lamnodes pada shell
Kode 11 Perintah lamnodes
sasuke@debian8:~$ lamnodes
n0 debian8:1:origin,this_node
n1 10.122.67.5:1:
n2 10.122.67.7:1:
n3 10.122.67.9:1:
3. Perintah lamclean
Perintah lamclean secara komplit menghilangka semua proses sari program
yang berjalan pada LAM universe. Lamclean berguna jika program par-
alel mengalami crash/leave state pada LAM runtime environment. peng-
gunaan lamclean biasanya digunakan tanpa argumen:
Kode 12 Perintah lamclean
sasuke@debian8:~$ lamclean
Penggunaan lamclean biasanya dibutuhkan saat melakukan developing/debugging
dari aplikasi MPI. Sebgai contoh program yang hang, message yang ter-
sisa, dan lain-lain.
4. Shutdown LAM Universe
Setelah selesai, tidak meggunakan LAM universe lagi maka LAM universe
perlu untuk di-shutdown menggunakan perintah lamhalt.
Kode 13 Perintah lamhalt
sasuke@debian8:~$ lamhalt
5. Ada saat keadan tertentu, lamhalt gagal, sebagai contoh salah satu node
mengalami kegagalan komunikasi sehinga terjadi crash, apabila lamhalt
dipanggil maka akan terjadi timeout sehingga tidak semua node halting
LAM Universe. Pada kasus seperti ini dibutuhkan perintah lamwipe untuk
memastikan bahwa semua node halting LAM universe.
9
Kode 14 Perintah lamwipe
sasuke@debian8:~$ lamwipe -v bootschema
Dimana bootschema adalah bootschema yang sama ketika dilakukan lam-
booting.
3.2 Meng-compile dan menjalankan program parallel den-
gan MPI
3.2.1 Mengkompile Program parallel dengan MPI
Sebagai catatan untuk mengkompile program MPI tidak perlu melakukan boot-
ing LAM. Sebenarnya untuk mengkopile program MPI bisa menjdi pekerjaan
yang kompleks, LAM/MPI menyediakan wrapper untuk membuat pekejaan
mengkopile ataupun linking menjadi mudah. Wrapper ini secara otomatis menam-
bahkan ags cmpiler/linker yang dibutuhkan hubungannya dengan fungsi-fungsi
dalam MPI.
Kompiler wrapper tersebut dinamkan sebagai mpicc ( untuk program bahasa
C ) mpiCC, mpic++ ( untuk program dengan bahasa c++ ) dan mpif77 ( untuk
program dengan bahasa fortran ). Contohnya:
Kode 15 Perintah mengkompile dengan mpicc
sasuke@debian8:~$ mpicc -o outputfile inputfile.c
3.2.2 Menjalankan MPI
Setelah sukses booting LAM, mengkompile program MPI, maka program terse-
but dapat dijalankan secara paralel.
1. Perintah mpirun
Perintah mpirun mempunyai banyak options untuk menjalankan program
MPI. kegunaan utama dari mpirun adalah menjalankan progran dengan
mode SPMD( Single Program Multiple Data). Contoh yang paling seder-
hana dalam menjalankan program SPMD adalah :
Kode 16 Perintah menjalankan program secara parallel dengan mpi
sasuke@debian8:~$ mpirun N filename
Yang berarti menjalankan program lename pada semua node yang ter-
cantum pada boot schema sebanyak satu kopi untuk semua node sesuai
dengan jumlah CPU yang didenisikan pada boot schema.
2. Perintah mpiexec
MPI-2 merekomendasikan penggunaan mpiexec untuk proses startup pro-
gram yang portable. Ada beberapa options yang dimiliki mpiexec tidak
10
similiki oleh mpirun demikian juga sebaliknya. Penggunaan mpiexec di-
lakukan bila :
(a) Menjalankan program mode MPMD ( multiple program multiple da-
ta )
(b) Menjalankan program yang heterogen
(c) Menljalankan program secara one-shot yang arinya booting LAM,
menjalankan program kemudian halt LAM
Bentuk umum dari mpiexec adalah :
Kode 17 Perintah umum mpiexec
Shell$ mpiexec options perintah1 : perintah2 : .......
3. Perintah mpitask
Mpitask dapat dianalogikan seperti perintah ps pada sistem Unix base, di-
mana menunjukkan status dari mpi program yang berjalan pada LAM uni-
verse dan menunjukkan primitive informasi mengenai fungsi-fungsi MPI
yang dieksekusi jika ada. Mpitask dapat dijalankan pada semua nodes
pada LAM unverse.
3.3 Pemrograman Parallel dengan MPI
Dalam percobaan ini bahasa pemrograman yang dipakai adalah bahasa C. Pro-
gram parallel dengan MPI mempunyai struktur sebagai berikut :
Kode 18 Struktur dasar program parallel
include MPI header file
variable declarations
initialize the MPI environment
...do computation and MPI communication calls...
close MPI communications
Contoh program :
Kode 19 Program Hello World
#include stdio.h
#include mpi.h
void main (int argc, char *argv[]) {
int err;
err = MPI_Init(argc, argv);
printf(Hello world!n);
err = MPI_Finalize();
}
11
keterangan :
MPI_Init(argc, argv) merupakan rutin unutk inisialisasi program MPI yakni
membangun lingkungan MPI.
MPI_Finalize() merupakan rutin untuk mengakhiri program MPI, yakni mem-
bersihkan semua struktur data MPI, membatalkan oeprasi-operasi yang tidak selesai,
dll.
Output program :
Hello world!
Hello world!
Hello world!
Hello world!
Gambar 2: Output kode 19
Pada output program di atas terlihat bahwa program dijalankan oleh 4 pros-
essor, sehingga menghasilkan pesan Hello world! sebanyak empat kali.
3.3.1 Communicator
Commnunicator adalah handle yang merepresentasikan sebuah grup dari prosesor-
prosesor yang dapat berkomunikasi satu dengan yang lain. Prosesor-prosesor da-
pat berkomunikasi hanya jika mereka dalam communicator yang sama. dengan
communicator, prosesor-prosesor diberi nomor secara berurutan dimulai dari 0.
nomor identikasi tersebut disebut sebagai rank prosesor dalam communicator-
nya. Jika sebuah prosesor ternasuk ke dalam lebih dari satu communicator,
rank-nya bisa saja berbeda untuk tiap-tiap communicator.
MPI secara otomatis memberikan sebuah communicator dasar yaitu MPI_COMM_WORLD.
Ini merupakan communicator yang terdiri dari semua prosesor. Dengan meng-
gunakannya setiap prosesor dapat berkomunikasi dengan prosesor yang lain.
Contoh program parallel yang memanfaatkan communicator sebagai berikut
:
Kode 20 Program melihat rank dan size communicator
#include stdio.h
#includempi.h
void main (int argc, char *argv[]) {
int myrank, size;
MPI_Init(argc, argv); /* Initialize MPI */
MPI_Comm_rank(MPI_COMM_WORLD, myrank); /* Get my rank */
MPI_Comm_size(MPI_COMM_WORLD, size); /* Get the total number of
processors */
printf(Processor %d of %d: Hello World!n, myrank, size);
MPI_Finalize(); /* Terminate MPI */
}
Keterangan :
12
MPI_Comm_rank - digunakan untuk mengetahui rank dari prosesor dalam com-
municatornya
MPI_Comm_size - digunakan untuk mengetahui banyaknya prosesor yang ada
dalam communicator.
Output program :
Processor 0 of 4 : Hello World!
Processor 1 of 4 : Hello World!
Processor 2 of 4 : Hello World!
Processor 3 of 4 : Hello World!
Gambar 3: Output kode 20
3.3.2 Point-to-Point Communications and Messages
1. Blocking Communication
Operasi komunikasi yang mendasar dalam MPI adalah komunikasi point-
to-point, yang merupakan komunikasi langsung antara dua prosesor, satu
diantaranya mengirim dan satu diantaranya menerima. dalam mengirim
dan menerima, message terdiri dari envelope yang berisi source dan des-
tination processor, dan body yang berisi data sebenarnya yang dikirim.
MPI menggunakan tiga informasi pada message body nya secara eksibel,
yaitu :
(a) Buer - lokasi awal dalam memori dimana data yang akan dikirim
ditemukan atau tempat dimana data yang akan diterima disimpan.
(b) Datatype - tipe data yang akan dikirim
(c) Count - jumlah item data yang akan dikirim
Beberapa contoh fungsi dalam point-to-point communication adalah pros-
es mengirim (send) dan proses menerima (receive). Keduua fungsi terse-
but menghalangi (blocking) proses pemanggilan hingga operasi komunikasi
tersebut selesai. Blocking bisa menjadi sebab terjadinya deadlock. Dead-
lock terjadi ketika 2 atau lebih proses di-block dan tiap proses menung-
gu proses yang lain untuk membuat progress. bentuk umum dari proses
mengirim dan menerima (keduanya merupakan proses blocking) sebagai
berikut :
(a) Fungsi mengirim (send) message :
Kode 21 Fungsi mengirim (send)
int MPI_Send(void *buf, int count, MPI_Datatype dtype, int dest, int tag,
MPI_Comm comm);
13
(b) Fungsi menerima (receive) message :
Kode 22 Fungsi menerima (receive)
int MPI_Recv(void *buf, int count, MPI_Datatype dtype, int source, int
tag, MPI_Comm comm, MPI_Status *status);
Contoh program point-to-point communication sebagai berikut :
Kode 23 Program point-to-point communication
/* simple send and receive */
#include stdio.h
#include mpi.h
void main (int argc, char **argv) {
int myrank; MPI_Status status; double a[100];
MPI_Init(argc, argv); /* Initialize MPI */
MPI_Comm_rank(MPI_COMM_WORLD, myrank); /* Get rank */
if( myrank == 0 ) /* Send a message */
MPI_Send( a, 100, MPI_DOUBLE, 1, 17, MPI_COMM_WORLD );
else if( myrank == 1 ) /* Receive a message */
MPI_Recv( a, 100, MPI_DOUBLE, 0, 17, MPI_COMM_WORLD, status );
MPI_Finalize(); /* Terminate MPI */
}
Keterangan :
Dalam program ini proses 0 mengirim sebuah message ke proses 1, dan
proses 1 menerimanya.
Program di bawah ini merupakan contoh terjadinya kasus deadlock . Tidak
ada messages yang dikirim maupun messages yang diterima.
14
Kode 24 Program deadlock
/* simple deadlock */
#include stdio.h
#include mpi.h
void main (int argc, char **argv) {
int myrank;
MPI_Status status;
double a[100], b[100];
MPI_Init(argc, argv); /* Initialize MPI */
MPI_Comm_rank(MPI_COMM_WORLD, myrank); /* Get rank */
if( myrank == 0 ) { /* Receive, then send a message */
MPI_Recv( b, 100, MPI_DOUBLE, 1, 19, MPI_COMM_WORLD, status );
MPI_Send( a, 100, MPI_DOUBLE, 1, 17, MPI_COMM_WORLD ); }
else if( myrank == 1 ) {
/* Receive, then send a message */
MPI_Recv( b, 100, MPI_DOUBLE, 0, 17, MPI_COMM_WORLD, status );
MPI_Send( a, 100, MPI_DOUBLE, 0, 19, MPI_COMM_WORLD ); }
MPI_Finalize(); /* Terminate MPI */
}
2. NonBlocking Communication
MPI menyediakan cara lain untuk operasi pengiriman dan penerimaan
message. Dalam hal ini memungkinkan untuk memisahkan inisialisasi
pengiriman atau penerimaan dari proses penyelesaiannya. Pemanggilan
pertama adalah untuk inisialisasi dan pemanggilan kedua adalah menye-
lesaikannya. Pemakaian yang selektif dari rutin nonblocking memudahkan
pemrogram untuk menghindari deadlock.
Contoh program di bawah ini merupakan berpaikan dari contoh program
di atas yang memanfaatkan nonblocking communication.
15
Kode 25 Program non-blocking communication
/* deadlock avoided */
#include stdio.h
#include mpi.h
void main (int argc, char **argv) {
int myrank;
MPI_Request request;
MPI_Status status;
double a[100], b[100];
MPI_Init(argc, argv); /* Initialize MPI */
MPI_Comm_rank(MPI_COMM_WORLD, myrank); /* Get rank */
if( myrank == 0 ) {
/* Post a receive, send a message, then wait */
MPI_Irecv( b, 100, MPI_DOUBLE, 1, 19, MPI_COMM_WORLD, request );
MPI_Send( a, 100, MPI_DOUBLE, 1, 17, MPI_COMM_WORLD );
MPI_Wait( request, status );
}
else if( myrank == 1 ) {
/* Post a receive, send a message, then wait */
MPI_Irecv( b, 100, MPI_DOUBLE, 0, 17, MPI_COMM_WORLD, request
);
MPI_Send( a, 100, MPI_DOUBLE, 0, 19, MPI_COMM_WORLD );
MPI_Wait( request, status );
}
MPI_Finalize(); /* Terminate MPI */
}
Keterangan :
Proses 0 mencoba untuk melakukan pertukaran message dengan proses 1.
Setiap proses dimulai dengan mem-posting proses penerimaan message ke
proses yang lain. Kemudian setiap proses mengirim blocking message dan
mengunggu proses penerimaan yang sebelumnya di-posting hingga selesai.
3.3.3 Collective Communication
Rutin collective communication mentransmisikan data diantara senua proses
yang ada dalam sebuah grup (communicator). Hal pernting yang perlu dicatat
bahwa komunikasi ini tidak menggunakan mekanisme tag dari proses pemang-
gilan pengiriman/penerimaan. Maka dari itu user harus memastikan semua
prosesor mengeksekusi pemanggilam collective communication yang sama dan
mengeksekusinya dalam order yang sama.
1. Barrier Synchronization
Ada beberapa kasus dimana beberapa prosesor tidak dapat memproses
instruksi selanjutnya sebelum prosesor yang lain selesai menjalankan in-
struksinya saat itu. Rutin MPI_Barrier mem-blok proses pemanggilan
16
hingga semua proses yang ada dalam grup telah memanggil rutin terse-
but. syntax umum MPI_Barrier adalah sebagai berikut :
Kode 26 Fungsi Barrier
int MPI_Barrier ( MPI_Comm comm )
2. Broadcast
Rutin MPI_Bcast memungkinkan programmer untuk mengkopi data dari mem-
ori prosesor induk ke lokasi memori yang sama pada prosesor yang lain dalam
communicator.
Gambar 4: Contoh sederhana dari Broadcast
syntax:
Kode 27 Fungsi MPI_Bcast
MPI_Bcast ( send_buffer, send_count, send_type, rank, comm )
Argumen-argumen dari rutin ini adalah :
send_buer in/out alamat awal dari buer pengiriman
send_count in jumlah elemen-elemen dalam buer pegiriman
send_type in tipe data dari elemen-elemen dalam buer pengiriman
rank in rank dari proses induk
comm in mpi communicator
Kode 28 Fungsi MPI_Bcast
int MPI_Bcast ( void* buffer, int count,
MPI_Datatype datatype, int rank,
MPI_Comm comm )
Contoh program :
17
Kode 29 Program contoh MPI_Bcast
#include mpi.h
void main(int argc, char *argv[]) {
int rank;
double param;
MPI_Init(argc, argv);
MPI_Comm_rank(MPI_COMM_WORLD,rank);
if(rank==0) param=23.0;
MPI_Bcast(param,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
printf(P:%d after broadcast parameter is %f n,rank,param);
MPI_Finalize();
}
Output program:
P: 0 after broadcast param is 23.
P: 2 after broadcast param is 23.
P: 3 after broadcast param is 23.
P: 1 after broadcast param is 23.
Gambar 5: Output kode 29
3.4 Reduction
Dengan MPI_Reduce memungkinkan programmer untuk :
1. mengumpulkan data dari tiap-tiap prosesor
2. mereduksi data-data tersebut ke sebuah nilai tunggal
3. dan menyimpan hasil reduksi tersebut ke prosesor induk
18
Gambar 6: A Simple Reduction Example
syntax :
Kode 30 Fungsi reduction
MPI_Reduce( send_buffer, recv_buffer, count, data_type,
reduction_operation, rank_of_receiving_process, communicator )
The arguments for this routine are:
send_buffer in alamat dari buer pengiriman
recv_buffer out alamat dari buer penerimaan
count in banyaknya elemen-elemen dari buer pengiriman
data_type in tipe data dari elemen-elemen dalam buer pengiriman
reduction_operation in operasi reduksi yang dilakukan
rank_of_receiving_process in rank dari proses induk
comm in mpi communicator
MPI_Reduce mengkombinasikan yang ada dalam buer pengiriman, dan
melakukan operasi spesik ( seperti : sum, min, max) dan mengembalikan hasil-
nya ke buer pernerimaan pada prosesor induk.
Beberapa operasi yang tersedia dalam MPI_Reduce antara lain :
19
Tabel 2: Operasi-operasi yang tersedia dalam MPI_Reduce
Operation Description
MPI_MAX maximum
MPI_MIN minimum
MPI_SUM sum
MPI_PROD product
MPI_LAND logical and
MPI_BAND bit-wise and
MPI_LOR logical or
MPI_BOR bit-wise or
MPI_LXOR logical xor
MPI_BXOR bitwise xor
Contoh program :
Kode 31 Program MPI_Reduce
#include stdio.h
#include mpi.h
void main(int argc, char *argv[])
{
int rank;
int source,result,root;
/* run on 4 processors */
MPI_Init(argc, argv);
MPI_Comm_rank(MPI_COMM_WORLD,rank);
root=0;
source=rank+1;
MPI_Barrier(MPI_COMM_WORLD);
MPI_Reduce(source,result,1,MPI_INT,MPI_SUM,root,MPI_COMM_WORLD);
if(rank==root) printf(PE:%d MPI_PROD result is %d
n,rank,result);
MPI_Finalize();
}
Output:
PE:0 MPI_SUM result is 10
Gambar 7: Output program 31
3.5 Gather
Rutin MPI_Gather merupakan satu bentuk all-to-one communication. Keti-
ka MPI_Gather dipanggil, setiap proses (termasuk proses induk) mengirimkan
20
buer pengirimannya ke proses induk. Proses induk kemudian menerimanya
dan menyimpannya.
Gambar 8: A Simple Gather Example
Dalam proses berikut, nilai data A pada tiap prosesor di gather dan dipin-
dahkan ke prosesor 0 dalam locasi memori yang bersebelahan.
Syntax:
Kode 32 Fungsi MPI_Gather
MPI_Gather ( send_buffer, send_count, send_type, recv_buffer,
recv_count, recv_type,
recv_rank, comm )
Argumen-argumen dari rutin ini adalah :
send_buffer in alamat awal dari buer pengiriman
send_count in jumlah elemen-elemen dari buer pengiriman
send_type in tipe data dari elemen-elemen buer pengiriman
recv_buffer out alamat awal dari buer penerimaan
recv_count in jumlah elemen-elemen dari buer pengiriman
recv_type in tipe data dari elemen-elemen buer penerimaan
recv_rank in rank dari proses penerimaan
comm in mpi communicator
21
Kode 33 Program MPI_Gather
#include stdio.h
#include mpi.h
void main(int argc, char *argv[])
{
int rank,size;
double param[16],mine;
int sndcnt,rcvcnt;
int i;
MPI_Init(argc, argv);
MPI_Comm_rank(MPI_COMM_WORLD,rank);
MPI_Comm_size(MPI_COMM_WORLD,size);
sndcnt=1;
mine=23.0+rank;
if(rank==0) rcvcnt=1;
MPI_Gather(mine,sndcnt,MPI_DOUBLE,param,rcvcnt,MPI_DOUBLE,0,MPI_COMM_WORLD);
if(rank==0)
for(i=0;isize;++i) printf(PE:%d param[%d] is %f
n,rank,i,param[i]);
MPI_Finalize();
}
Output program :
PE:0 param[0] is 23.000000
PE:0 param[1] is 24.000000
PE:0 param[2] is 25.000000
PE:0 param[3] is 26.000000
Gambar 9: Output Kode 33
3.6 Scatter
Rutin MPI_Scatter merupakan bentuk one-to-all communication. Data yang
berbeda dari proses induk dikirimkan ke setiap proses. Ketika MPI_Scatter
dipanggil, proses induk memecah satu set dari lokasi memori yang bersebela-
han menjadi potongan yang sama dan mengirimkan satu potongan ke setiap
prosesor.
22
Gambar 10: Contoh sederhana dari Scatter
Syntax:
Kode 34 Fungsi MPI_Scatter
int MPI_Scatter ( void* send_buffer, int send_count, MPI_datatype
send_type,
void* recv_buffer, int recv_count, MPI_Datatype recv_type,
int rank, MPI_Comm comm )
Argumen-argumen dari rutin ini adalah :
send_buer in alamat awal dari buer pengiriman
send_count in jumlah elemen-elemen dalam buer pengiriman yang akan
dikirim ke setiap proses (bukan jumlah total yanng akan dikirim)
send_type in tipe data dari elemen-eemen dalam buer pengiriman
recv_buer out alamat awal dari buer penerimaan
recv_count in jumlah elemen-elemen dari buer penerimaan
recv_type in tipe data dari elemen-elemen dari buer penerimaan
rank in rank dari proses pengiriman
comm in mpi communicator
Kode program :
23
Kode 35 Program MPI_Scatter
#include stdio.h
#include mpi.h
void main(int argc, char *argv[]) {
int rank,size,i;
double param[8],mine;
int sndcnt,rcvcnt;
MPI_Init(argc, argv);
MPI_Comm_rank(MPI_COMM_WORLD,rank);
MPI_Comm_size(MPI_COMM_WORLD,size);
rcvcnt=1;
if(rank==0) {
for(i=0;i4;++i) param[i]=23.0+i;
sndcnt=1;
}
MPI_Scatter(param,sndcnt,MPI_DOUBLE,mine,rcvcnt,MPI_DOUBLE,0,MPI_COMM_WORLD);
for(i=0;isize;++i) {
if(rank==i) printf(P:%d mine is %f n,rank,mine);
fflush(stdout);
MPI_Barrier(MPI_COMM_WORLD);
}
MPI_Finalize();
}
Output program:
P:0 mine is 23.000000
P:1 mine is 24.000000
P:2 mine is 25.000000
P:3 mine is 26.000000
Gambar 11: Output kode 35
24

More Related Content

What's hot

PRESENTASI DANA PENSIUN
PRESENTASI DANA PENSIUNPRESENTASI DANA PENSIUN
PRESENTASI DANA PENSIUNheckaathaya
 
BENTUK BADAN HUKUM DAN KEPEMILIKAN BANK SYARIAH
BENTUK BADAN HUKUM DAN KEPEMILIKAN BANK SYARIAHBENTUK BADAN HUKUM DAN KEPEMILIKAN BANK SYARIAH
BENTUK BADAN HUKUM DAN KEPEMILIKAN BANK SYARIAHMFChannel
 
Penyimpangan Ketentuan Perbankan yang Berindikasi Tindak Pidana Perbankan
Penyimpangan Ketentuan Perbankan yang Berindikasi Tindak Pidana PerbankanPenyimpangan Ketentuan Perbankan yang Berindikasi Tindak Pidana Perbankan
Penyimpangan Ketentuan Perbankan yang Berindikasi Tindak Pidana PerbankanAinul Yaqin
 
Laporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMIN
Laporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMINLaporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMIN
Laporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMINShofura Kamal
 
proposal bisnis rumah makan "LESEHAN"
proposal bisnis rumah makan "LESEHAN"proposal bisnis rumah makan "LESEHAN"
proposal bisnis rumah makan "LESEHAN"trihiriani vickriyati
 
Proposal studi kelayakan_bisnis_cafe
Proposal studi kelayakan_bisnis_cafeProposal studi kelayakan_bisnis_cafe
Proposal studi kelayakan_bisnis_cafe20risman
 
Apakah bank syariah ikut menanggung rugi dalam skema bagi hasil
Apakah bank syariah ikut menanggung rugi dalam skema bagi hasilApakah bank syariah ikut menanggung rugi dalam skema bagi hasil
Apakah bank syariah ikut menanggung rugi dalam skema bagi hasilWahilman Syahmi
 
Media realia,video,kmputer,foto,gambr,permainan simulasi
Media realia,video,kmputer,foto,gambr,permainan simulasiMedia realia,video,kmputer,foto,gambr,permainan simulasi
Media realia,video,kmputer,foto,gambr,permainan simulasiZuha Farhana
 
Tugas laporan project aplikasi website
Tugas laporan project aplikasi websiteTugas laporan project aplikasi website
Tugas laporan project aplikasi websiteGilang Ramadhan
 
Praktikum Sistem Basis Data menggunakan PostgresSQL
Praktikum Sistem Basis Data menggunakan PostgresSQLPraktikum Sistem Basis Data menggunakan PostgresSQL
Praktikum Sistem Basis Data menggunakan PostgresSQLMega Yasma Adha
 
Perangkat lunak presentation
Perangkat lunak presentationPerangkat lunak presentation
Perangkat lunak presentationDavid Indra Kz
 
Proposal Bussines Plan Bananas
Proposal Bussines Plan BananasProposal Bussines Plan Bananas
Proposal Bussines Plan BananasYulia Fauzi
 

What's hot (19)

Proposal kwu
Proposal kwuProposal kwu
Proposal kwu
 
PRESENTASI DANA PENSIUN
PRESENTASI DANA PENSIUNPRESENTASI DANA PENSIUN
PRESENTASI DANA PENSIUN
 
BENTUK BADAN HUKUM DAN KEPEMILIKAN BANK SYARIAH
BENTUK BADAN HUKUM DAN KEPEMILIKAN BANK SYARIAHBENTUK BADAN HUKUM DAN KEPEMILIKAN BANK SYARIAH
BENTUK BADAN HUKUM DAN KEPEMILIKAN BANK SYARIAH
 
Penyimpangan Ketentuan Perbankan yang Berindikasi Tindak Pidana Perbankan
Penyimpangan Ketentuan Perbankan yang Berindikasi Tindak Pidana PerbankanPenyimpangan Ketentuan Perbankan yang Berindikasi Tindak Pidana Perbankan
Penyimpangan Ketentuan Perbankan yang Berindikasi Tindak Pidana Perbankan
 
Laporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMIN
Laporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMINLaporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMIN
Laporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMIN
 
proposal bisnis rumah makan "LESEHAN"
proposal bisnis rumah makan "LESEHAN"proposal bisnis rumah makan "LESEHAN"
proposal bisnis rumah makan "LESEHAN"
 
Bank syariah dan BPRS
Bank syariah dan BPRSBank syariah dan BPRS
Bank syariah dan BPRS
 
Proposal studi kelayakan_bisnis_cafe
Proposal studi kelayakan_bisnis_cafeProposal studi kelayakan_bisnis_cafe
Proposal studi kelayakan_bisnis_cafe
 
Rencana bisnis
Rencana bisnisRencana bisnis
Rencana bisnis
 
Kredit Usaha Rakyat.pptx
Kredit Usaha Rakyat.pptxKredit Usaha Rakyat.pptx
Kredit Usaha Rakyat.pptx
 
Business Plan Raja Keripik
Business Plan Raja KeripikBusiness Plan Raja Keripik
Business Plan Raja Keripik
 
Apakah bank syariah ikut menanggung rugi dalam skema bagi hasil
Apakah bank syariah ikut menanggung rugi dalam skema bagi hasilApakah bank syariah ikut menanggung rugi dalam skema bagi hasil
Apakah bank syariah ikut menanggung rugi dalam skema bagi hasil
 
Virus Komputer
Virus KomputerVirus Komputer
Virus Komputer
 
Media realia,video,kmputer,foto,gambr,permainan simulasi
Media realia,video,kmputer,foto,gambr,permainan simulasiMedia realia,video,kmputer,foto,gambr,permainan simulasi
Media realia,video,kmputer,foto,gambr,permainan simulasi
 
Pengertian edo ram
Pengertian edo ramPengertian edo ram
Pengertian edo ram
 
Tugas laporan project aplikasi website
Tugas laporan project aplikasi websiteTugas laporan project aplikasi website
Tugas laporan project aplikasi website
 
Praktikum Sistem Basis Data menggunakan PostgresSQL
Praktikum Sistem Basis Data menggunakan PostgresSQLPraktikum Sistem Basis Data menggunakan PostgresSQL
Praktikum Sistem Basis Data menggunakan PostgresSQL
 
Perangkat lunak presentation
Perangkat lunak presentationPerangkat lunak presentation
Perangkat lunak presentation
 
Proposal Bussines Plan Bananas
Proposal Bussines Plan BananasProposal Bussines Plan Bananas
Proposal Bussines Plan Bananas
 

Viewers also liked

Acoustic emission testing of pressure vessel asme section v, asnt - 24 feb ...
Acoustic emission testing of pressure vessel   asme section v, asnt - 24 feb ...Acoustic emission testing of pressure vessel   asme section v, asnt - 24 feb ...
Acoustic emission testing of pressure vessel asme section v, asnt - 24 feb ...mboria
 
Acoustic Emission Education Program by Boris Muravin
Acoustic Emission Education Program by Boris MuravinAcoustic Emission Education Program by Boris Muravin
Acoustic Emission Education Program by Boris Muravinmboria
 
Acoustic emission sensors, equipment
Acoustic emission sensors, equipment Acoustic emission sensors, equipment
Acoustic emission sensors, equipment mboria
 
Muravin physical principals of acoustic emission
Muravin   physical principals of acoustic emissionMuravin   physical principals of acoustic emission
Muravin physical principals of acoustic emissionmboria
 
SENTRO - Acoustic Emission Presentation [2016]
SENTRO - Acoustic Emission Presentation [2016]SENTRO - Acoustic Emission Presentation [2016]
SENTRO - Acoustic Emission Presentation [2016]SENTRO TECHNOLOGIES
 
Acoustic Emission Basics by Boris Muravin
Acoustic Emission Basics by Boris MuravinAcoustic Emission Basics by Boris Muravin
Acoustic Emission Basics by Boris Muravinmboria
 
3 Things Every Sales Team Needs to Be Thinking About in 2017
3 Things Every Sales Team Needs to Be Thinking About in 20173 Things Every Sales Team Needs to Be Thinking About in 2017
3 Things Every Sales Team Needs to Be Thinking About in 2017Drift
 

Viewers also liked (8)

Acoustic emission testing of pressure vessel asme section v, asnt - 24 feb ...
Acoustic emission testing of pressure vessel   asme section v, asnt - 24 feb ...Acoustic emission testing of pressure vessel   asme section v, asnt - 24 feb ...
Acoustic emission testing of pressure vessel asme section v, asnt - 24 feb ...
 
Acoustic Emission Education Program by Boris Muravin
Acoustic Emission Education Program by Boris MuravinAcoustic Emission Education Program by Boris Muravin
Acoustic Emission Education Program by Boris Muravin
 
Acoustic emission sensors, equipment
Acoustic emission sensors, equipment Acoustic emission sensors, equipment
Acoustic emission sensors, equipment
 
Muravin physical principals of acoustic emission
Muravin   physical principals of acoustic emissionMuravin   physical principals of acoustic emission
Muravin physical principals of acoustic emission
 
SENTRO - Acoustic Emission Presentation [2016]
SENTRO - Acoustic Emission Presentation [2016]SENTRO - Acoustic Emission Presentation [2016]
SENTRO - Acoustic Emission Presentation [2016]
 
Unit 4 ae testing
Unit 4 ae testingUnit 4 ae testing
Unit 4 ae testing
 
Acoustic Emission Basics by Boris Muravin
Acoustic Emission Basics by Boris MuravinAcoustic Emission Basics by Boris Muravin
Acoustic Emission Basics by Boris Muravin
 
3 Things Every Sales Team Needs to Be Thinking About in 2017
3 Things Every Sales Team Needs to Be Thinking About in 20173 Things Every Sales Team Needs to Be Thinking About in 2017
3 Things Every Sales Team Needs to Be Thinking About in 2017
 

Similar to 45226488 laporan-parallel-processing

Presentasi komputasi Pararel Procesing
Presentasi komputasi Pararel ProcesingPresentasi komputasi Pararel Procesing
Presentasi komputasi Pararel ProcesingRahmawan06
 
praktikum Cisco Packet Tracer 5.3.
praktikum Cisco Packet Tracer 5.3.praktikum Cisco Packet Tracer 5.3.
praktikum Cisco Packet Tracer 5.3.Hibaten Wafiroh
 
Publikasi 07.11.1856
Publikasi 07.11.1856Publikasi 07.11.1856
Publikasi 07.11.1856belabelabell
 
laporan INSTALASI OS LINUX
laporan INSTALASI OS LINUXlaporan INSTALASI OS LINUX
laporan INSTALASI OS LINUXMela Roviani
 
Format laporan praktikum
Format laporan praktikumFormat laporan praktikum
Format laporan praktikumRidho Ajjah
 
Arsitektur Sistem Operasi
Arsitektur Sistem OperasiArsitektur Sistem Operasi
Arsitektur Sistem Operasiviviluthfiyah
 
Arsitektur Sistem Operasi
Arsitektur Sistem OperasiArsitektur Sistem Operasi
Arsitektur Sistem Operasiviviluthfiyah
 
Sistem operasi terdistribusi
Sistem operasi terdistribusiSistem operasi terdistribusi
Sistem operasi terdistribusihofidatur
 
Media penyimpanan-terdistribusi-degan-glusterfs-pada-debian-squeeze
Media penyimpanan-terdistribusi-degan-glusterfs-pada-debian-squeezeMedia penyimpanan-terdistribusi-degan-glusterfs-pada-debian-squeeze
Media penyimpanan-terdistribusi-degan-glusterfs-pada-debian-squeezeSuyadi Abu Farros
 
mikrotik.docx
mikrotik.docxmikrotik.docx
mikrotik.docxyanus yan
 
Pemrosesan paralel untuk kompresi data
Pemrosesan paralel untuk kompresi dataPemrosesan paralel untuk kompresi data
Pemrosesan paralel untuk kompresi dataEmus Kelen
 
Superkomputer dengan Native Linux(encrypted)
Superkomputer dengan Native Linux(encrypted)Superkomputer dengan Native Linux(encrypted)
Superkomputer dengan Native Linux(encrypted)Hary HarysMatta
 

Similar to 45226488 laporan-parallel-processing (20)

Presentasi komputasi Pararel Procesing
Presentasi komputasi Pararel ProcesingPresentasi komputasi Pararel Procesing
Presentasi komputasi Pararel Procesing
 
Kelompok 1
Kelompok 1Kelompok 1
Kelompok 1
 
praktikum Cisco Packet Tracer 5.3.
praktikum Cisco Packet Tracer 5.3.praktikum Cisco Packet Tracer 5.3.
praktikum Cisco Packet Tracer 5.3.
 
Softskill.pptx
Softskill.pptxSoftskill.pptx
Softskill.pptx
 
Publikasi 07.11.1856
Publikasi 07.11.1856Publikasi 07.11.1856
Publikasi 07.11.1856
 
Os ppt.8
Os ppt.8Os ppt.8
Os ppt.8
 
Pert.7 memori
Pert.7 memoriPert.7 memori
Pert.7 memori
 
affTA02 - BAB II
affTA02 - BAB IIaffTA02 - BAB II
affTA02 - BAB II
 
laporan INSTALASI OS LINUX
laporan INSTALASI OS LINUXlaporan INSTALASI OS LINUX
laporan INSTALASI OS LINUX
 
Lapres 4 dan 5 1235010002
Lapres 4 dan 5   1235010002Lapres 4 dan 5   1235010002
Lapres 4 dan 5 1235010002
 
Format laporan praktikum
Format laporan praktikumFormat laporan praktikum
Format laporan praktikum
 
Arsitektur Sistem Operasi
Arsitektur Sistem OperasiArsitektur Sistem Operasi
Arsitektur Sistem Operasi
 
Bab iii
Bab iiiBab iii
Bab iii
 
Arsitektur Sistem Operasi
Arsitektur Sistem OperasiArsitektur Sistem Operasi
Arsitektur Sistem Operasi
 
Tugas Kelompok 1
Tugas Kelompok 1Tugas Kelompok 1
Tugas Kelompok 1
 
Sistem operasi terdistribusi
Sistem operasi terdistribusiSistem operasi terdistribusi
Sistem operasi terdistribusi
 
Media penyimpanan-terdistribusi-degan-glusterfs-pada-debian-squeeze
Media penyimpanan-terdistribusi-degan-glusterfs-pada-debian-squeezeMedia penyimpanan-terdistribusi-degan-glusterfs-pada-debian-squeeze
Media penyimpanan-terdistribusi-degan-glusterfs-pada-debian-squeeze
 
mikrotik.docx
mikrotik.docxmikrotik.docx
mikrotik.docx
 
Pemrosesan paralel untuk kompresi data
Pemrosesan paralel untuk kompresi dataPemrosesan paralel untuk kompresi data
Pemrosesan paralel untuk kompresi data
 
Superkomputer dengan Native Linux(encrypted)
Superkomputer dengan Native Linux(encrypted)Superkomputer dengan Native Linux(encrypted)
Superkomputer dengan Native Linux(encrypted)
 

Recently uploaded

421783639-ppt-overdosis-dan-keracunan-pptx.pptx
421783639-ppt-overdosis-dan-keracunan-pptx.pptx421783639-ppt-overdosis-dan-keracunan-pptx.pptx
421783639-ppt-overdosis-dan-keracunan-pptx.pptxGiftaJewela
 
Laporan Guru Piket untuk Pengisian RHK Guru Pengelolaan KInerja Guru di PMM
Laporan Guru Piket untuk Pengisian RHK Guru Pengelolaan KInerja Guru di PMMLaporan Guru Piket untuk Pengisian RHK Guru Pengelolaan KInerja Guru di PMM
Laporan Guru Piket untuk Pengisian RHK Guru Pengelolaan KInerja Guru di PMMmulyadia43
 
Tugas 1 ABK di SD prodi pendidikan guru sekolah dasar.docx
Tugas 1 ABK di SD prodi pendidikan guru sekolah dasar.docxTugas 1 ABK di SD prodi pendidikan guru sekolah dasar.docx
Tugas 1 ABK di SD prodi pendidikan guru sekolah dasar.docxmawan5982
 
AKSI NYATA NARKOBA ATAU OBAT TERLARANG..
AKSI NYATA NARKOBA ATAU OBAT TERLARANG..AKSI NYATA NARKOBA ATAU OBAT TERLARANG..
AKSI NYATA NARKOBA ATAU OBAT TERLARANG..ikayogakinasih12
 
Contoh Laporan Observasi Pembelajaran Rekan Sejawat.pdf
Contoh Laporan Observasi Pembelajaran Rekan Sejawat.pdfContoh Laporan Observasi Pembelajaran Rekan Sejawat.pdf
Contoh Laporan Observasi Pembelajaran Rekan Sejawat.pdfCandraMegawati
 
Modul 1.2.a.8 Koneksi antar materi 1.2.pdf
Modul 1.2.a.8 Koneksi antar materi 1.2.pdfModul 1.2.a.8 Koneksi antar materi 1.2.pdf
Modul 1.2.a.8 Koneksi antar materi 1.2.pdfSitiJulaeha820399
 
LK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docx
LK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docxLK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docx
LK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docxPurmiasih
 
Bab 6 Kreatif Mengungap Rasa dan Realitas.pdf
Bab 6 Kreatif Mengungap Rasa dan Realitas.pdfBab 6 Kreatif Mengungap Rasa dan Realitas.pdf
Bab 6 Kreatif Mengungap Rasa dan Realitas.pdfbibizaenab
 
ppt-modul-6-pend-seni-di sd kelompok 2 ppt
ppt-modul-6-pend-seni-di sd kelompok 2 pptppt-modul-6-pend-seni-di sd kelompok 2 ppt
ppt-modul-6-pend-seni-di sd kelompok 2 pptArkhaRega1
 
soal AKM Mata Pelajaran PPKN kelas .pptx
soal AKM Mata Pelajaran PPKN kelas .pptxsoal AKM Mata Pelajaran PPKN kelas .pptx
soal AKM Mata Pelajaran PPKN kelas .pptxazhari524
 
442539315-ppt-modul-6-pend-seni-pptx.pptx
442539315-ppt-modul-6-pend-seni-pptx.pptx442539315-ppt-modul-6-pend-seni-pptx.pptx
442539315-ppt-modul-6-pend-seni-pptx.pptxHendryJulistiyanto
 
Sesi 1_PPT Ruang Kolaborasi Modul 1.3 _ ke 1_PGP Angkatan 10.pptx
Sesi 1_PPT Ruang Kolaborasi Modul 1.3 _ ke 1_PGP Angkatan 10.pptxSesi 1_PPT Ruang Kolaborasi Modul 1.3 _ ke 1_PGP Angkatan 10.pptx
Sesi 1_PPT Ruang Kolaborasi Modul 1.3 _ ke 1_PGP Angkatan 10.pptxSovyOktavianti
 
BAHAN SOSIALISASI PPDB SMA-SMK NEGERI DISDIKSU TP. 2024-2025 REVISI.pptx
BAHAN SOSIALISASI PPDB SMA-SMK NEGERI DISDIKSU TP. 2024-2025 REVISI.pptxBAHAN SOSIALISASI PPDB SMA-SMK NEGERI DISDIKSU TP. 2024-2025 REVISI.pptx
BAHAN SOSIALISASI PPDB SMA-SMK NEGERI DISDIKSU TP. 2024-2025 REVISI.pptxJamhuriIshak
 
PERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptx
PERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptxPERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptx
PERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptxRizkyPratiwi19
 
REFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdf
REFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdfREFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdf
REFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdfirwanabidin08
 
Latihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajat
Latihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajatLatihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajat
Latihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajatArfiGraphy
 
Perumusan Visi dan Prakarsa Perubahan.pptx
Perumusan Visi dan Prakarsa Perubahan.pptxPerumusan Visi dan Prakarsa Perubahan.pptx
Perumusan Visi dan Prakarsa Perubahan.pptxadimulianta1
 
tugas karya ilmiah 1 universitas terbuka pembelajaran
tugas karya ilmiah 1 universitas terbuka pembelajarantugas karya ilmiah 1 universitas terbuka pembelajaran
tugas karya ilmiah 1 universitas terbuka pembelajarankeicapmaniez
 
Keterampilan menyimak kelas bawah tugas UT
Keterampilan menyimak kelas bawah tugas UTKeterampilan menyimak kelas bawah tugas UT
Keterampilan menyimak kelas bawah tugas UTIndraAdm
 
Kontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptx
Kontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptxKontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptx
Kontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptxssuser50800a
 

Recently uploaded (20)

421783639-ppt-overdosis-dan-keracunan-pptx.pptx
421783639-ppt-overdosis-dan-keracunan-pptx.pptx421783639-ppt-overdosis-dan-keracunan-pptx.pptx
421783639-ppt-overdosis-dan-keracunan-pptx.pptx
 
Laporan Guru Piket untuk Pengisian RHK Guru Pengelolaan KInerja Guru di PMM
Laporan Guru Piket untuk Pengisian RHK Guru Pengelolaan KInerja Guru di PMMLaporan Guru Piket untuk Pengisian RHK Guru Pengelolaan KInerja Guru di PMM
Laporan Guru Piket untuk Pengisian RHK Guru Pengelolaan KInerja Guru di PMM
 
Tugas 1 ABK di SD prodi pendidikan guru sekolah dasar.docx
Tugas 1 ABK di SD prodi pendidikan guru sekolah dasar.docxTugas 1 ABK di SD prodi pendidikan guru sekolah dasar.docx
Tugas 1 ABK di SD prodi pendidikan guru sekolah dasar.docx
 
AKSI NYATA NARKOBA ATAU OBAT TERLARANG..
AKSI NYATA NARKOBA ATAU OBAT TERLARANG..AKSI NYATA NARKOBA ATAU OBAT TERLARANG..
AKSI NYATA NARKOBA ATAU OBAT TERLARANG..
 
Contoh Laporan Observasi Pembelajaran Rekan Sejawat.pdf
Contoh Laporan Observasi Pembelajaran Rekan Sejawat.pdfContoh Laporan Observasi Pembelajaran Rekan Sejawat.pdf
Contoh Laporan Observasi Pembelajaran Rekan Sejawat.pdf
 
Modul 1.2.a.8 Koneksi antar materi 1.2.pdf
Modul 1.2.a.8 Koneksi antar materi 1.2.pdfModul 1.2.a.8 Koneksi antar materi 1.2.pdf
Modul 1.2.a.8 Koneksi antar materi 1.2.pdf
 
LK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docx
LK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docxLK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docx
LK.01._LK_Peta_Pikir modul 1.3_Kel1_NURYANTI_101.docx
 
Bab 6 Kreatif Mengungap Rasa dan Realitas.pdf
Bab 6 Kreatif Mengungap Rasa dan Realitas.pdfBab 6 Kreatif Mengungap Rasa dan Realitas.pdf
Bab 6 Kreatif Mengungap Rasa dan Realitas.pdf
 
ppt-modul-6-pend-seni-di sd kelompok 2 ppt
ppt-modul-6-pend-seni-di sd kelompok 2 pptppt-modul-6-pend-seni-di sd kelompok 2 ppt
ppt-modul-6-pend-seni-di sd kelompok 2 ppt
 
soal AKM Mata Pelajaran PPKN kelas .pptx
soal AKM Mata Pelajaran PPKN kelas .pptxsoal AKM Mata Pelajaran PPKN kelas .pptx
soal AKM Mata Pelajaran PPKN kelas .pptx
 
442539315-ppt-modul-6-pend-seni-pptx.pptx
442539315-ppt-modul-6-pend-seni-pptx.pptx442539315-ppt-modul-6-pend-seni-pptx.pptx
442539315-ppt-modul-6-pend-seni-pptx.pptx
 
Sesi 1_PPT Ruang Kolaborasi Modul 1.3 _ ke 1_PGP Angkatan 10.pptx
Sesi 1_PPT Ruang Kolaborasi Modul 1.3 _ ke 1_PGP Angkatan 10.pptxSesi 1_PPT Ruang Kolaborasi Modul 1.3 _ ke 1_PGP Angkatan 10.pptx
Sesi 1_PPT Ruang Kolaborasi Modul 1.3 _ ke 1_PGP Angkatan 10.pptx
 
BAHAN SOSIALISASI PPDB SMA-SMK NEGERI DISDIKSU TP. 2024-2025 REVISI.pptx
BAHAN SOSIALISASI PPDB SMA-SMK NEGERI DISDIKSU TP. 2024-2025 REVISI.pptxBAHAN SOSIALISASI PPDB SMA-SMK NEGERI DISDIKSU TP. 2024-2025 REVISI.pptx
BAHAN SOSIALISASI PPDB SMA-SMK NEGERI DISDIKSU TP. 2024-2025 REVISI.pptx
 
PERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptx
PERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptxPERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptx
PERAN PERAWAT DALAM PEMERIKSAAN PENUNJANG.pptx
 
REFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdf
REFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdfREFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdf
REFLEKSI MANDIRI_Prakarsa Perubahan BAGJA Modul 1.3.pdf
 
Latihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajat
Latihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajatLatihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajat
Latihan Soal bahasa Indonesia untuk anak sekolah sekelas SMP atau pun sederajat
 
Perumusan Visi dan Prakarsa Perubahan.pptx
Perumusan Visi dan Prakarsa Perubahan.pptxPerumusan Visi dan Prakarsa Perubahan.pptx
Perumusan Visi dan Prakarsa Perubahan.pptx
 
tugas karya ilmiah 1 universitas terbuka pembelajaran
tugas karya ilmiah 1 universitas terbuka pembelajarantugas karya ilmiah 1 universitas terbuka pembelajaran
tugas karya ilmiah 1 universitas terbuka pembelajaran
 
Keterampilan menyimak kelas bawah tugas UT
Keterampilan menyimak kelas bawah tugas UTKeterampilan menyimak kelas bawah tugas UT
Keterampilan menyimak kelas bawah tugas UT
 
Kontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptx
Kontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptxKontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptx
Kontribusi Islam Dalam Pengembangan Peradaban Dunia - KELOMPOK 1.pptx
 

45226488 laporan-parallel-processing

  • 1. PARALLEL PROCESSING dengan MESSAGE PASSING INTERFACE (MPI) 7 Mei 2007 Tonny Kusdarwanto [2203 100 030] Dwi Joko Susilo [2204 100 164] 1
  • 2. Daftar Isi 1 Pendahuluan 3 1.1 The Message Passing Model . . . . . . . . . . . . . . . . . . . . 3 1.2 Penggunaan MPI . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Fitur dasar dari program-program Message Passing . . . . . . . . 3 2 Implementasi Sistem 4 2.1 Kebutuhan Sistem . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 Instalasi Paket . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3 Kongurasi : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3.1 LAM/MPI . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3.2 SSH ( Secure Shell ) . . . . . . . . . . . . . . . . . . . . . 6 2.3.3 NFS (Netwok File System) . . . . . . . . . . . . . . . . . 7 2.4 Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3 Percobaan-percobaan 8 3.1 Memulai LAM/MPI . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.2 Meng-compile dan menjalankan program parallel dengan MPI . . 10 3.2.1 Mengkompile Program parallel dengan MPI . . . . . . . . 10 3.2.2 Menjalankan MPI . . . . . . . . . . . . . . . . . . . . . . 10 3.3 Pemrograman Parallel dengan MPI . . . . . . . . . . . . . . . . . 11 3.3.1 Communicator . . . . . . . . . . . . . . . . . . . . . . . . 12 3.3.2 Point-to-Point Communications and Messages . . . . . . . 13 3.3.3 Collective Communication . . . . . . . . . . . . . . . . . . 16 3.4 Reduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.5 Gather . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.6 Scatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2
  • 3. 1 Pendahuluan Salah satu metode pemrograman yang digunakan untuk komputasi parallel adalah dengan menggunakan library-library dari message passing. Library- library ini mengatur transfer data antar instan-instan program parallel yang biasanya berjalan pada multi prosessor dalam arsitektur komputasi parallel. 1.1 The Message Passing Model Message Passing Interface (MPI) merupakan implementasi standar dari model message passing komputasi parallel. Sebuah komputasi parallel terdiri dari sejumlah proses, dimana masing- masing bekerja pada beberapa data lokal. Setiap prsoses mempunyai variabel lokal, dan tidak ada mekanisme suatu proses yang bisa mengakses secara lang- sung memori yang lain. Sharing data antar proses-proses dilakukan dengan message passing., yaitu dengan mengirim dan menerima message antar proses-proses. Alasan menggu- nakan model ini sudah sangat umum. Dan tipe komputasi parallel dapat dibuat dalam bentuk message passing. Model ini juga dapat diimplementasikan pa- da bermacam-macam platform, seperti shared-memory multiprocessors maupun single processor. 1.2 Penggunaan MPI MPI perlu digunakan ketika kita menginginkan : 1. Menulis kode parallel yang portable 2. Mendapatkan performa yang tinggi dalam pemrograman parallel 3. Menghadapi permasalahan yang melibatkan hubungan data irregular atau dinamis yang tidak begitu cocok dengan model data-parallel. 1.3 Fitur dasar dari program-program Message Passing Program message passing terdiri dari multiple instan dari program serial yang berkomunikasi dengan pemanggilan library. Pemanggilan ini dapat dibagi men- jadi empat kelas : 1. Pemanggilan untuk inisialisasi, mengatur, dan memutuskan komunikasi. 2. Pemanggilan untuk mengkomunikasikan beberapa pasang prosesor. 3. Pemanggilan yang mewujudkan operasi-operasi komunikasi diantara kelompok- kelompok prosesor. 4. Pemanggilan untuk membuat tipe data acak (arbitrary) 3
  • 4. Kelas pertama dari pemanggilan terdiri dari pemanggilan-pemanggilan untuk memulai komunikasi, mengidentikasi jumlah prosesor yang sedang digunakan, membuat subgrup dari prosesor-prosesor dan mengidentikasi prosesor mana yang sedang menjalankan instan khusus dari program. Kelas kedua dari pemanggilan, dinamakan komunikasi point-to-point, terdiri atas tipe pengiriman dan penerimaan yang berbeda. Kelas ketiga dari pemanggilan adalah operasi kolektif yang memberikan sinkronisasi antar grup proses dan pemanggilan yang melakukan operasi ko- munikasi/kalkulasi. Kelas terakhir dari pemanggilan memberikan eksibilitas dalam berurusan dengan struktur data yang rumit. 2 Implementasi Sistem 2.1 Kebutuhan Sistem Dalam implementasi LAM/MPI yang kami lakukan di sini menggunakan 4 buah komputer yagn terhubung dengan LAN dengan spesikasi sebagai berikut : Tabel 1: Resource Komputer Node 0 (induk) Node 1 (anak) Node 2 (anak) Node 3 (anak) IP Address 10.122.67.8 10.122.67.5 10.122.67.7 10.122.67.9 Prosesor Pentium IV 2.4 GHz Pentium IV 2.4 GHz Pentium IV 2.4 GHz Pentium IV 2.4 GHz Memori 512 MB 512 MB 512 MB 512 MB Sistem Operasi Debian Etch Debian Etch Ubuntu Edgy Debian Etch Kernel 2.6.18 2.6.18 2.6.18 2.6.18 Topologi jaringan yang dipakai adalah star. Desainnya adalah sebagai berikut: Gambar 1: Desain jaringan 4
  • 5. 2.2 Instalasi Paket Paket-paket yang dibutuhkan untuk mengimplementasikan LAM/MPI ini an- tara lain : 1. Paket-paket LAM/MPI yang terdiri dari : (a) lam4c2 (b) lam-runtime (c) lam4-dev 2. Paket-paket SSH yang terdiri dari : (a) openssh-server (b) openssh-client 3. Paket-paket NFS (Network File System) yang terdiri dari : (a) nfs-common (b) nfs-kernel-server 2.3 Kongurasi : 2.3.1 LAM/MPI Booting LAM Sebelum program mpi dijalankan, LAM runtime environment harus dijalankan. Hal ini biasa disebut booting LAM. Proses booting yang sukses akan membuat instan dari LAM runtime environment yang biasa disebut dengan LAM uni- verse. Untuk booting LAM, pada cluster of workstation dibutuhkan remote shell, seperti rsh dan ssh, yang digunakan untuk mengeksekusi lamd (lam daemon), dan program pada workstation. Ketika menggunakan remote shell, le boot schema diperlukan sebagai daftar dari komputer sebagai node yang akan dijalankan LAM runtime. Nama lain dari bootschema adalah host le atau machine le. Contoh isi dari bootschema adalah Kode 1 Kongurasi le bootschema # My Boot Schema 10.122.67.8 10.122.67.5 10.122.67.7 10.122.67.9 File bootschema ini secara default berada di /etc/lam/bhost.def , namun apabila setiap user ingin memiliki kongurasi node-node yang berbeda bisa membuat le bootschema sendiri. 5
  • 6. 2.3.2 SSH ( Secure Shell ) SSH (Secure Shell) merupakan sebuah program untuk untuk login ke remote machine dan mengeksekusi perintah-perintah di remote machine. Ssh mem- berikan komunikasi terenkripsi yang aman antara dua untrusted hosts dalam sebuah jaringan yan tidak secure. SSH ditujukan sebagai pengganti rlogin, rsh, rcp dan dapat digunakan untuk memberikan kanal komunikasi yang aman untuk aplikasi-aplikasi. Dalam LAM/MPI SSH diperlukan untuk membuat node master dapat me- remote node slave tanpa menggunakan password. Node master me-remote node slave untu menjalankan lamd, dan menjalankan program MPI non interactively, sehingga tujuan dari portabilitas standar MPI dapat tercapai. Sebelumnya servis SSH pada node slave harus distart terlebih dahulu: Kode 2 Perintah menjalankan server SSH # /etc/init.d/ssh start Kemudian membuat RSA-key pada node master, dengan cara : Kode 3 Kongurasi membuat RSA-key sasuke@debian8:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/sasuke/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/sasuke/.ssh/id_rsa. Your public key has been saved in /home/sasuke/.ssh/id_rsa.pub. The key fingerprint is: 7a:43:03:53:73:0e:a1:8e:47:66:40:4d:f5:3b:32:a6 sasuke@debian8 Untuk membuat node master dapat me-remote need slave tanpa password maka passphrase pada saat pembuatan RSA-key tidak perlu diisikan seperti pada contoh diatas. Saat pembuatan RSA-ke, dibuat pasangan dari key , yaitu public key dan private key, yang secara defaults diletakkan pada memory pada directory .ssh. File id_rsa.pub adalah public key sedangkan id_rsa adalah private-key. Agar node-master dapat login tanpa password, public-key yang sudah dibuat oleh node master harus dimiliki oleh node slave. OpenSSH menyediakan tools untu mengkopi public key yaitu ; ssh-copy-id. 6
  • 7. Kode 4 Perintah mengkopi public-key ke node slave sasuke@debian8:~$ ssh-copy-id -i .ssh/id_rsa.pub sasuke@10.122.67.5 15 sasuke@10.122.67.5's password: Now try logging into the machine, with ssh 'sasuke@10.122.67.5', and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. Setelah mengkopi public key ke node slave, koneksi melalui ssh perlu ditest untuk remote ke OpenSSH server yang telah menerima public-key dari node master, dengan cara: Kode 5 Mengetes koneksi SSH sasuke@debian8:~$ ssh 10.122.67.5 Linux debian5 2.6.18-4-686 #1 SMP Mon Mar 26 17:17:36 UTC 2007 i686 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri May 4 18:26:59 2007 from 10.122.67.8 Test berhasil apabila node master dapat me-remote node slave tanpa ada permintaan password. 2.3.3 NFS (Netwok File System) Setelah berhasil menginstall dari paket nfs-kernel-server, perlu dilakukan kong- urasi dari /etc/exports, untuk menentukan computer mana saja yang menjadi NFS client. Kode 6 Kongurasi /etc/exports pada node master /home/sasuke/parallel2 10.122.67.5(rw,insecure,no_root_squash,sync,no_subtree_check) 10.122.67.7(rw,insecure,no_root_squash,sync,no_subtree_check) 10.122.67.9(rw,insecure,no_root_squash,sync,no_subtree_check) kongurasi diatas artinya hosts yang tercantum pada /etc/exports diatas diberi hak baca tulis, synchronous I/O , dan hak root pada NFS server dan client sama pada saat nfs client melakukan mounting . setelah dilakukan kongurasi NFS server dapat dijalankan dengan perintah: Kode 7 Perintah Menjalankan NFS server # /etc/init.d/nfs-kernel-server start 7
  • 8. Kongurasi Pada Client Untuk menggunakan servis NFS yang disediakan oleh server, maka client hanya membutuhkan utility mount yang biasanya sudah terpasang dengan wak- tu instalasi system Linux. Pada aplikasi ini shared storage diletakkan pada path yang sama pada semua node dengan tujuan untuk memudahkan dalam men- jalankan program MPI yang menggunakan model SPMD ( Single Program Mul- tiple Data ). Direktori yang di-share akan dimount pada path /home/sasuke/parallel2. Sehingga perlu dibuatkan direktori /home/sasuke/parallel2 apabila belum ada. Untuk melakukan mounting secara otomatis setiap kali sistem direstart maka le /etc/fstab perlu diedit sebagaimana berikut : Kode 8 Kongurasi le /etc/fstab untuk mounting NFS 10.122.67.8:/home/sasuke/parallel2 /home/sasuke/parallel2 nfs defaults 0 0 selanjutnya untuk melakukan mounting nfs dari kongurasi yang ada di le /etc/fstab digunakan perintah sbb : Kode 9 Perintah mounting NFS mount /home/sasuke/parallel2 Contoh diatas adalah perintah untuk melakukan mount volume /home/sasuke/parallel2 pada nfs-server 10.122..67.8 dan dimount pada directory target /home/sasuke/parallel2. Dengan cara diatas berarti isi direktori /home/sasuke/parallel2 pada client akan sama persis dengan direktori /home/sasuke/parallel2 pada nfs-server. Sebelum melakukan mounting NFS harus dibuat terlebih dulu direktori /home/sasuke/parallel2. 2.4 Permissions Permissions disini menyangkut soal hak akses terhadap le resource yang digu- nakan. Sebelum memulai LAM/MPI harus dipastikan bahwa user yang ingin mengakses le resource mempunyai hak akses atas le/program resource yang ingin diproses secara parallel, yaitu le/program yang dishare dengan NFS. Pa- da percobaan yang kami lakukan, kami menyamakan uid dan gid dari user yang bersangkutan. Kalau hanya untuk menjalankan program yang diparallel tidak perlu mengubah uid dan gid, cukup dengan chmod saja dengan menambahkan option executable untuk other user. 3 Percobaan-percobaan 3.1 Memulai LAM/MPI 1. Perintah booting untuk LAM adalah dengan mengetikan lamboot pada shell. Contohnya: 8
  • 9. Kode 10 Perintah mencoba booting LAM sasuke@debian8:~$ lamboot -v bootschema LAM 7.1.2/MPI 2 C++/ROMIO - Indiana University n-114131 ssi:boot:base:linear: booting n0 (10.122.67.8) n-114131 ssi:boot:base:linear: booting n1 (10.122.67.5) n-114131 ssi:boot:base:linear: booting n2 (10.122.67.7) n-114131 ssi:boot:base:linear: booting n3 (10.122.67.9) n-114131 ssi:boot:base:linear: finished 2. Untuk mengetahui berapa banyak node dan CPU pada LAM universe adalah menggunakan perintah lamnodes pada shell Kode 11 Perintah lamnodes sasuke@debian8:~$ lamnodes n0 debian8:1:origin,this_node n1 10.122.67.5:1: n2 10.122.67.7:1: n3 10.122.67.9:1: 3. Perintah lamclean Perintah lamclean secara komplit menghilangka semua proses sari program yang berjalan pada LAM universe. Lamclean berguna jika program par- alel mengalami crash/leave state pada LAM runtime environment. peng- gunaan lamclean biasanya digunakan tanpa argumen: Kode 12 Perintah lamclean sasuke@debian8:~$ lamclean Penggunaan lamclean biasanya dibutuhkan saat melakukan developing/debugging dari aplikasi MPI. Sebgai contoh program yang hang, message yang ter- sisa, dan lain-lain. 4. Shutdown LAM Universe Setelah selesai, tidak meggunakan LAM universe lagi maka LAM universe perlu untuk di-shutdown menggunakan perintah lamhalt. Kode 13 Perintah lamhalt sasuke@debian8:~$ lamhalt 5. Ada saat keadan tertentu, lamhalt gagal, sebagai contoh salah satu node mengalami kegagalan komunikasi sehinga terjadi crash, apabila lamhalt dipanggil maka akan terjadi timeout sehingga tidak semua node halting LAM Universe. Pada kasus seperti ini dibutuhkan perintah lamwipe untuk memastikan bahwa semua node halting LAM universe. 9
  • 10. Kode 14 Perintah lamwipe sasuke@debian8:~$ lamwipe -v bootschema Dimana bootschema adalah bootschema yang sama ketika dilakukan lam- booting. 3.2 Meng-compile dan menjalankan program parallel den- gan MPI 3.2.1 Mengkompile Program parallel dengan MPI Sebagai catatan untuk mengkompile program MPI tidak perlu melakukan boot- ing LAM. Sebenarnya untuk mengkopile program MPI bisa menjdi pekerjaan yang kompleks, LAM/MPI menyediakan wrapper untuk membuat pekejaan mengkopile ataupun linking menjadi mudah. Wrapper ini secara otomatis menam- bahkan ags cmpiler/linker yang dibutuhkan hubungannya dengan fungsi-fungsi dalam MPI. Kompiler wrapper tersebut dinamkan sebagai mpicc ( untuk program bahasa C ) mpiCC, mpic++ ( untuk program dengan bahasa c++ ) dan mpif77 ( untuk program dengan bahasa fortran ). Contohnya: Kode 15 Perintah mengkompile dengan mpicc sasuke@debian8:~$ mpicc -o outputfile inputfile.c 3.2.2 Menjalankan MPI Setelah sukses booting LAM, mengkompile program MPI, maka program terse- but dapat dijalankan secara paralel. 1. Perintah mpirun Perintah mpirun mempunyai banyak options untuk menjalankan program MPI. kegunaan utama dari mpirun adalah menjalankan progran dengan mode SPMD( Single Program Multiple Data). Contoh yang paling seder- hana dalam menjalankan program SPMD adalah : Kode 16 Perintah menjalankan program secara parallel dengan mpi sasuke@debian8:~$ mpirun N filename Yang berarti menjalankan program lename pada semua node yang ter- cantum pada boot schema sebanyak satu kopi untuk semua node sesuai dengan jumlah CPU yang didenisikan pada boot schema. 2. Perintah mpiexec MPI-2 merekomendasikan penggunaan mpiexec untuk proses startup pro- gram yang portable. Ada beberapa options yang dimiliki mpiexec tidak 10
  • 11. similiki oleh mpirun demikian juga sebaliknya. Penggunaan mpiexec di- lakukan bila : (a) Menjalankan program mode MPMD ( multiple program multiple da- ta ) (b) Menjalankan program yang heterogen (c) Menljalankan program secara one-shot yang arinya booting LAM, menjalankan program kemudian halt LAM Bentuk umum dari mpiexec adalah : Kode 17 Perintah umum mpiexec Shell$ mpiexec options perintah1 : perintah2 : ....... 3. Perintah mpitask Mpitask dapat dianalogikan seperti perintah ps pada sistem Unix base, di- mana menunjukkan status dari mpi program yang berjalan pada LAM uni- verse dan menunjukkan primitive informasi mengenai fungsi-fungsi MPI yang dieksekusi jika ada. Mpitask dapat dijalankan pada semua nodes pada LAM unverse. 3.3 Pemrograman Parallel dengan MPI Dalam percobaan ini bahasa pemrograman yang dipakai adalah bahasa C. Pro- gram parallel dengan MPI mempunyai struktur sebagai berikut : Kode 18 Struktur dasar program parallel include MPI header file variable declarations initialize the MPI environment ...do computation and MPI communication calls... close MPI communications Contoh program : Kode 19 Program Hello World #include stdio.h #include mpi.h void main (int argc, char *argv[]) { int err; err = MPI_Init(argc, argv); printf(Hello world!n); err = MPI_Finalize(); } 11
  • 12. keterangan : MPI_Init(argc, argv) merupakan rutin unutk inisialisasi program MPI yakni membangun lingkungan MPI. MPI_Finalize() merupakan rutin untuk mengakhiri program MPI, yakni mem- bersihkan semua struktur data MPI, membatalkan oeprasi-operasi yang tidak selesai, dll. Output program : Hello world! Hello world! Hello world! Hello world! Gambar 2: Output kode 19 Pada output program di atas terlihat bahwa program dijalankan oleh 4 pros- essor, sehingga menghasilkan pesan Hello world! sebanyak empat kali. 3.3.1 Communicator Commnunicator adalah handle yang merepresentasikan sebuah grup dari prosesor- prosesor yang dapat berkomunikasi satu dengan yang lain. Prosesor-prosesor da- pat berkomunikasi hanya jika mereka dalam communicator yang sama. dengan communicator, prosesor-prosesor diberi nomor secara berurutan dimulai dari 0. nomor identikasi tersebut disebut sebagai rank prosesor dalam communicator- nya. Jika sebuah prosesor ternasuk ke dalam lebih dari satu communicator, rank-nya bisa saja berbeda untuk tiap-tiap communicator. MPI secara otomatis memberikan sebuah communicator dasar yaitu MPI_COMM_WORLD. Ini merupakan communicator yang terdiri dari semua prosesor. Dengan meng- gunakannya setiap prosesor dapat berkomunikasi dengan prosesor yang lain. Contoh program parallel yang memanfaatkan communicator sebagai berikut : Kode 20 Program melihat rank dan size communicator #include stdio.h #includempi.h void main (int argc, char *argv[]) { int myrank, size; MPI_Init(argc, argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, myrank); /* Get my rank */ MPI_Comm_size(MPI_COMM_WORLD, size); /* Get the total number of processors */ printf(Processor %d of %d: Hello World!n, myrank, size); MPI_Finalize(); /* Terminate MPI */ } Keterangan : 12
  • 13. MPI_Comm_rank - digunakan untuk mengetahui rank dari prosesor dalam com- municatornya MPI_Comm_size - digunakan untuk mengetahui banyaknya prosesor yang ada dalam communicator. Output program : Processor 0 of 4 : Hello World! Processor 1 of 4 : Hello World! Processor 2 of 4 : Hello World! Processor 3 of 4 : Hello World! Gambar 3: Output kode 20 3.3.2 Point-to-Point Communications and Messages 1. Blocking Communication Operasi komunikasi yang mendasar dalam MPI adalah komunikasi point- to-point, yang merupakan komunikasi langsung antara dua prosesor, satu diantaranya mengirim dan satu diantaranya menerima. dalam mengirim dan menerima, message terdiri dari envelope yang berisi source dan des- tination processor, dan body yang berisi data sebenarnya yang dikirim. MPI menggunakan tiga informasi pada message body nya secara eksibel, yaitu : (a) Buer - lokasi awal dalam memori dimana data yang akan dikirim ditemukan atau tempat dimana data yang akan diterima disimpan. (b) Datatype - tipe data yang akan dikirim (c) Count - jumlah item data yang akan dikirim Beberapa contoh fungsi dalam point-to-point communication adalah pros- es mengirim (send) dan proses menerima (receive). Keduua fungsi terse- but menghalangi (blocking) proses pemanggilan hingga operasi komunikasi tersebut selesai. Blocking bisa menjadi sebab terjadinya deadlock. Dead- lock terjadi ketika 2 atau lebih proses di-block dan tiap proses menung- gu proses yang lain untuk membuat progress. bentuk umum dari proses mengirim dan menerima (keduanya merupakan proses blocking) sebagai berikut : (a) Fungsi mengirim (send) message : Kode 21 Fungsi mengirim (send) int MPI_Send(void *buf, int count, MPI_Datatype dtype, int dest, int tag, MPI_Comm comm); 13
  • 14. (b) Fungsi menerima (receive) message : Kode 22 Fungsi menerima (receive) int MPI_Recv(void *buf, int count, MPI_Datatype dtype, int source, int tag, MPI_Comm comm, MPI_Status *status); Contoh program point-to-point communication sebagai berikut : Kode 23 Program point-to-point communication /* simple send and receive */ #include stdio.h #include mpi.h void main (int argc, char **argv) { int myrank; MPI_Status status; double a[100]; MPI_Init(argc, argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, myrank); /* Get rank */ if( myrank == 0 ) /* Send a message */ MPI_Send( a, 100, MPI_DOUBLE, 1, 17, MPI_COMM_WORLD ); else if( myrank == 1 ) /* Receive a message */ MPI_Recv( a, 100, MPI_DOUBLE, 0, 17, MPI_COMM_WORLD, status ); MPI_Finalize(); /* Terminate MPI */ } Keterangan : Dalam program ini proses 0 mengirim sebuah message ke proses 1, dan proses 1 menerimanya. Program di bawah ini merupakan contoh terjadinya kasus deadlock . Tidak ada messages yang dikirim maupun messages yang diterima. 14
  • 15. Kode 24 Program deadlock /* simple deadlock */ #include stdio.h #include mpi.h void main (int argc, char **argv) { int myrank; MPI_Status status; double a[100], b[100]; MPI_Init(argc, argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, myrank); /* Get rank */ if( myrank == 0 ) { /* Receive, then send a message */ MPI_Recv( b, 100, MPI_DOUBLE, 1, 19, MPI_COMM_WORLD, status ); MPI_Send( a, 100, MPI_DOUBLE, 1, 17, MPI_COMM_WORLD ); } else if( myrank == 1 ) { /* Receive, then send a message */ MPI_Recv( b, 100, MPI_DOUBLE, 0, 17, MPI_COMM_WORLD, status ); MPI_Send( a, 100, MPI_DOUBLE, 0, 19, MPI_COMM_WORLD ); } MPI_Finalize(); /* Terminate MPI */ } 2. NonBlocking Communication MPI menyediakan cara lain untuk operasi pengiriman dan penerimaan message. Dalam hal ini memungkinkan untuk memisahkan inisialisasi pengiriman atau penerimaan dari proses penyelesaiannya. Pemanggilan pertama adalah untuk inisialisasi dan pemanggilan kedua adalah menye- lesaikannya. Pemakaian yang selektif dari rutin nonblocking memudahkan pemrogram untuk menghindari deadlock. Contoh program di bawah ini merupakan berpaikan dari contoh program di atas yang memanfaatkan nonblocking communication. 15
  • 16. Kode 25 Program non-blocking communication /* deadlock avoided */ #include stdio.h #include mpi.h void main (int argc, char **argv) { int myrank; MPI_Request request; MPI_Status status; double a[100], b[100]; MPI_Init(argc, argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, myrank); /* Get rank */ if( myrank == 0 ) { /* Post a receive, send a message, then wait */ MPI_Irecv( b, 100, MPI_DOUBLE, 1, 19, MPI_COMM_WORLD, request ); MPI_Send( a, 100, MPI_DOUBLE, 1, 17, MPI_COMM_WORLD ); MPI_Wait( request, status ); } else if( myrank == 1 ) { /* Post a receive, send a message, then wait */ MPI_Irecv( b, 100, MPI_DOUBLE, 0, 17, MPI_COMM_WORLD, request ); MPI_Send( a, 100, MPI_DOUBLE, 0, 19, MPI_COMM_WORLD ); MPI_Wait( request, status ); } MPI_Finalize(); /* Terminate MPI */ } Keterangan : Proses 0 mencoba untuk melakukan pertukaran message dengan proses 1. Setiap proses dimulai dengan mem-posting proses penerimaan message ke proses yang lain. Kemudian setiap proses mengirim blocking message dan mengunggu proses penerimaan yang sebelumnya di-posting hingga selesai. 3.3.3 Collective Communication Rutin collective communication mentransmisikan data diantara senua proses yang ada dalam sebuah grup (communicator). Hal pernting yang perlu dicatat bahwa komunikasi ini tidak menggunakan mekanisme tag dari proses pemang- gilan pengiriman/penerimaan. Maka dari itu user harus memastikan semua prosesor mengeksekusi pemanggilam collective communication yang sama dan mengeksekusinya dalam order yang sama. 1. Barrier Synchronization Ada beberapa kasus dimana beberapa prosesor tidak dapat memproses instruksi selanjutnya sebelum prosesor yang lain selesai menjalankan in- struksinya saat itu. Rutin MPI_Barrier mem-blok proses pemanggilan 16
  • 17. hingga semua proses yang ada dalam grup telah memanggil rutin terse- but. syntax umum MPI_Barrier adalah sebagai berikut : Kode 26 Fungsi Barrier int MPI_Barrier ( MPI_Comm comm ) 2. Broadcast Rutin MPI_Bcast memungkinkan programmer untuk mengkopi data dari mem- ori prosesor induk ke lokasi memori yang sama pada prosesor yang lain dalam communicator. Gambar 4: Contoh sederhana dari Broadcast syntax: Kode 27 Fungsi MPI_Bcast MPI_Bcast ( send_buffer, send_count, send_type, rank, comm ) Argumen-argumen dari rutin ini adalah : send_buer in/out alamat awal dari buer pengiriman send_count in jumlah elemen-elemen dalam buer pegiriman send_type in tipe data dari elemen-elemen dalam buer pengiriman rank in rank dari proses induk comm in mpi communicator Kode 28 Fungsi MPI_Bcast int MPI_Bcast ( void* buffer, int count, MPI_Datatype datatype, int rank, MPI_Comm comm ) Contoh program : 17
  • 18. Kode 29 Program contoh MPI_Bcast #include mpi.h void main(int argc, char *argv[]) { int rank; double param; MPI_Init(argc, argv); MPI_Comm_rank(MPI_COMM_WORLD,rank); if(rank==0) param=23.0; MPI_Bcast(param,1,MPI_DOUBLE,0,MPI_COMM_WORLD); printf(P:%d after broadcast parameter is %f n,rank,param); MPI_Finalize(); } Output program: P: 0 after broadcast param is 23. P: 2 after broadcast param is 23. P: 3 after broadcast param is 23. P: 1 after broadcast param is 23. Gambar 5: Output kode 29 3.4 Reduction Dengan MPI_Reduce memungkinkan programmer untuk : 1. mengumpulkan data dari tiap-tiap prosesor 2. mereduksi data-data tersebut ke sebuah nilai tunggal 3. dan menyimpan hasil reduksi tersebut ke prosesor induk 18
  • 19. Gambar 6: A Simple Reduction Example syntax : Kode 30 Fungsi reduction MPI_Reduce( send_buffer, recv_buffer, count, data_type, reduction_operation, rank_of_receiving_process, communicator ) The arguments for this routine are: send_buffer in alamat dari buer pengiriman recv_buffer out alamat dari buer penerimaan count in banyaknya elemen-elemen dari buer pengiriman data_type in tipe data dari elemen-elemen dalam buer pengiriman reduction_operation in operasi reduksi yang dilakukan rank_of_receiving_process in rank dari proses induk comm in mpi communicator MPI_Reduce mengkombinasikan yang ada dalam buer pengiriman, dan melakukan operasi spesik ( seperti : sum, min, max) dan mengembalikan hasil- nya ke buer pernerimaan pada prosesor induk. Beberapa operasi yang tersedia dalam MPI_Reduce antara lain : 19
  • 20. Tabel 2: Operasi-operasi yang tersedia dalam MPI_Reduce Operation Description MPI_MAX maximum MPI_MIN minimum MPI_SUM sum MPI_PROD product MPI_LAND logical and MPI_BAND bit-wise and MPI_LOR logical or MPI_BOR bit-wise or MPI_LXOR logical xor MPI_BXOR bitwise xor Contoh program : Kode 31 Program MPI_Reduce #include stdio.h #include mpi.h void main(int argc, char *argv[]) { int rank; int source,result,root; /* run on 4 processors */ MPI_Init(argc, argv); MPI_Comm_rank(MPI_COMM_WORLD,rank); root=0; source=rank+1; MPI_Barrier(MPI_COMM_WORLD); MPI_Reduce(source,result,1,MPI_INT,MPI_SUM,root,MPI_COMM_WORLD); if(rank==root) printf(PE:%d MPI_PROD result is %d n,rank,result); MPI_Finalize(); } Output: PE:0 MPI_SUM result is 10 Gambar 7: Output program 31 3.5 Gather Rutin MPI_Gather merupakan satu bentuk all-to-one communication. Keti- ka MPI_Gather dipanggil, setiap proses (termasuk proses induk) mengirimkan 20
  • 21. buer pengirimannya ke proses induk. Proses induk kemudian menerimanya dan menyimpannya. Gambar 8: A Simple Gather Example Dalam proses berikut, nilai data A pada tiap prosesor di gather dan dipin- dahkan ke prosesor 0 dalam locasi memori yang bersebelahan. Syntax: Kode 32 Fungsi MPI_Gather MPI_Gather ( send_buffer, send_count, send_type, recv_buffer, recv_count, recv_type, recv_rank, comm ) Argumen-argumen dari rutin ini adalah : send_buffer in alamat awal dari buer pengiriman send_count in jumlah elemen-elemen dari buer pengiriman send_type in tipe data dari elemen-elemen buer pengiriman recv_buffer out alamat awal dari buer penerimaan recv_count in jumlah elemen-elemen dari buer pengiriman recv_type in tipe data dari elemen-elemen buer penerimaan recv_rank in rank dari proses penerimaan comm in mpi communicator 21
  • 22. Kode 33 Program MPI_Gather #include stdio.h #include mpi.h void main(int argc, char *argv[]) { int rank,size; double param[16],mine; int sndcnt,rcvcnt; int i; MPI_Init(argc, argv); MPI_Comm_rank(MPI_COMM_WORLD,rank); MPI_Comm_size(MPI_COMM_WORLD,size); sndcnt=1; mine=23.0+rank; if(rank==0) rcvcnt=1; MPI_Gather(mine,sndcnt,MPI_DOUBLE,param,rcvcnt,MPI_DOUBLE,0,MPI_COMM_WORLD); if(rank==0) for(i=0;isize;++i) printf(PE:%d param[%d] is %f n,rank,i,param[i]); MPI_Finalize(); } Output program : PE:0 param[0] is 23.000000 PE:0 param[1] is 24.000000 PE:0 param[2] is 25.000000 PE:0 param[3] is 26.000000 Gambar 9: Output Kode 33 3.6 Scatter Rutin MPI_Scatter merupakan bentuk one-to-all communication. Data yang berbeda dari proses induk dikirimkan ke setiap proses. Ketika MPI_Scatter dipanggil, proses induk memecah satu set dari lokasi memori yang bersebela- han menjadi potongan yang sama dan mengirimkan satu potongan ke setiap prosesor. 22
  • 23. Gambar 10: Contoh sederhana dari Scatter Syntax: Kode 34 Fungsi MPI_Scatter int MPI_Scatter ( void* send_buffer, int send_count, MPI_datatype send_type, void* recv_buffer, int recv_count, MPI_Datatype recv_type, int rank, MPI_Comm comm ) Argumen-argumen dari rutin ini adalah : send_buer in alamat awal dari buer pengiriman send_count in jumlah elemen-elemen dalam buer pengiriman yang akan dikirim ke setiap proses (bukan jumlah total yanng akan dikirim) send_type in tipe data dari elemen-eemen dalam buer pengiriman recv_buer out alamat awal dari buer penerimaan recv_count in jumlah elemen-elemen dari buer penerimaan recv_type in tipe data dari elemen-elemen dari buer penerimaan rank in rank dari proses pengiriman comm in mpi communicator Kode program : 23
  • 24. Kode 35 Program MPI_Scatter #include stdio.h #include mpi.h void main(int argc, char *argv[]) { int rank,size,i; double param[8],mine; int sndcnt,rcvcnt; MPI_Init(argc, argv); MPI_Comm_rank(MPI_COMM_WORLD,rank); MPI_Comm_size(MPI_COMM_WORLD,size); rcvcnt=1; if(rank==0) { for(i=0;i4;++i) param[i]=23.0+i; sndcnt=1; } MPI_Scatter(param,sndcnt,MPI_DOUBLE,mine,rcvcnt,MPI_DOUBLE,0,MPI_COMM_WORLD); for(i=0;isize;++i) { if(rank==i) printf(P:%d mine is %f n,rank,mine); fflush(stdout); MPI_Barrier(MPI_COMM_WORLD); } MPI_Finalize(); } Output program: P:0 mine is 23.000000 P:1 mine is 24.000000 P:2 mine is 25.000000 P:3 mine is 26.000000 Gambar 11: Output kode 35 24