CUDA

Dari PaloDozen

NVIDIA® CUDA adalah landasan pembangunan perangkat lunak khusus GPGPU yang dibuat oleh NVIDIA.

Daftar isi

Deskripsi

CUDA adalah sebuah arsitektur pemrograman untuk General Purpose Graphics Processing Unit (GPGPU). Secara umum, komponen-komponen pendukung CUDA adalah:

  • Aplikasi, adalah perangkat lunak yang dibuat oleh penguna, memakai bahasa pemrograman khusus (kembangan C).
  • Pustaka perangkat lunak, yang menyediakan layanan dasar untuk program aplikasi mengakses CPU maupun GPU.
  • Perangkat keras khusus, yaitu GPU yang menyediakan mesin paralel.
  • Perangkat keras CPU, sebagai mesin sekuensial.

Dengan demikian, seorang pengguna CUDA haruslah membuat program dulu dalam bahasa pemrograman kembangan C (dengan ditambahi beberapa sintak yang sangat memudahkan pemrograman paralel tingkat tinggi). Kode sumber program itu dikompilasi, kemudian dijalankan. Program CUDA induk akan berjalan di CPU, sedangkat bagian paralelnya akan berjalan di GPU.

Lisensi

Sampai saat ini, CUDA disebarkan dengan bebas (freeware) oleh NVIDIA.

Mengunduh

Ada tiga file yang harus diunduh dari situs http://www.nvidia.com/object/cuda_get.html, yaitu :

  1. CUDA Driver
  2. CUDA Toolkit
  3. CUDA SDK code samples

Pilih versi CUDA sesuai sistem operasi anda, dalam hal untuk Rock Cluster 64 bit, pilih Linux-64. Semua berkas tersebut disimpan ke suatu laci, misal $HOME/download/cuda, lalu dijadikan executables

$ cd download/cuda
$ chmod +x *.run

Memasang

CUDA seharusnya dipasang pada komputer yang punya GPU sepadan, misalnya saja:

  • NVIDIA seri GTS 2xx
  • NVIDIA seri GTX 2xx

GTS 250

GTX 295

CUDA Driver

Pemasangan paket ini harus dari konsole teks. untuk itu pindah ke konsole 1 (tekan Ctrl Alt F1), lalu login sebagai root. Setelah itu jalankan perintah:

# init 3
# cd /home/user/download/cuda
# ./cudadriver_2.3_linux_64_190.18.run 

Ikuti saja petunjuk-petunjuknya, dan setelah selesai jalankan kembali mode grafik

# init 5

Layar GUI akan muncul kembali, silahkan login, lalu periksa instalasi dengan menjalankan terminal dan panggil perintah

$ nvidia-settings 

CUDA Toolkit

Pemasangan berikutnya, masih oleh root, adalah cudatoolkit. Paket ini sebaiknya dipasang di /opt

# ./cudatoolkit_2.3_linux_64_rhel5.3.run 
Enter install path (default /usr/local/cuda, '/cuda' will be appended): /opt

Selanjutnya perbaiki PATH dan LD_CONFIG sbb

# echo "/opt/cuda/lib64" > /etc/ld.so.conf.d/cuda.conf
# echo 'export PATH=$PATH:/opt/cuda/bin' > /etc/profile.d/cuda.sh
# /sbin/ldconfig

CUDA SDK

CUDA SDK harus dipasang oleh user di $HOME-nya sendiri. Oleh karena itu sebagai root, taruh saja filenya di /share/apps

# mkdir -p /share/apps/cuda
# cp cudasdk_2.3_linux.run /share/apps/cuda/

Selanjutnya masing-masing user membuka terminal baru, lalu memanggil

$ cd /share/apps/cuda
$ ./cudasdk_2.3_linux.run
Enter install path (default ~/NVIDIA_GPU_Computing_SDK): ~/CUDA_SDK

Located CUDA at /opt/cuda
If this is correct, choose the default below.
If it is not correct, enter the correct path to CUDA

Enter CUDA install path (default /opt/cuda): 
$ cd ~/CUDA_SDK
$ ls


CUDA Tanpa X-Windows

Pada compute node, CUDA akan dijalankan tanpa X Windows. Untuk itu root perlu melakukan langkah tambahan, yaitu dengan menambah script berikut [1] pada /etc/init.d/rc.local.

#!/bin/bash

# load nvidia kernel module
modprobe nvidia

# make device nodes
if [ "$?" -eq 0 ]; then
  for i in 0 1 2 3 4; do
    mknod -m 660 /dev/nvidia$i c 195 $i
  done
  mknod -m 660 /dev/nvidiactl c 195 255

  # allow users group to use the node
  chgrp users /dev/nvidia*
fi

Mencoba

Setelah memasang CUDA SDK, user akan punya laci $HOME/CUDA_SDK. Untuk percobaan, silakan:

$ cd ~/CUDA_SDK/C
$ make

Setelah menunggu sebentar, ada berbagai contoh laci di bin/linux/release. Coba saja

$ bin/linux/release/fluidsGL 
$ bin/linux/release/smokeParticles 

Namun ada catatan untuk pengguna kluster, contoh-contoh yang menggunakan tampilan direct OpenGL seperti dua contoh tersebut, tidak bisa dijalankan secara remote, walaupun menggunakan X redirection. Untuk itu percobaan terbatas pada contoh teks, misalnya

$ bin/linux/release/convolutionFFT2D

Atau kalau mau mencoba semuanya, buat script berikut di laci CUDA_SDK/C, lalu jalankan

#!/bin/sh

for F in bin/linux/release/*; do
  ./$F -noprompt
done

Memrogram

Untuk membuat program sendiri, cara yang diajurkan adalah memakai template yang sudah disediakan. Misalkan kita akan membuat program "prog1".


$ cd src/
$ cp -r template prog1
$ cd prog1
$ ls
doc  Makefile  obj  template.cu  template_gold.cpp  template_kernel.cu

$ rename template prog1 *
$ ls
doc  Makefile  obj  prog1.cu  prog1_gold.cpp  prog1_kernel.cu

$ sed -i 's/template/prog1/g' Makefile 
$ sed -i 's/template/prog1/g' prog1*

$ make
$ ../../bin/linux/release/p1
Processing time: 82.762001 (ms)
Test PASSED

Press ENTER to exit...

Selanjutnya tinggal menyunting file prog1.cu sesuai keinginan.

Hacking

Diagnosa

Beberapa perintah untuk memeriksa CUDA, apakah memang ada card NVIDIA

# lspci | grep -i nvidia
02:00.0 PCI bridge: nVidia Corporation Unknown device 05b8 (rev a3)
03:00.0 PCI bridge: nVidia Corporation Unknown device 05b8 (rev a3)
03:02.0 PCI bridge: nVidia Corporation Unknown device 05b8 (rev a3)
04:00.0 3D controller: nVidia Corporation Unknown device 05e0 (rev a1)
05:00.0 VGA compatible controller: nVidia Corporation Unknown device 05e0 (rev a1)

Apakah library CUDA sudah terpasang dengan benar:

# ldconfig -p | grep cuda
        libcufftemu.so.2 (libc6,x86-64) => /opt/cuda/lib64/libcufftemu.so.2
        libcufftemu.so (libc6,x86-64) => /opt/cuda/lib64/libcufftemu.so
        libcufft.so.2 (libc6,x86-64) => /opt/cuda/lib64/libcufft.so.2
        libcufft.so (libc6,x86-64) => /opt/cuda/lib64/libcufft.so
        libcudart.so.2 (libc6,x86-64) => /opt/cuda/lib64/libcudart.so.2
        libcudart.so (libc6,x86-64) => /opt/cuda/lib64/libcudart.so
        libcuda.so.1 (libc6,x86-64) => /usr/lib64/libcuda.so.1
        libcuda.so.1 (libc6) => /usr/lib/libcuda.so.1
        libcuda.so (libc6,x86-64) => /usr/lib64/libcuda.so
        libcuda.so (libc6) => /usr/lib/libcuda.so
        libcublasemu.so.2 (libc6,x86-64) => /opt/cuda/lib64/libcublasemu.so.2
        libcublasemu.so (libc6,x86-64) => /opt/cuda/lib64/libcublasemu.so
        libcublas.so.2 (libc6,x86-64) => /opt/cuda/lib64/libcublas.so.2
        libcublas.so (libc6,x86-64) => /opt/cuda/lib64/libcublas.so


Error g++

Kalau saat make ada error

g++ Command not found

obatnya pasang paket

# yum install gcc-c++


Error ld

Kalau saat make ketemu error seperti

ld: cannot find -lXi
ld: cannot find -lglut

Sama juga, perlu install

yum install libXi-devel.x86_64
yum install libXmu-devel.x86_64
yum install freeglut-devel.x86_64

Error karena pasang bukan di /usr/local

Saat memakai, perintah make gagal dengan pesan

cuda src/cutil.cpp:29:27: error: builtin_types.h: No such file or directory

Maka edit file common/common.mk, betulkan posisi instalasi CUDA

#CUDA_INSTALL_PATH ?= /usr/local/cuda
CUDA_INSTALL_PATH ?= /opt/cuda

Error No CUDA-capable NVIDIA GPUs found

Kesalahan ini saya alami jika mencoba CUDA:

  • di komputer yang tidak punya GPU NVIDIA (lihat diagnosa).
  • di komputer yang ada GPU namun tanpa X-Windows (lihat pemasangan).

Rujukan

Sebagaian besar informasi dan gambar pada halaman ini berasal dari:

Kata kunci: cuda,gpu,instalasi,pemrograman


Kontributor: Mursito