MPI GRAPH: отправлять сообщения соседям, кроме случаев, когда они пришли

У меня здесь смешная ситуация. Я пытаюсь создать узел в графе для отправки сообщения всем своим соседям, кроме своего родителя (узла, который только что отправил сообщение). Код, который я имею, показывает, что этот конкретный узел (n) получает сообщения от всех своих соседей (правильно). Проблема заключается в отправке, отправляется только первое поступившее сообщение. Все остальные игнорируются.
NB. Это топология типа «звезда», все остальные узлы отправляются на центральный узел 0
Вот пример вывода
: —

  0    received  1 from 1
0    received  2 from 2
0    received  3 from 3
0    received  4 from 4
0    received  5 from 5
0    received  6 from 6Having correctly  received these values, node zero(0 ) is expected to send each message to all others in the following pattern  i.e. :-

0 sent   1 to 2
0 sent   1 to 3
0 sent   1 to 4
0 sent   1 to 5
0 sent   1 to 6

,
0 sent   2 to 1
0 sent   2 to 3
0 sent   2 to 4
0 sent   2 to 5
0 sent   2 to 6
,
0 sent   3 to 2
0 sent   3 to 1
0 sent   3 to 4
0 sent   3 to 5
0 sent   3 to 6

, etc .

Я, к сожалению, получаю иначе, только первое сообщение отправляется на другие узлы, а остальные игнорируются. если 1 получен первым по 0, я получу только следующий вывод: —

  0 sent   1 to 2
0 sent   1 to 3
0 sent   1 to 4
0 sent   1 to 5
0 sent   1 to 6

Все остальные сообщения не отправляются.

Вот как выглядит код в центральном узле топологии звездного графа: —

     MPI_Recv(&message , 1 , MPI_INT ,  MPI_ANY_SOURCE , echo_tag, COMM, &status );

//Sending just received message to neighbors, except to parent :-

parent = status.MPI_SOURCE;

for ( int l = 0 ; l< neighbourcount ; l++ ){
int current_neighbour =  neighbours[l];
if (  current_neighbour != parent ){
MPI_Send(&message , 1 , MPI_INT , current_neighbour , tag, COMM );
}
}

0

Решение

Вам нужен двойник для работы, как это:

int j;
for(j = 0; j < neighbourcount; ++j) {
for ( int l = 0 ; l< neighbourcount ; l++ ){
int current_neighbour =  neighbours[l];
if (  current_neighbour != parent ){
MPI_Send(/*send j*/ , 1 , MPI_INT , current_neighbour , tag, COMM );
}
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]