2014-12-16 3 views
1

MPI를 가져 오는 mpi4py를 사용하여 파이썬 코드를 작성하고 있습니다. 그런 다음, 전역 통신자 인 MPI.COMM_WORLD를 설정하고 변수 통신에 저장합니다.mpi4py에서 어떤 작업이 "동기화"작업입니까

이 코드를 n> 1 개의 스레드로 실행하고 어느 시점에서 모두 for 루프를 입력합니다 (모든 코어의 반복 수는 동일합니다).

for 루프 내부에는 "comm.reduce (...)"호출이 있습니다. 이것은 적은 수의 코어에서 작동하는 것으로 보이지만 문제점 크기가 커질수록 (즉, 64 코어로 말하면) 내 프로그램이 멈추는 것을 경험합니다.

그래서이 문제가 reduce (...) 호출과 관련이 있는지 궁금합니다. 이 호출은 모든 스레드가 필요하다는 것을 알고 있습니다 (즉, 우리는 총 2 개의 스레드를 실행한다고 가정합니다.) 하나의 스레드가 루프에 들어 가지 만 다른 스레드가 어떤 이유에서 건 아니면 reduce (...) 호출이 대기하기 때문에 프로그램이 정지합니다 두 스레드 모두).

내 질문 : 축소 호출이 "동기화"작업입니까, 즉 "comm.Barrier()"호출처럼 작동합니까? 그리고 가능하면 더 일반적으로 동기화 작업은 무엇입니까 (장벽 외에 다른 작업)?

답변

2

예, 표준 MPI 감소 호출이 차단됩니다 (모든 스레드가 진행될 수 있으려면 모든 스레드가 루트와 통신해야 함). 다른 차단 호출은 Allgather, Allreduce, AlltoAll, Barrier, Bsend, Gather, Recv, Reduce, Scatter 등입니다.

이들 중 다수는 비 차단 동등 함을 가지고 있으며 앞에 I (Isend eg) 그러나 이들은 mpi4py에서 전반적으로 구현되지 않습니다.

자세한 내용은 mpi: blocking vs non-blocking을 참조하십시오.

전화 끊기에 대해 확실하지 않습니다. 프로세서 크롤링 문제 일 수 있습니다. 4 코어 데스크톱에서 64 스레드 작업을 실행하면 소리가 커질 수 있습니다.

+0

감사합니다. 나는 다른 곳에서 버그를 찾으려고 노력할 것이다. :) – denvar

관련 문제