| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| formation:insa2018gpu:insa2018pkdgrav4stretch [2018/11/27 09:40] – equemene | formation:insa2018gpu:insa2018pkdgrav4stretch [2018/11/27 14:26] (Version actuelle) – [Compilation d'une version fonctionnelle] equemene |
|---|
| | [[formation:insa2018gpu|Retour aux travaux pratiques]] |
| | |
| ====== Compilation de PKDGRAV3 ====== | ====== Compilation de PKDGRAV3 ====== |
| |
| Au 27 novembre 2018, la compilation de ''PKDGRAV3'' fonctionne sans problème, dès lors que le compilateur | ===== Une intégration non reproductible, dans le temps ou l'espace ===== |
| | |
| | Au 27 novembre 2018, la compilation de ''PKDGRAV3'' se déroule sans difficulté, dès lors que le compilateur est compatible avec l'environnement CUDA. Seuls les compilateurs GNU 4.9 permettent d'obtenir un exécutable. |
| | |
| | Par contre, lors de l'exécution, les choses se corsent : sur la version du 27 novembre, seules les cartes Tesla fonctionnent avec l'exemple, dès lors qu'elles sont bien pointées par la variable ''CUDA_VISIBLE_DEVICES''. En effet, PKDGRAV3 n'est pas multi-gpu : s'il détecte plusieurs périphériques Nvidia à l'exécution, il plante avec le message suivant :<code> |
| | cudaSetDevice error 10 in /local/root/INSA/dpotter-pkdgrav3-f156bcc06373/cudautil.cu(219) |
| | invalid device ordinal |
| | </code> |
| | |
| | Aucune des cartes RTX, GTX ou Quadro ne permettent son exécution avec un message d'erreur à rendre perplexe le plus aguerri des intégrateurs :-/ . La sortie offre une bordée d'injures :<code> |
| | Caught signal 11 at address (nil) |
| | Frame 0: ../build/pkdgrav3() [0x4a58af] |
| | Frame 1: ../build/pkdgrav3() [0x4a5a31] |
| | Frame 2: /lib/x86_64-linux-gnu/libpthread.so.0(+0x110c0) [0x2ac2ba61e0c0] |
| | Frame 3: ../build/pkdgrav3(pkdGenerateIC+0x2117) [0x46ebb7] |
| | Frame 4: ../build/pkdgrav3(pltGenerateIC+0x1a1) [0x470031] |
| | Frame 5: ../build/pkdgrav3(mdlHandler+0x8a) [0x4afd5a] |
| | Frame 6: ../build/pkdgrav3(main_ch+0x83) [0x4151b3] |
| | Frame 7: ../build/pkdgrav3() [0x4af7bf] |
| | Frame 8: /lib/x86_64-linux-gnu/libpthread.so.0(+0x7494) [0x2ac2ba614494] |
| | Frame 9: /lib/x86_64-linux-gnu/libc.so.6(clone+0x3f) [0x2ac2bcff5acf] |
| | </code> |
| | |
| | A ce jour, la seule version fonctionnelle pour toutes les cartes à disposition est la version du 8 octobre 2018. Heureusement, nous en vons une archive que nous allons exploiter. |
| | |
| | PKDGRAV3 est un exemple de programme GPUfié mais en développement tel qu'il n'est pas possible d'en assuré un suivi opérationnel. |
| | |
| | ===== Compilation d'une version fonctionnelle ===== |
| | |
| | La recette pour compiler PKDGRAV3 ur du Debian Stretch 9.0 est la suivante : |
| | - Définition de la variable TIME pour la métrologie : <code>export TIME=$(cat '/etc/time_command.cfg')</code> |
| | - Création du dossier utilisateur :<code>mkdir -p /local/$USER</code> |
| | - Placement dans le dossier créé :<code>cd /local/$USER</code> |
| | - Récupération du source <code>wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/software/pkdgrav-20181008.tgz</code> |
| | - Expansion de l'archive : <code>tar xzf pkdgrav-20181008.tgz</code> |
| | - Passage dans le dossier de l'archive : <code>cd pkdgrav-20181008</code> |
| | - Création d'une variable positionnant la racine du source : <code>export PKDGRAV3=$PWD</code> |
| | - Création d'un dossier de construction : <code>mkdir build</code> |
| | - Passage dans le dossier de construction : <code>cd build</code> |
| | - Construction des tâches de compilation : <code>CC=gcc-4.9 CXX=g++-4.9 cmake ..</code> |
| | - Compilation du programme en mode parallèle : <code>make -j 16 > pkdgrav3-Compile-$(date "+%Y%m%d-%H%M") 2>&1</code> |
| | |
| | ===== Exécution de l'exemple fourni dans l'environnement du CBP ===== |
| | |
| | - Déplacement dans le dossier d'exemples : <code>cd $PKDGRAV3/examples</code> |
| | - Lancement de l'exemple sur GPU : <code>/usr/bin/time ../build/pkdgrav3 cosmology.par > cosmology-$(date "+%Y%m%d-%H%M%S").out 2>&1</code> |
| | - Préparation du lancement sur CPU : <code>rm .lockfile example.*</code> |
| | - Lancement de l'exemple sur CPU : <code>/usr/bin/time ../build/pkdgrav3 -cqs 0 cosmology.par > cosmology-$(date "+%Y%m%d-%H%M%S").out 2>&1</code> |
| | |
| | Les deux fichiers de sortie en ''*.out'' donnent les informations sur les exécutions et la métrologie associée. Un ''grep'' sur le mot ''Elapsed'' extrait les temps d'exécution sur GPU et CPU. |
| | |
| | |