MPI程序有没有好的调试和测试机制?
现在我诊断MPI程序的唯一武器就是使用“cout<< some string”。这肯定需要我太多的时间,而且对正确性的承诺很少。
我希望有一个MPI的测试框架,就像JUnit对Java程序一样。这可能是不可能的,因为并行和顺序范例之间存在差异,但测试框架应该能够对我的代码的每个顺序模块进行单元测试,并进行集成测试以确保我的程序整体正常工作。
我也希望能够调试MPI程序。
是的,我买不起任何商业工具。请给我一些建议。感谢。答案 0 :(得分:1)
正如Zulan已经提到的那样,有很好的并行调试器,如DDT和Totalview。
要分析您的应用程序并调试/优化/可视化MPI任务之间的交互,可以使用Vampir和Tau等工具。
对于测试框架,我在过去的MPI项目中使用了标准测试框架(例如CUnit)。然而,它需要一个漂亮的技巧来获得合理的输出,否则来自不同过程的标准输出会在结合显示时变得混乱。例如,假设您在本地启动工作:
mpiexec -np 4 xterm -e "./your_prog arg1 arg2; read"
这将通过xterm
会话启动每个mpi任务,因此每个任务的标准输出将显示在其自己的终端中。尾随read
确保终端在运行结束后保持打开状态。一旦你关闭,每个终端上都会快速 ENTER 。
可以使用相同的技术通过标准工具(如gdb,valgrind等)运行每个MPI任务。有人称之为穷人调试器方法。
答案 1 :(得分:1)
正确性工具可以与交互式并行调试很好地集成--Allinea的DDT MPI调试器有一个插件系统,可以让你运行(比方说)MARMOT或英特尔消息检查器。当正确性插件检测到错误时,它会显示在DDT内部,然后让您调查错误的真正含义 - 当您的进程仍处于活动状态时 - 这会改善通常的事后分析,如果您没有并行调试器。
除了MARMOT和英特尔的工具外,还有一些新项目,如MUST(由TU Dresden和LLNL开发)或ISP(犹他大学)
答案 2 :(得分:0)
MPI有两种流行的商业调试器:DDT和Totalview。 OpenMPI debugging FAQ中收集了一些很好的一般信息。
您可能也对Marmot等MPI正确性检查工具感兴趣。这将帮助您找到程序使用MPI的方式中的错误。
答案 3 :(得分:0)
您还可以尝试使用模拟MPI SMPI。这是一个开源项目(我参与其中)旨在在分布式系统的模拟器上重新实现完整的MPI标准。
如果您对硬件平台有准确的描述,SMPI可以不修改地运行许多MPI应用程序,并相当准确地预测应用程序的运行时。 http://simgrid.gforge.inria.fr/tutorials/simgrid-smpi-101.pdf
您可以在此框架中对您的MPI应用程序进行正式评估(该部分不太成熟且更持续)。 http://simgrid.gforge.inria.fr/tutorials/simgrid-mc-101.pdf