2013-07-10 2 views
1

제가 알고 있듯이 이것은 모든 프로세스를 동일한 수준으로 가져 오는 데 사용됩니다. openMPI 프로그램의 전체 처리 시간 (모든 프로세스가 끝난 시간)을 찾아야하므로 마지막에 MPI_Barrier()을 넣은 다음 MPI_Wtime()-t을 인쇄하면 모든 프로세스가 종료되는 시간이 인쇄됩니다 완료되었습니다.동작?

 MPI_stuff;//whatever i want my program to do 
     MPI_Barrier(MPI_COMM_WORLD); 
     cout << "final time ::: :: " << MPI_Wtime()-t << rank << endl; 
     MPI_Finalize(); 

하지만 시간이 내가 MPI_Barrier()가 개별 프로세스의 경우보다 훨씬 다른 사용할 때 MPI_Wtime()-t

+0

시간은 얼마나 다른가요? 토론중인 다른 버전의 코드를 표시 할 수 있습니까? –

답변

3

알고리즘에 관여 특히, MPI 프로세스가 시간에 desynchronised 될하기가 매우 쉽습니다 MPI_stuff은 전역 적으로 동기화되지 않습니다. 대부분의 클러스터 MPI 구현에서는 시작 시간이 다르고 MPI_Init()이 시간이 많이 걸리기 때문에 처음부터 프로세스가 완전히 동기화되지 않은 것이 일반적입니다. 다른 동기 해제 원은 OS 잡음, 즉 MPI 작업의 일부 프로세스와 때때로 CPU 시간을 공유하는 다른 프로세스입니다. 병렬 알고리즘의 실행 시간을 측정하는 정확한 방법 후 및 전에 측정 블록 배리어 넣어하는 이유

:

MPI_Barrier(MPI_COMM_WORLD); // Bring all processes in sync 
t = -MPI_Wtime(); 
MPI_stuff; 
MPI_Barrier(MPI_COMM_WORLD); // Wait for all processes to finish processing 
t += MPI_Wtime(); 

를 제 MPI_Barrier이없는 경우와 MPI_stuff는 않는다 서로 다른 프로세스를 동기화하지 않으면 다른 프로세스가 매우 늦게 도착하는 동안 매우 빠른 속도로 다음 장벽에 도달하고 초기 프로세스는 늦은 프로세스를 기다려야합니다.

또한 MPI_Barrier은 모든 프로세스가 동시에 장벽을 종료한다는 보장을하지 않습니다. 모든 프로세스의 실행 흐름이 MPI_Barrier 호출 내에있을 때만 특정 시점을 보장합니다. 다른 모든 것은 구현에 따라 다릅니다. 일부 플랫폼, 특히 IBM Blue Gene에서 글로벌 장애물은 특별한 인터럽트 네트워크를 사용하여 구현되며 MPI_Barrier은 거의 완벽한 사이클 동기화를 구현합니다. 클러스터에서는 메시지 전달과 함께 장벽이 구현되므로 장벽 종료 시간이 많이 달라질 수 있습니다.

+0

http://stackoverflow.com/questions/17820445/openmpi-hello-world-on-cluster –

+0

안녕하세요, MPI_Barrier와 관련하여 왜 그렇게 행동하는지 알 수 있습니까? http://stackoverflow.com/questions/ 29757817/blocking-mpi-barrier-l-lxc-containers에서 실행되었을 때 – AlexandruC