MPI_Isend와 관련하여 MPI 표준은 "시스템이 송신 버퍼에서 데이터 복사를 시작할 수 있음을 나타내는 nonblocking send 호출을 의미합니다. 송신자는 비 차단 송신 작업이 호출 된 후 송신 버퍼의 어떤 부분에도 액세스해서는 안됩니다 완료. " (http://www.mpi-forum.org/docs/mpi-11-html/node46.html)하나의 버퍼에서 MPI_Isend를 여러 번 호출하는 것이 좋습니다.
다른 송신 호출에서 송신 버퍼를 참조하고 있거나 "송신 버퍼의 일부에 액세스"에 포함되어 있습니까?
즉, 보낸 사람에 대한 다음 C 코드가 올바른가요?
MPI_Request req[2];
MPI_Status statuses[2];
...
MPI_Isend(buf, type, count, dest0, tag, comm, &req[0]);
MPI_Isend(buf, type, count, dest1, tag, comm, &req[1]);
MPI_Waitall(2, req, statuses);
여기서 짐작할 수있는 것은 이것이 완전한 대답이 아닙니다. 실제로 원하지 않는 것은 소스 버퍼의 내용을 수정하거나 대상 버퍼의 내용을 읽는 것입니다. 보내기가 완료되었습니다. 그래서 나에게 당신이하는 일은 괜찮아 보입니다. 그러나 시험해보십시오. 내 말을 믿지 마라. –
@ bob.sacamento 물론 그렇습니다. 그리고 내 코드가 내가 사용하고있는 MPI 구현 (소스 코드를 보았습니다)에 맞을 것이라고 알고 있지만 이것이 표준에 맞는지, 즉 MPI의 모든 올바른 구현에서 작동하는지 알고 싶습니다. –