Hasil Uji Coba Parallel Programming OpenMP [PDF]

  • 0 0 0
  • Suka dengan makalah ini dan mengunduhnya? Anda bisa menerbitkan file PDF Anda sendiri secara online secara gratis dalam beberapa menit saja! Sign Up
File loading please wait...
Citation preview

Laporan Hasil Eksperimen Komputasi Perkalian 2 Matrik Menggunakan OPENMP Nama : Hendri Karisma NIM : 23512060 Komputer Processor Jumlah Core Cache Size Memori



: Satelite L510 (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, 400, 800, 1600 pertama melakukan perkalian matriks untuk masing-masing 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 perkalian matriks secara parallel dilakukan dengan menggunakan 2 kondisi jumlah thread, dengan 2 thread dan dengan 4 thread. Ketika proses 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 kolom untuk di proses untuk setiap 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, sehingga cukup melakukan looping untuk setiap proses parallel yang ingin diuji cobakan untuk setiap ordonya. Namun untuk 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 pragma openMP terdapat beberapa cara untuk memberikan beberapa status terhadap beberapa variable misalkan private atau shared atau last private dan lain-lain. Pada program ini digunakan private untuk setiap variable yang dimanfaatkan sebagai iterator dalam looping for, dan juga untuk variable yang bersifat temporary (seperti variable sum dalam codes program). Diberikan status shared untuk variable yang menampung matriks pertama dan kedua yang nantinya akan dikenakan operasi multiplikasi, dan juga hal yang sama berlaku untuk variable yang 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. Pengukuran waktu menggunakan method clock_gettime() karena lebih menghasilkan waktu mendekati real. Fungsi clock_gettime digunakan untuk mengambil nilai waktu dengan presisi clock_id, dan dapat mengimplementasikan 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. Berikut percobaan tanpa menggunakan parallel : Tabel 1 Hasil Eksperimen 1 untuk menghitung perkalian matriks dengan 1thread Ordo Matriks



time (second)



16 32 64 100 200 400 800 1600



0.001439 0.000304 0.002203 0.008153 0.081311 0.597384 6.014118 49.13704



2. Berikut hasil percobaan menggunakan 2 thread : Tabel 2 Hasil Eksperimen 2 untuk menghitung perkalian matriks dengan 2 thread Ordo Matriks



time (second)



16 32 64 100 200 400 800 1600



0.011125 0.003887 0.009236 0.013775 0.056386 0.555578 3.094784 25.583069



Tabel 3 Hasil Eksperimen 3 untuk menghitung perkalian matriks dengan 2 thread yang kedua Ordo Matriks



time (second)



16 32 64 100 200 400 800 1600



0.00113 0.000201 0.001304 0.004046 0.041205 0.356788 3.208892 27.149887



Dan berikut adalah hasil eksperimen percobaan untuk perkalian matriks dari ordo 16 hingga 1600 dengan menggunakan 4 thread : Tabel 4 Hasil Eksperimen 4 untuk menghitung perkalian matriks dengan 4 thread yang pertama Ordo Matriks



time (second)



16 32 64 100 200 400 800 1600



0.004567 0.004163 0.007048 0.00403 0.0047377 0.473662 3.703634 28.055313



Tabel 5 Hasil Eksperimen 4 untuk menghitung perkalian matriks dengan 4 thread yang kedua Ordo Matriks



time (second)



16 32 64 100 200 400 800 1600



0.007761 0.004726 0.007065 0.01203 0.068568 0.439324 3.58942 27.580048



Graphic 1 Grafik perbandingan hasil experiment untuk 1 thread, 2 thread dan 4 thread dengan menggunakan openMP



Graphic 2 Grafik batang perbandingan hasil percobaan antara 1 thread, 2 threads dan 4 threads menggunakan openMP



Figure 1 Kondisi Program ketika sedang di eksekusi dan grafik monitor CPU komputer pada Ubuntu



Uraian 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 dengan 2 threads, resource dari CPU 1 dan CPU 2 terlihat hampir 100% digunakan untuk menyelesaikan perkalian matriks, artinya setiap CPU menangani 1 threads untuk menyelesaikan perkalian matriks. Code yang dibuat dalam program ini memanfaatkan pragma dengan melakukan shared untuk variable yang menampung 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 iterator dan variable temporary dijadikan private karena untuk menghindari kemungkinan race condition terhadap setiap variable tersebut, karena variable 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 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 Prallel Programming dengan 1 thread, 2 thread, dan 4 thread dengan menggunakan POSIX Setelah dilakukan perbandingan hasil uji coba antara penggunaan library openMP dan POSIX terlihat hasil performasi dari masing-masing library ketika diimplementasikan pada kasus operasi perkalian 2 matriks secara parallel. Cara POSIX menghasilkan performasi yang lebih baik, hasilnya jika diambil rata-rata hasil uji coba makan dapat dilihat bahwa POSIX menyelesaikan operasi tersebut lebih cepat dibandingkan dengan OpenMP, perkiraan yang terjadi adalah, bahwa ketika menggunakan POSIX, programmer dapat membentuk algoritma tertentu untuk mempercepat proses perhitungan salah satunya adalah jumlah matriks yang akan dihitung dan dibebankan pada setiap thread itu dapat dihitung ataupun strategi 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.