Selama ini, untuk bisa mengakes GPU umumnya menggunakan bahasa C/C++, namun saat ini bahasa pemrograman Python pun bisa langsung mengakses GPU lho. Namun kita butuh melakukan instalasi library numba terlebih dahulu seperti yang sudah saya jelaskan pada tulisan sebelumnya.
Nah, pada kesempatan kali ini saya akan mencontohkan program sederhana yang dilakukan oleh CPU dan GPU.
Selamat menyimak.
Program
#simple.py
import numpy as np from timeit import default_timer as timer def VectorAdd(a,b,c): for i in range(a.size): c[i] = a[i] + b[i] def main(): N = 32000000 A = np.ones(N,dtype=np.float32) B = np.ones(N,dtype=np.float32) C = np.zeros(N,dtype=np.float32) start = timer() VectorAdd(A,B,C) vectoradd_time = timer() - start print("C[:5] = " + str(C[:5])) print("C[-5:]= " + str(C[-5:])) print("VectorAdd took %f seconds" % vectoradd_time) if __name__ == '__main__': main() Hasil ketika kita jalankanBerikutnya kita adakan melakukan modifikasi pada program tersebut. Perhatikan penambahan berikut: 1. library numba dengan meng-import vectorize 2. Assignment kernel ke cuda 2. modifikasi fungsi VectorAdd menjadi hanya dua argumen VectorAdd(a,b) 3. pemanggilan fungsi VectorAdd menjado C = VectorAdd(a,b) #simple_gpu.py
import numpy as np from timeit import default_timer as timer from numba import vectorize @vectorize(["float32(float32,float32)"],target = 'cuda') def VectorAdd(a,b): return a + b def main(): N = 32000000 A = np.ones(N,dtype=np.float32) B = np.ones(N,dtype=np.float32) C = np.zeros(N,dtype=np.float32) start = timer() C = VectorAdd(A,B) vectoradd_time = timer() - start print("C[:5] = " + str(C[:5])) print("C[-5:]= " + str(C[-5:])) print("VectorAdd took %f seconds" % vectoradd_time) if __name__ == '__main__': main()
Setelah kita jalankan, berikut adalah hasilnya:
Dapat kita lihat perbandingan waktu anatara CPU dan GPU. Dengan CPU penjumlahan vector membutuhkan waktu 8.26 detik, sementara dengan GPU hanya membutuhkan waktu 0.99 detik.
Melihat Profil
Kemudian jika kita hendak memastikan bahwa komputasi berjalan di GPU lakukan perintah berikut untuk melihat bagaimana profil dari GPU saat dijalankan..