我的MPI代码有问题。两个进程(cpus)不会发生此问题,但是当我有3个以上级别(cpus)时会出现。我认为标签可能是造成此错误的原因,因为在计算期间,但相应的接收具有与发送相同的标签。
会是什么问题?给定多个等级(cpus)与同一个标记冲突?
我的代码的一部分:
if (id != 0)
{
MPI_Isend(liquidx[1][0], 1, new_dtype, id - 1, 0, MPI_COMM_WORLD,
&req[0]);
MPI_Isend(liquidy[1][0], 1, new_dtype, id - 1, 1, MPI_COMM_WORLD,
&req[1]);
}
if (id != p - 1)
{
MPI_Irecv(liquidx[memory_size - 1][0], 1, new_dtype, id + 1, 0,
MPI_COMM_WORLD, &req[0]);
MPI_Irecv(liquidy[memory_size - 1][0], 1, new_dtype, id + 1, 1,
MPI_COMM_WORLD, &req[1]);
}
MPI_Waitall(2, req, status);
错误:
[0]致命错误PMPI_Gather中的致命错误:消息被截断,错误 堆栈:PMPI_Gather(583).......................: MPI_Gather(sbuf = 0x00000000084463C0,scount = 150,dtype = USER, rbuf = 0x000000000FB9C080,rcount = 150,dtype = USER,root = 0, MPI_COMM_WORLD)失败MPIR_Gather(210).......................: MPIDI_CH3U_Post_data_receive_found(193):来自等级1和标签3的消息 截短接收到31050432字节,但缓冲区大小为30844800