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 10:33]
equemene créée
formation:insa2018gpu:insa2018pkdgrav4stretch [2018/11/27 15:26] (Version actuelle)
equemene [Compilation d'une version fonctionnelle]
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: 2018/11/27 10:33 par equemene