Anda di halaman 1dari 22

Laporan Tugas

Perkalian Matriks Menggunakan MPI

Oleh:

Giovani Lasberia Butarbutar (11S14003)


Astri Neva Y. Sibuea (11S14013)
Lukas Sinambela (11S14039)

Mata Kuliah Sistem Paralel dan Terdistribusi


Fakultas Teknik Informatika dan Elektro
Institut Teknologi Del
Laguboti
2017
DAFTAR ISI

DAFTAR ISI.................................................................................................................................. 2

DAFTAR TABEL ......................................................................................................................... 3

DAFTAR GAMBAR ..................................................................................................................... 4

I. PENDAHULUAN ................................................................................................................ 5

1.1 Latar Belakang ............................................................................................................... 5

1.2 Tujuan ............................................................................................................................. 5

II. LANDASAN TEORI ........................................................................................................... 6

2.1 Perkalian Matriks .......................................................................................................... 6

2.2 MPI dan OpenMP .......................................................................................................... 6

III. IMPLEMENTASI ............................................................................................................... 9

3.1 Kebutuhan Implementasi .............................................................................................. 9

3.2 Hasil Implementasi ......................................................................................................... 9

IV. ANALISIS .......................................................................................................................... 19

V. KESIMPULAN .................................................................................................................. 21

DAFTAR PUSTAKA .................................................................................................................. 22

SARJANA TEKNIK INFORMATIKA 2


DAFTAR TABEL

Tabel 1 MPI vs. OpenMP ............................................................................................................... 7

Tabel 2 Spesifikasi Hardware ......................................................................................................... 9

Tabel 3 Spesifikasi Software .......................................................................................................... 9

Tabel 4 Screenshot Hasil Eksekusi ............................................................................................... 13

Tabel 5 Hasil Eksekusi Kode Program ......................................................................................... 19

SARJANA TEKNIK INFORMATIKA 3


DAFTAR GAMBAR

Gambar 1 Message Passing Interface (MPI) .................................................................................. 7

Gambar 2 Open Multi Processing ................................................................................................... 7

Gambar 3 Grafik Jumlah Proses terhadap Waktu Eksekusi ......................................................... 20

SARJANA TEKNIK INFORMATIKA 4


I. PENDAHULUAN

1.1 Latar Belakang

Dalam matematika, matriks adalah sekumpulan bilangan, simbol atau ekspresi yang disusun
dalam bentuk persegi panjang menurut baris dan kolom. Bilangan, simbol atau ekspresi yang
terdapat di dalam suatu matriks disebut elemen matriks. Salah satu operasi yang dapat dilakukan
dengan menggunakan matriks adalah perkalian. Perkalian matriks adalah salah satu operasi yang
sangat diperlukan dalam berbagai masalah komputasi namun terkadang membutuhkan waktu yang
lama untuk dapat melakukan perkalian matriks terlebih dengan cara manual. Untuk mempercepat
perkalian matriks dapat menggunakan pemrograman paralel.
Pemrograman paralel adalah teknik pemrograman komputer yang memungkinkan eksekusi
perintah/operasi secara bersamaan baik dalam komputer yang memiliki satu processor maupun
komputer yang memiliki lebih dari satu processor. Semakin banyak hal yang bisa dilakukan secara
bersamaan (dalam waktu yang sama) maka semakin banyak pekerjaan yang bisa diselesaikan.
Pemrograman paralel dapat diterapkan pada MPI (Message Passing Interface) sehingga perkalian
matriks dapat dilakukan dengan hasil yang akurat dan dalam waktu yang singkat.

1.2 Tujuan

Adapun tujuan pengimplementasian perkalian matriks dengan menggunakan MPI adalah


sebagai berikut:
1) Memenuhi syarat kelulusan mata kuliah Sistem Paralel dan Terdistribusi program studi
Sarjana Teknik Informatika semester genap (semester VI) yang diampuh oleh Dosen
Pandapotan Napitupulu S.T., M.T.
2) Memahami proses perkalian matriks dengan ordo 1600 x 1600 dengan menggunakan
MPI.
3) Mampu merancang sebuah sistem yang baik dengan cara mengimplementasikan
perkalian matriks dengan menggunakan MPI sebagai solusi dari masalah tersebut.
4) Mampu menganalisa, membandingkan, dan menentukan jumlah proses yang paling
optimal dalam perkalian matriks dengan menggunakan MPI.

SARJANA TEKNIK INFORMATIKA 5


II. LANDASAN TEORI

2.1 Perkalian Matriks

Matriks dalam matematika merupakan kumpulan bilangan, simbol atau ekspresi berbentuk
persegi panjang yang disusun menurut baris dan kolom. Bilangan-bilangan yang terdapat pada
suatu matriks disebut dengan elemen atau disebut juga anggota dari suatu matriks. Matriks banyak
dimanfaatkan untuk menyelesaikan berbagai permasalahan matematika misalnya dalam
menemukan solusi masalah persamaan linear, transformasi linear yakni bentuk umum dari fungsi
linear contohnya rotasi dalam 3 dimensi. Matriks juga seperti variabel biasa, sehingga matrikspun
dapat dimanipulasi misalnya dikalikan, dijumlah, dikurangkan, serta didekomposisikan.
Menggunakan representasi matriks, perhitungan dapat dilakukan dengan lebih terstruktur.
Perkalian matriks dilakukan dengan cara tiap baris dikalikan dengan tiap kolom, selanjutnya
dijumlahkan pada kolom yang sama.

Contoh perhitungan:

2.2 MPI dan OpenMP

MPI adalah sebuah spesifikasi library untuk message passing, sedang OpenMP adalah
sebuah API (Application Program Interface) yang digunakan secara eksplisit sehingga
menjadikannya multi-thread, shared-memory parallelism. OpenMP sendiri sebenarnya adalah API
yang digunakan untuk FORTRAN, C, dan C++ programming.

SARJANA TEKNIK INFORMATIKA 6


Gambar 1 Message Passing Interface (MPI)

Gambar 2 Open Multi Processing

Tabel 1 MPI vs. OpenMP

MPI OpenMP
Distributed memory model Shared memory model
On Distributed network On Multicore processor
Message based Directive based
Flexible and expressive Easier to program and debug

MPI (Message Passing Interface) merupakan sebuah pustaka yang saat ini banyak
digunakan untuk melakukan paralelisasi pada permasalahanpermasalahan sains yang
membutuhkan kekuatan komputasi yang besar yang diselesaikan pada komputer klaster. Seiring
dengan kemajuan zaman sistem High-Performance Computer pada setiap node-nya saat ini
memiliki banyak core yang tidak hanya 1 atau 2 core di dalamnya bahkan hingga puluhan core
yang siap digunakan untuk melakukan komputasi yang besar dengan waktu komunikasi antar core
yang singkat sehingga mempersingkat waktu komputasi pada permasalahan yang besar secara

SARJANA TEKNIK INFORMATIKA 7


menyeluruh. Pemrograman hybrid yang mengombinasikan MPI dan OpenMP sejak dekade
terakhir ini sangat populer digunakan, MPI digunakan untuk melakukan paralelisasi pada level
antar node sedangkan OpenMP berperan dalam paralelisasi antar core dalam sebuah node.

SARJANA TEKNIK INFORMATIKA 8


III. IMPLEMENTASI

3.1 Kebutuhan Implementasi


Spesifikasi hardware untuk kebutuhan implementasi dapat dilihat pada Tabel 2 berikut ini.

Tabel 2 Spesifikasi Hardware

1. Processor Core i5
2. Memory 4 GB
3. Harddisk 500 GB
Spesifikasi software untuk kebutuhan implementasi dapat dilihat pada Tabel 3 berikut ini.

Tabel 3 Spesifikasi Software

1. Operating System Linux


2. Editor Gedit
3. Compiler GNU GCC 5.5

3.2 Hasil Implementasi


Berikut ini adalah hasil implementasi yang telah dilakukan.

#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>

#define SIZE 1600 /* Size of matrices */

int A[SIZE][SIZE], B[SIZE][SIZE], C[SIZE][SIZE];

void fill_matrix(int m[SIZE][SIZE])


{
static int n=0;
int i, j;
for (i=0; i<SIZE; i++)
for (j=0; j<SIZE; j++)
m[i][j] = n++;
}

void print_matrix(int m[SIZE][SIZE])


{
int i, j = 0;
for (i=0; i<SIZE; i++) {
printf("\n\t| ");

SARJANA TEKNIK INFORMATIKA 9


for (j=0; j<SIZE; j++)
printf("%2d ", m[i][j]);
printf("|");
}
}

int main(int argc, char *argv[])


{
int myrank, P, from, to, i, j, k;
double start_time, end_time;

MPI_Init (&argc, &argv);


MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* who am i */
MPI_Comm_size(MPI_COMM_WORLD, &P); /* number of processors */

if (SIZE%P!=0) {
if (myrank==0) printf("Matrix size not divisible by number of processors\n");
MPI_Finalize();
exit(0);
}

from = myrank * SIZE/P;


to = (myrank+1) * SIZE/P;

if (myrank==0) {
fill_matrix(A);
fill_matrix(B);
}
start_time = MPI_Wtime();
MPI_Bcast (B, SIZE*SIZE, MPI_INT, 0, MPI_COMM_WORLD);
MPI_Scatter (A, SIZE*SIZE/P, MPI_INT, A[from], SIZE*SIZE/P, MPI_INT, 0,
MPI_COMM_WORLD);

printf("computing slice %d (from row %d to %d)\n", myrank, from, to-1);


//start_time = MPI_Wtime();
for (i=from; i<to; i++)
for (j=0; j<SIZE; j++) {
C[i][j]=0;
for (k=0; k<SIZE; k++)
C[i][j] += A[i][k]*B[k][j];
}

end_time = MPI_Wtime();
MPI_Gather (C[from], SIZE*SIZE/P, MPI_INT, C, SIZE*SIZE/P, MPI_INT, 0,
MPI_COMM_WORLD);

SARJANA TEKNIK INFORMATIKA 10


if (myrank==0) {
printf("\n\n");
print_matrix(A);
printf("\n\n\t * \n");
print_matrix(B);
printf("\n\n\t = \n");
print_matrix(C);
printf("\n\n");
}
printf("Running Time : %f", end_time - start_time);

MPI_Finalize();
return 0;
}

Berdasarkan scriptcode program perkalian matriks diatas, terdapat tiga fungsi selama proses
pembuatan sampai dengan penghitungan running time pengeksekusian program. Berikut
merupakan penjelasan tiga fungsi tersebut beserta syntax-syntax open MPI yang digunakan.

o void fill_matrix(int m[SIZE][SIZE])


Fungsi ini merupakan fungsi yang akan melakukan penetapan (set) matriks yang akan
digunakan untuk perkalian nantinya. Fungsi fill_matrix akan melakukan looping sampai
batas SIZE yang telah ditentukan (SIZE = 1600) dalam penetapan matriksnya.
o void print_matrix(int m[SIZE][SIZE])
Fungsi ini merupakan fungsi yang akan mencetak matriks yang akan dioperasikan (kali),
yaitu matriks yang telah di-set fungsi fill_matrix terlebih dahulu beserta dengan hasil
perkalian matriksnya.
o int main(int argc, char *argv[])
Fungsi ini merupakan fungsi utama yang akan melakukan pemanggilan fungsi
fill_matrix(int m[SIZE][SIZE]) dan print_matrix(int m[SIZE][SIZE]).
Dalam fungsi ini akan dilakukan pengecekan terhadap jumlah yang akan diciptakan,
dengan kodisi jika ukuran matriks (SIZE) mode jumlah process sama dengan nol, maka
penghitungan perkalian matriks tidak dapat dilakukan. Selain itu, jika ada proses yang tidak
dapat bagian maka akan dilakukan lagi pen-settan matriks dengan pemanggilan fungsi fill-

SARJANA TEKNIK INFORMATIKA 11


matrix. Bukan hanya itu saja, yang paling penting dalam program ini merupakan fungsi
yang menggunakan fungsi/sintax open MPI (mpi.h), antara lain:
- MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
Fungsi yang akan mengembalikan rangking atau peringkat dari sebuah proses
berdasarkan jumlah proses yang ada.
- MPI_Comm_size(MPI_COMM_WORLD, &P);
Fungsi yang akan menetapkan jumlah proses yang akan digunakan.
- MPI_Bcast (B, SIZE*SIZE, MPI_INT, 0, MPI_COMM_WORLD);
Fungsi yang menyiarkan pesan dari proses dengan peringkat "root" untuk semua
komunikator proses lain.
- MPI_Scatter (A, SIZE*SIZE/P, MPI_INT, A[from], SIZE*SIZE/P, MPI_INT, 0,
MPI_COMM_WORLD);
Fungsi yang melibatkan proses root yang ditunjuk pengiriman data ke semua proses
dalam komunikator.
- MPI_Gather (C[from], SIZE*SIZE/P, MPI_INT, C, SIZE*SIZE/P, MPI_INT, 0,
MPI_COMM_WORLD);
Fungsi yang mengambil unsur-unsur dari banyak proses dan mengumpulkan mereka
untuk menjadi satu proses tunggal.

Dalam fungsi main ini penghitungan running time untuk perkalian matriks menggunakan fungsi
MPI_Wtime();, hasil running time nya merupakan hasil pengurangan jumlah running time pada
saat eksekusi berakhir dengan running time pada saat penciptaan proses dimulai yaitu 0 sec.

SARJANA TEKNIK INFORMATIKA 12


Hasil eksekusi berupa screenshot dapat dilihat pada Tabel 4 berikut ini:

Tabel 4 Screenshot Hasil Eksekusi

Jumlah
No. Screenshot
n

1 1

2 2

SARJANA TEKNIK INFORMATIKA 13


3 3

4 4

5 5

SARJANA TEKNIK INFORMATIKA 14


6 6

7 7

8 8

SARJANA TEKNIK INFORMATIKA 15


9 9

10 10

11 15

SARJANA TEKNIK INFORMATIKA 16


12 20

13 30

14 40

SARJANA TEKNIK INFORMATIKA 17


15 50

16 100

SARJANA TEKNIK INFORMATIKA 18


IV. ANALISIS

Berdasarkan hasil eksekusi dari program perkalian matriks dengan ordo 1600 x 1600 yang
menggunakan nilai proses yang berbeda yaitu mulai dari n=1 hingga n=100 menghasilkan waktu
eksekusi yang berbeda-beda. Perbedaan waktu eksekusi tersebut ditunjukkan dalam tabel dan
grafik dibawah ini:

Tabel 5 Hasil Eksekusi Kode Program

Jumlah Proses Waktu Eksekusi (second)


1 39.390435
2 39.390435
3 30.311054
4 27.212921
5 24.996039
6 23.698156
7 22.924333
8 22.316591
9 22.256434
10 22.358252
15 21.343459
20 21.122137
30 21.676927
40 21.841276
50 22.351605
100 31.090621

SARJANA TEKNIK INFORMATIKA 19


Gambar 3 Grafik Jumlah Proses terhadap Waktu Eksekusi

Grafik Pengaruh Jumlah Proses terhadap Waktu EKsekusi


120

100

80

60

40

20

0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

JUMLAH PROSES Waktu Eksekusi (second)

SARJANA TEKNIK INFORMATIKA 20


V. KESIMPULAN

Berdasarkan hasil analisa yang telah dilakukan, dapat disimpulkan bahwa proses eksekusi
menggunakan multiproses tidak selalu lebih cepat daripada proses eksekusi menggunakan single
proses. Hal tersebut disebabkan oleh waktu eksekusi dihitung mulai dari penciptaan proses. Pada
saat penciptaan proses, ada kalanya waktu yang diperlukan lebih banyak daripada melakukan
operasi perkalian matriks sehingga menyebabkan waktu eksekusi lebih lama. Akan tetapi, jika
waktu eksekusi dihitung setelah penciptaan proses maka waktu eksekusi dengan menggunakan
multiproses akan selalu lebih cepat.

SARJANA TEKNIK INFORMATIKA 21


DAFTAR PUSTAKA

A, S., 2014. Algoritma Paralel. [Online]


Available at: http://salmaann.blogspot.co.id/2014/04/algoritma-paralel.html
[Accessed Wednesday March 2017].

Matematika, K., 2013. Defenisi dan Pengertian Matriks. [Online]


Available at: http://www.allmipa.com/2016/05/definisi-dan-pengertian-matriks.html
[Accessed Tuesday March 2017].

Mursito, 2011. Matrix/Perkalian. [Online]


Available at: http://computational.engineering.or.id/Matrix/Perkalian
[Accessed Wednesday March 2017].

Wikipedia, 2014. Matrix multiplication algorithm. [Online]


Available at: https://en.wikipedia.org/wiki/Matrix_multiplication_algorithm
[Accessed Wednesday March 2017].

SARJANA TEKNIK INFORMATIKA 22

Anda mungkin juga menyukai