2012-06-04 3 views
12

MPI_Isend를 사용 MPI_Request 파라미터는 NULL 포인터를 할 수 있는가?MPI_Isend 요청 파라미터

+1

사용해보기 그것이 할 수없는 경우 segfault를 제공해야합니다. – aztaroth

+0

좋아, 내가 시도하고 대답은 아니오입니다 : MPI는 요청 포인터가 null이 아닌지 확인하고 그렇지 않으면 오류를 인쇄합니다. – sunmat

답변

23

짧은 대답은 '노 - 요청 핸들 매개 변수가 NULL을 할 수 없습니다.

MPI_Isend()은 비동기 전송 작업을 시작합니다.

  • 블록과 MPI_Wait()과 마무리 작업을 기다리는 친구
  • 테스트 MPI_Test()과 완성을위한 작업 : 모든 비동기 작업은 요청 다음 중 한 가지 방법으로 나중에 행동해야하는 핸들을 부여 그리고 시험이 완료되면 모두 대기 및 테스트 기능은 요청을 무료 MPI_Request_free()

에 긍정적 인

  • 무료 핸들을 끈다 친구까지. MPI_Isend()에 의해 반환 된 후 즉시 해제 할 수도 있습니다. 이렇게하면 작업이 취소되지 않고 작업이 완료되는 즉시 삭제 요청이 표시됩니다. 그래도 보내기 작업의 상태를 가져올 수는 없습니다.

    MPI_Request req; 
    ... 
    MPI_Isend(..., &req); 
    MPI_Request_free(&req); 
    ... 
    

    주의해야 할 다음과 같이

    는 비동기 작업의 결과에 신경 쓰지 않는 경우

    (예를 들어, 완료 상태, 메시지 상태, 에러 코드 등을 수신), 옳은 일이다 : 이것은 비동기 전송을 위해 작동합니다. 왜냐하면 전송 작업이 완료되었는지 확인하는 다른 방법을 고안 할 수 있기 때문입니다. 메시지를 수신 한 후 대상 프로세스가 응답 할 수 있습니다. 그러나 비동기 수신 요청을 결코 해제해서는 안되며 작업이 완료된 시점을 알 수있는 방법이 없기 때문에 완료를 기다리거나 테스트해야합니다.

  • +2

    이것은 맞습니다. 나는 단지 MPI_Request를 어떤 식 으로든 완료해야만하는 이유가 있다는 것을 덧붙이고 싶었다. MPI 구현이'MPI_Wait' (또는 이와 동등한) 호출까지 메시지를 보내는 실제 작업을 연기하는 것이 가능합니다. 요청이 시작되고 완료되지 않은 경우 메시지를 보내지 않을 수도 있습니다. –

    +0

    감사! 나는 내가했던 것을 더 잘 반영 할 수 있도록 "result"라는 단어를 확장했습니다. –