Stream SDK ATI sur une Debian Wheezy à partir de 0

Pourquoi cette page ?

La distribution Wheezy intègre dans son archive non-free les pilotes propriétaires et les librairies permettant d'exploiter les cartes graphiques pour le calcul scientifique, mais seulement pour sa version 12.6 : les cartes graphiques récentes ne sont pas supportées.

Rappelons que l'API ATI.AMD dispose d'un avantage sur son concurrent Nvidia : l'intégration d'une librairie OpenCL permettant aussi bien d'utiliser son processeur généraliste que son processeur graphique.

Installation du SDK 2.8

Contrairement à Nvidia, ATI utilise son pilote standard pour sa couche GPU.

Le lien suivant défini les différents paquets à installer :

# Pour le pilote "stable"
wget http://www2.ati.com/drivers/linux/amd-driver-installer-catalyst-13.1-linux-x86.x86_64.zip
# Pour le pilote "beta" : indispensable pour la HD 7340 à disposition
wget http://www2.ati.com/drivers/beta/amd-driver-installer-catalyst-13.2-beta7-linux-x86.x86_64.zip

Installation du pilote

Pour commencer, plus grand chose sinon que le pilote AMD/ATI utilise dkms et plus module-assistant :

apt-get install dkms
# arret de GDM s'il est lancé
/etc/init.d/gdm stop
Le paquet scidavis installe ses plugins dans /usr/lib64 ce qui casse le script d'installation des composants en les plaçant dans /usr/lib64 au lieu de /usr/lib/x86_64-linux-gnu.

Le redémarrage semble nécessaire pour que le pilote radeon ne soit pas chargé.

Puis, même lancement de l'installation du pilote, version 32 ou 64 bits :

unzip amd-driver-installer-catalyst-13.1-linux-x86.x86_64.zip
CC=/usr/bin/gcc-4.6 amd-driver-installer-catalyst-13.1-linux-x86.x86_64.run --force

Au 1er mars 2013, le composant graphique intégré à l'AMD E2-1800 est un HD7340 : le pilote 13.1 ne fonctionne pas. Il faut donc passer sur le pilote beta, le 13.2-beta7 à cette date :

unzip amd-driver-installer-catalyst-13.2-beta7-linux-x86.x86_64.zip
CC=/usr/bin/gcc-4.6 amd-driver-installer-catalyst-13.2-beta7-linux-x86.x86_64.run --force

Installation de la boîte à outils

Pour le SDK, toujours aussi simple, par une simple décompression de l'archive à l'endroit idoine, soit /opt (il est supposé que l'archive se trouve dans /root) :

# Renommage d'un /opt/AMDAPP précédent
[ -d /opt/AMDAPP ] && mv /opt/AMDAPP /opt/AMDAPP.old
mkdir /tmp/AMDSDK-2.8
cd /tmp/AMDSDK-2.8
# En 32 bits, décompresser l'archive
tar xzf /root/AMD-APP-SDK-v2.8-lnx32.tgz
# En 64 bits, décompresser l'archive
tar xzf /root/AMD-APP-SDK-v2.8-lnx64.tgz
# Lancer le script d'installation
./Install-AMD-APP.sh
# Etablir un lien pour pointer de manière générique les pilotes
cd /opt
mv AMDAPP AMDAPP-2.8
ln -s AMDAPP-2.8 AMDAPP
# Generation du ld
ldconfig

Installation de librairies scientifiques

Téléchargement des sources et des exemples

Les éléments :

Installation des librairies BLAS et FFT

mkdir /tmp/CLAMD
cd /tmp/CLAMD
tar xzf /root/clAmdBlas1.8.291.tar.gz
./install-clAmdBlas-1.8.291.sh
# Taper accept pour accepter les conditions d'utilisation
# Taper <entree> pour valider l'installation par défaut dans /opt/clAmdBlas-1.8.291
tar xzf /root/clAmdFft1.8.291.tar.gz
./install-clAmdFft-1.8.291.sh
# Taper accept pour accepter les conditions d'utilisation
# Taper <entree> pour valider l'installation par défaut dans /opt/clAmdFft-1.8.291
cd /opt
ln -s clAmdBlas-1.8.291 clAmdBlas
ln -s clAmdFft-1.8.291 clAmdFft
#
chown -R root.root /opt/clAmdBlas /opt/clAmdFft
# Pour une architecture 64 bits
echo -e "/opt/clAmdBlas/lib64\n/opt/clAmdFft/lib64" > /etc/ld.so.conf.d/clAmd.conf
# Pour une architecture 32 bits
echo -e "/opt/clAmdBlas/lib32\n/opt/clAmdFft/lib32" >> /etc/ld.so.conf.d/clAmd.conf
#
ldconfig

Installation des librairies aparapi

cd /opt
mkdir aparapi
cd /opt/aparapi
wget http://aparapi.googlecode.com/files/Aparapi_2013_01_23_linux_x86_64.zip
unzip Aparapi_2013_01_23_linux_x86_64.zip

Compilation des exemples du SDK

Ensuite, la compilation des exemples : ceux de CAL ont disparus, il reste ceux d'OpenCL :

apt-get -y install libxi-dev libxmu-dev freeglut3-dev
# Cet export de variable est indispensable pour la compilation correcte des exemples parapi
export LIBAPARAPI=/opt/aparapi/
cd /opt/AMDAPP/samples
make

Exécution des exemples du SDK

Enfin, l'exécution des exemples OpenCL :

# pour une architecture 64 bits
cd /opt/AMDAPP/samples/opencl/bin/x86_64
# pour une architecture 32 bits
cd /opt/AMDAPP/samples/opencl/bin/x86
# lancer tous les exemples
find . -executable ! -iname "*.cl" -exec {} \;

Compilation des exemples des librairies ClBlas et ClFft

apt-get install cmake
export AMDAPPSDKROOT=/opt/AMDAPP
cd /opt/clAmdBlas/samples
cmake .
make
cd /opt/clAmdFft/samples
# Ces gros nuls n'ont pas verifie leur CMake : il plante !
sed -i "s/\.\.\/\.\.\/\.\.\\//common//g" CMakeLists.txt
# (le cmake pointe pour quelques sources au mauvais endroit !)
cmake .
make

Exécution des exemples des librairies ClBlas et ClFft



Installation de PyOpenCL

Téléchargement des sources sur : http://mathema.tician.de/software/pyopencl

Préparation de la compilation

apt-get -y install libboost-thread-dev python-setuptools
cd /opt
git clone http://git.tiker.net/trees/pyopencl.git
cd pyopencl
git submodule init
git submodule update

Compilation et installation de PyOpenCL

Il est supposé que le dossier d'installation du SDK ATI se trouve dans /opt/AMDAPP :

./configure.py --boost-inc-dir=/usr/include --boost-lib-dir=/usr/lib  --boost-python-libname=boost_python-py27 --cl-inc-dir=/opt/AMDAPP/include --cl-lib-dir=/opt/AMDAPP/lib/x86_64 --boost-compiler=/usr/bin/g++-4.7
CC=/usr/bin/gcc-4.7 CXX=/usr/bin/g++-4.7 make
make install
python setup.py build
python setup.py install

Exécution des exemples

Pour l'exemple standard, très intéressant parce que permettant de visualiser autant processeur graphique que générique :

cd examples
python benchmark-all.py 

Sur un ASUS X55U avec un processeur AMD E2-1800 équipée d'une carte Radeon HD 7340 :

Execution time of test without OpenCL:  0.287725925446 s
===============================================================
Platform name: AMD Accelerated Parallel Processing
Platform profile: FULL_PROFILE
Platform vendor: Advanced Micro Devices, Inc.
Platform version: OpenCL 1.2 AMD-APP (1113.2)
---------------------------------------------------------------
Device name: Loveland
Device type: GPU
Device memory:  192 MB
Device max clock speed: 523 MHz
Device compute units: 2
Device max work group size: 256
Device max work item sizes: [256, 256, 256]
Data points: 8388608
Workers: 256
Preferred work group size multiple: 32
Execution time of test: 0.022523 s
Results OK
===============================================================
Platform name: AMD Accelerated Parallel Processing
Platform profile: FULL_PROFILE
Platform vendor: Advanced Micro Devices, Inc.
Platform version: OpenCL 1.2 AMD-APP (1113.2)
---------------------------------------------------------------
Device name: AMD E2-1800 APU with Radeon(tm) HD Graphics
Device type: CPU
Device memory:  3547 MB
Device max clock speed: 850 MHz
Device compute units: 2
Device max work group size: 1024
Device max work item sizes: [1024, 1024, 1024]
Data points: 8388608
Workers: 256
Preferred work group size multiple: 1
Execution time of test: 0.0759986 s
Results OK

Précautions d'usage

Pour une utilisation du GPU à distance, il est nécessaire de procéder à quelques modifications de son système, sans quoi, l'usage du GPU n'est pas possible

Modification du GDM3

A la fin de /etc/gdm3/Init/Default, avant le exit 0, rajouter les deux lignes suivantes :

xhost +
chmod uog+rw /dev/dri/card*

Les talibans de la sécurité me diront que c'est permettre à quiconque d'afficher ce qu'il veut sur l'écran, malheureusement il n'y a pas le choix !

Connexion sans redirection X11

De plus, lors d'une connexion distante, demander à ce que le X11 ne soit pas rediriger avec l'option -x associée au SSH.

Emmanuel Quemener 2013/03/21 10:25