哪种软件适合用于并行调试?


24

我现在不运行任何并行代码,但是我希望将来使用OpenMP和MPI的混合运行并行代码。对于我来说,运行串行项目时,调试器是非常宝贵的工具。

谁能推荐并行调试器(或多个调试器)用于调试并行软件?自由软件将是更可取的选择,但请毫不犹豫地提及有效的商业软件。


我看不出这里的答案与stackoverflow.com/questions/329259/…有何显着差异。MPI是这里的难点,而不是OpenMP。无论如何,调试线程程序中的竞争条件目前无法解决。
杰夫

ThreadSanitizer是调试线程程序中竞争条件的好解决方案,尽管我知道没有人尝试将MPI添加到混合中!
mabraham

Answers:


17

基本上有两种主要的商业选择:来自Allinea的DDT(这是我们在TACC所使用的)和Totalview(如另一条评论中所述)。它们具有可比的功能,都在积极开发中,并且是直接竞争对手。

Eclipse有其Parallel Tools Platform,该平台应包括MPI和OpenMP编程支持以及一个并行调试器。


我从未听说过有人使用PTP并行调试器。我不确定这是什么意思……
Jeff

我有一些同事已经尝试过,但是我自己从来没有玩过。
Bill Barth

16

我必须给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,并允许您在运行中执行任意代码。我编写了一些特殊功能,以便在其中运行时轻松显示数据。


4
嘿,科沃德,如果您不赞成,请发表评论。
Matt Knepley 2011年

5
我不是拒绝投票的人,但我确实在某种程度上不同意。我遇到了一些小规模的bug,这些bug并没有以小尺寸显示出来,因此使用并行调试器是找到它们的有效方法。我的大部分调试工作都是使用printf进行的,并使用gdb附加到各个进程,但是我已经看到了使用并行调试器的好处。
比尔·巴特

3
我唯一一次遇到大规模的错误是由于选择了不合适的集体通信算法而导致的性能错误。再说一次,我的观点甚至比Matt更为极端,因为我所使用的最接近调试器的东西是valgrind。
杰克·普尔森

1
@BillBarth我知道您是对的,在1000个过程中存在错误,这些错误不会出现在较小的问题上(Dinesh有一个著名的PETSc,持续了几个月,只出现了82个proc)。我的观点更多是要反驳流行的智慧。我认为并行调试器是一个不错的选择,而不是首选。
Matt Knepley 2011年

3
我打败你了 您的答案不是问的。
aterrel 2011年


4

英特尔Parallel Studio,其中包括一个并行调试器。我从未使用过它,但是我已经在一些演示中看到了它。这是一个视频教程,其中显示了一些功能。

我还看到了gdb的一些包装,在某些情况下效果很好。


3

总览。这是一个商业调试器。在每个处理器上查看堆栈非常容易。您可以查看跨处理器/线程的变量值(并更改它们)。您可以绘制矢量或矩阵以可视化变量值。显然,对于复杂的观察点分析,脚本也是可能的(Tk / Tcl),尽管我自己从未使用过。


从主观上讲,当我大学的HPC中心安装了该软件时,我认为这太过分了。然后,我发现进行非常复杂的调试非常容易。这确实是一个很棒的程序。
Yann

我也第二个总观点。我在很多情况下都使用过它,尽管它非常昂贵,但是它却非常强大……
BlaB


1

我想知道为什么没有人提到过Padb(并行应用程序调试器),它是OP所偏爱的开源和免费软件,却不如商业同行那么强大:TotalView for HPC


-1

这是以前给我的一些答案的摘要:

OpenMP具有计时功能:omp_get_wtime()以及omp_get_wtick()- 在线文档

Google有一个CPU分析器

Scalasca执行OpenMP和MPI配置文件和分析

然后是我还没有使用过的Tauvtune

祝好运!


我认为问题不在于时间,但我可能错了。不错的建议……
Yann

这个答案更多是关于分析而不是调试...
mbq 2011年

我发现分析工具可以很好地代替并行调试器。我经常发现并行错误与性能问题有关,例如MPI中的logjam。性能工具通常会揭示这一点。TAU的内存分析器非常适合于弄清楚为什么可能发生随机段错误。
杰夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.