并行运算遇到的fatal error(已解决)

 遇到的问题

Fatal error in MPI_Sendrecv: Message truncated, error stack:
MPI_Sendrecv(230).................: MPI_Sendrecv(sbuf=0x39837f0, scount=5776, MPI_BYTE, dest=4, stag=4, rbuf=0x3984e90, rcount=5776, MPI_BYTE, src=2, rtag=4, MPI_COMM_WORLD, status=0x715430) failed
MPIDI_CH3U_Receive_data_found(129): Message from rank 2 and tag 4 truncated; 55696 bytes received but buffer size is 5776

这是为啥啊,不知道怎么办。

搜索信息

下面搜的一些链接,但是暂时无法解决问题。

MSMPI Buffer size issue ( Message truncated ) (microsoft.com)

PMPI_Bcast: Message truncated, - Intel Community

Fatal error in MPI_Sendrecv: Message truncated, error stack:
MPI_Sendrecv(230).................: MPI_Sendrecv(sbuf=0x2d1d880, scount=5776, MPI_BYTE, dest=4, stag=4, rbuf=0x2d1ef20, rcount=5776, MPI_BYTE, src=2, rtag=4, MPI_COMM_WORLD, status=0x715430) failed
MPIDI_CH3U_Receive_data_found(129): Message from rank 2 and tag 4 truncated; 55696 bytes received but buffer size is 5776
Fatal error in MPI_Sendrecv: Message truncated, error stack:
MPI_Sendrecv(230): MPI_Sendrecv(sbuf=0x10484160, scount=55696, MPI_BYTE, dest=3, stag=4, rbuf=0x10491b00, rcount=55696, MPI_BYTE, src=1, rtag=4, MPI_COMM_WORLD, status=0x715430) failed
do_cts(629)......: Message truncated; 88736 bytes received but buffer size is 55696
Fatal error in MPI_Sendrecv: Message truncated, error stack:
MPI_Sendrecv(230): MPI_Sendrecv(sbuf=0x361bcc0, scount=6400, MPI_BYTE, dest=MPI_PROC_NULL, stag=5, rbuf=0x36207f0, rcount=6400, MPI_BYTE, src=1, rtag=5, MPI_COMM_WORLD, status=0x715430) failed
do_cts(629)......: Message truncated; 88736 bytes received but buffer size is 6400

测试

好像找到一个很相似的问题:

Message truncated, error stack: MPIDI_CH3U_Receive_data_found -- CFD Online Discussion Forums (cfd-online.com)

做了里面推荐的Test-parallel,整个程序没问题,感觉可能是设置问题。

 将parallel案例复制到了相应路径下,然后编译,编译成功

 到我的计算案例下面,测试。

 然后输出

 同时在计算案例下面输出log文件。

/*---------------------------------------------------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  2.3.x                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
Build  : 2.3.x
Exec   : Test-parallel -parallel
Date   : Nov 18 2021
Time   : 17:40:20
Host   : "K228"
PID    : 1250
Case   : /ncsfs02/yyxie/parallel350
nProcs : 5
Slaves : 
4
(
"K228.1251"
"K228.1252"
"K228.1253"
"K228.1254"
)

Pstream initialized with:
    floatTransfer      : 0
    nProcsSimpleSum    : 0
    commsType          : nonBlocking
    polling iterations : 0
sigFpe : Floating point exception trapping - not supported on this platform
fileModificationChecking : Monitoring run-time modified files using timeStampMaster
allowSystemOperations : Allowing user-supplied system call operations

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Create time

End

Finalising parallel run

初步解决方案:

根据我的案例的报错:

Fatal error in MPI_Sendrecv: Message truncated, error stack:
MPI_Sendrecv(230).................: MPI_Sendrecv(sbuf=0x60d94d0, scount=4624, MPI_BYTE, dest=MPI_PROC_NULL, stag=4, rbuf=0x60da6f0, rcount=4624, MPI_BYTE, src=3, rtag=4, MPI_COMM_WORLD, status=0x715430) failed
MPIDI_CH3U_Receive_data_found(129): Message from rank 3 and tag 4 truncated; 36864 bytes received but buffer size is 4624

它的意思是3和4进程之间传递不了信息。根据我在网上冲浪那么久的直觉,我觉得我设2或者3个并行应该不会报错。然后我设了个2的,它居然跑起来了。我直接现场流泪。

而且根据前面对MPI的测试,发现系统配置应该是没有问题的。所以,我感觉是代码哪里逻辑存在问题,之后再熟悉一下代码,看看能不能改过来。

当然我还有一个想法,decomposeParDict的设置其实是有一些rules的,不是想这么切就这么切的,毕竟并行之间应该是要交换信息的。要考虑分布板那一块的不同。所以之后也会尝试不同的切割方法。

然后在cfdonline发布了一个问题,不知道有没有回我嘤嘤嘤

Fatal error in MPI_Sendrecv: Message truncated, error stack -- CFD Online Discussion Forums (cfd-online.com)

又找到了一个可能的原因:

MPI job won't work on multiple hosts - Bug Reports - Palabos Forum

在这里面说到了一个类似的问题,好像是代码里面有个bug,

The temporary variable with red color, which would be sent as the sizes of dynamic data to other process, can be rewriten by other program before it is send. Thus caused that the data size other process received was the modified wrong number. 

然后解决方案是:

So if we replace the temporary variable above (red one) with a global variable or something lives longer than the sending time, it would fix this problem.

fortran - MPI_Cart_create error - Stack Overflow

又看到一个和MPI和MPICH的关系友观

又遇到问题:

并行计算收敛和串行差好多。暂时不知道咋整。

换一个简单的案例,分5块并行是能跑起来的。或许跟网格划分真的有关系。我在想是不是要在规则的面上切割。

解决了:

我在想,如果不是MPI_Sendrecv出问题,那真的是信息那一部分有问题。结果发现真的是,往前面读代码,分清它的错误来源。感觉是mapping出了错,接着就发现原来是在boundbox就已经出错了。

因为从checkMesh里面读的语句是流体网格的范围,但是其实应该要考虑颗粒网格的范围。因此编译到这一步的时候,要手动修改成颗粒网格范围,而且每个processor直接是要完全衔接那种,不能重合啥的。

其实就是分割进程的时候就出问题了。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
fatal error是指程序发生了严重的错误导致无法继续执行,通常会导致程序直接崩溃或者出现严重的异常。解决fatal error的方法如下: 1. 检查错误日志:fatal error通常会产生错误日志,我们可以通过查看错误日志来获取详细的报错信息,以便更好地定位错误原因。 2. 代码逻辑检查:检查可能存在错误的代码逻辑,如循环、条件判断、函数调用等,确保代码的正确性。特别是要关注可能导致程序崩溃的地方,如内存操作、文件操作等。 3. 调试工具:使用调试工具进行调试,可以设置断点、观察变量的值,以及执行过程中的跟踪,帮助我们更好地理解程序运行时的情况,进而根据调试信息找出并解决问题。 4. 检查依赖包和库:fatal error也可能是由于依赖包或库的问题引起的,因此我们需要检查是否安装了必要的依赖,并且版本是否匹配。 5. 硬件和操作系统检查:某些fatal error可能是由于硬件故障或者操作系统问题导致的,这时候我们需要检查硬件设备的连接情况以及操作系统是否更新或出现了异常。 6. 找相关资料和寻求帮助:通过搜索相关资料或咨询专业人士,可以获取他人的经验和建议,帮助我们更好地解决fatal error问题。 在解决fatal error的过程中,需要耐心和持续跟踪调试,同时也要学会从错误中吸取教训,不断提高自己的编程能力和错误处理能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值