2016-07-25 3 views
1

Ich versuche, MVAPICH2-GDR für das einfache hallo Weltprogramm zu verwenden. Obwohl der Code erfolgreich kompiliert werden kann, weist er in Runtime einen Segmentierungsfehlerfehler auf. Meine Plattform hat Redhat 6.5 und CUDA 7.5. Also habe ich die rpm-Datei mvapich2-gdr-cuda7.5-intel-2.2-0.3.rc1.el6.x86_64.rpm heruntergeladen.MVAPICH2-GDR hat Segmentierungsfehlerfehler

Der MPI-Code ist das einfache Hallo Welt Programm:

1 #include <mpi.h> 
2 #include <stdio.h> 
3 
4 int main(int argc, char** argv) { 
5  // Initialize the MPI environment 
6  MPI_Init(NULL, NULL); 
7  // Get the number of processes 
8  int world_size; 
9  MPI_Comm_size(MPI_COMM_WORLD, &world_size); 
10 
11  // Get the rank of the process 
12  int world_rank; 
13  MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); 
14 
15  // Print off a hello world message 
16  printf("Hello world from %d out of %d\n", world_rank, world_size); 
17 
18  // Finalize the MPI environment. 
19  MPI_Finalize(); 
20 } 

Um das Programm zu kompilieren, habe ich den folgenden Befehl ein:

mpicc hello.c -o hello 

das Programm auszuführen:

mpirun -np 2 ./hello 

Die Fehlermeldung lautet wie folgt:

[localhost.localdomain:mpi_rank_1][error_sighandler] Caught error: Segmentation fault (signal 11) 
[localhost.localdomain:mpi_rank_0][error_sighandler] Caught error: Segmentation fault (signal 11)     
= BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES 
= PID 188057 RUNNING AT localhost.localdomain 
= EXIT CODE: 139 
= CLEANING UP REMAINING PROCESSES 
= YOU CAN IGNORE THE BELOW CLEANUP MESSAGES 

YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Segmentation fault (signal 11) 

Weil MVAPICH2-GDR seinen Quellcode nicht geöffnet hat, weiß ich wirklich nicht wo der Fehler herkommt. Hat jemand erfolgreich MVAPICH2-GDR verwendet?

+0

Sie haben mehrere Aufrufe an MPI-Funktionen. Sie geben normalerweise eine Art Status zurück, wenn sie es tun, checken Sie dann anstatt blind zu hoffen, dass sie gearbeitet haben. Und es wäre ein Kinderspiel, ein paar "printf" -Anweisungen einzufügen (um sicherzustellen, dass sie mit einer "Newline" enden, um die Ausgabe zu leeren), um zu sagen, welcher dieser Aufrufe überhaupt zurückkommt. Und haben Sie versucht 'MPI_Init (& argc, &argv);'? –

Antwort

1

zur Leistungssteigerung der GPU-GPU-Kommunikation MVAPICH2-GDR verwendet ein neues GDRCOPY-Modul. Sie müssen MVAPICH2-GDR explizit auf die Bibliothek verweisen oder die Verwendung dieser Funktion explizit deaktivieren, indem Sie MV2_USE_GPUDIRECT_GDRCOPY = 0 festlegen.

Wie Sie sehen, indem Sie diese Funktion deaktivieren, kann ich Ihren Code ausführen. Weitere Informationen finden Sie in der -Nutzerhandbuch: http://mvapich.cse.ohio-state.edu/userguide/gdr/2.2rc1/

[hamidouc @ ivy1 mvapich2] $ export MV2_USE_GPUDIRECT_GDRCOPY = 0 [hamidouc @ ivy1 mvapich2] $ ./install/bin/mpirun -np 2 ./a.out Hallo Welt von 0 aus 2 Hallo Welt aus 1 aus 2

+0

Ich habe alle Schritte in diesem Benutzerführer folgen. Obwohl ich MV2_USE_GPUDIRECT_GDRCOPY = 0, hat es immer noch Segmentation Fault Error. Ich überprüft den Status jedes MPI-Aufrufs, der Fehler passiert in die erste Anweisung MPI_Init (NULL, NULL); Die bereitgestellte MVAPICH2-GDR-OSU funktionierte für MLNX-OFED 3.2, aber ich habe die neueste Treiberversion MLNX-OFED 3.3 installiert Nicht sicher, ob das das Problem verursacht hat, aber 3.2 steht nicht zur Verfügung Mellanox Website nicht mehr. –