ฉันมีสถานการณ์ที่ตลกที่นี่ ฉันกำลังพยายามให้มีโหนดในกราฟเพื่อส่งข้อความไปยังเพื่อนบ้านทั้งหมด ยกเว้นโหนดหลัก (โหนดที่เพิ่งส่งข้อความ) ดูเหมือนว่ารหัสที่ฉันมีจะแสดงให้เห็นว่าโหนดเฉพาะนี้ ( n ) ได้รับข้อความจากเพื่อนบ้านทั้งหมด (correct ) ปัญหามีไว้เพื่อส่ง เฉพาะข้อความแรกที่มาถึงเท่านั้นที่จะถูกส่ง ส่วนอื่นๆ ทั้งหมดจะถูกละเลย หมายเหตุ : นี่คือโทโพโลยีแบบดาวที่มีโหนดอื่นๆ ทั้งหมดที่ส่งไปยังโหนดกลาง 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 6
Having 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 );
}
}
MPI_Recv()
? คุณช่วยกรุณาใส่โค้ดเพิ่มเติมเพื่อให้เข้าใจได้ดีขึ้นว่าโค้ด (ไม่) กำลังทำอะไรอยู่ - person maddouri   schedule 10.10.2015for (messageIdx = 0; messageIdx < TOTAL_NUMBER_OF_EXPECTED_MESSAGES; ++messageIdx) { MPI_Recv(); /* the for loop for sending to the neighbours */ }
- person maddouri   schedule 10.10.2015int message[6];
และเรียกMPI_Recv(message , 6, MPI_INT , MPI_ANY_SOURCE , echo_tag, COMM, &status );
เพียงครั้งเดียวก่อนที่จะเข้าสู่วงนอกเพื่อวนรอบหรือไม่ นอกจากนี้ คุณอาจต้องเปลี่ยนการโทรเป็นMPI_Send()
เป็นMPI_Send(&message[messageIdx] , 1 , MPI_INT , current_neighbour , tag, COMM );
ตามที่กล่าวไว้ ที่นี่ คุณควรใช้MPI_Get_count()
เพื่อรับTOTAL_NUMBER_OF_EXPECTED_MESSAGES
จริงก่อนเข้าสู่วงรอบนอก - person maddouri   schedule 10.10.2015