を受けながら:上記の罰金numberCounter
は(〜1000年)が小さいことを提供した作品MPI_RECVハング私はMPIコードの非常にシンプルな作品といくつかの奇妙な行動気づい大きな配列
#include <mpi.h>
int main(int argc, char* argv[])
{
// Initialize the MPI environment
MPI_Init(NULL, NULL);
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
// We are assuming at least 2 processes for this task
if (world_size != 2)
{
std::cout << "World size must be equal to 1" << std::endl;
MPI_Abort(MPI_COMM_WORLD, 1);
}
int numberCounter = 10000;
double number[numberCounter];
if (world_rank == 0)
{
std::cout << world_rank << std::endl;
MPI_Send(number, numberCounter, MPI_DOUBLE, 1, 0, MPI_COMM_WORLD);
}
else if (world_rank == 1)
{
std::cout << world_rank << std::endl;
MPI_Recv(number, numberCounter, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
MPI_Finalize();
}
を。ただし、値が大きい場合(> 10000)、コードがハングアップして終わりに達することはありません。 MPI_Iprobeを使用すると、ランク1がメッセージを受信したとフラグが立てられますが、MPI_Recvは常にハングします。
この原因は何ですか?他の誰かがこの動作を再現できますか?
コードが不便なことは申し訳ありません。実行したコードではintでなくdouble配列を使用しています。コピー&ペーストするときに何かが見逃されました。私はvalgrindのメモリをチェックしました。 – Firefly09