MPI Grid Komputing
MPI Grid Komputing
Disusun oleh
2010
Instalasi
A. Persiapan
MPICH memerlukan sistem operasi dan beberapa program lain untuk brjalan. Sistem
yang diperlukan haruslah terlebih dulu ada sebelum MPICH di-install. Adapun kebutuhan
sistem tersebut antara lain:
B. Instalasi MPI
2. Setelah muncul screenshot seperti di atas, klik Next, sehingga akan muncul
jendela yang menampilkan kebutuhan system seperti berikut:
3. Selanjutnya akan muncul jendela yang menampilkan hak cipta dan persetujuan
lisensi. Pilih radio button “I Agree”, kemudian klik next.
4. Kemudian, muncul jendela Process Manager Setup. Di dalam jendela ini
terdapat pemberitahuan untuk mengingat kata kunci atau passphrase yang
akan digunakan untuk menjalankan service SPMD. SPMD merupakan process
manager yang berjalan baik pada Unix maupun Windows. SPMD mampu
menjalankan proses dari berbagai platform jika format binernya sama.
Passphrase yang sama pada MPICH harus digunakan untuk semua komputer.
5. Berikutnya, tentukan direktori dimana kita akan meng-install MPICH2. Jika tidak
diberikan, secara default installer MPICH2 akan meletakkannya di C:\Program
Files\MPICH2\. Tentukan juga siapa yang bisa menggunakan MPICH pada
komputer, hanya user yang sedang login atau semua user
6. Muncul notifikasi bahwa installer telah siap untuk melakukan instalasi MPICH2,
untuk melanjutkan instalasi, klik next
C. Konfigurasi
1. Pertama, dibuat projek melalui File – New – Project. Berikan nama projek, dalam hal
ini, misalnya MPI_Hello.
2. Selanjutnya, Klik OK. Pada window Win32 Application Wizard, klik Next.
3. Hilangkan centang “Precompiled Header” yang secara default tercentang, kemudian
klik Finish
D. Konfigurasi Projek
1. Setelah projek dibuat, klik Project – Properties. Pilih pada menu C/C++ - General.
Pada bagian “Additional Include Directories” berikan direktori dimana direktori
include instalasi MPICH berada, secara default, direktori include ini berada ada
direktori C:\Program Files\MPICH2\include
2. Selanjutnya, pada menu tree C/C++ - Advanced di bagian Compile As, pilih Compile
as C Code (TC)
3. Kemudian pada menu tree C/C++ - Linker di bagian Additional Library Directories,
berikan direktori dimana direktori library instalasi MPICH berada, secara default,
direktori include ini berada ada direktori C:\Program Files\MPICH2\lib.
4. Langkah terakhir, pada bagian additional dependencies, tambahkan mpi.lib.
B. Source Code
Berikut ini adalah Source Code dari Prime Sum:
# include <stdio.h>
# include <stdlib.h>
# include "mpi.h"
/***********************************/
/***********************************/
/*
Tujuan :
Penulis :
John Burkardt
Dimodifikasi oleh :
dimas
aji
riko
restio
Referensi:
/*
Inisialisasi MPI
*/
MPI_Init ( &argc, &argv );
/*
Mendapatkan Jumlah dari proses
*/
MPI_Comm_size ( MPI_COMM_WORLD, &p );
/*
Menentukan Rank dari suatu proses
*/
MPI_Comm_rank ( MPI_COMM_WORLD, &id );
/*
Proses pembacaan input data dari argv
*/
if (argc != 2) {
if (id == master)
printf(" Petunjuk: mpiexec -n <jumlah proses> uts.exe <jumlah data> \n
Contoh : mpiexec -n 2 uts.exe 1000 \n");
MPI_Finalize();
exit(0);
}else{
/*
Sekarang setiap proses (termasuk master) menentukan porsi dari jangkauan data
mengikuti rumus dibawah ini yang akan membagi jangkauan data dari 2 hingga N
secara merata keseluruh proses
*/
n_lo = ( ( p - id ) * 1
+ ( id ) * n )
/(p ) + 1;
n_hi = ( ( p - id - 1 ) * 1
+ ( id + 1 ) * n )
/(p );
/*
setiap proses menambahkan masukannya
*/
wtime = MPI_Wtime ( ); //inisialsisasi waktu awal
total_local = 0.0;
for ( i = n_lo; i <= n_hi; i++ )
{
prime = 1;
for ( j = 2; j < i; j++ )
{
if ( i % j == 0 )
{
prime = 0;
break;
}
}
if ( prime == 1 )
{
total_local = total_local + i;
}
}
/*
setiap proses yang bekerja mengirim kembali hasilnya kepada master
*/
if ( id != master )
{
}
/*
Master menginisialisasi jumlah dengan nilai local miliknya
dan kemudian mengirim pesan ke proses yang lain.
*/
else
{
total = total_local;
for ( i = 1; i < p; i++ )
{
MPI_Recv ( &total_local, 1, MPI_INT, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD,
&status );
total = total + total_local;
}
}
/*
baris perintah diatas dapat saja diganti dengan bari perintah tunggal:
/*
mematikan MPI.
*/
MPI_Finalize ( );
return 0;
}
C. Analisis
ada beberapa teknik dalam mengeksekusi file MPI yang dilakukan kelompok kami, teknik itu
adalah sebagai berikut:
a. Dengan 1 komputer
1. Tidak terhubung ke jaringan
2. Hanya melibatkan 1 host dengan IP Adress 192.168.1.7
3. Pada setiap PC mendaftarkan acount usernya pada wmpiregister.exe
4. Kemudian jalankan perintah mpiexec hosts 192.168.1.7 aji.exe 100
5. Outputnya adalah sebagai berikut :
b. Dengan 2 komputer
1. Arsitektur jaringan yang kami gunakan pada percobaan program ini adalah Peer 2
Peer
SYUKUR MPI1
2. Pada analisis ini kami melibatkan 2 komputer sebagai host dengan IP Adress sebagai
berikut:
MPI1 : 192.168.1.7
SYUKUR : 192.168.1.4
3. Pada setiap PC mendaftarkan acount usernya pada wmpiregister.exe
Kemudian jalankan perintah mpiexec hosts 192.168.1.7 192.168.1.4 aji.exe 100
c. Dengan 3 Komputer
Merupakan sebuah program yang digunakan untuk menghitung luas dibawah kurva. Luas
dibawah kurva di bagi-bagi kedalam sebuah bentuk trapesium yang kecil-kecil, berdasarkan
nilai x yang dimiliki yang kemudian dimasukan kedalam fungsi menghasilkan nilai y. Untuk
menghitung trapesium nilai xn, xn+1, yn, yn+1 dimasukkan ke dalam fungsi ½ ((xn+1)-
(xn))*(yn+yn+1)
B. Source Code
/*--------------------------------------------*/
/* Saleh Elmohamed 1996. */
/* saleh@npac.syr.edu. */
/* 443-9182 */
/* Example for CPS-615. */
/*--------------------------------------------*/
#include <stdio.h>
#include <math.h>
#include <mpi.h>
double simpson();
#if 0
exact_val_of_Pi = 4.0 * log(approx_val);
#endif
double integrate_f(double x)
{
return 4.0/(1.0 + x * x); /* compute and return value */
}
b. Dengan 2 komputer
1. Arsitektur jaringan yang digunakan adalah peer 2 peer
SYUKUR MPI1
ALFATH-PC
2. Hanya melibatkan 3 host dengan IP Adress
SYUKUR : 192.168.1.4
MPI1: 192.168.1.7
ALFATH-PC : 192.168.1.1
3. Pada setiap PC mendaftarkan acount usernya pada wmpiregister.exe
Kemudian jalankan perintah mpiexec -hosts 192.168.1.1 192.168.1.4
MPI_simpson.exe
4. Outputnya adalah sebagai berikut :
Merupakan sebuah program yang digunakan untuk mengurutkan sejumlah data acak.
Mekanismenya adalah membagi data ke dalam bagian yang kecil. Setiap bagian yang kecil
tersebut data diurutkan dan kemudian di satukan kembali sehingga lebih mudah untuk
diurutkan:
B. Source Code
return result;
}
/*untuk qsort() */
int compare(const void *p1, const void *p2) {
return *(int *)p1 - *(int *)p2;
}
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
/* Check argument */
if (!ISPOWER2(nprocs)) {
if (myrank == ROOT) printf("Jumlah Prosesor haruslah 2.\n");
return MPI_Finalize();
}
if (datasize%nprocs != 0) {
if (myrank == ROOT) printf("Besar data harus dapat dibagi jumlah prosesor.\n");
return MPI_Finalize();
}
/* Generate data */
if (myrank == ROOT) {
data = (int *)malloc(datasize * sizeof(int));
for (i = 0; i < datasize; i++) {
data[i] = rand()%99 + 1;
}
}
/* Scatter data */
localsize = datasize / nprocs;
localdata = (int *) malloc(localsize * sizeof(int));
MPI_Scatter(data, localsize, MPI_INT, localdata, localsize, MPI_INT, ROOT,
MPI_COMM_WORLD);
/* Sort localdata */
qsort(localdata, localsize, sizeof(int), compare);
#ifdef DEBUG
if (sorted(localdata, nprocs*localsize)) {
printf("\nParallel sorting berhasil.\n\n");
} else {
printf("\nParallel sorting gagal.\n\n");
}
#endif
free(localdata);
p = finish - start;
printf("Waktu Proses Parallel : %.8f\n", p);
/* Sequential sort */
start = MPI_Wtime();
qsort(data, datasize, sizeof(int), compare);
finish = MPI_Wtime();
free(data);
s = finish - start;
printf("Waktu Proses Sequential : %.8f\n", s);
return MPI_Finalize();
}
C. Analisis
a. Dengan 1 Komputer
1. Tidak terhubung ke jaringan
2. Hanya melibatkan 1 host dengan IP Adress 192.168.1.7, pc=mpi1
3. Kemudian jalankan perintah mpiexec -n 1 MPI_merge_sort.exe
4. Outputnya adalah sebagai berikut :
b. Dengan 2 komputer
1. Arsitektur jaringan yang digunakan adalah peer 2 peer
SYUKUR MPI1
ALFATH-PC
2. Hanya melibatkan 3 host dengan IP Adress
SYUKUR : 192.168.1.4
MPI1: 192.168.1.7
ALFATH-PC : 192.168.1.1
3. Pada setiap PC mendaftarkan acount usernya pada wmpiregister.exe
Kemudian jalankan perintah mpiexec -hosts 192.168.1.1 192.168.1.4
MPI_merge_sort.exe
4. Outputnya adalah sebagai berikut :
Dengan 2 komputer host menghasilkan peningkatan kecepatan= 0.00799751 detik
c. Dengan 3 Komputer
Belum bisa menjalankan file exe melalui 3 host
Setelah ditelaah Source Codenya, ditemukan bahwa program ini hanya dapat digunakan
oleh paling banyak 2 processor
Kesimpulan
Setelah mengeksekusi 3 program yang berbeda dan dengan teknik yang berbeda pula,
didapat table sebagai berikut:
Dari table tersebut dapat di ambil kesimpulan bahwa semakin banyak processor yang
digunakan akan semakin lama waktu proses yang dibutuhkan untuk mengeksekusi
sebuah program dengan metode komputasi parallel.
Hal ini mungkin disebabkan karena cakupan data yang kecil sehingga belum efektif
penggunaan komputasi parallel pada program di atas