Laporan Hasil Eksperimen Komputasi Perkalian 2 Matrik Menggunakan
OPENMP
Nama : Hendri Karisma NIM : 23512060 Komputer Processor Jumlah Core Cache Size Memori
: Sa Sateli elite L5 L510 (n (notebook) : Intel Centrino. Core 2 Duo T6500 @ 2.1 GHz :2 : 2048 KB : 2.8 GB
Proses perhitungan perkalian matriks dari mulai ordo matriks 16, 32, 64, 100, 200, 200, 400, 400, 800, 800, 1600 1600 pertam pertamaa melaku melakukan kan perkal perkalian ian matrik matrikss untuk untuk masing masing-mas -masing ing matriks dengan cara sequential sebanyak 2 kali, dan dilakukan perkalian matriks untuk masing-masing matriks dengan menggunakan library openMP sebanyak 2 kali untuk masing-masing ordo dan jumlah thread. Untuk Untuk perkal perkalian ian matrik matrikss secara secara paralle parallell dilaku dilakukan kan dengan dengan menggu menggunak nakan an 2 kondisi kondisi jumlah thread, thread, dengan dengan 2 thread dan dengan 4 thread. Ketika proses berlasung, berlasung, jumlah kolom akan dibagi kedalam jumlah thread (N-Thread atau 2 atau 4 thread) secara merata untuk setiap masing-masing thread. Lalu akan dihasilkan output printf banyak pembagian pe mbagian kolom untuk di proses untuk setiap s etiap threadnya dan informasi urutan thread mana yang dieksekusi terlebih dahulu dan mana yang diselesaikan lebih dahulu. Lalu hasil akhir dikeluarkan waktu yang dibutuhkan untuk menyelesaikan komputasi perkalian matriks tersebut. Perbedaan yang ada pada program multiplikasi matriks kali ini (program kali ini dengan menggunakan openMP dan yang sebelumnya adalah posix) adalah, eksekusi perhitungan parallel untuk setiap ordo dilakukan dalam 1 kali jalan program. Artinya sudah disediakan konstanta array yang berisikan ordo yang akan dilakukan ujicoba, sehingg sehinggaa cukup cukup melaku melakukan kan loopin looping g untuk untuk setiap setiap proses proses paralle parallell yang yang ingin ingin diuji diuji cobakan cobakan untuk setiap ordonya. Namun untuk untuk perubahan perubahan thread masih dieksekusi pada berbeda sesi sehingga eksekusi program dengan 1 thread, 2 thread dan 3 thread dilakukan pada waktu yang tidak bersamaan dan berarti minimal ada 3 kali eksekusi program untuk satu kali proses uji coba pada setiap kasus jumlah thread.
Dalam directive directive pragma pragma openMP terdapat terdapat beberapa cara untuk untuk memberikan memberikan beberapa status terhadap beberapa variable misalkan private atau shared atau last private dan dan lain lain-la -lain in.. Pada Pada prog program ram ini ini digu diguna naka kan n priv privat atee untu untuk k setia setiap p vari variabl ablee yang yang dimanfaatkan sebagai iterator dalam looping for, dan juga untuk variable yang bersifat temporary (seperti variable sum dalam codes program). program). Diberikan status shared untuk variable yang menampung matriks pertama dan kedua yang nantinya akan dikenakan operasi multiplikasi, multiplikasi, dan juga hal yang sama berlaku berlaku untuk untuk variable yang menampung menampung hasil perkalian matriks tersebut. Pengukuran waktu dimulai ketika sebelum threads tersebut dimulai dan akan dicatat waktu ketika threads akan dimulai, lalau saat seluruh threads tersebut selesai dieksekusi maka akan diambil waktu ketika threads itu diselesaikan dan akan diambil selisih antara waktu threads diselesaikan dengan waktu ketika sebelum threads tersebut mulai dieksekusi secara bersamaan. Peng Penguk ukur uran an wakt waktu u
meng menggu guna naka kan n
meth method od cloc clock_ k_get gettim time() e() karen karenaa
lebi lebih h
menghasilkan waktu mendekati real. Fungsi clock_gettime digunakan untuk mengambil nilai waktu dengan dengan presisi clock_id, clock_id, dan dapat mengimplemen mengimplementasikan tasikan system-wide system-wide realtime clock, dengan menggunakan clock_realtime, atau pun menggunakan clock dari CPU id, yaitu menggunakan clock atau waktu dari CPU (baik i386 ataupun itanium). Berikut adalah hasil eksperimen untuk percobaan tanpa parallel, dan dengan parallel dengan 2 thread dan 4 thread. 1. Beriku Berikutt percobaa percobaan n tanpa tanpa menggun menggunaka akan n parallel parallel : Tabel 1 Hasil Eksperimen 1 untuk menghitung perkalian matriks dengan 1thread
Ordo Matriks
time (second)
16
0.001439
32
0.000304
64
0.002203
100
0.008153
200
0.081311
400
0.597384
800
6.014118
1600
49.13704
2. Beriku Berikutt hasil perco percobaa baan n menggun menggunaka akan n 2 thread thread : Tabel 2 Hasil Eksperimen Eksper imen 2 untuk menghitung perkalian matriks dengan 2 thread
Ordo Matriks
time (second)
16
0.011125
32
0.003887
64
0.009236
100
0.013775
200
0.056386
400
0.555578
800
3.094784
1600
25.583069
Tabel 3 Hasil Eksperimen 3 untuk menghitung perkalian matriks dengan 2 thread yang kedua
Ordo Matriks
time (second)
16
0.00113
32
0.000201
64
0.001304
100
0.004046
200
0.041205
400
0.356788
800
3.208892
1600
27.149887
Dan berikut adalah hasil eksperimen percobaan untuk perkalian matriks dari ordo 16 hingga 1600 dengan menggunakan 4 thread : Tabel 4 Hasil Eksperimen Eksperime n 4 untuk menghitung perkalian matriks dengan 4 thread yang pertama
Ordo Matriks
time (second)
16
0.004567
32
0.004163
64
0.007048
100
0.00403
200
0.0047377
400
0.473662
800
3.703634
1600
28.055313
Tabel 5 Hasil Eksperimen 4 untuk menghitung perkalian matriks dengan 4 thread yang kedua
Ordo Matriks
time (second)
16
0.007761
32
0.004726
64
0.007065
100
0.01203
200
0.068568
400
0.439324
800
3.58942
1600
27.580048
Graphic 1 Grafik perbandingan hasil experiment untuk 1 thread, thread, 2 thread thread dan 4 thread thread dengan menggunakan openMP
Graphic 2 Grafik batang perbandingan hasil percobaan percobaan antara 1 thread, thread, 2 threads dan 4 threads menggunakan openMP
Figure 1 Kondisi Kondisi Program ketika sedang di eksekusi dan grafik monitor CPU komputer pada Ubuntu
Uraian Analisis Analisis Hasil Eksperimen Dari hasil eksperimen yang didapat terdapat perbedaan yang cukup besar antara kecepatan proses ketika suatu proses (dalam kasus ini adalah perkalian 2 matriks) menggunakan prallel atau posix atau menggunakan lebih dari satu thread dibandingkan dengan yang hanya menggunakan 1 thread. Terlihat dalam grafik 1 dan 2, dalam proses perhitungan matriks pun banyak ordo yang dimiliki matriks, semakin besar ordo matriks, semakin besar pula waktu yang dibutuhkan untuk menyelesaikan perkalian matriks tersebut. Dalam Figure 1 pun yang merupakan screen shot ketika CPU 1 dan CPU 2 sedang dalam proses pengerjaan perhitungan matriks dari ordo 16 hingga ordo 1600 1600 deng dengan an 2 threa threads ds,, reso resour urce ce dari dari CPU CPU 1 dan dan CPU CPU 2 terli terliha hatt hamp hampir ir 100% 100% digunakan untuk menyelesaikan perkalian matriks, artinya setiap CPU menangani 1 threads untuk menyelesaikan perkalian matriks. Code yang dibuat dalam program ini memanfa memanfaatka atkan n pragma pragma dengan dengan melaku melakukan kan shared shared untuk untuk variab variable le yang yang menamp menampung ung nilai-nilai matriks baik matrik A dan B yang merupakan 2 matrik yang akan dikenakan operasi multiplikasi dan juga matriks C yang merupakan variable penampung matriks hasil perkalian matriks A dan B. Dan untuk variable yang berfungsi hanya sebagai iter iterat ator or dan dan vari variab able le temp tempor orar ary y dija dijadi dika kan n priv privat atee
kare karena na untu untuk k meng menghi hind ndar arii
kemungkina kemungkinan n race condition condition terhadap setiap variable tersebut, tersebut, karena karena variable variable tersebut tersebut saling independent ketika thread dibagi menjadi lebih dari satu sehingga tidak ada ketergantungan antara 1 variable iterator atau temporary dengan variable lainnya.
Figure 2 Sample Sample Code (Pragma block) Perbandingan OpenMP dan Posix dari hasil Uji Cobas Sebelumnya
Berikut adalah grafik garis yang di ambil dari hasil percobaan parallel programming untuk perkarian matriks yang sama dengan menggunakan POSIX :
Figure 3 Grafik Grafik Prallel Programming dengan dengan 1 thread, thread, 2 thread, dan 4 thread dengan menggunakan POSIX Setelah Setelah dilaku dilakukan kan perban perbandin dingan gan hasil hasil uji coba coba antara antara penggu penggunaa naan n library library open openMP MP dan dan POSI POSIX X terli terliha hatt hasil hasil perfo perform rmasi asi dari dari masi masing ng-m -masi asing ng libr library ary keti ketika ka diimplementasikan pada kasus operasi perkalian 2 matriks secara parallel. Cara POSIX menghasilkan menghasilkan performasi performasi yang lebih baik, hasilnya hasilnya jika diambil diambil rata-rata hasil uji coba maka makan n dapa dapatt dili diliha hatt bahw bahwaa POSI POSIX X meny menyele elesai saika kan n oper operasi asi terseb tersebut ut lebih lebih cepat cepat diba diband ndin ingk gkan an deng dengan an Open OpenMP MP,, perk perkir iraa aan n yang ang terj terjad adii adal adalah ah,, bahw bahwaa keti ketika ka meng menggu guna naka kan n POSI POSIX, X, prog progra ramm mmer er dapa dapatt memb memben entu tuk k algo algori ritm tmaa terte tertent ntu u untu untuk k memperc mempercepat epat proses proses perhit perhitung ungan an salah salah satuny satunyaa adalah adalah jumlah jumlah matrik matrikss yang yang akan akan dihi dihitu tung ng dan dan dibe dibeba bank nkan an pada pada setia setiap p threa thread d itu itu dapa dapatt dihi dihitu tung ng atau ataupu pun n strat strateg egii perhitungan matriks yang dapat di atur secara manual. Dan mungkin openMP dapat berjalan sama cepatnya dengan POSIX namun perlu explorasi lebih dalam mengenai berbagai fitur dari openMP itu sendiri sehingga dapat memanfaatkan fitur yang tersedia secara efisien dan efektif.