내가 MPI 코드의 간단한 조각으로 몇 가지 이상한 행동을 알아 차리지있어 수신 :MPI_Recv 중지하는 동안 큰 배열
#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();
}
위의 미세 numberCounter
가 작다는 사실을 제공하는 작품 (~ 1000). 그러나 값이 커지면 (> 10000) 코드가 멈추고 끝까지 도달하지 않습니다. MPI_Iprobe를 사용하면 순위 1이 메시지를 받았지만 MPI_Recv는 항상 정지한다는 플래그를 지정합니다.
이 문제의 원인은 무엇일까요? 다른 사람이이 동작을 재현 할 수 있습니까?
현혹 된 코드 포스트에 대해 유감스럽게 생각합니다. 코드는 int가 아닌 double 배열을 사용합니다. 복사 및 붙여 넣기시에 뭔가 빠졌습니다. valgrind에서 메모리를 확인한 결과 괜찮습니다. – Firefly09