Link: http://bit.ly/2R4ktSO
PEMROGRAMAN GPU
(Teori & Aplikasi)
“ CUDA/PyCUDA/OpenCL Nvidia/Intel/AMD/Intel Mac/etc”
Versi 1.01
Oleh:
Imam Cholissodin
Tusty Nadia Maghfira
PENGANTAR
Buku ini memberikan penjabaran dari konsep dasar sampai
tingkat lanjut, mulai dari bagaimana menggunakan teknik parallel ber-
basis GPU, lalu mengimplementasikan terkait beberapa kebutuhan
teknologi terkini, yang meliputi deep learning, self-driving cars, virtual
reality, game development, accelerated computing, design & visualiza-
tion, automous machines dan lainnya, dengan melakukan komputasi
secara cepat dan handal, serta membuat pengembang mampu
mengintegrasikan teknik parallel dengan teknologi saat ini maupun
untuk masa depan dengan mengambil potensi cara kerja proses
paralel GPU yang sangat cepat dalam pengolahan data untuk mem-
bantu meningkatkan hasil yang lebih akurat.
Imam Cholissodin
Dosen Pengampu MK Pemrograman GPU FILKOM UB
2017-2019
Kata Pengantar
ii
In Syaa Allah pada edisi berikutnya, kami akan memberikan
contoh implementasi maupun penerapan yang lebih banyak
menggunakan CUDA, jCUDA, pyCUDA, OpenCL, pyOpenCL,
OpenMP, OpenACC, Tensorflow, etc pada berbagai bidang dan multi-
disiplin keilmuan. Selamat membaca buku ini dan semoga bermanfaat.
Penulis
iii
Daftar Isi
Judul ..................................................................................................... i
Kata Pengantar ................................................................................... ii
Daftar Isi ............................................................................................. iv
Daftar Gambar ................................................................................... viii
BAB 1 Konsep Pemrograman GPU ........................................... 1
1.1 Apa itu CPU vs GPU ....................................................... 1
1.2 Apa itu Pemrograman GPU............................................. 3
1.3 Macam-Macam CPU & GPU ........................................... 5
1.4 General Purpose Parallel Computing .............................. 6
1.5 Beberapa Teknik dari Tools Implementasi Paralel .......... 8
1.6 Tugas Kelompok ............................................................. 8
BAB 2 Introduction CUDA dan OpenCL .................................... 9
2.1 Instalasi CUDA ................................................................ 9
2.1.1 Install CUDA Toolkit 8.0 & Other ....................... 10
2.1.2 Compile dari command prompt (CMD) .............. 12
2.1.3 CUDA + VS 2017 .............................................. 19
2.1.4 CUDA + Python (PyCuda) ................................. 43
2.2 Instalasi OpenCL........................................................... 51
2.2.1 Apa itu OpenCL ................................................. 51
2.2.2 Install OpenCL NVidia ....................................... 51
2.2.3 Install OpenCL Intel ........................................... 63
2.2.4 Install OpenCL AMD.......................................... 81
2.3 Study Kasus Sederhana: CUDA dan OpenCL .............. 88
2.3.1 Hello World :D ................................................... 88
2.3.2 Single Instruction, Single Data (SISD)............... 90
2.3.3 Single Instruction, Multiple Data (SIMD) ............ 90
2.4 Tugas Kelompok ........................................................... 92
BAB 3 Cara Kerja Kernel Pada GPU....................................... 94
3.1 CUDA Grid Vs OpenCL NDRange ................................ 95
iv
3.2 Cara Kerja Kernel Pada CUDA ..................................... 98
3.3 Cara Kerja Kernel Pada OpenCL .................................. 99
3.4 Create Main Project (Compile dari Visual Studio) ....... 104
3.5 Study Kasus Dev.: CUDA............................................ 112
3.5.1 Operasi Paralel pada Vector ........................... 112
3.5.2 Operasi Paralel pada Matriks .......................... 118
3.6 Study Kasus Dev.: OpenCL ........................................ 121
3.6.1 Operasi Paralel pada Vector ........................... 121
3.6.2 Operasi Paralel pada Matriks .......................... 125
3.7 Tugas Kelompok ......................................................... 127
BAB 4 Race Conditions dan Atomic Function ........................ 135
4.1 Race Conditions .......................................................... 135
4.2 Atomic Function .......................................................... 137
4.3 Locks dan Mutex ......................................................... 139
4.4 Warps, Warps dan Locks ............................................ 141
4.5 Tugas Kelompok ......................................................... 143
BAB 5 Artificial Intelligence dengan GPU ............................... 145
5.1 Artificial Intelligence (AI) .............................................. 145
5.2 Machine Learning dan Teknik Optimasi ...................... 146
5.2.1 Clustering: K-Means ........................................ 147
5.2.2 Teknik Optimasi: Particle Swarm Optimization
(PSO) 149
5.3 Tugas Kelompok ......................................................... 158
BAB 6 OpenGL dengan GPU ................................................. 160
6.1 CUDA dan OpenGL .................................................... 160
6.1.1 Primitive Object (ex.: Segitiga) ........................ 161
6.1.2 Visualisasi Sine Wave ..................................... 162
6.1.3 Ray Tracing ..................................................... 176
6.1.4 Game Asteroid 2D ........................................... 177
6.1.5 Solusi Error CUDA + OpenGL ......................... 181
6.2 OpenCL dan OpenGL ................................................. 183
6.2.1 Visualisasi Sine Wave ..................................... 183
v
6.2.2 Marching Cubes OpenCL ................................ 185
6.3 Tugas Kelompok ......................................................... 186
BAB 7 Parallel Processing Pada Citra & Video ...................... 191
7.1 Tentang OpenCV, Citra dan Video.............................. 191
7.2 Install dan Konfigurasi OpenCV .................................. 194
7.3 Study Kasus: CUDA dan OpenCL............................... 196
7.3.1 Parallel Processing Pada Citra ........................ 196
7.3.2 Parallel Processing Pada Video ...................... 202
7.4 Tugas Kelompok ......................................................... 205
BAB 8 Create *.dll, *.lib pada GPU ......................................... 209
8.1 Apa itu *.dll, *.lib? ........................................................ 209
8.2 Create & Load *.dll, *.lib CUDA di Visual Studio ......... 210
8.2.1 Create *.dll ...................................................... 210
8.2.2 Load *.dll ......................................................... 215
8.2.3 Create *.lib ...................................................... 218
8.2.4 Load *.lib ......................................................... 223
8.3 Create Installer CUDA Project ..................................... 228
8.4 Tugas Kelompok ......................................................... 230
BAB 9 Pemrograman GPU Tingkat Lanjut ............................ 231
9.1 CUDA/OpenCL & Library, etc...................................... 231
9.2 Konfigurasi VS (CUDA dan Algoritma Yolo) ................ 232
9.3 Compile dan Run ........................................................ 238
9.4 Solusi Error saat Compile dan Run ............................. 243
9.5 Tugas Kelompok ......................................................... 246
BAB 10 Project Pilihan Pemrograman GPU ............................. 247
10.1 CUDA Pada Game 3D SandboxCraft ...................... 247
10.1.1 Dasar Teori ................................................... 248
10.1.2 Implementasi ................................................. 250
10.2 CUDA Pada Game 2D Asteroids ............................. 253
10.2.1 Dasar Teori ................................................... 254
10.2.2 Implementasi ................................................. 256
vi
10.3 CUDA Pada Game 2D Salmon Vs Turtles ............... 258
10.3.1 Dasar Teori ................................................... 259
10.3.2 Implementasi ................................................. 261
10.4 CUDA Pada Game Breakout ................................... 264
10.4.1 Dasar Teori ................................................... 265
10.4.2 Implementasi ................................................. 267
10.5 CUDA Pada Game 2D Pong .................................... 270
10.5.1 Dasar Teori ................................................... 270
10.5.2 Implementasi ................................................. 271
Daftar Pustaka................................................................................. 274
Biografi Penulis ............................................................................... 280
vii
Daftar Gambar
viii
Gambar 2.19 Pilih CUDA Samples Sesuai Versi Visual Studio ......... 18
Gambar 2.20 Klik “Start Visual Studio” .............................................. 19
Gambar 2.21 GeForce Experience .................................................... 19
Gambar 2.22 Ekstrak, lalu install ....................................................... 20
Gambar 2.23 Nvidia Installer failed ................................................... 20
Gambar 2.24 Sukses install NVIDIA Display driver ........................... 20
Gambar 2.25 Klik Run anyway .......................................................... 21
Gambar 2.26 Klik OK......................................................................... 21
Gambar 2.27 Tunggu beberapa waktu .............................................. 21
Gambar 2.28 klik Next ....................................................................... 22
Gambar 2.29 Ketik “cl”....................................................................... 22
Gambar 2.30 Set bin folder VS .......................................................... 23
Gambar 2.31 Cek kembali di cmd dengan Windows+R .................... 23
Gambar 2.32 Download query.cu ...................................................... 24
Gambar 2.33 Ketikkan nvcc query.cu -o query.................................. 24
Gambar 2.34 Hasil nvcc query.cu -o query ....................................... 25
Gambar 2.35 Kernel execution timeout: Yes ..................................... 25
Gambar 2.36 Klik kanan pada Nsight ................................................ 25
Gambar 2.37 muncul “Modify Setting Error”, maka exit Nsight.......... 26
Gambar 2.38 Klik kanan pada Nsight, lalu klik Run as administrator 27
Gambar 2.39 now ready for CUDA .................................................... 27
Gambar 2.40 Install Nsight, klik Next ................................................ 28
Gambar 2.41 Enable syntax highlighting file CUDA *.cu ................... 28
Gambar 2.42 NumPy + Mamba = Numba ......................................... 43
Gambar 2.43 OpenCL dan Lainnya ................................................... 51
Gambar 3.1 Map CUDA dan OpenCL ............................................... 94
Gambar 3.2 Membuat Project NVIDIA CUDA ................................. 104
Gambar 3.3 Buat Solution Folder Baru Pada Solution VSCuda ...... 105
Gambar 3.4 Tampilan Project Aktif Pada Visual Studio .................. 110
Gambar 5.1 Ilustrasi Map AI dan ML, serta Transfer AI .................. 145
Gambar 5.2 Map cakupan dari Machine Learning ........................... 146
ix
Gambar 5.3 Map pengembangan produk App ................................ 146
Gambar 5.4 Konsep Non-Hierarchical Clustering ............................ 147
Gambar 5.5 Ilustrasi Pergerakan Partikel PSO ............................... 149
Gambar 5.6 Pseudocode Struktur Umum Algoritma PSO ............... 149
Gambar 5.7 Plotting 2D Contoh Fungsi ........................................... 150
Gambar 6.1 Ilustrasi Ray Tracing .................................................... 176
Gambar 6.2 Tampilan Game Asteroid 2D ....................................... 180
Gambar 6.3 Tampilan Sine Wave OpenCL ..................................... 184
Gambar 6.4 Cara Kerja Marching Cubes ........................................ 185
Gambar 8.1 File *.dll vs *.lib ............................................................ 209
Gambar 9.1 CUDA/OpenCL Library dan Lainnya ............................ 231
Gambar 9.2 CUDA + Yolo ............................................................... 232
Gambar 10.1 Nvidia CUDA ............................................................. 249
Gambar 10.2 Tampilan Game Craft ................................................ 250
Gambar 10.3 Hasil Running Game Asteroid 2D .............................. 256
Gambar 10.4 Hasil running Game 2D Salmon Vs Turtles ............... 263
Gambar 10.5 Main Screen Pada Game Breakout ........................... 269
Gambar 10.6 Setelah Dimodifikasi Game Pong .............................. 272
x
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
BAB 1 Konsep
Pemrograman GPU
1
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Gambar 1.3 Contoh CPU, GPU, dan Core pada CPU vs GPU
Pada Gambar 1.3 diatas dapat dilihat perbedaan CPU dan GPU
berdasarkan jumlah core yang ada di dalamnya.
2
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
3
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
4
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
5
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Gambar 1.8 Operasi Floating-Point per Detik pada CPU dan GPU
6
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Single Precision (32 bit), Double Precision (64 bit), dan Clock
speed adalah ukuran dari seberapa besar kecepatan komputer
menyelesaikan perhitungan dasar dan operasi. 1 megahertz artinya
satu-juta siklus per detik, sementara gigahertz adalah satu-milyar
siklus per detik. Konsep Floating Point (bilangan titik mengambang),
adalah sebuah format bilangan yang dapat digunakan untuk merep-
resentasikan sebuah nilai yang sangat besar atau sangat kecil.
Bilangan ini direpresentasikan menjadi dua bagian, yakni bagian man-
tisa dan bagian eksponen (E). Contoh, bilangan 314600000 dan
0.0000451 dapat direpresentasikan dalam bentuk bilangan floating
point: 3146E5 dan 451E-7 (masing-masing artinya 3146 * 10 pangkat
5, dan 451 * 10 pangkat -7).
Berdasarkan hal tersebut, Parallel Computing saat ini banyak
digunakan pada berbagai operasi dalam PC dan mobile karena ke-
cepatan komputasi dan bandwidth memorinya yang tinggi. Berikut ini
beberapa contoh penggunaan Parallel Computing secara umum
beserta perusahaan yang menggunakannya:
Machine Learning, Graphics & Game Dev.
7
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
8
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
9
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
10
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
11
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
12
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
13
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
14
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
15
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Ubah
Menjadi
False
16
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Gambar 2.16 Klik kanan pada Nsight, lalu klik Run as administrator
- Ubah Kernel execution timeout: No, ketikkan “query”
17
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
18
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
19
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
20
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Klik OK
21
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
22
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
23
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
24
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
25
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Ubah
Menjadi
False
26
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Gambar 2.38 Klik kanan pada Nsight, lalu klik Run as administrator
- Ubah Kernel execution timeout: No, ketikkan “query”
27
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
28
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
29
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Cara Install, klik Tool>Get Tools and Features..., klik tab “Individual
components”, pastikan ““.NET Framework 3.5 ..” sudah tercentang,
jika belum, centang lalu klik tombol “Modify” utk install.
30
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
31
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
32
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
<ImportGroup Label="ExtensionSettings">
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA
9.0.props" />
</ImportGroup>
<ImportGroup Label="ExtensionTargets">
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA
9.0.targets" />
</ImportGroup>
menjadi
<ImportGroup Label="ExtensionSettings">
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA
8.0.props" />
</ImportGroup>
<ImportGroup Label="ExtensionTargets">
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA
8.0.targets" />
</ImportGroup>
33
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Solusi 1;
Copikan folder “bin” dan isinya dari link “http://bit.ly/2JFp62w” ke
folder “C:\Program Files (x86)\Microsoft Visual
Studio\2017\Community\VC”, sehingga menjadi seperti berikut
Solusi 2:
Lakukan konfigurasi pada Properti Project, set folder bin yang
sudah ada.
34
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Hasil run kode .cu pada visual studio 2017 dengan CUDA 8.0 yang
telah dikonfigurasi sebelumnya. Berhasil :D
35
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
36
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Cara Install, klik Tool>Get Tools and Features..., klik tab “Individual
components”, pastikan ““.NET Framework 3.5 ..” sudah tercentang,
jika belum, centang lalu klik tombol “Modify” utk install.
37
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
38
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
<ImportGroup Label="ExtensionSettings">
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA
9.0.props" />
</ImportGroup>
<ImportGroup Label="ExtensionTargets">
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA
9.0.targets" />
</ImportGroup>
menjadi
<ImportGroup Label="ExtensionSettings">
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA
8.0.props" />
</ImportGroup>
<ImportGroup Label="ExtensionTargets">
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA
8.0.targets" />
</ImportGroup>
39
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
40
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
41
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
42
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
43
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Klik Install
44
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Cek apakah python sudah aktif atau belum di Win OS, buka cmd
ketikkan “python” dan “conda”
45
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
46
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
47
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
48
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
def main():
N = 100000
A = np.ones(N, dtype=np.float32)
B = np.ones(N, dtype=np.float32)
start = time.time()
if __name__=='__main__':
main()
49
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
#mandel_gpu = cuda.jit(device=True)(mandel)
@cuda.jit(device=True)
def mandel(x, y, max_iters):
"""
Given the real and imaginary parts of a complex number,
determine if it is a candidate for membership in the Mandelbrot
set given a fixed number of iterations.
"""
c = complex(x, y)
z = 0.0j
for i in range(max_iters):
z = z*z + c
if (z.real*z.real + z.imag*z.imag) >= 4:
return i
return max_iters
@cuda.jit
def mandel_kernel(min_x, max_x, min_y, max_y, image, iters):
height = image.shape[0]
width = image.shape[1]
start = timer()
d_image = cuda.to_device(gimage)
mandel_kernel[griddim, blockdim](-2.0, 1.0, -1.0, 1.0, d_image, 20)
d_image.to_host()
dt = timer() - start
imshow(gimage)
show()
50
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
51
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
52
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Klik Finish
53
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
54
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Pada “Active solution platform” klik, dan pilih x64 (Jika belum ada
pilihan “x64”, klik “<New...>”. )
55
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Klik Close
- Klik OK
56
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
57
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Compile Project:
58
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Running
59
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Klik “Delete”.
60
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
61
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
62
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
63
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Klik Next
64
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
65
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Klik Install
- Proses Installasi
66
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Installasi Selesai, klik Finish, klik Yes/No, dan restart komputer anda.
67
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Buat folder solution utama, misal “VSIntelCL”, dengan cara klik File
New Project..., lalu pilih Visual C++ OpenCL CodeBuilder
Project for Windows. Isikan Name “OpenCLProject1”, dan Solution
name “VSIntelCL”, lalu klik OK
68
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Maka akan muncul “Code Builder Wizard ..”, lalu klik Next
69
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
70
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
71
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
-
Name “0HelloOCL”, jangan di klik OK dulu
72
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Setelah klik OK, jika muncul error “Adding a new OpenCL project to
existing solution is not supported”, klik OK
73
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
74
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
75
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
76
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
77
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
78
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
79
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
80
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
81
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
82
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
83
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Buat sebuah file .cpp pada Source Files project 0OpenCLHello dan
beri nama OpenCLHello.cpp
84
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
85
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
86
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
87
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
88
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
system("pause");
return 0;
}
89
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
90
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
91
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
----------OpenCL----------------
3. Buatkan Program untuk Operasi berikut menggunakan OpenCL
a. SISD
b. SIMD
Di dalam koding SISD dan SIMD, tolong sisipkan kode berikut.
92
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
----------PyCUDA----------------
4. Buatkan Program untuk Operasi berikut menggunakan PyCUDA
a. SISD
b. SIMD
Di dalam koding SISD dan SIMD, tolong sisipkan kode berikut.
93
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
94
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
clEnqueueNDRangeKernel(command_queue, kernel,
work_dim=2, NULL, global_work_size, lo-
cal_work_size, 0, NULL, NULL);
local_w ork_size.y
local_w ork_size.y
local_w ork_size.y
local_w ork_size.y
local_w ork_size.y
local_w ork_size.y
global_work_size.x
95
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Jika dibuat kode lain dengan tujuan yang sama, maka contoh
kode vectorAdd dengan threadIdx.x, dan Set grid, block dan Fungsi
untuk memanggilnya adalah sebagai berikut.
96
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Di mana,
threadIdx.x get_local_id(0), dan blockIdx.x get_group_id(0) Dim ke-1
threadIdx.y get_local_id(1), dan blockIdx.y get_group_id(1) Dim ke-2
threadIdx.z get_local_id(2), dan blockIdx.z get_group_id(2) Dim ke-3
97
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
98
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
99
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Ilustrasi Ke-1:
Workers, misal dalam 1 kelas terdapat 16 mahasiswa, dan
masing-masing mahasiswa diminta untuk membantu, dalam men
yelesaikan kasus menjumlahkan 2 vector. Misal vector A dan B yang
panjangnya masing-masing 16. Misal penyelesaiannya menggunakan
1D (work_dim=1), maka yang terisi hanya dimensi ke-1, sehingga
dimensi ke-2 dan ke-3 nya harus bernilai nol, dengan local_size(0)=4
(artinya, mhs tersebut dibentuk menjadi 4 kelompok).
global_work_size[3]={ 16, 0, 0 };
local_work_size[3]={ 4, 0, 0 };
clEnqueueNDRangeKernel(command_queue, kernel,
work_dim=1, NULL, global_work_size,
local_work_size, 0, NULL, NULL);
100
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Ilustrasi Ke-2:
Workers, misal dalam 1 kelas terdapat 16 mahasiswa, dan
masing-masing mahasiswa diminta untuk membantu, dalam
menyelesaikan kasus menjumlahkan 2 vector. Misal vector A dan B
yang panjangnya masing-masing 16. Misal penyelesaiannya
menggunakan 1D (work_dim=1), maka yang terisi hanya dimensi ke-1,
sehingga dimensi ke-2 dan ke-3 nya harus bernilai nol, dengan
local_size(0)=1 (artinya, mhs tersebut dibentuk menjadi 1 kelompok).
global_work_size[3]={ 16, 0, 0 };
local_work_size[3]={ 1, 0, 0 };
101
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Ilustrasi Ke-3:
Misal menggunakan 2D (work_dim=2), maka yang terisi hanya
dimensi ke-1 dan dimensi ke-2, sehingga ke-3 nya harus bernilai nol,
dengan local_size(0)=4 (artinya, mhs tersebut dibentuk menjadi 4
kelompok) pada dimensi ke-1, local_size(1)=4 (artinya, mhs tersebut
dibentuk menjadi 4 kelompok) pada dimensi ke-2.
global_work_size[3]={ 4, 4, 0 };
local_work_size[3]={ 4, 4, 0 };
work_dim = 2:
for(int i=0; i<=get_global_size(0);i++){
for(int j=0; j<=get_global_size(1);j++){
i = get_global_id(0);
j = get_global_id(1);
// Kernel code here
}
}
clEnqueueNDRangeKernel(command_queue, kernel,
work_dim=2, NULL, global_work_size, local_work_size,
0, NULL, NULL);
102
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Ilustrasi Ke-4:
Petunjuk: Pastikan global_work_sizes-nya merupakan
perkalian dari local_work_sizes. Artinya local_work_sizes harus
merupakan faktor dari global_work_sizes. Berikut contoh lainnya.
//set work dimension (work_dim)
int work_dim = 3; // 3D
//set global size dan local size
//seperti dim3 grid (..,..,..) size dan
//dim3 block(..,..,..) size pada CUDA
size_t global_work_size[3]={ 4, 10, 9 };
size_t local_work_size[3]={ 1, 2, 3 };
// atau bisa dgn { 2, 1, 3 }, atau lainnya
// dimana “get_”, global_size(0)=4,
// global_size(1)=10, global_size(2)=9
// local_size(0)=1, local_size(1)=2,
// local_size(2)=3
103
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Klik FileNewProject..:
- Klik NVIDIA CUDA 8.0 CUDA 8.0 Runtime, lalu isikan nama
project, misal “VSCuda”:
104
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Blok project “VSCuda”, lalu klik kanan pilih remove, klik Yes:
(Menghapus Isi Project VSCuda)
105
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
106
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Lalu Pilih NVIDIA, klik CUDA 8.0 CUDA 8.0 Runtime, lalu
masukkan Name Project, misal “0matrixTambah” dan Pilih Lokasi
(misal, di “..Pemrograman GPU\VSCuda\03_InstalasiCuda\”, bukan
di “E:\Data Kuliah\!Genap 2016-2017\2. Pemrograman
GPU\VSCuda\”), Klik OK:
107
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Lalu Pilih NVIDIA CUDA 8.0 CUDA C/C++ File, lalu masukkan
Name File, misal “0matrixTambah” dan Klik Add:
108
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
109
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
110
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
111
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
112
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Kode Kernel dan Host, Kode Kernel adalah kode yang akan
dijalankan pada device atau GPU. Kode ini dijalankan pada thread
di device (kernel run).
Kode Host adalah kode yang dijalankan pada host atau CPU.
Inisialisasi memori yang akan diproses oleh device akan dilakukan
pada Kode Host (memory allocation, kernel launch, dan memory
deallocation).
- Kode Kernel Vs Host, link kode (CUDA):
o 101vectAddDgnblock_Timer: “https://goo.gl/A3kBYL”
o 102vectAddDgnblockIdx.x: “https://goo.gl/JBkoYS”
o 103vectAddDgnthreadIdx.x: “https://goo.gl/tCThJA”
113
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
pairWiseSum<<<jmlBlock=1,threadPerBlock=4>>>(d_A);
114
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
115
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
116
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
117
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
118
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
119
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
120
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Kode Kernel dan Host, Kode Kernel adalah kode yang akan
dijalankan pada device atau GPU. Kode ini dijalankan pada thread
di device (kernel run).
Kode Host adalah kode yang dijalankan pada host atau CPU.
Inisialisasi memori yang akan diproses oleh device akan dilakukan
pada Kode Host (memory allocation, kernel launch, dan memory
deallocation).
121
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
122
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
123
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
124
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
125
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
..
..
int threadIdx_x = get_local_id(0);
int threadIdx_y = get_local_id(1);
int kolom = threadIdx_x;
int baris = threadIdx_y;
float c = 0;
for (int k = 0; k<N; k++){
c += d_a[baris*N + k] * d_b[k*N + kolom];
}
d_c[baris*N + kolom] = c;
..
126
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
127
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
128
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
6. Uraikan alur kerja indeks thread yang diadopsi dari alur kerja suatu
fungsi pada CPU dari bagian kode program GPU berikut, misal
dengan ordoMat=3:
a. Thread pada penjumlahan matriks
__global__ void fnMatrixPlusGPU(float *A, float *B, float *Hasil, int ordoMat)
{
//thread ID
int tid = (threadIdx.y * ordoMat) + threadIdx.x; // This gives every thread a unique ID.
129
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
// Do the operation
// get_local_size(0)*get_group_id(0) + get_local_id(0)
if (tid < 3){
device_tid[tid] = tid;
}else{
device_tid[tid] = -1;
}
*Host_A = get_local_size(0)*get_group_id(0) + get_local_id(0);
}
if (device_tid[i]>=0){
printf("\n tid = %d", device_tid[i]);
}
130
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
131
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
132
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
133
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
134
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
135
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
136
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Hasil Running:
137
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Dengan versi CUDA 2.0 atau yang lebih tinggi, kita bisa
menggunakan:
o old = atomicAdd(&addr, value); // old = *addr; *addr += value
o old = atomicSub(&addr, value); // old = *addr; *addr –= value
o old = atomicExch(&addr, value); // old = *addr; *addr = value
o old = atomicMin(&addr, value); // old = *addr; *addr = min( old, value )
o old = atomicMax(&addr, value); // old = *addr; *addr = max( old, value )
// Increment naikkan sampai ke nilai value, kemudian reset menjadi 0
// Decrement turunkan sampai ke nilai 0, kemudian reset menjadi value
o old = atomicInc(&addr, value); // old = *addr; *addr = ((old >= value) ? 0 :
old+1 )
o old = atomicDec(&addr, value); // old = *addr; *addr = ((old == 0) or (old >
val) ? val : old–1)
o old = atomicAnd(&addr, value); // old = *addr; *addr &= value
o old = atomicOr(&addr, value); // old = *addr; *addr |= value
o old = atomicXor(&addr, value); // old = *addr; *addr ^= value
// Compare-And-Store atau Compare-And-Swap
o old = atomicCAS(&addr, compare, value); // old = *addr; *addr = ((old ==
compare) ? value : old)
138
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
//kode paralel
myLock.lock();
//kode sequential
myLock.unlock();
//kode paralel
}
139
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
140
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
141
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
142
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
menjadi
srand(time(NULL));
float Batas_Bawah = 10.0, Batas_Atas = 100.0;
for (int i = 0; i < N; i++){
// random fix 0 angka dibelakang koma dengan nilai
[0,1,2,..,9]
a[i] = (float)(((int)(((float)rand() /
(float)RAND_MAX) * 10)) / 1.0);
b[i] = (float)(((int)(((float)rand() /
(float)RAND_MAX) * 10)) / 1.0);
}
143
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
144
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
manusia mesin
(a) Map AI dan ML
(b) Transfer kecerdasan Manusia ke Mesin
145
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
146
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
147
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
mi mi
1 1
Ci1
mi
x j1 ....... Cid
j 1 mi
x
j 1
jd
File koding K-Means CUDA dengan K=3: gpu_kmeans.cu: Implementasi algoritma diatas
dgn komputasi paralel
File titik data (x,y) yang digunakan: x.txt: koordinat x sebagai fitur ke-1, dan y.txt:
koordinat y sebagai fitur ke-2
File titik pusat cluster awal sebagai inisialisasi (mu_x,mu_y)={(-10,10), (0,0 ), (10,-10)}:
mu_x.txt: pusat cluster awal dari x, dan mu_y.txt: pusat cluster awal dari y
148
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
procedure AlgoritmaPSO
begin
t = 0
𝑡 𝑡 𝑡 𝑡
inisialisasi posisi partikel(𝑥𝑖,𝑗 ), kecepatan(𝑣𝑖,𝑗 ), 𝑃𝑏𝑒𝑠𝑡𝑖,𝑗 = 𝑥𝑖,𝑗 ,
𝑡
hitung fitness tiap partikel, dan 𝐺𝑏𝑒𝑠𝑡𝑔,𝑗
do
t = t + 1
update kecepatan v (t)
i,j
update posisi x (t)
i,j
hitung fitness tiap partikel
update Pbest (t) dan Gbest (t)
i,j g,j
while (bukan kondisi berhenti)
end
149
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
150
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
5.2.2.2 Inisialisasi
1. Inisialisasi Kecepatan Awal Partikel
Pada iterasi ke-0 (t=0), dapat dipastikan bahwa nilai kecepatan
awal semua partikel di (vi,j(t)=0) dan misal kecepatan partikelnya
sebagai berikut:
popSize=10, max, f(x1,x2) = 19 + x1sin(x1π) + (10 – x2) sin(x2π),
-5,0 ≤ x1 ≤ 9,8 0,0 ≤ x2 ≤ 7,3
151
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
v max j k
x max j x min j
k 0,1 (Marini & Walczak, 2015)
2
152
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
v max j 1 0,6
9,8 5 4,44 v max 2 0,6
7,3 0 2,19
2 2
sehingga untuk vi,j=1=[vmin1 ; vmax1] = [-4,44 ; 4,44] dan
vi,j=2=[vmin2 ; vmax2] = [-2,19 ; 2,19]
Dalam menentukan interval pada langkah sebelumnya, baik
untuk posisi maupun kecepatan partikel untuk setiap dimensi,
sebaiknya dilakukan pada proses inisialisai. Batasan kecepatan atau
threshold yang digunakan adalah sebagai berikut (Marini & Walczak,
2015):
jika vijt 1 v max j maka vijt 1 v max j
jika vijt 1 v max j maka vijt 1 v max j
Jika diketahui xi,1 = [xmin1 ; xmax1] = [-5 ; 9,8], xi,2 = [xmin2 ; xmax2] = [0
; 7,3], serta telah didapatkan vi,1 = [-4,44 ; 4,44] dan vi,2 = [-2,19 ; 2,19]
dan misalkan diketahui w = 0.5, c1 = 1, c2 = 1, r1 = rand[0,1], dan r2 =
rand[0,1]. Dimana r1 dan r2 adalah bilangan acak dalam interval [0, 1].
Maka untuk mendapatkan hasil update kecepatannya dihitung sebagai
berikut, misal menghitung v1,1(1).
vit,j1 w.vit, j c1.r1 Pbestit, j xit, j c2 .r2 Gbestgt , j xit, j
v10,11 w.v10,1 c1.r1 Pbest10,1 x10,1 c2 .r2 Gbest10,1 x10,1
0.50 10.11.4898 1.4898 10.4 8.4917 1.4898
0 0 2.8001 2.8001
153
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
partikel
154
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Pbest partikel
2. Dari 2 tabel di atas, cek dari urutan baris yang sama, kemudian
dibandingkan fitness-nya, manakah yang lebih tinggi nilainya
akan menjadi Pbest terbaru.
Pbest
155
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Gbest
Gbest
156
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
File koding PSO CUDA, dgn nama mykernel.cu: Implementasi PSO yang dijalankan secara
paralel dengan CUDA
File koding PSO CPU, dgn nama mykernel.cpp: Implementasi PSO yang dijalankan secara
iteratif tanpa CUDA
File header dgn nama mykernel.h: digunakan untuk set parameter PSO, juga untuk me-
manggil fungsi cuda_pso dari file mykernel.cu dan fungsi pso dari file mykernel.cpp
157
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
o Maximum Distance
d max ( x, y) max x j y j
j 1..d
o Average Distance
1
1 d 2
d ave ( x, y ) x j y j
2
d j 1
Dan capture step by step hasil running programnya dari VS, seperti
pada contoh di-slide, dan sertakan kode programnya dalam tabel.
158
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Dan capture step by step hasil running programnya dari VS, seperti
pada contoh di-slide, dan sertakan kode programnya dalam tabel.
4. Dari soal no. 3, ubah juga pada koding x1min, x1max, x2min, x2max tiap
dimensinya, dimensi ke-1 (x1), dimensi ke-2 (x2). Dengan batas
berikut:
Maksimalkan nilai f(x1,x2)) dari sebuah fungsi
max, f(x1,x2) = 19 + x1sin(x1π) + (10 – x2) sin(x2π),
-5,0 ≤ x1 ≤ 9,8 dan 0,0 ≤ x2 ≤ 7,3
Dan capture step by step hasil running programnya dari VS, seperti
pada contoh di-slide, dan sertakan kode programnya dalam tabel.
159
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
160
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Note:
GLint = int, dan GLuint = unsigned int
o Membuat fungsi “void createVBO” Create buffer object
..
// Membuat new VBO dengan variable id untuk menyimpan VBO id
glGenBuffers(1, vbo);
161
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
162
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
163
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
164
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
165
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
compute_20,sm_20
compute_30,sm_30
compute_35,sm_35
compute_37,sm_37
compute_50,sm_50
compute_52,sm_52
compute_60,sm_60
166
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
glew64.lib
cudart_static.lib
freeglut.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib
167
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
168
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
169
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
170
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
171
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
172
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
173
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
o Klik kanan file “transObject.rc”, klik “View Code”, klik Yes, hapus
semua kode di dalam file “transObject.rc”
174
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
175
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
176
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
177
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
178
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
179
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
180
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
181
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
182
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
183
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
184
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
185
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
186
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
187
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
----------dengan OpenCL----------
1. Dalam main project kelompok anda, misal “VSCudaCLKel-[..]-Kelas-
[..]”, didalamnya buat folder, misal “09_OpelGLCLKel[..]”, yang
didalamnya minimal terdapat project “00TransObjectCLKel[..]”.
Dan capture step by step hasil running programnya dari VS, seperti
pada contoh di slide, dan sertakan kode programnya dalam tabel.
188
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
189
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
190
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
191
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
192
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Highpass filter
193
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
194
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
195
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
196
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
197
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
-
dengan “E:\opencv\build\x64\vc12\bin”
198
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Tampilan project
199
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
//copy the input image to the output image, sebenarnya d_out ini hanya array 1
//dimensi
//dengan indeks {0,1,.., (220800-1)} untuk lapisan red (r)
//dengan indeks {220800,220801,.., (2*220800-1)} untuk lapisan green (g)
//dengan indeks {2*220800, (2*220800 + 1),.., (3*220800-1)} untuk lapisan blue (b)
d_out[r] = d_in[r];
d_out[b] = d_in[b];
d_out[g] = d_in[g];
//printf("%d\t%d\t%d\n",r,g,b);
}
200
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
201
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
202
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
203
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Klik “CUDA C/C++” Klik “Host” Klik pada bagian anak panah
“Preprocessor Definitions”, lalu klik “<Edit...>”
204
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
2. Dari soal no. 1 di atas, ganti file citra "flower.bmp“ dengan citra
foto selfie kelompok (1 file citra ada semua anggota), misal
dengan nama “selfiekel[..]kelas[..].bmp”:
CImg<unsigned char> img("flower.bmp");
Menjadi, misal
CImg<unsigned char> img("selfiekel[..]kelas[..].bmp");
205
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
206
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
RGB2Neg: 255 - I
207
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
RGB2Neg: 255 - I
208
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Shared library
(*.dll) File Dynamic linking
tidak menyatu dengan Program
setelah di-compile
209
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
210
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Klik Add
211
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
212
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
213
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
214
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
215
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Klik Add
- Tampilan project “1Use0helloDLLCara1”, setelah ditambahkan file
“use0helloDLL.cu”
216
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
217
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
218
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Klik Add
219
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
220
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
221
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
222
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
223
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Klik Add
- Tampilan project “4Use0helloLIB”, setelah ditambahkan file
“use0helloLIB.cu”
224
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
225
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
226
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
227
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
228
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
229
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
230
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
231
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
232
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
233
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
234
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
235
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
236
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
237
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
238
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Running dari cmd (utk deteksi objek dari multi citra) ke-1:
Ketikkan di cmd: 01darknetY2CU8.exe detector test data/coco.data
yolo.cfg yolo.weights -i 0 -thresh 0.3
- Running dari cmd (utk deteksi objek dari multi citra) ke-2:
Ketikkan di cmd: 01darknetY2CU8.exe detector test data/coco.data
yolo.cfg yolo.weights -i 0 -thresh 0.3
Note: Pada sebagian bentuk ellips diidentifikasi sebagai frisbee (piring terbang) :D
239
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
cvWriteFrame
Enter Image Path: data/1.jpg
data/1.jpg: Predicted in 0.593000 seconds.
person: 31%
person: 64%
person: 37%
person: 59%
person: 79%
person: 84%
frisbee: 58%
person: 82%
person: 87%
person: 85%
frisbee: 60%
person: 79%
person: 62%
person: 73%
person: 79%
horse: 36%
cvWriteFrame
240
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
- Running dari cmd (utk deteksi objek dari multi citra) ke-3:
Ketikkan di cmd: 01darknetY2CU8.exe detector test data/coco.data
yolo.cfg yolo.weights -i 0 -thresh 0.3
Note: Bagus juga pada citra dengan sedikit atau banyak cahaya :D
- Running dari cmd (utk deteksi objek dari multi citra) ke-4:
Ketikkan di cmd: 01darknetY2CU8.exe detector test data/coco.data
yolo.cfg yolo.weights -i 0 -thresh 0.3
Note: Pada sebagian belum teridentifikasi, misal monas, person yang ukurannya kecil (perlu
dilakukan training dengan menambah, misal 1 kelas, misal monas dan mengoptimalkan
parameter yang digunakan untuk mengenali person yang terlihat kecil) :D
241
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
242
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
243
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
244
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Klik OK
245
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
246
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
247
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
248
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
utama yang dimiliki OpenGL di atas API grafis lainnya adalah platform
berjalan pada berbagai platform. OpenGL dapat berjalan di Windows,
Linux, Mac OSX.
Konsep awal dari game loop adalah memproses input dari user
tapi tidak menunggu dan selalu melakukan loop secara terus menerus.
Hal tersebut membuat sebuah CPU menjadi lebih berat. Pada gambar
1 terdapat icon waktu yang menandakan sleep untuk menahan ke-
cepatan loop agar sesuai pada tiap framenya. Menahan kecepatan
loop tersebut nantinya akan di proses menjadi sebuah fps.
o Pemrograman GPU
Pemrograman GPU memiliki tujuan tidak hanya untuk mengolah
grafis melainkan juga dapat untuk tujuan umum, misal komputasi
ilmiah menggunakan machine learning dan rekayasa lainnya pada
game development, etc. dengan framework tertentu, misal CUDA.
249
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
250
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
251
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
252
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
253
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
254
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
o CUDA
CUDA merupakan sebuah platform dan programming untuk
komputasi paralel yang dikembangkan oleh Nvidia. CUDA difokuskan
untuk mengambil keuntungan sepenuhnya dari GPU Nvidia. Berbeda
dengan OpenCL yang mampu memanfaatkan GPU non-Nvidia (AMD,
Intel, Mali, dsb). CUDA memungkinkan kita untuk melakukan parallel
computing menggunakan GPU untuk keperluan non grafis.
CUDA sendiri didesain untuk diprogram pada bahasa pem-
rograman C, C++, dan Fortan. Selain itu, CUDA juga mendukung API
seperti OpenCL, hal ini memungkingkan kita untuk menggunakan API
CUDA jika pada platform yang menggunakan GPU Nvidia, dan
menggunakan API OpenCL pada platform non Nvidia seperti AMD, In-
tel, Mali, dan PowerVR.
255
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
10.2.2 Implementasi
Game yang dilakukan proses improvement adalah game 2D As-
teroids dimana player dapat berjalan pada layar game. Di dalam se-
buah game pasti memiliki main loop. Pada main loop tersebut, sebuah
proses pasti dilakukan secara berulang. Pada game loop yang terdapat
pada game Asteroids diatas, terdapat beberapa method untuk
melakukan update objek yang terdapat pada game. Salah satunya
yaitu melakukan update pada array asteroids. Update yang dilakukan
yaitu berupa update posisi dan rotasi dari asteroids. Code for-loop
yang menggunakan CPU untuk melakukan update rotasi dan posisi as-
teroids ada pada file Asteroids.c.
256
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
257
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
258
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
o CUDA
CUDA adalah sebuah arsitektur komputer paralel yang dikem-
bangkan oleh perusahan besar yang memiliki basis Graphic Card, yaitu
NVIDIA dan diluncurkan pada tahun 2007. Tujuan dari CUDA adalah
menyediakan arsitektur yang mudah digunakan untuk pemrosesan
secara paralel. Yang hanya dapat dijalankan oleh GPU NVIDIA. Periset
dan pengembang dapat menggunakan GPU yang bertenaga dengan
hanya menggunakan bahasa pemrograman yang sederhana dan syn-
tax tambahan CUDA. CUDA menyediaan dua jenis API, termasuk
259
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Runtime API dan Driver API. CUDA juga merupakan extensi minimal
dari bahasa pemrograman C dan C++. Programmer menulis program
secara seri yang dapat memanggil kernel paralel, yang dapat berupa
fungsi sederhana atau program yang utuh.
Arsitektur GPU yang mendukung CUDA meningkat perkem-
banganya dari arsitektur Tesla (Compute Capability 1.0) menuju gen-
erasi Fermi (Compute Capability 2.0). GPU basis Fermi mendukung
presisi ganda, mekanisme caching dan concurrent kernel execution.
Pada tahun 2012, arsitektur kepler(Compute Capability 3) Diluncurkan
dan menjadi batu loncatan dalam pemrograman GPU yang mendkung
beberapa fitur baru yang diimplementasi, yaitu dynamic parallelism
dan bindless texture object.
o OpenGL
OpenGL pada masa sekarang pengembanganya bagus untuk
perangkat lunak pencitraan tiga dimensi, yang dikembangkan oleh SGI
yang pengembanganya menyasar workstation berperforma tinggi, in-
tinya grafik dan interface perangkat lunak terdiri dari lebih dari 100
fungsi graphic, diantaranya pemodelan, transformasi, pemrosesan ca-
haya, pemrosesan warna, animasi dan texture mapping yang lebih
baik, fungsi motion blur pada objek, pengembang dapat menggunakan
fungsi tersebut untuk membuat model tiga dimensi dan interaksi tiga
dimensi secara nyata. Grafik tiga dimensi pada openGL menjadi
standar universal dan openGL juga dapat dijalankan pada sistem
operasi windows.
260
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
10.3.2 Implementasi
Gambar berikut adalah tampilan in-game Salmon Vs Turtles
ketika pada awal game dan ketika salmon bertabrakan dengan turtle,
bagian tertentu dari objek yang akan dioptimasi prosesnya.
261
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
262
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
263
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
264
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
265
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
o OpenGL
OpenGL adalah API yang dikeluarkan oleh perusahaan Silicon
Graphic Pada tahun 1992 untuk tujuan grafis. Dimana dengan OpenGL
kita dapat membuat dan me render gambar 2D maupun 3D dengan
menggunakan buffer yang telah disediakan. OpenGL melakukan ren-
dering objek 2D maupun 3D dari susunan vertex-vertex atau pixel ke
dalam frame buffer. OpenGL tidaklah menyediakan fungsi-fungsi dasar
seperti membuat windows dan sebagainya karena bergantung pada
sistemnya itu sendiri. Tetapi, ada helper seperti GLUT, SDL, dan lain
sebagainya yang dapat membantu kita untuk membuat fungsi-fungsi
dasar maupun lanjutan yang tidak disediakan oleh OpenGL. Berikut
contoh Penerapan OpenGL pada Google Sketchup
o CUDA
Compute Unified Device Architecture (CUDA) adalah sebuah
pengembangan teknologi yang dikembangkan oleh NVIDIA untuk
mempermudah penggunaan GPU untuk keperluan umum (non-grafis).
Berawal dari penelitian yang dilakukan oleh NVIDIA tentang GPGPU
(General-Purpose Computing on Graphics processing Unit) lahirlah
teknologi yang bernama CUDA. Arsitektur pada CUDA itu sendiri dil-
akukan secara parallel yang diimplementasikan ke dalam GPU besutan
266
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
NVIDIA, pada seri GPU Tesla, GeForce maupun Quadro. Saat ini CUDA
mengalami banyak perkembangan yang sangat pesat. Itu dapat dibuk-
tuikan dari banyaknya penelitian yang dilakukan, dan juga banyaknya
CUDA SDK yang diunduh dalam beberapa tahun terakhir ini.
10.4.2 Implementasi
JIka objek bola terkena objek lain, maka secara otomatis akan
mengkalkulasi akibat daripada collision tersebut, kemudian
mengupdate game objek apabila ada perubahan pada objek ketika ter-
jadi collision. Setelah itu, window direfresh dan di update sehingga se-
tiap perubahan yang terjadi pada game langsung diperlihatkan.
Setelah itu jika tidak ada kejadian lain, masuk ke sleep hingga ada ke-
jadian lain yang menimbulkan update daripada game.
Proses ini merupakan proses membuat fungsi transpose matrik
GPU yang akan digunakan dalam sistem. Diawali dengan sintaks
__global__ void fnMatrixTransGPU(float *A, float *Hasil), kemudian
membuat ID Threads unik dari threadIdx.y dan threadIdx.x. Kese-
luruhan proses tersebut ditunjukkan dari potongan kode program
berikut.
1 untuk CPU
2 for(int j = 0; j < CIRCLE_SEGMENTS; j++) {
3 float const theta = 2.0f * 3.1415926f * (float)j /
4 (float)CIRCLE_SEGMENTS;
5 float const xx = scale * 16.0f * sinf(theta) *
6 sinf(theta) * sinf(theta);
7 float const yy = -1 * scale * (13.0f * cosf(theta) -
8 5.0f * cosf(2.0f * theta) - 2 * cosf(3.0f * theta) - cosf(4.0f
9 * theta));
10 glVertex2f(x + xx, y + yy);
11 }
267
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
1 untuk GPU
2
3 pada method drawLife(float x, float y)
4 float *xx, *yy;
5 xx = (float*)malloc(sizeof(float)*CIRCLE_SEGMENTS);
6 yy = (float*)malloc(sizeof(float)*CIRCLE_SEGMENTS);
7
8 float *xx_d, *yy_d;
9 cudaMalloc((void**)&xx_d, sizeof(float)*CIRCLE_SEGMENTS);
10 cudaMalloc((void**)&yy_d, sizeof(float)*CIRCLE_SEGMENTS);
11
12 kernel_wrapper(CIRCLE_SEGMENTS, xx_d, yy_d);
13
14 cudaMemcpy(xx, xx_d, sizeof(float)*CIRCLE_SEGMENTS,
15 cudaMemcpyDeviceToHost);
16 cudaMemcpy(yy, yy_d, sizeof(float)*CIRCLE_SEGMENTS,
17 cudaMemcpyDeviceToHost);
18
19 for (int j = 0; j < CIRCLE_SEGMENTS; j++) {
20
21 glVertex2f(x + xx[j], y + yy[j]);
22 }
23
24 glEnd();
25 cudaFree(xx_d);
26 cudaFree(yy_d);
27 free(xx);
28 free(yy);
29
30
31 pada kernel
32 __global__ void drawlife(int CIRCLE_SEGMENTS, float *x, float
33 *y) {
34 float const scale = 0.5f;
35 int i = threadIdx.y * CIRCLE_SEGMENTS + threadIdx.x;
36 float const theta = 2.0f * 3.1415926f * (float)i /
37 (float)CIRCLE_SEGMENTS;
38 x[i] = 0.5f * 16.0f * sinf(2.0f * 3.1415926f * (float)i /
39 (float)CIRCLE_SEGMENTS) * sinf(2.0f * 3.1415926f * (float)i /
40 (float)CIRCLE_SEGMENTS) * sinf(2.0f * 3.1415926f * (float)i /
41 (float)CIRCLE_SEGMENTS);
42 y[i] = -1 * 0.5f * (13.0f * cosf(2.0f * 3.1415926f * (float)i
43 / (float)CIRCLE_SEGMENTS) - 5.0f * cosf(2.0f * 2.0f *
44 3.1415926f * (float)i / (float)CIRCLE_SEGMENTS) - 2 *
45 cosf(3.0f * 2.0f * 3.1415926f * (float)i /
46 (float)CIRCLE_SEGMENTS) - cosf(4.0f * 2.0f * 3.1415926f *
47 (float)i / (float)CIRCLE_SEGMENTS));
48 }
49
50 void kernel_wrapper(int CIRCLE_SEGMENTS, float *x, float *y) {
51 drawlife << <1, CIRCLE_SEGMENTS >> > (CIRCLE_SEGMENTS, x, y);
52 }
268
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
269
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
270
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
10.5.2 Implementasi
Pada game ini, dilakukan eksperimen dengan membuat jumlah
bola menjadi sangat banyak, targetnya 10.000 bola. Hal ini dilakukan
untuk menguji seberapa besar kerja CPU dan GPU saat program dijal-
ankan dalam visual studio. Untuk CPU, program akan menggunakan
for untuk membuat objek bola yang akan dibuat classnya supaya lebih
mudah, sebanyak 10.000 kali pembuatannya. Lalu untuk merender se-
luruh bola tersebut menggunakan OpenGL dengan syntax glBegin dan
glEnd, karena merupakan kode asli dari sumbernya. Untuk GPU, imple-
mentasi mirip dengan CPU, namun karena terdapat berbagai fungsi
yang tidak bisa dipanggil pada kernel, maka simulasi yang dilakukan
pada GPU hanya memperbanyak jumlah bola saja, tidak ada
mekanisme pantulan papan dan skor. Rendering untuk objek pada
GPU menggunakan OpenGL CUDA interop yaitu penggunaan VBO yang
271
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
272
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
273
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Daftar Pustaka
274
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
275
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
276
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
277
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
278
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
279
Cholissodin, I., Maghfira, T. N., 2017, Pemrograman GPU, Fakultas Ilmu Komputer,
Universitas Brawijaya, Malang.
Biografi Penulis
280