Implementasi Parallel Progamming POSIX Thread Pada Matriks Multiplication

Assalammu’alaikum

Kali ini saya akan sharing mengenai bagaimana implementasi multithreading programming menggunakan teknologi bahasa C/C++ dan memanfaatkan fitus POSIX pada gcc. Berikut spesifikasi teknologi yang saya gunakan :

  1. Ubuntu 12.04
  2. eclipse juno
  3. CDT (C/C++ Development Toolkit) for juno
  4. C/C++
  5. POSIX pThread
  6. GCC 4.6

Untuk kasus yang dicoba adalah matriks multiplication atau perkalian matriks. Ordo matriks yang digunakan adalah 4×4, 8×8, 16×16, 32×32, 64×64, 100×100, 200×200, 400×400, 800×800,1600×1600. Dengan menggunakan single thread atau sequential kemungkinan kompleksitas algoritma yang terjadi adalah eksponensial, akrena resource yang digunakan hanya 1 thread atau bahkan hanya 1 core processor dari 2 processor atau lebih yang kita miliki saat ini. Maka dari itu yang kita fokuskan adalah bagaimana membagi proses matriks multiplication ini kedalam beberapa thread, dalam uji coba kali ini dicoba kedalam 3 jenis thread yaitu single thread, 2 thread, dan 4 thread.

Ketika proses berlasung, jumlah kolom akan dibagikedalam 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 prosesuntuk setiap threadnya dan informasi urutan thread mana yang dieksekusi terlebih dahulu danmana yang diselesaikan lebih dahulu. Lalu hasil akhir dikeluarkan waktu yang dibutuhkan untuk menyelesaikan komputasi perkalian matriks tersebut.

Pengukuran waktu dimulai ketika sebelum threads tersebut dimulai dan akan dicatat waktuketika threads akan dimulai, lalau saat seluruh threads tersebut selesai dieksekusi maka akandiambil waktu ketika threads itu diselesaikan dan akan diambil selisih antara waktu threadsdiselesaikan dengan waktu ketika sebelum threads tersebut mulai dieksekusi secara bersamaan.Pengukuran waktu menggunakan method clock_gettime() karena lebih menghasilkan waktumendekati real. Fungsi clock_gettime digunakan untuk mengambil nilai waktu dengan presisi clock_id, dan dapat mengimplementasikan system-wide realtime clock, dengan menggunakanclock_realtime, atau pun menggunakan clock dari CPU id, yaitu menggunakan clock atau waktudari CPU (baik i386 ataupun itanium).

Berikut adalah penjelasan laporannya dan dapat di lihat dalam akun scribd saya, dan untuk resource script code program dalam bahasa C/C++ dapat di download di akun github saya :

Hasil uji coba dapat dilihat di link ini : Hasil Uji Coba Parallel Programming POSIX

dan untuk resource code dapat dilihat pada url ini : https://github.com/situkangsayur/MatriksMultiplicationPosix

Uraian Analisis Hasil Eksperimen

Dari hasil eksperimen yang didapat terdapat perbedaan yang cukup besar antara kecepatan prosesketika suatu proses (dalam kasus ini adalah perkalian 2 matriks) menggunakan prallel atau posixatau menggunakan lebih dari satu thread dibandingkan dengan yang hanya menggunakan 1thread. Terlihat dalam grafik 1 dan 2, dalam proses perhitungan matriks pun banyak ordo yangdimiliki matriks, semakin besar ordo matriks, semakin besar pula waktu yang dibutuhkan untuk menyelesaikan perkalian matriks tersebut. Dalam Graphic 4 pun yang merupakan screen shotketika CPU 1 dan CPU 2 sedang dalam proses pengerjaan perhitungan matriks 1600 dengan 2threads, resource dari CPU 1 dan CPU 2 terlihat hampir 100% digunakan untuk menyelesaikan perkalian matriks, artinya setiap CPU menangani 1 threads untuk menyelesaikan perkalianmatriks, CPU 1 yang mungkin menangani thread 1 menangani perkalian matriks untuk row 0sampai 799, sedangkan thread 2 yang mungkin ditangani oleh CPU 2, menangani perkalianmatriks dari row 800 sampai 1599, setelah kedua proses atau threads tersebut selesai, maka akandilakukan singkronisasi untuk setiap hasil threads.
Semoga bermanfaat 😀
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s