BAB IV HASIL DAN UJI COBA Dalam bab ini akan dibahas mengenai pemanfaatan cluster untuk melakukan komputasi paralel dengan OCTAVE MPITB. Program yang digunakan sebagai uji coba adalah program perkalian matriks yang dilakukan secara paralel. Program tersebut ditulis dengan MPI yang diimplementasikan oleh OCTAVE MPITB. Program ini memanfaatkan fungsi-fungsi dasar MPI yaitu MPI_Send dan MPI_Recv untuk mengirimkan data dan menerima data antar mesin-mesin komputasi. IV.1 Analisis Permasalahan Perkalian Matriks Paralel Perkalian matriks adalah sebuah operasi matematika yang banyak dipakai di dalam komputasi. OCTAVE telah mengimplementasikan operasi perkalian matriks ini menjadi salah satu operasi dasar yang sangat mudah untuk dilakukan. Akan tetapi perkalian matriks yang dilakukan secara paralel memiliki cara yang berbeda dengan perkalian matriks yang dilakukan secara serial. Dalam melakukan operasi perkalian matriks secara paralel, perlu dilakukan dekomposisi domain atau paralelisasi data. Data harus dibagi-bagi menjadi bagian-bagian dengan ukuran yang hampir sama kemudian dikirimkan ke masing-masing mesin komputasi untuk diproses. Konsekuensi dari paralelisasi data adalah proses memerlukan komunikasi periodis untuk melakukan pertukaran 56
57 data sehingga kecepatan komunikasi data antar mesin komputasi sangat tergantung pada jaringan komputer. Penerapan metode paralelisasi data pada perkalian matriks secara paralel yang dibuat di dalam penelitian ini adalah dengan membagi ukuran matriks yang akan dikalikan menjadi bagian-bagian yang hampir sama dan kemudian dikirimkan ke mesin-mesin komputasi yang akan mengolah bagian dari matriks tersebut. Permasalahan yang dihadapi di dalam melakukan perkalian matriks paralel di dalam penelitian ini adalah perlunya sebuah algoritma untuk melakukan operasi perkalian matriks paralel. Matriks yang akan dikalikan adalah matriks persegi. Jumlah elemen matriks yang diberikan dibuat bervariasi, mulai dari matriks dengan jumlah elemen sedikit sampai jumlah elemen banyak.variasi jumlah elemen matriks ini dimaksudkan untuk mengukur kecepatan pemrosesan perkalian matriks paralel. Kecepatan proses perkalian matriks paralel untuk jumlah elemen matriks sedikit sampai dengan jumlah elemen banyak kemudian dibandingkan dengan proses perkalian matriks serial dengan dengan jumlah elemen yang sama dengan proses perkalian matriks paralel. Kecepatan masing-masing proses perkalian matriks baik secara serial dan paralel dibuat sebuah grafik yang menunjukkan kecepatan waktu pemrosesan secara paralel dan serial dengan jumlah elemen matriks yang dikalikan.
58 IV.2 Operasi Perkalian Matriks Pada OCTAVE Operasi perkalian dua buah matriks dalam OCTAVE sama dengan melakukan operasi perkalian matriks pada MATLAB. Contoh operasi perkalian matriks pada OCTAVE ditunjukkan oleh Gambar IV.1. octave > A = [12 3 5;34 65 78;1 6 8]; octave > B = [32 65 7; 56 8 98; 12 54 76]; octave > A*B ans = 612 1074 758 5664 6942 12536 464 545 1203 Gambar IV.1 Operasi Perkalian Matriks Dalam OCTAVE Gambar IV.1 adalah operasi perkalian matriks yang dilakukan di dalam OCTAVE. Gambar tersebut menunjukkan command prompt OCTAVE. Di dalam command prompt tersebut pengguna dapat memberikan perintah-perintah untuk melakukan operasi-operasi matematis seperti yang ditunjukkan oleh Gambar IV.1. Selain melalui command prompt OCTAVE, pengguna dapat membuat program yang berisi perintah-perintah OCTAVE ke dalam sebuah file dengan ekstensi.m. Program yang berisi perintah-perintah OCTAVE dapat dieksekusi oleh OCTAVE. Berikut perintah Eksekusi program eksekusi OCTAVE : pengguna@cluster0$ octave -q --eval file.m ans = 612 1074 758 5664 6942 12536 464 545 1203 Gambar IV.2 Eksekusi Program OCTAVE Gambar IV.2 menunjukkan cara untuk mengeksekusi program file.m yang berisi perintah-perintah OCTAVE. Isi file.m sama dengan perintah untuk melakukan operasi perkalian matriks yang ditunjukkan oleh Gambar IV.1.
59 IV.3 Perkalian Matriks Paralel Pada algoritma perkalian matriks paralel, matriks yang dilakukan adalah matriks A dan matriks B. Paralelisasi data dilakukan pada matriks A. Matriks A akan dibagi menjadi potongan-potongan matriks dengan ukuran yang hampir sama. Potongan-potongan matriks tersebut kemudian dikirimkan ke compute node. Matriks B dikirimkan secara keseluruhan ke komputer-komputer compute node sebagai pengali matriks A. Parelesiasi data pada matriks A dapat kita lihat pada gambar dibawah ini : Compute node 1 Matriks A1/ cell array {1,1} Matriks A Compute node 2 Gambar IV.3 Paralelisasi Data pada Matriks A Masing-masing compute node yaitu compute node 1 dan compute node 2 mengalikan potongan elemen matriks A dengan seluruh elemen matriks B. Hasil operasi perkalian yang dilakukan oleh masing-masing compute node kemudian dikirimkan ke head node dengan operasi MPI_Send. Head node akan menerima hasil operasi perkalian matriks yang dilakukan oleh compute node dengan operasi MPI_Recv. Matriks A2 / cell array {2,1} Operasi MPI_Send dan MPI_Recv yang digunakan untuk komunikasi data antara head node dan compute node adalah operasi dasar komunikasi point to point di dalam pemrograman paralel dengan MPI.
60 Gambar IV.4 Diagram Alir Fungsi Perkalian Matriks Paralel Gambar IV.4 menunjukkan diagram alir fungsi perkalian matriks paralel. Diagram alir tersebut kemudian diimplementasikan ke dalam sebuah program yang ditunjukkan oleh Gambar IV.5.
61 1. function Hasil = PerkalianMatriks(A,B) 2. [info rank] = MPI_Comm_rank(MPI_COMM_WORLD); 3. tag = 123; 4. Acell = cell(2,1); 6. Bcell = cell(1,2); 7. [row col] = size(a); 8. subrow = floor(row/2); 9. Acell{1,1} = A(1:subRow,1:end); 10 Acell{2,1} = A(subRow+1:end,1:end); 11. Bcell{1,1} = B(1:end,1:subRow); 12. Bcell{1,2} = B(1:end,subRow+1:end); 13. if(rank == 0) 14. C = cell(2,1); 15. for i=1:2 16. [info stat] = MPI_Probe(i,tag,MPI_COMM_WORLD); 17. [info count] = MPI_Get_count(stat); 18. buf = blanks(count); 19. info = MPI_Recv(buf,i,tag,MPI_COMM_WORLD); 20. pos = 0; 21. [info ret] = MPI_Unpack(buf,pos,MPI_COMM_WORLD,'X'); 22. C{i,1} = X; 23. end 24. Hasil = cell2mat(c); 25. elseif(rank == 1) 26. C1 = cell(1,2); 27. for i=1:2 28. C1{1,i} = Acell{1,1}*Bcell{1,i}; 29. end 30. M1 = cell2mat(c1); 31. [info pack1] = MPI_Pack_size(M1,MPI_COMM_WORLD); 32. buf1 = repmat(' ',1,pack1); 33. pos1 = 0; 34. info = MPI_Pack(M1,buf1,pos1,MPI_COMM_WORLD); 33. info = MPI_Send(buf1,0,tag,MPI_COMM_WORLD); 34. elseif(rank == 2) 35. C2 = cell(1,2); 36. for i=1:2 37. C2{1,i} = Acell{2,1}*Bcell{1,i}; 38. end 39. M2 = cell2mat(c2); 40. [info pack2] = MPI_Pack_size(M2,MPI_COMM_WORLD); 41. buf2 = repmat(' ',1,pack2); 42. pos2 = 0; 43. info = MPI_Pack(M2,buf2,pos2,MPI_COMM_WORLD); 44. info = MPI_Send(buf2,0,tag,MPI_COMM_WORLD); 45. end 46. end Gambar IV.5 Program Perkalian Matriks Paralel Program pada Gambar IV.5 menggunakan fungsi-fungsi MPI yang ditunjukkan oleh Tabel IV.1.
62 Tabel IV.1 Fungsi-Fungsi MPI Fungsi MPI MPI_Comm_rank MPI_Comm_size MPI_Send MPI_Recv MPI_Probe MPI_Pack_size MPI_Pack MPI_Unpack Keterangan Menentukan rangking-rangking proses. Menentukan banyaknya proses yang melakukan komputasi. Mengirimkan data. Menerima data. Melakukan blocking data yang diterima. Menentukan ukuran buffer untuk variabel yang akan di paketkan. Melakukan pemaketan variabel yang akan dikirimkan. Membuka kembali variabel yang dipaketkan. IV.4 Pengujian Program Perkalian Matriks Paralel Pengujian program perkalian matriks paralel dilakukan dengan menjalankan program perkalian matriks paralel dan melihat kecepatan pemrosesan serta beban komputasi cluster ketika sedang memroses operasi perkalian matriks paralel. Kecepatan proses perkalian matriks paralel kemudian dibandingkan dengan kecepatan proses perkalian matriks serial yang dikerjakan oleh satu komputer saja. Hasil perbandingan tersebut ditampilkan ke dalam bentuk grafik untuk menunjukkan perbedaan kecepatan proses perkalian matriks secara serial dan paralel.
63 Untuk menjalankan fungsi PerkalianMatriks() yang dideklarasikan oleh Gambar IV.5, diperlukan sebuah program untuk memanggil fungsi PerkalianMatriks() tersebut. Program ini adalah program utama yang di dalamnya terdapat inisialisasi dan terminasi program MPI. Program tersebut ditunjukkan oleh gambar IV.6. 1. info = MPI_Init; 2. [info rank] = MPI_Comm_rank(MPI_COMM_WORLD); 3. [info sz] = MPI_Comm_size(MPI_COMM_WORLD); 4. vecwaktu = 0; 5. j = 1; 6. for i=10:1000 7. mulai = MPI_Wtime(); 8. A = round(10*rand(i)); 9. B = round(10*rand(i)); 10. ret = PerkalianMatriks(A,B); 11. selesai = MPI_Wtime(); 12. vecwaktu(j)= selesai-mulai; 13. j++; 14. end 15. if(rank == 0) 16. vecserial = 0; 17. k=1; 18. for i=10:1000 19. mu = MPI_Wtime(); 20. X = round(10*rand(i)); 21. Y = round(10*rand(i)); 22. Z = X*Y; 23. se = MPI_Wtime(); 24. vecserial(k)=se-mu; 25. k++; 26. end 27. plot(vecwaktu,'r'); 28. hold on; 29. plot(vecserial); 30. print -dpng filedataparaleldanserial1000.png; 31. end 32. info = MPI_Finalize; Gambar IV.6 Program Utama Perkalian Matriks Paralel Baris pertama listing program yang ditunjukkan oleh Gambar IV.6 adalah inisialisasi program MPI. Program MPI selalu diawali dengan pemanggilan fungsi MPI_Init. Baris-baris program diantara pemanggilan fungsi MPI_Init dan MPI_Finalize akan dibaca oleh semua node.
64 Baris ke dua adalah pemanggilan fungsi MPI_Comm_rank. Fungsi tersebut menentukan rangking-rangking proses yang akan menjalankan tugastugas komputasi. Rangking-rangking proses adalah identitas proses yaitu identitas node-node di dalam cluster. Rangking 0 adalah proses utama atau identitas untuk head node. Rangking-rangkin yang lain adalah identitas untuk compute node. Baris ke tiga adalah pemanggilan fungsi MPI_Comm_size. MPI_Comm_size adalah fungsi MPI yang menentukan jumlah node yang terlibat di dalam proses komputasi paralel. Cluster yang dibangun di dalam penelitian ini hanya memiliki tiga node saja, sehingga nilai yang dihasilkan MPI_Comm_size adalah tiga. Baris ke enam sampai dengan baris ke empatbelas adalah blok iterasi perkalian matriks paralel dengan jumlah elemen matriks yang dikalikan mulai dari 10 elemen sampai dengan 1000 elemen. Di dalam blok iterasi tersebut dicatat waktu proses perkalian matriks paralel yang dilakukan oleh fungsi PerkalianMatriks() untuk tiap-tiap jumlah elemen yang ditentukan oleh iterator. Baris ke limabelas sampai dengan ke tigapuluhsatu adalah blok kondisi jika identitas proses adalah 0 atau head node. Pada blok tersebut terdapat operasi perkalian matriks secara serial yang hanya dikerjakan oleh head node saja. Operasi perkalian matriks secara serial ditunjukkan oleh baris ke delapanbelas sampai dengan baris ke duapuluhenam. Iterasi yang dilakukan pada operasi perkalian matriks serial tersebut sama dengan iterasi yang dilakukan pada operasi perkalian secara paralel yaitu menghitung waktu untuk tiap-tiap jumlah elemen
65 yang dikalikan. Setelah didapat hasil perhitungan waktu proses perkalian matriks paralel dan serial, selanjutnya dibuat grafik yang menunjukkan waktu perkalian paralel dan serial dalam menyelesaikan operasi perkalian matriks dengan jumlah elemen matriks yang dikalikan adalah 10 sampai 1000 elemen. Baris ke tigapuluhdua adalah pemanggilan fungsi MPI_Finalize. Fungsi MPI_Finalize menandai bahwa program MPI telah selesai. Program yang ditunjukkan oleh Gambar IV.6 akan dijalankan dengan perintah mpirun. Perintah mpirun adalah perintah yang digunakan untuk menjalankan program atau aplikasi paralel. Gambar IV.7 dibawah ini merupakan gambar dari perintah mpirun. pengguna@cluster0$ mpirun x LD_LIBRARY_PATH=/usr/local/lib \ C octave q -eval PerkalianMatriks Gambar IV.7 Perintah Menjalankan Program Perkalian Matriks Paralel Perintah mpirun yang ditunjukkan oleh Gambar IV.7 akan menjalankan OCTAVE di masing-masing node di dalam cluster. OCTAVE pada masingmasing node akan membaca file PerkalianMatriks.m yang di dalam file tersebut terdapat fungsi-fungsi MPI. File PerkalianMatriks.m kemudian akan dijalankan sebagai program paralel. Program Perkalian Matriks.m menghasilkan sebuah grafik yang menunjukkan waktu proses perkalian matriks paralel dan serial terhadap jumlah elemen yang dikalikan. Grafik tersebut ditunjukkan oleh gambar IV.8.
66 Gambar IV.8 Grafik Kecepatan Proses Perkalian Matriks Paralel dan Serial IV.5 Evaluasi Hasil Pengujian Program Perkalian Matriks Paralel Evaluasi hasil pengujian perkalian matriks secara paralel dan serial dilakukan dengan melakukan pengamatan terhadap grafik kecepatan proses perkalian matriks secara paralel dan serial yang ditunjukkan oleh Gambar IV.8. Pada grafik tersebut sumbu x atau axis adalah jumlah elemen matriks A dan B yang dikalikan dan sumbu y atau ordinat adalah waktu yang diperlukan operasi perkalian matriks A dan B untuk setiap jumlah elemen matriks yang diberikan. Garis berwarna merah menunjukkan grafik operasi perkalian matriks secara paralel dan garis berwarna biru merupakan grafik operasi perkalian matriks secara serial.
67 Hasil yang ditunjukkan oleh grafik kecepatan proses perkalian matriks secara paralel dan serial menunjukkan bahwa proses perkalian matriks secara paralel memiliki performa lebih tinggi daripada proses perkalian matriks secara serial. Hal tersebut ditunjukkan oleh operasi perkalian matriks A dan B dengan jumlah elemen masing-masing 1000x1000. Pada operasi perkalian matriks paralel, perkalian matriks A dan B dengan jumlah elemen 1000x1000 dapat diselesaikan dalam waktu 3 detik. Pada waktu yang sama dengan perkalian matriks paralel yaitu pada detik ke tiga, proses perkalian matriks serial belum dapat menyelesaikan operasi perkalian matriks A dan B dengan jumlah elemen untuk masing-masing matriks 1000x1000. Pada jumlah elemen matriks A dan B dibawah 400x400 elemen, kecepatan operasi perkalian matriks yang dilakukan secara paralel terlihat sedikit dibawah kecepatan operasi perkalian matriks secara serial. Hal tersebut ditunjukkan oleh grafik kecepatan proses perkalian matriks secara serial dan paralel. Garis merah atau operasi perkalian matriks paralel terletak di bawah garis biru atau operasi perkalian serial. Lebih rendahnya performa operasi perkalian matriks paralel untuk matriks A dan B dengan masing-masing jumlah elemen matriks dibawah 400x400 dikarenakan communication cost antara compute node dengan head node lebih besar daripada waktu komputasi yang dilakukan oleh masing-masing node di dalam cluster. Evaluasi komputasi perkalian matriks paralel juga dilakukan dengan menguji kestabilan kecepatan proses komputasi paralel dalam melakukan
68 perkalian matriks secara paralel. Pengujian kestabilan kecepatan proses komputasi secara paralel dilakukan dengan melakukan uji coba perkalian matriks A dan B dengan jumlah elemen matriks yang cukup besar yaitu 2000 elemen. Pengujian kestabilan kecepatan proses perkalian matriks secara paralel kemudian dibandingkan dengan kecepatan pengujian perkalian matriks secara serial. Hasil pengujian tersebut akan menunjukkan kestabilan cluster dengan tiga buah node dalam menangani proses komputasi paralel, yaitu perkalian matriks paralel. Tabel IV.2 di bawah ini. Tabel IV.2 Tabel Perbandingan Waktu Penyelesaian Perkalian Matrik Paralel dan Serial dengan Jumlah Elemen 2000x2000 No Percobaan Waktu Penyelesaian Serial (detik) Paralel (detik) 1 Percobaan 1 28,905 21,145 2 Percobaan 2 37,579 20,886 3 Percobaan 3 28,830 20,712 4 Percobaan 4 29,192 20,801 5 Percobaan 5 28,728 20,767 6 Percobaan 6 28,674 20,672 7 Percobaan 7 28,679 20,718 8 Percobaan 8 29,494 20,732 9 Percobaan 9 28,711 20,745 10 Percobaan 10 28,712 20,721 Rata-rata 29,750 20,796 Hasil rata-rata pengujian perkalian matriks menunjukkan bahwa cluster dengan tiga buah node yang dibangun di dalam penelitian ini memiliki kestabilan kecepatan dalam melakukan proses perkalian matriks secara paralel yang cukup
69 baik. Selisih rata-rata waktu penyelesaian perkalian matriks serial dan paralel dengan jumlah elemen 2000x2000 cukup besar, yaitu 8,954 detik. Selisih tersebut menunjukkan bahwa sistem paralel memiliki performa yang lebih baik dalam melakukan komputasi yang cukup berat yaitu proses perkalian matriks dengan jumlah elemen yang banyak. Di dalam percobaan perkalian matriks paralel dengan elemen matriks 2000x2000 yang dilakukan oleh tiga buah node, kecepatan waktu penyelesaian operasi perkalian matriks paralel adalah 0,7 kali lebih cepat daripada operasi perkalian matriks serial dengan jumlah elemen yang sama yaitu 2000x2000 elemen matriks. Kecepatan jaringan sangat mempengaruhi performa komputasi paralel. Karena di dalam sistem memori terdistribusi, jaringan interkoneksi dianggap sebagai sistem bus. Semakin tinggi kecepatan jaringan interkoneksi, maka semakin tinggi pula performa komputasi paralel yang dapat dilakukan.