루트 노드로 데이터를 보내고 다른 모든 노드로 보내는 대신 노드간에 데이터를 보내는 방법을 알아낼 수 없습니다.MPI의 모든 노드 사이에서 동시에 메시지 전달하기
내가 그렇게, SIZE
노드의 총 수입니다 같이 만든 배열 N
노드 각각이 있고, 순간 그것은 전처리 상수의 가정하면 (수, 전염병 등의 malloc
을 피하기). 또한 rank
이 현재 노드의 순위라는 것은 말할 나위도 없습니다.
int dummy [SIZE][5];
int i, n;
for (n = 0; n < SIZE; n++){
for (i = 0; i <5; i++){
if (n == rank){
dummy [ n ][ i ] = 123;
이것은 각 노드에게 123
번호의 행이 하나의 치수 SIZE * 5
거의 빈 어레이를 제공한다. 이제 저는이 모든 개별 배열을 가져 와서 '병합'하고 싶습니다. 내가 생각할 수있는 유일한 방법은 아래,하지만 난 내가 소스 노드가 동일하지 않은 대상 노드 않습니다 있는지 확인 귀찮게 경우에도,이 교착 상태로 이어질 것입니다 확신 :
for (i = 0; i < SIZE; i++){
for (j = 0; j < SIZE; j++){
MPI_Send (&dummy [ i ], 5, MPI_INT, j, 123, MPI_COMM_WORLD);
}
}
for (i = 0; i < SIZE; i++){
for (j = 0; j < SIZE; j++){
MPI_Recv (&dummy [ j ], 5, MPI_INT, i, 123, MPI_COMM_WORLD);
}
}
친절하게 사람 수를 이 문제를 해결하는 방법에 대한 몇 가지 의사 코드를 제공하십시오. 건배