2014-01-10 64 views
3

截斷我有鄰接矩陣和下面的代碼:消息在MPI_RECV

if (is_broadcast_message) { 
    MPI_Send(&broadcast_message,1,MPI_INT,j,3,MPI_COMM_WORLD); 
    MPI_Send(&message,20,MPI_CHAR,j,3,MPI_COMM_WORLD); 
} 

broadcast_message=128(隨機數,當我收到只知道,這是一個廣播消息)

留言被定義爲char [20]。

else if (i have to send only to a node) { 
    MPI_Send(&destination,1,MPI_INT,next_hop[destination],3,MPI_COMM_WORLD); 
    MPI_Send(&message,20, MPI_CHAR, next_hop[destination],3,MPI_COMM_WORLD); 
} 

當我接收我首先檢查是否recv_payload128(廣播值)或其他值:

MPI_Recv(&recv_material,1,MPI_INT,MPI_ANY_SOURCE,3,MPI_COMM_WORLD,&status2); 

如果它是128,則:

MPI_Recv(&message,20,MPI_CHAR,from_d,3,MPI_COMM_WORLD,&status2); 

和我將郵件轉發給所有進程

MPI_Send(&message,20,MPI_CHAR,j,3,MPI_COMM_WORLD); 

如果不是128,我檢查,如果我的目的地:

if(recv_material == rank) 
    MPI_Recv(&mesaj,20,MPI_CHAR,from_d,3,MPI_COMM_WORLD,&status2); 

否則,我送的下一跳[recv_material]

MPI_Send(&mesaj,20,MPI_CHAR,next_hop[recv_material],3,MPI_COMM_WORLD); 

的問題是,我得到的下面的錯誤,我不知道爲什麼:

Fatal error in MPI_Recv: Message truncated, error stack: 
MPI_Recv(186).....................: MPI_Recv(buf=0x7fffbce8f2a4, count=1, MPI_INT 
src=MPI_ANY_SOURCE, tag=3, MPI_COMM_WORLD, status=0x7fffbce8f250) failed 
MPIDI_CH3U_Receive_data_found(129): Message from rank 7 and tag 3 truncated; 
20 bytes received but buffer size is 4 

回答

2

看來,你的問題是,你的緩衝區太小,則會獲得要發送的消息。從你的解釋來看,這聽起來像你做的是正確的事情,但我的猜測是,在這個過程中的某個地方,你認爲消息應該到達的順序並不是它們到達的實際順序。你應該嘗試自己匹配,並確保一切正確匹配。

如果您需要更多幫助,您應該發佈實際代碼,但也應該將其修剪爲最小工作示例(http://sscce.org)。

+0

我真的不能發佈我的實際代碼,因爲這是一個家庭作業。 – Matei

+0

對不起。沒有更多的信息,這將很難解決這個問題。 –