簡體   English   中英

MPI_Recv中的消息被截斷

[英]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_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);

否則,我正在發送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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM