CUDA : cours mise en pratique
Installer le CUDA Toolkit :
sudo dpkg -i cuda-repo-ubuntu1404_7.0-28_amd64.deb
sudo apt-get update
sudo apt-get install cuda
Modifier le fichier .bashrc :
export CUDA_HOME=/usr/local/cuda-7.0
export LD_LIBRARY_PATH=\${CUDA_HOME}/lib64
PATH=\${CUDA_HOME}/bin:${PATH}
export PATH
Installation des exemples :
cuda-install-samples-7.0.sh ~
cd ~/NVIDIA_CUDA-7.0_Samples
make
On suppose que l'on dispose de Ubuntu 12.04 en 32 bits.
Se rendre sur le site de NVidia et télécharger les fichiers suivants dans leur version Ubuntu 32 bits :
Suivre alors la procédure d'installation ci-après :
sudo apt-get install freeglut3-dev build-essential libx11-dev
libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
sudo gedit /etc/modprobe.d/blacklist.conf
Ajouter les lignes suivantes à la fin du fichier :
blacklist amd76x_edac
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
sudo apt-get --purge remove nvidia-*
Attention : si la commande supprime ubuntu-desktop alors le réinstaller :
sudo apt-get install ubuntu-desktop
redémarrer la machine mais ne pas se connecter, se rendre sur une console : CTRL+ALT+F1
se connnecter et exécuter les commandes suivantes:
sudo service lightdm stop
sudo sh ./devdriver_4.2_linux_32_295.41.run
Suivre la procédure d'installation, si CUDA indique un problème avec nouveau alors le supprimer et rebooter éventuellement, puis recommencer l'opération d'installation :
sudo modprobe -r nouveau
sudo sh ./devdriver_4.2_linux_32_295.41.run
rebooter, se connecter en mode graphique, puis dans un terminal :
sudo sh ./cudatoolkit_4.2.9_linux_32_ubuntu11.04.run
Note : garder les chemins d'installation par défaut, notamment /usr/local/cuda
sudo gedit /etc/environment
et modifier le PATH en :
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/cuda/bin"
Enregistrer, recharger
source /etc/environment
ajouter des librairies
sudo gedit /etc/ld.so.conf
ajouter :
/usr/local/cuda/lib64
/usr/local/cuda/lib
enregistrer, recharger :
sudo ldconfig
Installer en tant que simple utilisateur, cela créera un répertoire NVIDIA_GPU_Computing_SDK dans votre home directory
sh ./gpucomputingsdk_4.2.9_linux.run
Se rendre dans ~/NVIDIA_GPU_Computing_SDK, et modifier (comme suit GluStringError), puis lancer la compilation :
cd ~NVIDIA_GPU_Computing/C
make
Note : on génère les programmes dans ~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release/
Modifier la variable LD_LIBRARY_PATH en ligne de commande ou dans votre .bashrc:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib
Exécuter les programmes suivants :
Résultat pour deviceQuery pour Quadro FX 880M :
CUDA Device Query (Runtime API) version (CUDART static linking)
Found 1 CUDA Capable device(s)
Device 0: "Quadro FX 880M"
CUDA Driver Version / Runtime Version 4.2 / 4.2
CUDA Capability Major/Minor version number: 1.2
Total amount of global memory: 1023 MBytes (1073020928 bytes)
( 6) Multiprocessors x ( 8) CUDA Cores/MP: 48 CUDA Cores
GPU Clock rate: 1210 MHz (1.21 GHz)
Memory Clock rate: 790 Mhz
Memory Bus Width: 128-bit
Max Texture Dimension Size (x,y,z) 1D=(8192), 2D=(65536,32768), 3D=(2048,2048,2048)
Max Layered Texture Size (dim) x layers 1D=(8192) x 512, 2D=(8192,8192) x 512
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 16384 bytes
Total number of registers available per block: 16384
Warp size: 32
Maximum number of threads per multiprocessor: 1024
Maximum number of threads per block: 512
Maximum sizes of each dimension of a block: 512 x 512 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 1
Maximum memory pitch: 2147483647 bytes
Texture alignment: 256 bytes
Concurrent copy and execution: Yes with 1 copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Concurrent kernel execution: No
Alignment requirement for Surfaces: Yes
Device has ECC support enabled: No
Device is using TCC driver mode: No
Device supports Unified Addressing (UVA): No
Device PCI Bus ID / PCI location ID: 1 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 4.2, CUDA Runtime Version = 4.2,
NumDevs = 1, Device = Quadro FX 880M
[deviceQuery] test results...
PASSED
A comparer avec une NVidia GTX 560 Ti qui comporte 384 cores et une bande passante de 128 Go/s.
Résultat pour bandWidthTest :
./bandwidthTest Starting...
Running on...
Device 0: Quadro FX 880M
Quick Mode
Host to Device Bandwidth, 1 Device(s), Paged memory
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 2182.2
Device to Host Bandwidth, 1 Device(s), Paged memory
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 1977.1
Device to Device Bandwidth, 1 Device(s)
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 21059.9
[bandwidthTest] test results...
PASSED
Nous utilisons la version 10.10 de Ubuntu (Maverick Meerkat) sortie en octobre 2010.
Pour réaliser l’installation, il faut télécharger les archives suivantes sur le site de NVidia :
sudo apt-get install gcc g++ freeglut3-dev libXi-dev libglew1.5-dev
libboost-all-dev libopenal1 libopenal-dev libilmbase6 libilmbase-dev openexr
libopenexr-dev libopenexr6 libopenjpeg2 libopenjpeg-dev libXmu-dev
sudo gedit /etc/modprobe.d/blacklist.conf
Ajouter les lignes suivantes à la fin du fichier :
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
sudo apt-get --purge remove nvidia-*
redémarrer la machine mais ne pas se connecter, se rendre sur une console : CTRL+ALT+F5
se connnecter et exécuter les commandes suivantes:
sudo service gdm stop
sudo sh ./devdriver_4.0_linux_32_270.40.run
suivre la procédure normale d’installation qui doit échouer, on recommence :
sudo service gdm stop
sudo sh ./devdriver_4.0_linux_32_270.40.run
suivre la procédure normale d’installation qui doit se dérouler normalement à présent.
sudo sh ./cudatoolkit_4.0.13_linux_32_ubuntu10.10.run
sudo gedit /etc/environment
et modifier le PATH en :
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/cuda/bin"
Enregistrer, recharger
source /etc/environment
ajouter des librairies
sudo gedit /etc/ld.so.conf
ajouter :
/usr/local/cuda/lib64
/usr/local/cuda/lib
enregistrer, recharger :
sudo ldconfig
sh ./gpucomputingsdk_4.0.13_linux.run
réparer le lien vers libGL.so :
sudo rm /usr/lib/libGL.so
sudo ln -s /usr/lib/libGL.so.1 /usr/lib/libGL.so
créer un lien vers libXmu.so :
sudo rm /usr/lib/libXmu.so
sudo ln -s /usr/lib/libXmu.so.6 /usr/lib/libXmu.so
cd ~/NVIDIA_GPU_Computing_SDK/C
make
Copier libOpenImageIO.so dans /usr/lib/
Les exemples seront dans ~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release/
Par exemple, clic sur smokeParticles