Category Archives: GPU

NVIDIA Deep Learning via GPU

Berikut Video NVIDIA deep learning using GPU
Selamat Menyimak


Pemrograman GPU dan Python

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


Cuda with Python


GPU : Antara Games dan Kebutuhan Komputasi

GPU adalah singkatan dari Graphic Processing Unit tentu sekarang sudah bukan menjadi barang yang asing lagi terutama bagi para penggemar games. Kehadiran GPU yang dimotori oleh beberapa vendor ternama sekelas NVIDIA atau AMD menjadikan para pencinta games semakin betah di depan komputernya. Mengapa tidak ? Dengan perkembangan kualitas resolusi yang tinggi, para pencinta game dimanjakan dan larut dengan permainannya.

Di sisi vendor, baik NVIDIA maupun AMD misalnya terus melakukan pengembangan produknya dengan berbagai keunggulan yang ditawarkan. Tapi di sini saya tidak akan banyak membicarakan produk-produk terbaru mereka. Silahkan bisa site sendiri di official web-nya ya (http://www.nvidia.com/) atau (https://www.amd.com).

Namun demikian, yang akan sedikit ceritakan adalah bahwa GPU kalau dilihat dari namanya, sebenarnya tidak hanya untuk kebutuhan games atau rendering saja, tetapi dapat digunakan untuk melakukan pemrosesan atau komputasi.

Arsitektur GPU

Untuk memudahkan pemahaman, sekarang kita lihat bagaimana arsitektur GPU. Perhatikan gambar di bawah ini:

gpu_arch

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(sumber : https://www.nvidia.com/content/dam/en-zz/Solutions/Data-Center/documents/NVIDIA-Kepler-GK110-GK210-Architecture-Whitepaper.pdf)

Jika dibandingkn antara CPU dan GPU. Kira-kira ilustrasi mudahnya adalah sebagai berikut:

gpu-cpu

 

 

 

 

 

 

 

 

 

 

 

Secara umum, GPU memiliki Single Multiprocessor (SM). Setiap SM terdiri atas ratusan cores. secara logic, GPU dapat dibagi menjadi Grid, Blok dan thread. Satu Grid bisa terdiri atas beberapa Blok. Di dalam blok terdapat thread yang masing-masing masing memiliki Id untuk pendanda suatu proses. Perhatikan ilustrasi di bawah ini.

blok-grid-thread

 

 

 

 

 

 

 

 

 

 

Proses dalam GPU diidentifikasi dengan Id thread. Oleh karena itu, biasanya pemrograman di dalam GPU harus didefinisikan Id dari prosessnya seperti apa sehingga program kita dapat berjalan secara parallel.

(Bersambung …………………………)