2
Cで次のプログラムを実行すると、上記のエラーが発生しました。このプログラムでは、3次元ハイパーキューブトポロジを使用して8要素配列のすべての要素の合計を検索します。これは、MPIライブラリを使用しています。:MPI_ERR_RANK:無効なランク
mpirun -n 8 ./a.out
ランタイムエラーメッセージを呼び出すことによって8つのプロセスを使用し
#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;
}
:それはあなたが使用方法に誤りのように見えます
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)
あなたの 'Recv'の"ツリーロジック "にエラーがあります。何かが負のランクまたは7より大きいランクに送られようとしています。 – OregonTrail
テストにはいくつのタスクを使用しますか? –
@GillesGouaillardet 8タスク。また、質問の同じものの詳細を更新しました。 –