2017-02-17 4 views
0

다른 프로세스의 배열에 값을 보내려고합니다. 그렇게 MPI - 배열의 특정 위치에 값을 보내는 방법

1st process: MPI_ISend (&val..., process, ..) 
2nd process: MPI_Recv (&array[i], ..., process, ...) 

그래서 내가, 나 또한 내가 변수를 사용할 수 없다는 것을 알고 첫 번째 프로세스에 내가 번호를 알고 - 다른 프로세스가 난을 변경할 수 있습니다 첫째, 그 다음 발을 난을 보내고 (2 과정이다 다른 많은 사람들로부터 메시지를 받음).

답변

1

우선 보내기/받기는 모두 i을 덮어 써서는 안되며 덮어 써서는 안됩니다. 당신은 당신의 메시지를 깨끗하고 분리 된 상태로 유지해야합니다. 그것이 tag을위한 것입니다! 또한 rank_2는 데이터를 전송 한 순위를 분리 할 수 ​​있습니다. 따라서 메시지를 기다리는 순위마다 하나씩 i을 가질 수 있습니다.

마지막으로 일방적 인 MPI 통신 (MPI_Win)을 확인하고자 할 수 있습니다. 이 기술을 사용하면 rank_1은 메시지를 rank_2의 배열로 직접 rank_1로만 알려진 위치에 '떨어 뜨릴 수 있습니다.

+0

태그가 다른 용도로 사용되고 첫 번째 프로세스는 주기적으로 두 번째 프로세스에 값을 전송해야하므로 다른 태그와 다른 태그를 사용해야합니다. 연속 된 위치에 있지 않기 때문에 포장 할 수 없습니다. MPI_Put 및 Get은 실제로 바람직하지 않습니다. 따라서 태그를 해제하고 정보를 나누면 도움이됩니다. –

+0

잘 모르겠지만'MPI_Gatherv'가 당신의 문제를 해결할 수 있다는 소리가 나옵니까? 메시지를 랭크마다 하나의 배열로 묶으십시오 (비 연속적인 장소에 채우십시오, 또는 [불가능합니까?]). 그런 다음 rank_2에서이 로컬 배열을 수집하십시오. – SamVanDonut

관련 문제