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.