Saya punya situasi yang lucu di sini. Saya mencoba memiliki simpul dalam grafik untuk mengirim pesan ke semua tetangganya kecuali induknya (simpul yang baru saja mengirim pesan). Kode yang saya miliki sepertinya menunjukkan bahwa simpul khusus ini( n ) menerima pesan dari semua tetangganya(benar ) . Masalahnya adalah untuk pengiriman, hanya pesan pertama yang tiba yang dikirim. Semua yang lain diabaikan. NB : Ini adalah topologi bintang dengan semua node lainnya dikirim ke node pusat 0 Berikut contoh keluarannya :-
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 .
Sayangnya saya mendapatkan sebaliknya, hanya pesan pertama yang dikirim ke node lain dan sisanya diabaikan.yaitu. jika 1 diterima pertama kali oleh 0, saya hanya mendapatkan output berikut :-
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
Semua pesan lainnya tidak terkirim.
Berikut adalah tampilan kode di node pusat topologi grafik bintang :-
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()
? Bisakah Anda memasukkan lebih banyak kode untuk mendapatkan gambaran yang lebih baik tentang apa yang (tidak) dilakukan kode tersebut? - 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];
dan memanggilMPI_Recv(message , 6, MPI_INT , MPI_ANY_SOURCE , echo_tag, COMM, &status );
hanya sekali, sebelum memasuki loop for bagian luar? Selain itu, Anda mungkin perlu mengubah panggilan keMPI_Send()
menjadi sepertiMPI_Send(&message[messageIdx] , 1 , MPI_INT , current_neighbour , tag, COMM );
. Seperti yang disebutkan di sini Anda mungkin harus menggunakanMPI_Get_count()
untuk mendapatkanTOTAL_NUMBER_OF_EXPECTED_MESSAGES
sebenarnya sebelum memasuki loop for luar. - person maddouri   schedule 10.10.2015