2016-08-25 6 views
1

Ich arbeite an einem Cluster mit Vampir für die Visualisierung von MPI-Kommunikation. Da dem Cluster eine MPI3-Implementierung fehlte, habe ich OpenMPI 2.0.0 (keine anderen Flags als --prefix wurden verwendet) in meinem Home-Verzeichnis installiert (funktioniert ohne Vampir). Jetzt weiß ich nicht, meine lokale MPI3-Installation mit Vampir richtig zu kombinieren, um mein Programm zu erstellen (fetchAndOpTest.f90). Ich habe versucht, die folgenden:Vampir mit lokaler MPI-Installation

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

(Sie wissen nicht, wenn es wichtig ist, aber das gibt die folgende Warnung: /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)

mein Programm durchführen mit ~/OpenMPI2/bin/mpirun -np 2 fetchAndOpTestF90.x Ergebnisse in: fetchAndOpTestF90.x: error while loading shared libraries: libvt-mpi.so.0: cannot open shared object file: No such file or directory [...]

Deshalb I versuchte auch vtf90 -vt:fc ~/OpenMPI2/bin/mpif90 -L/opt/vampirtrace/5.14.4/lib -o fetchAndOpTestF90.x fetchAndOpTest.f90, aber es änderte nicht die LDD-Ausgabe.

EDIT: Bearbeitete LD_LIBRARY_PATH wie von @Harald vorgeschlagen.

> 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)

Jetzt wirft Ausführungsfehler: mpirun noticed that process rank 0 with PID 0 on node cluster exited on signal 11 (Segmentation fault) (Programm korrekt ist, und baut und die Ausführung mit lokaler MPI3 Installation ohne Vampir läuft gut)

Antwort

2

Das Problem scheint vielleicht verschiedene Alternativen, um gelöst werden, um die Bibliotheken zu finden :

  1. Statische Verknüpfung der Anwendung (dh mit dem -static Flag zur Verbindungszeit).
  2. Fügen Sie ${HOME}/OpenMPI2/lib (oder /opt/vampirtrace/5.14.4/lib?) Hinzu, da Ihre MPI-Installation zu Ihrer Umgebungsvariable LD_LIBRARY_PATH da ist, bevor Sie die Binärdatei ausführen.
  3. Verwenden Sie -rpath beim Verknüpfen Ihrer Binärdatei, damit der Linker automatisch nach dem angegebenen Verzeichnis sucht. Sie können -Wl,-rpath -Wl,${HOME}/OpenMPI2/lib (oder /opt/vampirtrace/5.14.4/lib?)

EDIT Beachten Sie, dass Sie darauf hinweisen, dass Sie eine Vampir Installation haben (/opt/vampirtrace/5.14.4), aber das ist viel zu alt (siehe this) im Vergleich zu OpenMPI 2.0 (siehe that) - es gibt ungefähr 3 Jahre Unterschied zwischen den beiden. OpenMPI hat sich in diesen Jahren und insbesondere in der Version 2.0 stark verändert. Dies könnte auch mit der Warnung zusammenhängen, die Sie beobachten - d. H. Abweichungen bei den Versionen. Zusätzlich, und das sind schlechte Nachrichten in Bezug auf diese Frage, vom letzten Weblink werden Sie feststellen, dass das vampirtrace-eingebettete Paket in OpenMPI entfernt wurde.

Ihre beste Alternative, IMHO, ist, dass Sie versuchen, vampirtrace Nachfolger (mit dem Namen Score-P), die auch Vampir-Trace-Dateien erzeugt. Da OpenMPI 2.0 sehr neu ist, sollten Sie wahrscheinlich RC von Score-P ausprobieren.

+0

Ich habe keine statischen Bibliotheken erstellt, also ging ich direkt zu Vorschlag 2. Das scheint gut zu funktionieren (Ich habe ldd-output bearbeitet), aber jetzt Ausführung mit '~/OpenMPI2/bin/mpirun -np 1 fetchAndOpTest.x' löst einen Fehler aus: 'mpirun hat festgestellt, dass Prozess 0 mit PID 0 auf dem Knoten-Cluster auf Signal 11 (Segmentierungsfehler) beendet ist." (Das passiert auch bei anderen Programmen, die alle korrekt sind). Vielleicht weist die Warnung auf dieses Problem hin? –

+0

Ich werde Score-P versuchen. Ich denke, unter diesen Umständen ist dies die beste Lösung für mein Problem. –

3

Ihre Vampir Bibliothek gegen eine andere systemweite MPI-Implementierung kompiliert wurde und durch die Abhängigkeit zieht in seiner DSOs:

--> 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) 

Die PMPI_* Symbole, die Vampir nutzt wahrscheinlich durch die systemweite MPI-Bibliothek gelöst bekommen und damit die Argumentweiterleitung des PMPI-Mechanismus schlägt fehl.Da VampirTrace ein Open-Source-Projekt ist (im Gegensatz zu Vampir, das ein kommerzielles Closed-Source-Tool ist), können Sie es von the official site herunterladen und es mit Ihrem eigenen Open MPI-Build kompilieren. Aber das hilft in Ihrem Fall nicht, da VampirTtrace nichts über die neuen MPI-3-RMA-Aufrufe weiß und sie nicht verfolgen wird (sie werden höchstwahrscheinlich als Benutzerfunktionen im Trace erscheinen).

Wie bereits empfohlen, verwenden Sie stattdessen Score-P. Die Release-Version 2.0.2 unterstützt die gesamte Sammlung von MPI-3.1-Aufrufe.

+0

Nicht nur vampirtrace wird nicht über die neuesten Ergänzungen zu mpi 3/3.1 wissen, aber möglicherweise nicht kompilieren wegen der Zusammensetzung von MPI 3. – Harald

+0

Vielen Dank für die zusätzliche Erklärung, Score-P hat seine Arbeit wie gewünscht getan –