c++ - 测试 MPI_Barrier C++

标签 c++ testing mpi barrier

我如何确定 MPI_Barrier 行为正确?测试方法是什么?
谢谢

最佳答案

我认为要确保 MPI_Barrier 正常工作,您必须编写一个程序,保证对工作障碍和非工作障碍表现不同。

我不认为@Neeraj 的回答一定会这样。如果屏障工作正常,所有进程都将在写入第二个输出行之前写入其第一个输出行。然而,即使在没有障碍的情况下(或者如果你想这样想的话,障碍已经完全失效),这种情况也有可能发生。我的主张并不取决于他建议的非常短的 sleep 时间(5 毫秒等级)。即使您假设进程等待(5 秒),在没有屏障的情况下,语句也可能会按照屏障强加的顺序出现。我不太可能同意你的说法,但并非不可能,特别是当你必须考虑操作系统如何缓冲对标准输出的多次写入时——你实际上可能正在测试该进程而不是屏障。 你哭了即使是最不准确的计算机时钟也会导致进程 1 等待的时间比进程 2 短,以显示屏障的正确工作。如果 o/s 则不然。抢占处理器 1(进程 1 试图在其上运行)10 秒,但没有。

对板载时钟进行同步的依赖实际上使程序的确定性降低。所有处理器都有自己的时钟,并且硬件不能保证它们都以完全相同的速率或完全相同的滴答长度。

该测试也没有充分探索屏障的所有失效模式。充其量它只是探索彻底的失败;如果实现实际上是一个泄漏屏障,因此偶尔会有一个进程在最后一个进程到达屏障之前通过,该怎么办?相差一错误在程序中非常常见。或者,屏障代码可能是 3 年前编写的,只有足够的内存来记录 2^12==4096 个进程的到来,而您已将其放在具有 2^18 个处理器的全新机器上;屏障与其说是水坝,不如说是堰。

直到现在我还没有深入思考过这个问题,我从来没有怀疑过我使用过的任何 MPI 实现有错误的屏障,所以我没有关于如何彻底测试屏障的好建议。我倾向于使用并行调试器并通过屏障检查程序的执行情况,但这并不能保证正确的行为。

这是一个有趣的问题。

关于c++ - 测试 MPI_Barrier C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2062653/

相关文章:

c++ - 链表 - 模板 - 指针

macos - 使用 Visual Studio 进行夜间自动化

testing - Jasmine:在另一个类中测试静态函数

c - 如何通过数组使用 MPI 分散和聚集

c++ - Windows中的HeapValidate有什么作用?

c++ - c 的单元测试 - 如何在不重新编译/重新链接的情况下测试 'unit'?

c++ - 整数溢出问题

c++ - 如何在 Visual Studio 中的 CppUnitTestFramework (C++) 中设置超时?

c - mpi 在结构中发送/接收多个可变长度数组

c++ - 简单的 MPI_Scatter 尝试