【发布时间】:2020-10-13 18:52:34
【问题描述】:
我正在使用Catch2 为一些使用 MPI 的代码编写单元测试。 Catch2 中的失败测试基本上是带有有用错误消息的失败断言。
现在,在某些情况下,mpirun 似乎无法检测到测试何时仅在一个进程上失败。然后可能会发生死锁。
是否有或多或少优雅的方法来检查代码中的特定点,是否所有进程都还活着?如果不是,所有进程都将终止。
【问题讨论】:
-
您可以随时要求节点向节点 0 返回与其等级类似的信号。如果其中一些没有响应,那么您就知道出了问题并且应该终止。
-
嗯.. 你会用什么来做这个?任何集体沟通都会导致再次陷入僵局,因此这是行不通的。你的意思是循环排列并使用类似好的(坏的?)旧的
MPI_Send和MPI_Recv? -
用
if (!a) MPI_Abort(1, MPI_COMM_WORLD)替换assert(a) -
@GillesGouaillardet 这听起来很有希望,谢谢。我将尝试找出如何操纵我的测试库的源代码来做到这一点。希望在包含库之前的
#define可以解决问题。毕竟,它只是标题。