Au 27 mai 2012, le pilote Cuda version 4.2 ne nécessite plus d'inscription préalable pour être téléchargé.
Le lien suivant défini les différents paquets à installer :
# Dans sa version 64 bits wget http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/cudatoolkit_4.2.9_linux_64_ubuntu10.04.run # Dans sa version 32 bits wget http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/cudatoolkit_4.2.9_linux_32_ubuntu10.04.run
wget http://developer.download.nvidia.com/compute/cuda/4_2/rel/sdk/gpucomputingsdk_4.2.9_linux.run
root
Pour commencer, installation et configuration minimale :
apt-get install module-assistant # téléchargement des prototypes du noyau courant si nécessaire m-a prepare # pour les noyaux récents (par exemple comme le 2.6.32, il faut blacklister nouveau echo blacklist nouveau >> /etc/modprobe.d/blacklist.conf # arret de GDM s'il est lancé /etc/init.d/gdm stop # arret de GDM3 s'il est lancé /etc/init.d/gdm3 stop # arret de KDM s'il est lancé /etc/init.d/kdm stop
Le redémarrage semble nécessaire pour que le pilote nouveau
ne soit pas chargé.
Puis, même lancement de l'installation du pilote :
sh /root/NVIDIA-Linux-x86_64-295.59.run -a -d -kernel-name=$(uname -r)
sh /root/NVIDIA-Linux-x86-295.59.run -a -d -kernel-name=$(uname -r)
.
root
Pour le SDK, toujours aussi simple, mais, pour uniformiser les usages, nous décidons d'installer ces librairies non pas dans usr/local/cuda
mais /opt/cuda
. De plus, nous désirons conserver l'ancienne version :
cd /opt # Suppression du lien [ -e /opt/cuda ] && rm -r /opt/cuda # Lancer l'installation sh /root/cudatoolkit_4.2.9_linux_64_ubuntu10.04.run # Entrer la racine du repertoire d'installation /opt # Renommer le repertoire en le suffixant du numero de version mv cuda cuda-4.2.9 ln -s cuda-4.2.9 cuda # Creer le document contenant les libraires dynamiques de Cuda (la version 64 bits est pointee) echo /opt/cuda/lib64 > /etc/ld.so.conf.d/cuda.conf # Mettre a jour la base ldconfig # Ajouter le chemin vers les executables de Cuda (notamment nvcc) sed -e "s/:\/bin/:\/bin:\/opt\/cuda\/bin/" -e "s/:\/usr\/games/:\/usr\/games:\/opt\/cuda\/bin/" -i~ /etc/profile # Placer un lien sur la librairie cuda installe par le pilote graphique cd /opt/cuda/lib64 ln -s /usr/lib/libcuda.so libcuda.so
root
Ensuite, même lancement de l'installation des exemples, pour une installation du SDK dans /opt
:
cd /opt # Suppression du lien [ -e /opt/NVIDIA_GPU_Computing_SDK ] && rm -r /opt/NVIDIA_GPU_Computing_SDK # Lancement du script d'installation (il est supposé que l'archive est dans /opt) sh /root/gpucomputingsdk_4.2.9_linux.run # Entrer le chemin d'installation /opt/NVIDIA_GPU_Computing_SDK-4.2.9 # Entrer le chemin d'installation des librairies Cuda /opt/cuda # Etablir un lien en ce SDK et la version standard ln -sf NVIDIA_GPU_Computing_SDK-4.2.9 NVIDIA_GPU_Computing_SDK
Enfin, la compilation des exemples : d'abord ceux de Cuda, ensuite les exemples OpenCL :
apt-get --yes install libxi-dev libxmu-dev libglut3-dev cd /opt/NVIDIA_GPU_Computing_SDK/C make cd /opt/NVIDIA_GPU_Computing_SDK/OpenCL make
Téléchargement des sources sur : http://mathema.tician.de/software/pycuda
apt-get install git libboost-python1.42-dev libboost-thread1.42-dev libboost1.42-all-dev libboost1.42-dev python-setuptools
root
Directement en téléchargeant par Git
cd /opt git clone http://git.tiker.net/trees/pycuda.git cd pycuda git submodule init git submodule update
En récupérant l'archive
cd /root wget http://pypi.python.org/packages/source/p/pycuda/pycuda-2012.1.tar.gz#md5=b67c4fce6c258834339073f2537fa84f cd /opt tar xzf /root/pycuda-2012.1.tar.gz ln -s pycuda-2012.1 pycuda chown -R root.root pycuda cd pycuda
export PATH=$PATH:/opt/cuda/bin export PYCUDA=$PWD # On 2011-12-12, Andreas Klockner has corrected ! # On 2011-12-08, PyCUDA needs a slightly patch to compile #cd src/cpp #wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/software/GPU/patch-cuda.hpp #patch src/cuda/cuda.hpp patch-cuda.hpp #cd ../.. # Sorry, I don't understand why diff -u/patch -p3 don't work on this tiny patch ! # Configuration export CUDA_ROOT=/opt/cuda #./configure.py --cuda-enable-gl --no-use-shipped-boost --cudadrv-lib-dir=/opt/cuda/lib64 --cuda-root=/opt/cuda --cuda-inc-dir=/opt/cuda/include/ --boost-inc-dir=/usr/include --boost-lib-dir=/usr/lib --boost-python-libname=boost_python-py26 --boost-thread-libname=boost_python-mt-py26 --boost-compiler=/opt/cuda/bin/nvcc ./configure.py --cuda-enable-gl --no-use-shipped-boost # Compilation make # Installation make install # python setup.py build python setup.py install
cd $PYCUDA/test
Premier exemple : python test_cumath.py
donne
============================= test session starts ============================== platform linux2 -- Python 2.6.6 -- pytest-2.2.3 collected 20 items test_cumath.py .................... ========================== 20 passed in 37.14 seconds ==========================
Deuxième exemple : python test_driver.py
donne
============================= test session starts ============================== platform linux2 -- Python 2.6.6 -- pytest-2.2.3 collected 21 items test_driver.py ..................... ========================== 21 passed in 13.75 seconds ==========================
Troisième exemple : python test_gpuarray.py
donne
============================= test session starts ============================== platform linux2 -- Python 2.6.6 -- pytest-2.2.3 collected 45 items test_gpuarray.py ............................................. ========================= 45 passed in 129.98 seconds ==========================
cd $PYCUDA/examples python download-examples-from-wiki.py
Téléchargement des sources sur : http://mathema.tician.de/software/pyopencl
apt-get install libboost-thread-dev
Au 20 juin 2012, la version courante est la 2012.1
:
cd /opt git clone http://git.tiker.net/trees/pyopencl.git cd pyopencl git submodule init git submodule update
cd /root wget http://pypi.python.org/packages/source/p/pyopencl/pyopencl-2012.1.tar.gz#md5=e6ae70d89d086af4636e4fbb2c806368 cd /opt tar xzf /root/pyopencl-2012.1.tar.gz ln -s pyopencl-2012.1 pyopencl cd pyopencl
Avec l'installation des librairies Cuda comme présentée ci-dessus, la compilation se prépare de la façon suivante :
./configure.py --boost-inc-dir=/usr/include --boost-lib-dir=/usr/lib --boost-python-libname=boost_python-mt-py26 --cl-inc-dir=/opt/cuda/include/ --cl-lib-dir=/usr/lib/ --boost-compiler=/opt/cuda/bin/nvcc make make install python setup.py build python setup.py install
cd examples python benchmark-all.py
Sur une carte Quadro 4000 (et un Dell Precision 7500):
=============================================================== ('Platform name:', 'NVIDIA CUDA') ('Platform profile:', 'FULL_PROFILE') ('Platform vendor:', 'NVIDIA Corporation') ('Platform version:', 'OpenCL 1.1 CUDA 4.1.1') --------------------------------------------------------------- ('Device name:', 'Quadro 4000') ('Device type:', 'GPU') ('Device memory: ', 2047, 'MB') ('Device max clock speed:', 950, 'MHz') ('Device compute units:', 8) Execution time of test: 0.000847584 s Results OK
Sur une carte Quadro 2000 (et un Dell Precision M4600):
('Execution time of test without OpenCL: ', 7.520247220993042, 's') =============================================================== ('Platform name:', 'AMD Accelerated Parallel Processing') ('Platform profile:', 'FULL_PROFILE') ('Platform vendor:', 'Advanced Micro Devices, Inc.') ('Platform version:', 'OpenCL 1.1 AMD-APP (831.4)') --------------------------------------------------------------- ('Device name:', 'Intel(R) Core(TM) i7-2860QM CPU @ 2.50GHz') ('Device type:', 'CPU') ('Device memory: ', 16042, 'MB') ('Device max clock speed:', 800, 'MHz') ('Device compute units:', 4) /usr/local/lib/python2.6/dist-packages/pyopencl-2012.1-py2.6-linux-x86_64.egg/pyopencl/__init__.py:36: CompilerWarning: Non-empty compiler output encountered. Set the environment variable PYOPENCL_COMPILER_OUTPUT=1 to see more. "to see more.", CompilerWarning) Execution time of test: 0.00134103 s Results OK =============================================================== ('Platform name:', 'NVIDIA CUDA') ('Platform profile:', 'FULL_PROFILE') ('Platform vendor:', 'NVIDIA Corporation') ('Platform version:', 'OpenCL 1.1 CUDA 4.2.1') --------------------------------------------------------------- ('Device name:', 'Quadro 2000M') ('Device type:', 'GPU') ('Device memory: ', 2047, 'MB') ('Device max clock speed:', 1100, 'MHz') ('Device compute units:', 4) Execution time of test: 0.00202246 s Results OK
Vous aurez noter que l'installation préalable d'un SDK AMD a permis de disposer d'un support OpenCL sur le processeur.
PyFFT permet l'exploitation de PyCUDA et PyOpenCL pour effectuer tranquillement ses FFT directement à partir de ses scripts Python.
Pour son installation, suivre la page : http://www.cbp.ens-lyon.fr/emmanuel.quemener/dokuwiki/doku.php?id=pyfft4squeeze