Kamis, 02 Mei 2013

Parallel Computing Review



    Hasil dan Pembahasan

Pada bagian ini peneliti mencoba melakukan analisa   terhadap   program   perkalian   matriks sebagai   kasus.   Percobaan   dilakukan   dengan variasi besar ukuran matriks sehingga mencapai ukuran maksimum. Variasi ukuran berupa variasi dimensi grid, block, dan thread. Pada percobaan ini peneliti juga memanfaatkan shared memory di GPU. Selain melihat akibat dari variasi dimensi grid, block, dan thread, peneliti juga akan melihat perbandingan waktu komputasi dan error diantara setiap  jenis  prosesor,  yaitu  CPU,  GPU  non- shared, dan GPU dengan shared memory.

Untuk melihat dampak dari variasi ukuran digunakan program perkalian matriks yang menghasilkan output berupa waktu yang dibutuhkan oleh GPU dengan shared-memory, GPU dengan non-shared memory, dan CPU biasa dalam mengalikan matriks dengan ukuran yang berbeda-beda. Selain itu program ini juga memberikan  output  berupa  error  yang  terjadi pada penghitungan matriks menggunakan GPU, baik dengan shared memory maupun dengan non- shared memory. Program akan meminta input dari user terlebih dahulu (input 1 untuk menghitung waktu eksekusi matriks, dan input 2 untuk mengecek  selisih  error,  dan  3  adalah  untuk melihat nilai variasi dari perubahan ukuran thread dan block).



Di bawah ini adalah grafik hasil output program, garis merah menandakan error pada penggunaan non-shared memory dan garis hijau menandakan error pada penggunaan shared memory.
Berdasarkan grafik pada gambar 4, error yang   terjadi   pada   perhitungan   menggunakan GPU, baik menggunakan shared memory maupun non shared, tidak terlalu signifikan. Pertumbuhan fungsi error juga dapat ditoleransi sebab bersifat linier. Hal ini membuktikan bahwa akurasi hasil perhitungan   menggunakan   GPU   cukup   baik dengan tingkat error yang rendah serta pertumbuhan fungsi yang linear. Selain melakukan perhitugan matriks dengan GPU dan CPU peneliti juga melakukan uji coba dalam variasi jumlah thread yang digunakan pada penghitungan perkalian matriks. Gambar 5 menunjukkan tampilan grafik pada output di atas, garis merah menandakan error yang terjadi pada eksekusi yang menggunakan non-shared memory dan garis hijau menandakan error yang terjadi pada  eksekusi  yang  menggunakan  shared memory.




Dari data di atas tampak bahwa running time GPU jauh lebih cepat dibandingkan dengan running time CPU. Hal ini terjadi karena iterasi kedua, iterasi untuk mencari nilai callValue pada node   sampai   root,   dikerjakan   secara   paralel dengan memanfaatkan fitur-fitur seperti shared memory yang pengaksesan datanya lebih cepat dibandingkan dengan global memori. Shared memory ini juga dimanfaatkan untuk melakukan reduksi pada proses penghitungan callValue pada setiap node sehingga mengurangi jumlah memori yang dipakai. Reduksi digunakan pada banyak algoritma paralel untuk meningkatkan paralelisme program. Pada program ini, jika reduksi tidak dilakukan maka kemungkinan besar penghitungan callValue akan dilakukan pada CPU. Hal ini tidak efisien  karena  iterasi  yang  paling  banyak dilakukan ada pada bagian yang harus direduksi ini. Oleh sebab itu, dengan memparalelkan iterasi kedua maka program akan berjalan jauh lebih cepat.

Untuk mencari kompleksitas algoritma ini, perlu dicari kompleksitas iterasi yang paling dominan. Iterasi yang paling dominan terdapat pada  iterasi  kedua  yang  melakukan iterasi  dari baris NUM_STEPS-1 sampai root. Iterasi ini berupa  nested  loop  dengan  jumlah  inner  loop sebanyak 1.
Secara umum jumlah iterasi dapat diperkirakan dengan cara seperti persamaan 1 berikut:



Sehingga    kompleksitas    algoritma    yang diperoleh adalah O(N2).

Dari data di atas dapat dilihat bahwa setiap input bernilai dua kali input sebelumnya. Selain itu, perbandingan output CPU dengan output CPU sebelumnya rata-rata bernilai 4. Maka,


Selanjutnya   diperoleh   a   =   2   sehingga kompleksitas menjadi O(N2). Kompleksitas yang diperoleh ini cocok dengan kompleksitas yang diperkirakan   sebelumnya.   Jadi,   secara   umum kompleksitas  algoritma  Binomial  Tree  Option adalah O(N2).


     Kesimpulan

Penggunaan GPU dapat meningkatkan efisiensi perhitungan pada suatu permasalahan yang melibatkan kalkulasi secara berulang-ulang. Hal  ini  dikarenakan  tingkat  homogenitas  pada data tersebut cukup tinggi sehingga perhitungan ini sangat cocok dilakukan oleh GPU yang dapat mengeksekusi  data  secara  paralel  pada  waktu yang bersamaan.