Ceci est une ancienne révision du document !


Retour aux travaux pratiques

Compilation de PKDGRAV3

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 :

cudaSetDevice error 10 in /local/root/INSA/dpotter-pkdgrav3-f156bcc06373/cudautil.cu(219)
invalid device ordinal

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 :

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]

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 :

  1. Définition de la variable TIME pour la métrologie :
    export TIME=$(cat '/etc/time_command.cfg')
      - Création du dossier utilisateur :<code>mkdir -p /local/$USER
  2. Placement dans le dossier créé :
    cd /local/$USER
  3. Récupération du source
    wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/software/pkdgrav-20181008.tgz
  4. Expansion de l'archive :
    tar xzf pkdgrav-20181008.tgz
  5. Passage dans le dossier de l'archive :
    cd pkdgrav-20181008
  6. Création d'une variable positionnant la racine du source :
    export PKDGRAV3=$PWD
  7. Création d'un dossier de construction :
    mkdir build
  8. Passage dans le dossier de construction :
    cd build
  9. Construction des tâches de compilation :
    CC=gcc-4.9 CXX=g++-4.9 cmake ..
  10. Compilation du programme en mode parallèle :
    make -j 16 > pkdgrav3-Compile-$(date "+%Y%m%d-%H%M") 2>&1

Exécution de l'exemple fourni dans l'environnement du CBP

  1. Déplacement dans le dossier d'exemples :
    cd $PKDGRAV3/examples
  2. Lancement de l'exemple sur GPU :
    /usr/bin/time ../build/pkdgrav3 cosmology.par > cosmology-$(date "+%Y%m%d-%H%M%S").out 2>&1
  3. Préparation du lancement sur CPU :
    rm .lockfile example.*
  4. Lancement de l'exemple sur CPU :
    /usr/bin/time ../build/pkdgrav3 -cqs 0 cosmology.par > cosmology-$(date "+%Y%m%d-%H%M%S").out 2>&1

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.1543327948.txt.gz · Dernière modification: 2018/11/27 15:12 par equemene