Parallel Processing dengan Matlab

Selain kelebihan Matlab dalam penanganan matriks dan vektor, Matlab juga dapat menangani pemrosesan paralel. Berikut ini contoh sederhana pemanggilan dan penutupan engine dalam Matlab. Salah satu aspek penting dalam proses ini adalah kemampuan kita membuat aplikasi dengan kohesi sebesar mungkin dan kopling sekecil mungkin atau tanpa kopling sama sekali (kaya motor matic aja 🙂 ). Buat matriks 4 baris misal seperti ini:

  • x =
  • 1 2 3 4
  • 5 6 7 8
  • 9 10 11 12

Namanya latihan ya sederhana dulu saja, yang penting prinsipnya. Misal kita akan menjumlahkan tiap baris dan setelah itu dijumlahkan total hasil penjumlahan tiap baris itu. Tentu saja Anda dapat menggunakan satu mesin, dengan operasi matriks sederhana.

Anggaplah tiap menjumlahkan baris membutuhkan waktu satu jam, maka Anda sudah menghabiskan tiga jam sebelum ditotal. Tetapi jika tiap baris Anda jumlahkan dengan mesin terpisah, maka Anda akan menghemat dua jam jika menggunakan tiga mesin secara bersamaan ketika menghitung jumlah tiap barisnya. Sebenarnya saya juga masih “mencari” cara yang praktis untuk menghitung skor riset saya yang membutuhkan satu jam tiap tipe, padahal ada 10 tipe (waw). Simpan variabel x tersebut dengan instruksi save. Berikut fungsi untuk tiap engine (ganti angka 1 dengan 2 dan 3 untuk engine yang lain).

  • function y=rows1(x)
  • load x
  • x1=x(1,:);
  • y1=sum(x1)
  • save y1 ‘y1’
  • exit
  • end

Saya punya tiga m-file untuk menghitung jumlah tiap baris yaitu rows1, rows2 dan rows3 yang nanti dieksekusi oleh tiap engine. Perintah terakhir adalah mematikan engine jika sudah selesai (exit). Kemudian saya butuh satu m-file utama yang memanggil tiga engine dan menyuruhnya melakukan komputasi, diakhiri dengan mengumpulkan hasilnya lalu menjumlahkan totalnya.

  • load x
  • for i=1:3
  • i=num2str(i)
  • rows=[‘!matlab’ ‘ ‘ ‘-r’ ‘ ‘ ‘rows’ i ‘ ‘ ‘&’]
  • eval(rows)
  • end

Akan muncul tiga engine baru yang secara terpisah melakukan kalkulasi penjumlahan untuk masing-masing baris. Sementara perintah delete di akhir bermanfaat untuk menghapus file temporary tersebut. Lihat hasilnya:

  • load y1
  • load y2
  • load y3

Masih ada masalah berikutnya yaitu instruksi yang menandakan bahwa slave (rows1, rows2, dan rows3) sudah selesai. Sekali lagi tentu saja teknik ini digunakan jika menjumlahkan tiap baris membutuhkan waktu yang sangat lama jika perhitungan baris berikutnya dilakukan jika yang sebelumnya sudah selesai. Bagiku ini sungguh bermanfaat, lihat sumber ini. Pernah saya terapkan juga di pencarian beberapa nama yang sama di text mining pada data yang besar.

Tinggalkan komentar

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.