0
저는 MPI를 처음 사용하기 때문에 스노우 레오파드를 실행하는 Mac OS X 노드 클러스터에서 mpirun을 구현하는 데 문제가 있습니다. 내가 겪고있는 문제는 MPI_Barrier()
입니다. 아래에 표시된 간단한 함수가 제대로 작동합니다. 그러나 조건부 끝에 MPI_Barrier()
명령을 추가하면 부모 노드가 중지됩니다. 프로세서 중 하나는 장벽 명령을 지나가고 다른 하나는 걸린 상태로 있습니다. 누군가가 나에게 빠른 해결 방법을 줄 수 있거나 내 네트워크 환경이 명령이 제대로 작동하지 못하게하는 몇 가지 방법을 제안 할 수 있기를 바랬습니다.부모 노드가 MPI_Barrier에서 멈춤
int main (int argc, char **argv)
{
int me, np, q, sendto;
double t0, t1;
MPI_Status status;
MPI_Init(&argc, &argv);
t0 = MPI_Wtime();
MPI_Comm_size(MPI_COMM_WORLD,&np);
MPI_Commm_rank(MPI_COMM_WORLD,&me);
if (np%2 == 1) return 0;
if (me%2 == 1) {sendto = me - 1;}
else {sendto = me + 1;}
if (me%2 == 0) {
MPI_Send(&me, 1, MPI_INT, sendto, me, MPI_COMM_WORLD);
MPIRecv(&q, 1, MPI_INT, sendto, sendto, MPI_COMM_WORLD, &status);
} else {
MPI_Recv(&q, 1, MPI_INT, sendto, sendto, MPI_COMM_WORLD,&status);
MPI_Send(&me,1,MPI_INT,sendto,me,MPI_COMM_WORLD);
}
printf("Send %d to proc %d, received %d from proc %d\n",me,sendto,q,sendto);
t1 = MPI_Wtime();
printf("Timing is %g",t1-10);
MPI_Finalize();
return 0;
}
답장을 보내 주셔서 감사합니다. 이것은 정확히 멈춘 프로그램이 어떻게 생겼는지를 보여줍니다 (첫 번째 조건의 Finalize 문 제외). 내 장벽은 코드에 표시된 것과 같은 위치에 있습니다. – JChiTown
나는 또한이 프로그램을 가지고있다. 이 텍스트를 잘라내어 붙여보고 시도해보십시오. 나는 당신이 놓친 일부 오타가 있다고 생각합니다. –