2011-09-07 5 views
2

한 수신자로부터 동시에 메시지를 수신 할 수 있는지 그리고 다른 수신자에게 동시 송신 할 수 있는지 궁금합니다. 그리고 그렇다면 어떻게 행동할까요? 하나의 발신자/수신자와 동시 수신/송신

질문 더 명확하게 우리가 4 개 스레드를 상상하게 만들려면, 그들 각각은 그래서 모든 사람들이 있고,

MPI_Recv(buf, count, type, THE_SAME_SOURCE, tag, status) 

그 모든 스레드가 같은 MPI 과정 내에 동일한 소스에서 메시지를 듣고있다 동일한 MPI 등급. 그리고 다른 MPI 프로세스 또는 동일하지만 다른 스레드에서, 누군가 MPI_Send라고했습니다. 각 수신자가 동일한 메시지를 받거나 하나만 수신하거나 예외가 발생합니다 (오류가 발생 함)?

다른 방법으로, 같은 MPI 프로세스에있을 수도있는 4 개의 스레드 (동일한 MPI 프로세스 내에서 또는 아닌)가 하나의 수신자에게 메시지를 보내면 어떻게 될까요? 모든 메시지를 수신합니까?

저는 MPI에 큰 경험이 없으므로 위의 질문에 대한 답이 많이 도움이 될 수 있습니다.

감사합니다.

답변

3

수신은 등록 된 순서대로 처리됩니다. 동기화 된 이후에는 "동시에"상황이 발생하지 않습니다.

Description of Point-To-Point Communication Semantics

그래서, 첫 번째 상황에서,이 즉, 네 개의 스레드가 수신을 위해 등록하는 첫 번째 스레드로 전송됩니다 수신 대기하고 있으며, 나머지는 계속됩니다 때 발생하는 하나의 전송 후속 메시지를 기다리십시오.

두 번째 상황에서 다시 "동시에"는 없습니다. 메시지를 보내는 첫 번째 스레드는 수신 스레드가 수신 한 스레드가됩니다. 다른 송신자는 수신자를 등록하지 않습니다.

+0

이 질문에 대한 좋은 답변입니다. +1 링크. –

+0

링크가 멀티 스레드 실행에 대해 말하는 것과 반대가 아닙니까? "[...] 유사하게, 두 개의 연속적으로 전송 된 메시지를 논리적으로 동시에 수신하는 두 개의 수신 작업이 수신되면 두 메시지는 두 순서로 수신 할 수 있습니다." 읽는 방법에 따라 어떤 스레드의 수신이 "이길"것인지 알 수 없습니다. 내가 틀렸어? 편집 : 또한 내 견적은 두 개의 수신 작업이 실제로 논리적으로 동시 (예 : "동시에") 일 수 있다고 말합니다. – Quantumboredom

+1

@Quantumboredom : 어떻게 링크가 혼란 스러울 지 알 수 있습니다. 따옴표와 주변 단락은 외부 시퀀스 포인트가없는 두 개의 스레드가있을 때 송수신이 발생하는 정의 된 순서가 없음을 나타냅니다. 때로는 실행하고 다른 하나는 이길 것이고 다른 때는 그것이 다른 방법일지도 모른다. 내 요점은 그들이 실제로 장면 뒤에서 동기화된다는 것인데, 그래서 그들은 결코 "동시에"일어나지 않는다. 다른 말로하면, 요점은 항상 첫 번째 것이고 행동은 그 순서에 의해 정의된다는 것입니다. – ex0du5