Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
formation:insa2018gpu:insa2018pkdgrav4stretch [2018/11/27 09:33] – créée equemeneformation:insa2018gpu:insa2018pkdgrav4stretch [2018/11/27 14:26] (Version actuelle) – [Compilation d'une version fonctionnelle] equemene
Ligne 1: Ligne 1:
 +[[formation:insa2018gpu|Retour aux travaux pratiques]]
 +
 ====== Compilation de PKDGRAV3 ====== ====== Compilation de PKDGRAV3 ======
  
-Au 27 novembre 2018, +===== 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. 
 + 
 + 
formation/insa2018gpu/insa2018pkdgrav4stretch.1543311235.txt.gz · Dernière modification : (modification externe)