Friday, December 19, 2014

Perkalian matriks secara parallel

Pada posting ini, saya akan menyajikan kelanjutan posting saya sebelumnya, yakni posting mengenai perkalian matriks secara rekursi.  Namun dalam posting ini saya akan menekankan pada aspek manfaatnya.

Orang-orang bisa berkata buat apa kita melakukan rekursi jika hasilnya sama saja? Jawabnya ada di posting kali ini.

Dalam rilis terbaru  bahasa Java yakni Java 7 telah diperkenalkan konsep paralellisme dengan cara yang lebih modern dibandingkan sebelumnya. Yakni dengan memasukkan beberapa class baru ke dalam Java Standard Library yang khusus untuk menangani keperluan parallelisme. Dua class yang dimaksud adalah RecursiveAction dan RecursiveTask. Ada sebuah posting menarik dari oracle yang membahas mengenai masalah ini.

Pada kesempatan kali ini saya akan mengekspose fitur yang disajikan class yang dimaksud untuk keperluan meningkatkan efisiensi dalam perkalian matriks. Mekanismenya sudah dijelaskan pada posting saya sebelumnya (tentang perkalian matriks secara rekursi). Hanya dalam posting ini, matriks C yang sudah dipecah ke dalam sub-sub-sub… matriks C, elemennya di-isi secara parallel. Akibatnya adalah waktu eksekusi bisa berkurang hingga setengahnya. Jadi ketika secara normal dia membutuhkan waktu 10 detik, maka dengan parallelisme dia hanya membutuhkan waktu 5 detik. Saya sudah memposting di github project saya tersebut, dan Anda bisa mencobanya di rumah. Mudah-mudahan hasilnya tidak beda  jauh dari apa yang saya peroleh.

Dalam hasil percobaan saya, dilakukan perkalian dua buah matriks yakni matriks A dengan ukuran (1000,600) dan matriks B dengan ukuran (600,9000) di mana waktu eksekusi dengan cara tradisional membutuhkan waktu 143 detik, sementara waktu eksekusi dengan cara parallel membutuhkan waktu 73 detik.

No comments: