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?
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);'? –