작업자 순위 (순위! = 0)로 MPI_Send 호출이 여러 개 생성되고 마스터 순위 (순위 == 0)가 이들 모두를 수신하는 MPI 프로그램이 있습니다. 메시지. 그러나 MPI_Recv - MPI_Recv (...)에서 치명적인 오류가 발생하여 메모리가 부족합니다. 난 단지 2 프로세스로 실행하면MPI_Send 호출이 누적되었을 때 MPI_Recv가 실패하는 이유
mpiexec -n 3 MPIHelloWorld.exe
int main(int argc, char* argv[]){
int numprocs, rank, namelen, num_threads, thread_id;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);
if(rank == 0){
for(int k=1; k<numprocs; k++){
for(int i=0; i<1000000; i++){
double x;
MPI_Recv(&x, 1, MPI_DOUBLE, k, i, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
}
}
else{
for(int i=0; i<1000000; i++){
double x = 5;
MPI_Send(&x, 1, MPI_DOUBLE, 0, i, MPI_COMM_WORLD);
}
}
}
: 여기
내가과 같이 실행 파일을 실행 나는 Visual Studio 2010에서 Visual Studio 2010을 에서 컴파일하고 코드입니다 , 프로그램이 중단되지 않습니다. 따라서 문제는 세 번째 순위 (일명 두 번째 작업자 노드)에서 MPI_Send 호출이 누적되었을 때인 것처럼 보입니다.반복 횟수를 100,000으로 줄이면 충돌없이 3 개의 프로세스로 실행할 수 있습니다. 그러나 1 백만 번의 반복으로 전송되는 데이터의 양은 8MB (이중 * 1000000 반복의 경우 8 바이트)이므로 "Out of Memory"가 RAM과 같은 실제 메모리를 언급하지는 않는다고 생각합니다.
아무런 통찰력을 주셔서 감사합니다.
해당 질문에 대해서는 사용중인 MPI 구현과 구성을 아는 것이 매우 중요합니다. – Zulan
Windows 7에서 MS-MPI v 7.1 사용 –