Ich habe den oben genannten Fehler beim Ausführen des folgenden Programms in C erhalten. Das Programm verwendet 3-d-Hyperwürfel-Topologie, um die Summe aller Elemente eines Array mit 8 Elementen zu finden. Es nutzt MPI-Bibliothek .:MPI_ERR_RANK: ungültiger Rang
#include<stdio.h>
#include<mpi.h>
int main(int argc, char **argv)
{
int rank, n, src, dest;
MPI_Init(&argc, &argv);
MPI_Status status;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &n);
int tag = 100;
int receive;
int array[8] = {10, 20, 30, 40, 50, 60, 70, 80};
if (rank&1 == 1)
MPI_Send(&array[rank], 1, MPI_INT, rank-1, tag, MPI_COMM_WORLD);
else
{
MPI_Recv(&receive, 1, MPI_INT, rank+1, tag, MPI_COMM_WORLD, &status);
array[rank] += receive;
if (rank&2 == 1)
MPI_Send(&array[rank], 1, MPI_INT, rank-2, tag, MPI_COMM_WORLD);
else
{
MPI_Recv(&receive, 1, MPI_INT, rank+2, tag, MPI_COMM_WORLD, &status);
array[rank] += receive;
if (rank&4 == 1)
MPI_Send(&array[rank], 1, MPI_INT, rank-4, tag, MPI_COMM_WORLD);
else
{
MPI_Recv(&receive, 1, MPI_INT, rank+4, tag, MPI_COMM_WORLD, &status);
array[rank] += receive;
printf("\n%d \n", array[0]);
}
}
}
MPI_Finalize();
return 0;
}
Gebraucht 8 Prozesse durch den Aufruf
mpirun -n 8 ./a.out
Runtime Fehlermeldung:
An error occurred in MPI_Recv reported by process [3153068033,6] on communicator MPI_COMM_WORLD MPI_ERR_RANK: invalid rank MPI_ERRORS_ARE_FATAL (processes in this communicator will now abort, and potentially your MPI job)
Es gibt einen Fehler in der "Baumlogik" Ihrer 'Recv's. Etwas versucht, zu einem negativen Rang oder einem Rang größer als 7 zu senden. Ich würde schreiben, welche Logik jeden Rang abzweigt. – OregonTrail
Wie viele Aufgaben verwenden Sie für Ihren Test? –
@GillesGouaillardet 8 Aufgaben. Auch aktualisierte Details für das gleiche in der Frage. –