2016-08-25 5 views
1

Je travaille sur un cluster avec Vampir pour visualiser la communication mpi. Comme le cluster ne disposait pas d'une implémentation MPI3, j'ai installé OpenMPI 2.0.0 (aucun autre indicateur que --prefix n'a été utilisé) dans mon répertoire personnel (fonctionne bien sans Vampir). Maintenant, je ne sais pas de combiner correctement mon installation MPI3 locale avec Vampir pour construire mon programme (fetchAndOpTest.f90). J'ai essayé les éléments suivants:Vampir avec installation mpi locale

vtf90 -vt:fc ~/OpenMPI2/bin/mpif90 -o fetchAndOpTestF90.x fetchAndOpTest.f90 

(Je ne sais pas s'il est important, mais cela donne l'avertissement suivant: /usr/bin/ld: warning: libmpi.so.1, needed by /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libmpi_f77.so, may conflict with libmpi.so.20)

exécution de mon programme avec ~/OpenMPI2/bin/mpirun -np 2 fetchAndOpTestF90.x résultats dans: fetchAndOpTestF90.x: error while loading shared libraries: libvt-mpi.so.0: cannot open shared object file: No such file or directory [...]

Par conséquent, je également essayé vtf90 -vt:fc ~/OpenMPI2/bin/mpif90 -L/opt/vampirtrace/5.14.4/lib -o fetchAndOpTestF90.x fetchAndOpTest.f90, mais il n'a pas changé le ldd-sortie.

EDIT: Edité LD_LIBRARY_PATH comme suggéré par @Harald.

> ldd fetchAndOpTestF90.x linux-vdso.so.1 => (0x00007ffc6ada9000) libmpi_f77.so.1 => /usr/lib/libmpi_f77.so.1 (0x00007ff8fdf2e000) libvt-mpi.so.0 => /opt/vampirtrace/5.14.4/lib/libvt-mpi.so.0 (0x00007ff8fdca3000) libvt-mpi-unify.so.0 => /opt/vampirtrace/5.14.4/lib/libvt-mpi-unify.so.0 (0x00007ff8fda18000) libotfaux.so.0 => /opt/vampirtrace/5.14.4/lib/libotfaux.so.0 (0x00007ff8fd810000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ff8fd50c000) libopen-trace-format.so.1 => /opt/vampirtrace/5.14.4/lib/libopen-trace-format.so.1 (0x00007ff8fd2c4000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ff8fd0ab000) libpapi.so.5.3 => /usr/lib/x86_64-linux-gnu/libpapi.so.5.3 (0x00007ff8fce57000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff8fcc53000) libgfortran.so.3 => /usr/lib/x86_64-linux-gnu/libgfortran.so.3 (0x00007ff8fc939000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff8fc633000) libmpi_usempi.so.20 => /home/USER/OpenMPI2/lib/libmpi_usempi.so.20 (0x00007ff8fc430000) libmpi_mpifh.so.20 => /home/USER/OpenMPI2/lib/libmpi_mpifh.so.20 (0x00007ff8fc1df000) libmpi.so.20 => /home/USER/OpenMPI2/lib/libmpi.so.20 (0x00007ff8fbefb000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff8fbce5000) libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0 (0x00007ff8fbaa9000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff8fb88b000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff8fb4c6000) libmpi.so.1 => /usr/lib/libmpi.so.1 (0x00007ff8fb145000) /lib64/ld-linux-x86-64.so.2 (0x00007ff8fe162000) libpfm.so.4 => /usr/lib/x86_64-linux-gnu/libpfm.so.4 (0x00007ff8fadff000) libopen-pal.so.20 => /home/USER/OpenMPI2/lib/libopen-pal.so.20 (0x00007ff8fab09000) libopen-rte.so.20 => /home/USER/OpenMPI2/lib/libopen-rte.so.20 (0x00007ff8fa887000) libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007ff8fa684000) libhwloc.so.5 => /usr/lib/x86_64-linux-gnu/libhwloc.so.5 (0x00007ff8fa43b000) libltdl.so.7 => /usr/lib/x86_64-linux-gnu/libltdl.so.7 (0x00007ff8fa231000) libnuma.so.1 => /usr/lib/x86_64-linux-gnu/libnuma.so.1 (0x00007ff8fa026000) libpciaccess.so.0 => /usr/lib/x86_64-linux-gnu/libpciaccess.so.0 (0x00007ff8f9e1d000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ff8f9c15000)

Maintenant exécution throws erreur: mpirun noticed that process rank 0 with PID 0 on node cluster exited on signal 11 (Segmentation fault) (programme est correct et la construction et l'exécution avec l'installation de MPI3 locale sans Vampir fonctionne très bien)

Répondre

2

La question semble peut-être résolu différentes alternatives afin de trouver les bibliothèques :

  1. Lier de façon statique l'application (ie en utilisant le drapeau -static au moment de la liaison).
  2. Ajoutez ${HOME}/OpenMPI2/lib (ou /opt/vampirtrace/5.14.4/lib?), Puisque votre installation MPI est présente dans votre variable d'environnement LD_LIBRARY_PATH avant d'exécuter le binaire.
  3. Utilisez -rpath lors de la liaison de votre fichier binaire afin que l'éditeur de liens recherche automatiquement le répertoire donné. Vous pouvez utiliser -Wl,-rpath -Wl,${HOME}/OpenMPI2/lib (ou /opt/vampirtrace/5.14.4/lib?)

EDIT Notez que vous signaler que vous avez une installation de vampirtrace (/opt/vampirtrace/5.14.4), mais qui est trop vieux (voir this) par rapport à OpenMPI 2.0 (voir that) - il y a environ 3 ans de différence entre les deux. OpenMPI a beaucoup changé au cours de ces années et en particulier dans la version 2.0. Cela peut également être lié à l'avertissement que vous observez, c'est-à-dire la divergence sur les versions. De plus, et ce sont de mauvaises nouvelles concernant cette question, à partir du dernier lien web, vous remarquerez que le paquet intégré de vampirtrace dans OpenMPI a été supprimé.

Votre meilleure alternative, à mon humble avis, est que vous donniez un essai au successeur de vampirtrace (nommé Score-P) qui génère également des fichiers de trace Vampir. Puisque OpenMPI 2.0 est très récent, vous devriez probablement essayer RC de Score-P.

+0

Je n'ai pas construit libs statiques alors je suis allé directement à la suggestion 2. Cela semble fonctionner très bien (je ldd sortie edited), mais maintenant avec l'exécution '~/OpenMPI2/bin/mpirun np 1 fetchAndOpTest.x' renvoie une erreur: 'mpirun a remarqué que le processus de rang 0 avec PID 0 sur le cluster de nœuds s'est terminé sur le signal 11 (erreur de segmentation). (Se produit également avec d'autres programmes qui sont tous corrects). Peut-être que l'avertissement indique ce problème? –

+0

Je vais essayer Score-P. Je pense que dans ces circonstances c'est la meilleure solution pour mon problème. –

3

Votre bibliothèque VampirTrace a été compilé avec une autre implémentation de MPI système et par la dépendance tractions dans ses DSO:

--> libmpi_f77.so.1 => /usr/lib/libmpi_f77.so.1 (0x00007ff8fdf2e000) 
libmpi_usempi.so.20 => /home/USER/OpenMPI2/lib/libmpi_usempi.so.20 (0x00007ff8fc430000) 
libmpi_mpifh.so.20 => /home/USER/OpenMPI2/lib/libmpi_mpifh.so.20 (0x00007ff8fc1df000) 
libmpi.so.20 => /home/USER/OpenMPI2/lib/libmpi.so.20 (0x00007ff8fbefb000) 
--> libmpi.so.1 => /usr/lib/libmpi.so.1 (0x00007ff8fb145000) 
libopen-pal.so.20 => /home/USER/OpenMPI2/lib/libopen-pal.so.20 (0x00007ff8fab09000) 
libopen-rte.so.20 => /home/USER/OpenMPI2/lib/libopen-rte.so.20 (0x00007ff8fa887000) 

Les PMPI_* symboles qui VampirTrace utilise se résoudre sans doute par le système à l'échelle bibliothèque MPI et donc l'argument pass-through du mécanisme PMPI échoue.Puisque VampirTrace est un projet open-source (contrairement à Vampir, qui est un outil commercial à code source fermé), vous pouvez le télécharger à partir de the official site et le compiler en utilisant votre propre build Open MPI. Mais cela n'aidera pas votre cas puisque VampirTtrace ne sait rien des nouveaux appels RMA MPI-3 et ne les tracera pas (ils apparaîtront très probablement comme des fonctions utilisateur dans la trace).

Comme déjà conseillé, utilisez plutôt Score-P. La version 2.0.2 prend en charge l'intégralité de la collection d'appels MPI-3.1.

+0

Non seulement vampirtrace ne sera pas au courant des ajouts récents à mpi 3/3.1, mais peut échouer à compiler en raison de la constication de MPI 3. – Harald

+0

Merci pour l'explication supplémentaire, Score-P a fait son travail comme voulu –