我现在不运行任何并行代码,但是我希望将来使用OpenMP和MPI的混合运行并行代码。对于我来说,运行串行项目时,调试器是非常宝贵的工具。
谁能推荐并行调试器(或多个调试器)用于调试并行软件?自由软件将是更可取的选择,但请毫不犹豫地提及有效的商业软件。
我现在不运行任何并行代码,但是我希望将来使用OpenMP和MPI的混合运行并行代码。对于我来说,运行串行项目时,调试器是非常宝贵的工具。
谁能推荐并行调试器(或多个调试器)用于调试并行软件?自由软件将是更可取的选择,但请毫不犹豫地提及有效的商业软件。
Answers:
基本上有两种主要的商业选择:来自Allinea的DDT(这是我们在TACC所使用的)和Totalview(如另一条评论中所述)。它们具有可比的功能,都在积极开发中,并且是直接竞争对手。
Eclipse有其Parallel Tools Platform,该平台应包括MPI和OpenMP编程支持以及一个并行调试器。
我必须给curmudgeon答案。以上任何建议都无法提高我的生产率。与我的并行首选方法相比,它们既慢又昂贵:每个进程一个gdb会话。每个gdb都可以连接到MPI进程并位于xterm中(这在PETSc中使用会自动发生-start_in_debugger
)。我已经愉快地使用了15年。异议:
1)我看不到全局数据
由于MPI是无共享模型,因此没有全局数据,只有本地数据
2)此策略无法扩展到很多流程
错误也没有。错误可能发生在单个进程中,可能来自1个或2个邻居的输入。您可以轻松地仅在参与进程上生成gdb(-debugger_nodes 0,5,17
例如,在您使用的PETSc中)。而且,上述系统在每个进程上运行时都放弃很多,这使它们变慢。实际上,gdb方法具有更高的可伸缩性。
gdb也非常可移植。它可以在任何地方运行,了解C ++和Fortran,并允许您在运行中执行任意代码。我编写了一些特殊功能,以便在其中运行时轻松显示数据。
对于串行和并行程序,我仅使用两个调试器:
在(2)无法充分扩展的情况下,我将参考(1b)。
有英特尔Parallel Studio,其中包括一个并行调试器。我从未使用过它,但是我已经在一些演示中看到了它。这是一个视频教程,其中显示了一些功能。
我还看到了gdb的一些包装,在某些情况下效果很好。
对于调试并行代码的几种简单方法,我们在交易中收集了一些答案。有关调试的部分中的II常见问题解答:https://github.com/dealii/dealii/wiki/Frequently-Asked-Questions#debugging -dealii-应用程序