Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
developpement:activites:integration:xeonphi4jessie [2014/11/18 21:20] equemene [Installation des paquets] |
developpement:activites:integration:xeonphi4jessie [2015/01/07 10:04] (Version actuelle) |
||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
===== Introduction ===== | ===== Introduction ===== | ||
+ | Les accélérateurs Xeon Phi disposant d'une soixantaine constituent un intermédiaire entre les processeurs standards disposant de l'ordre de la dizaine de coeurs (AMD ou Intel) et les circuits graphiques de GPU ou GPGPU disposant de plusieurs milliers d'ALU pour les traitements. | ||
+ | Voici comment installer et faire fonctionner un Xeon Phi sur la distribution Debian Jessie, notamment en OpenCL. | ||
===== Installation ===== | ===== Installation ===== | ||
Ligne 99: | Ligne 100: | ||
==== Compilation du module noyau ==== | ==== Compilation du module noyau ==== | ||
- | Il n'est pas possible de directement créer le module MIC sans modifier le code source. En effet, les fichiers suivants doivent être modifiés pour compiler sur un noyau 3.2 Debian.<code>host/linvnet.c | + | Il n'est pas possible de directement créer le module MIC sans modifier le code source. Heureusement, En effet, le fichier ''host/linux.c'' doit être modifié pour compiler sur un noyau 3.16 Debian. |
- | host/pm_ioctl.c | + | |
- | micscif/micscif_debug.c | + | |
- | micscif/micscif_rb.c | + | |
- | vnet/micveth_dma.c </code> | + | |
Voici les opérations nécessaires poir compiler le module associé au noyau : | Voici les opérations nécessaires poir compiler le module associé au noyau : | ||
Ligne 111: | Ligne 108: | ||
rpm2cpio ../src/mpss-modules-3.4.1-1.src.rpm | cpio -idm | rpm2cpio ../src/mpss-modules-3.4.1-1.src.rpm | cpio -idm | ||
tar jxf mpss-modules-3.4.1.tar.bz2 | tar jxf mpss-modules-3.4.1.tar.bz2 | ||
- | # wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/software/XeonPhi/PatchDebianWheezyMPSS312.patch | + | wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/software/XeonPhi/PatchDebianJessieMPSS341.patch |
- | # patch -p 1 -i ./PatchDebianWheezyMPSS312.patch | + | patch host/linux.c ../PatchDebianJessieMPSS341.patch |
export INSTALL_MOD_PATH=/lib/modules/$(uname -r)/extra | export INSTALL_MOD_PATH=/lib/modules/$(uname -r)/extra | ||
export MIC_CARD_ARCH=k1om | export MIC_CARD_ARCH=k1om | ||
Ligne 425: | Ligne 422: | ||
<code> | <code> | ||
- | python-pyopencl python-pyopencl-doc | + | apt-get install python-pyopencl python-pyopencl-doc |
</code> | </code> | ||
Ligne 431: | Ligne 428: | ||
<code> | <code> | ||
- | python /usr/share/doc/python-pyopencl-doc/examples/benchmark-all.py | + | python /usr/share/doc/python-pyopencl-doc/examples/benchmark.py |
</code> | </code> | ||
Ligne 448: | Ligne 445: | ||
('Device compute units:', 32) | ('Device compute units:', 32) | ||
Execution time of test: 0.00112901 s | Execution time of test: 0.00112901 s | ||
- | Results OK | ||
- | root@grizzly:~# ^C | ||
- | root@grizzly:~# python /usr/share/doc/python-pyopencl-doc/examples/benchmark-all.py | ||
- | ('Execution time of test without OpenCL: ', 7.43899393081665, 's') | ||
- | =============================================================== | ||
- | ('Platform name:', 'AMD Accelerated Parallel Processing') | ||
- | ('Platform profile:', 'FULL_PROFILE') | ||
- | ('Platform vendor:', 'Advanced Micro Devices, Inc.') | ||
- | ('Platform version:', 'OpenCL 1.2 AMD-APP (938.2)') | ||
- | --------------------------------------------------------------- | ||
- | ('Device name:', 'Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz') | ||
- | ('Device type:', 'CPU') | ||
- | ('Device memory: ', 64463, 'MB') | ||
- | ('Device max clock speed:', 1200, 'MHz') | ||
- | ('Device compute units:', 32) | ||
- | Execution time of test: 0.000632971 s | ||
Results OK | Results OK | ||
</code> | </code> | ||
Ligne 469: | Ligne 450: | ||
Intel publie ses [[http://software.intel.com/en-us/vcsource/tools/opencl-sdk-xe|versions de OpenCL]]. | Intel publie ses [[http://software.intel.com/en-us/vcsource/tools/opencl-sdk-xe|versions de OpenCL]]. | ||
- | La dernière version est la 3.2.1.16712 | ||
==== Récupération de la dernière version : ==== | ==== Récupération de la dernière version : ==== | ||
Ligne 484: | Ligne 464: | ||
==== Conversion des RPM en DEB ==== | ==== Conversion des RPM en DEB ==== | ||
+ | La conversion peut se réaliser "brutalement" avec un ''alien'', mais les paquets ne sont pas très propres... | ||
+ | |||
+ | Installation des outils pour la conversion des paquets : | ||
<code> | <code> | ||
- | ls *.rpm | xargs -I '{}' alien --scripts '{}' | + | apt-get install builder alien |
+ | </code> | ||
+ | |||
+ | Pour les paquets corrects : | ||
+ | <code> | ||
+ | ls opencl-*pset*.rpm opencl-*mic*.rpm | xargs -I '{}' alien --scripts '{}' | ||
+ | </code> | ||
+ | |||
+ | Pour les paquets à modifier : | ||
+ | <code> | ||
+ | ls opencl-*base-4*.rpm opencl-*cpu*.rpm | xargs -I '{}' alien -g --scripts '{}' | ||
+ | # On degage la possibilite de mettre la libOpenCL de Intel a la place de la standard | ||
+ | sed -i "s/update\-alternatives/exit\nupdate\-alternatives/g" opencl-1.2-base-4.5.0.8/debian/postinst | ||
+ | # On rentre dans l'archive | ||
+ | cd opencl-1.2-base-4.5.0.8 | ||
+ | # On build le paquet | ||
+ | debuild | ||
+ | cd .. | ||
+ | # On remplace la priorite du update-alternatives sur l'installation de l'ICD Intel | ||
+ | sed -i "s/\-2147489047/65536/g" opencl-1.2-intel-cpu-4.5.0.8/debian/postinst | ||
+ | # On rentre dans l'archive | ||
+ | cd opencl-1.2-intel-cpu-4.5.0.8 | ||
+ | # on build le paquet | ||
+ | debuild | ||
+ | cd .. | ||
</code> | </code> | ||
+ | Les paquets générés sont les suivants : | ||
<code> | <code> | ||
opencl-1.2-base_4.5.0.8-2_amd64.deb | opencl-1.2-base_4.5.0.8-2_amd64.deb | ||
Ligne 502: | Ligne 510: | ||
</code> | </code> | ||
- | <code> | + | Vérification des périphériques OpenCL détectés : |
- | sed -i "s/\-2147489047/65536/g" /var/lib/dpkg/infoopencl-1.2-base.postinst | + | |
- | sed -i "s/\-2147489047/65536/g" /var/lib/dpkg/infoopencl-1.2-intel-cpu.postinst | + | |
- | apt-get -f install | + | |
- | </code> | + | |
- | + | ||
- | Un lien est réalisé entre ''/opt/intel/opencl-1.2-3.2.1.16712'' et '/etc/alternatives/opencl-intel-runtime' | + | |
<code> | <code> | ||
clinfo | grep "Device Type" | clinfo | grep "Device Type" | ||
</code> | </code> | ||
- | |||
- | Plus besoin d'établir les liens pour l'ICD. | ||
3 composants sont détectés : | 3 composants sont détectés : | ||
Ligne 580: | Ligne 579: | ||
Preferred work group size multiple: 128 | Preferred work group size multiple: 128 | ||
Execution time of test: 0.0179208 s | Execution time of test: 0.0179208 s | ||
- | Results OK | ||
- | =============================================================== | ||
- | Platform name: NVIDIA CUDA | ||
- | Platform profile: FULL_PROFILE | ||
- | Platform vendor: NVIDIA Corporation | ||
- | Platform version: OpenCL 1.1 CUDA 6.5.18 | ||
- | --------------------------------------------------------------- | ||
- | Device name: Tesla K40m | ||
- | Device type: GPU | ||
- | Device memory: 11519 MB | ||
- | Device max clock speed: 745 MHz | ||
- | Device compute units: 15 | ||
- | Device max work group size: 1024 | ||
- | Device max work item sizes: [1024, 1024, 64] | ||
- | Data points: 8388608 | ||
- | Workers: 256 | ||
- | Preferred work group size multiple: 32 | ||
- | Execution time of test: 0.000614816 s | ||
Results OK | Results OK | ||
</code> | </code> |