2010-02-25 2 views
4

이제 MPI_Sendand MPI_Recv를 사용하여 여러 프로세스 중에서 가장 잘 찾아낸 솔루션을 전달하려고합니다. 각 프로세스에서 발견되는 최상의 솔루션은 모든 최상의 솔루션을 저장하고 필요한 경우 다른 프로세스로 전송하는 제어 프로세스로 전달됩니다. 내 질문은 그것을 구현하는 방법입니다? 예를 들어 프로세스 1이 새로운 최상을 찾으면 MPI_Send를 호출하여 제어 프로세스로 보낼 수 있습니다. 제어 프로세스가 수신 할 메시지를 감지 할 수있는 방법이 있습니까? 각 MPI_Send에 MPI_Recv가 필요합니까? 앞으로 전문가의 조언을 기다리고 있습니다. 감사!MPI 구현 : MPI_Recv가 여러 MPI_Send에서 메시지를받을 수 있습니까?

귀하의 조언에 감사드립니다. 제가 생각한 것은 여러 작업 프로세스가 하나의 제어 프로세스에 메시지를 보내도록하는 것입니다. 작업 프로세스는 보낼시기를 결정합니다. 제어 프로세스는 수신시기를 감지해야합니다. MPI_Proble이 이것을 할 수 있습니까?

답변

11

예, MPI_RECV는 메시지 원본의 순위로 MPI_ANY_SOURCE를 지정할 수 있으므로 원하는 작업을 수행 할 수 있습니다.

5

MPI_Recv는 다른 순위의 메시지를 수신하는 방법으로 MPI_ANY_SOURCE를 사용할 수 있습니다.

제어 프로세스의 작업량과 특성에 따라 코드에 제어 권한을 보유하고 MPI 라이브러리 만 수시로 입력 할 수 있습니다. 이 경우 MPI_ANY_SOURCE 및 MPI_Test의 MPI_IRecv가 진행하기 좋은 방법 일 수 있습니다.

메시지의 내용에 따라 수행해야 할 처리가있는 경우 MPI_Probe 또는 MPI_IProbe를 사용하면 실제로 메시지가 MPI_Recv가되기 전에 메시지 헤더를 검사 할 수 있습니다. 예를 들어, MPI_Probe는 메시지의 크기를 결정할 수있게하고 적절한 크기의 버퍼를 만들 수있게합니다.

또한 최적의 솔루션을 점검 할 때 모든 작업 등급이 때때로 "장벽"에 도달하면 MPI_Gather/MPI_Bcast 일괄 작업이 적절할 수도 있습니다.

긴 계산 단계로 들어가는 순위는 때로는 좋은 메시지 전파를 방해합니다. 확장 된 계산 단계가있는 경우 모든 MPI 메시지가 해당 단계 이전에 전달되었는지 확인하는 것이 도움이 될 수 있습니다. 이것은 클러스터에서 사용되는 RDMA 스타일 상호 연결이 더 중요해집니다. MPI_Barrier는 MPI 등급이 MPI_Barrier 호출에서 반환되기 전에 모든 순위가 MPI_Barrier를 입력하도록합니다.

관련 문제