Toto Haryanto

This is my personal weblog…

Pemrograman GPU dan Python

Posted by totoharyanto on Desember 26th, 2019

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 jalankan

screenshot-from-2018-10-06-12-11-27

 

 

Berikutnya 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:

simple_gpu

 

 

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..

simple_gpu

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>