2013-10-17 4 views
1

저는 MPI 프로그래밍 (mpich2 fedora)에 관한 약간의 초보자입니다. 나는 MPI_COMM_WORLD와는 다른 다른 통신 상대와 함께 MPI_Barrier를 사용할 때 죽은 자물쇠가 나옵니다.MPI_Barrier를 다른 커뮤니케이터와 함께 사용하는 방법은 무엇입니까?

는이 같은 2 커뮤니케이터합니다

MPI_Comm_split (MPI_COMM_WORLD, 색상, 순위, & split_comm을);

모든 색상이 전달 될 수있는 곳에 MPI_Barrier를두면 괜찮을 것입니다.

하지만 색상 == 1 만 통과 할 수있는 MPI_Barrier를 넣으면 죽은 자물쇠가 나옵니다.

다른 커뮤니케이터에서 MPI_Barrier를 사용하는 방법은 무엇입니까? 다른 MPI_COMM_WORLD와 함께 다른 MPI_Bcast()도 사용하고 있었지만 아무도 MPI_Bcast를 호출하지 않을 때는 차단되지 않았습니다. MPI_COMM_WORLD에 대한 다른 커뮤니케이터가 자신의 프로세스를 동기화 할 수 있습니까?

답변

1

코드 스 니펫을 게시 할 수 있다면 도움이됩니다. 혼자만의 교착 상태를 디버그하는 것은 어렵습니다. http://mpi.deino.net/mpi_functions/mpi_barrier.html http://www.mcs.anl.gov/research/projects/mpi/www/www3/MPI_Barrier.html

MPI_Bcast가 차단 기능입니다 : 어떤 속도에서

, 당신은 MPI_Barrier에 인수로 차단하려는 의사 소통을 전달합니다. 따라서 하나 이상의 순위가 MPI_Bcast 호출에 도달하지 않으면 교착 상태가 발생할 수 있습니다.

MPI_COMM_WORLD는 MPI_Comm_Split 호출 후에도 모든 순위를 포함한다는 것을 기억하십시오.

+3

암시 적 장벽이있는 'MPI_Bcast'에 대한 설명은 단순히 사실이 아닙니다. 이 표준은 모든 프로세스가 작업의 일부가 완료 되 자마자 전체 호출을 종료 할 수있게하여 최적화 된 구현을 허용합니다. 유일한 예외는 ** 항상 ** 세계적으로 동기 인'MPI_Barrier'입니다. –

+0

암시 적 장벽에 대해 설명해 주셔서 감사합니다. 당신은 완전히 맞습니다. 나는 그 비트를 제거하기 위해 위의 내 의견을 편집했습니다. –