hasil uji coba parallel programming openmp

10
Laporan Hasil Eksperimen Komputasi Perkalian 2 Matrik Menggunakan OPENMP Nama : Hendri Karisma NIM : 23512060 Komputer : Satelite L510 (notebook) Processor : Intel Centrino. Core 2 Duo T6500 @ 2.1 GHz Jumlah Core : 2 Cache Size : 2048 KB Memori : 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

Upload: hendri-karisma

Post on 05-Aug-2015

487 views

Category:

Documents


6 download

DESCRIPTION

Report Experiment Parallel Programming untuk matriks multiplication, dengan menggunakan openMP, lanjutan dari POSIX yang sebelumnya

TRANSCRIPT

Page 1: Hasil Uji Coba Parallel Programming OpenMP

Laporan Hasil Eksperimen Komputasi Perkalian 2 Matrik

Menggunakan OPENMP

Nama : Hendri KarismaNIM : 23512060

Komputer : Satelite L510 (notebook)Processor : Intel Centrino. Core 2 Duo T6500 @ 2.1 GHzJumlah Core : 2Cache Size : 2048 KBMemori : 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.

Page 2: Hasil Uji Coba Parallel Programming OpenMP

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 0.00143932 0.00030464 0.002203100 0.008153200 0.081311400 0.597384800 6.0141181600 49.13704

Page 3: Hasil Uji Coba Parallel Programming OpenMP

2. Berikut hasil percobaan menggunakan 2 thread :

Tabel 2 Hasil Eksperimen 2 untuk menghitung perkalian matriks dengan 2 thread

Ordo Matriks time (second)16 0.01112532 0.00388764 0.009236100 0.013775200 0.056386400 0.555578800 3.0947841600 25.583069

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

kedua

Ordo Matriks time (second)16 0.0011332 0.00020164 0.001304100 0.004046200 0.041205400 0.356788800 3.2088921600 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 0.00456732 0.00416364 0.007048100 0.00403200 0.0047377400 0.473662800 3.7036341600 28.055313

Page 4: Hasil Uji Coba Parallel Programming OpenMP

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

kedua

Ordo Matriks time (second)16 0.00776132 0.00472664 0.007065100 0.01203200 0.068568400 0.439324800 3.589421600 27.580048

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

dengan menggunakan openMP

Page 5: Hasil Uji Coba Parallel Programming 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

Page 6: Hasil Uji Coba Parallel Programming OpenMP

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

Page 7: Hasil Uji Coba Parallel Programming OpenMP

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.