[英]Message Truncated in 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_payload
我首先檢查recv_payload
是128
(廣播值)還是其他值:
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);
否則,我正在發送nexthop [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
看來您的問題是您的緩沖區太小而無法接收正在發送的消息。 根據您的解釋,聽起來您做的正確,但是我的猜測是,在此過程中的某個地方,您認為消息到達的順序不是消息到達的實際順序。 您應該嘗試自己進行匹配,並確保所有內容正確匹配。
如果您需要更多幫助,則應發布實際代碼,盡管還應將其縮減為“最小工作示例”( http://sscce.org )。
您正在一對進程之間發送多條消息。 使用標簽就是這種情況。 那么,為什么對所有郵件都使用相同的標簽? 使用標簽消除歧義,然后發布特定標簽的收貨。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.