MPI_AllToAllV leads to MPI_ERR_TRUNCATE

MPI_AllToAllV leads to MPI_ERR_TRUNCATE

本文关键字:MPI TRUNCATE ERR leads AllToAllV to      更新时间:2023-10-16

我有以下MPI_AllToAllv电话。所有变量都是向量

MPI_Alltoallv(
        &elements[0],
        &send_counts[0],
        &send_displacements[0],
        MPI_INT,
        &receiving_vector[0],
        &receiving_counts[0],
        &receiving_displacements[0],
        MPI_INT,
        MPI_COMM_WORLD
         );

以下是矢量的内容:

Elements : [6, 5, 4, ]
 @ 0
Elements : [3, 2, 1, ]
 @ 1
send_counts : [3, 0, ]
 @ 1
send_displacements : [0, 3, ]
 @ 1
 receiving_vector  : [0, 0, 0, ]
 @ 0
elements : [6, 5, 4, ]
 @ 0
send_counts : [0, 3, ]
 @ 0
send_displacements : [0, 0, ]
 @ 0
 receiving_vector  : [0, 0, 0, ]
 @ 1
receiving_counts : [0, 3, ]
 @ 1
receiving_displacements : [0, 0, ]
 @ 1
[lawn-143-215-98-238:1182] *** An error occurred in MPI_Alltoallv
[lawn-143-215-98-238:1182] *** reported by process [2332229633,0]
[lawn-143-215-98-238:1182] *** on communicator MPI_COMM_WORLD
[lawn-143-215-98-238:1182] *** MPI_ERR_TRUNCATE: message truncated
[lawn-143-215-98-238:1182] *** MPI_ERRORS_ARE_FATAL (processes in this communicator will now abort,
[lawn-143-215-98-238:1182] ***    and potentially your MPI job)
receiving_counts : [3, 0, ]
 @ 0
receiving_displacements : [0, 0, ]
 @ 0

我不明白为什么我会收到此错误。任何帮助将不胜感激。

我已经用谷歌搜索了这个错误,这可能是我的接收向量的大小,但我尝试了很多尺寸,但一无所获。

发送的数据量和接收的数据量不匹配。由于您只有两个等级,因此很容易绘制一个表格,说明谁发送了多少以及发送给谁。表格的每一行都是相应等级的send_counts[]内容:

      receiver
s    | 0 | 1 |
e ---+---+---+
n  0 | 0 | 3 |  (send_counts[] @ 0)
d ---+---+---+
e  1 | 3 | 0 |  (send_counts[] @ 1)
r ---+---+---+

为了匹配发送的数据量,每个等级的接收计数应等于上表中与该等级对应的列向量:

  • receiving_counts[] @ 0应该在你有[3, 0, ]{ 0, 3 };

  • receiving_counts[] @ 1应该在你有[0, 3, ]{ 3, 0 }

因此截断错误。