2013-02-20 63 views
0

有哪些工具可用于故障排除并行程序?并行代码故障排除

说我有一个比预期更差的代码(4次,而不是理论上的8倍的串行版本执行速度)。我怀疑原因是由访问共享变量的线程(比如共享向量的相邻元素)导致的某种锁定,或者由访问堆的线程(我认为它也是共享资源)导致的锁定。但我不知道有什么工具可用来检查可能导致过多的线程睡眠,线程切换等的原因。 profiler会告诉我哪个函数花了多少时间,也许有很多与线程管理有关的活动,但不是线程的原因和状态(或者我不知道如何使用它)。

我在C++工作在OS X

+0

不错,但没有任何代码没有帮助。这里没有算命先生! – 2013-02-20 08:45:18

+0

如果更多人会说真的很需要,我可以发布一些违规代码,但我在处理一系列问题时询问可用的工具,而不是针对特定问题的解决方案。 – Puchatek 2013-02-20 08:53:32

+1

VS中有一个很好的用于dotnet的并行分析器(显示哪个线程正在等待什么),但我不知道任何其他平台的工具。您始终可以通过为每个可能等待的代码部分(如同步基元)进行计时开始。将测量的等待时间转储到日志。如果出现某种争议,您有机会计算出详细信息。 – 2013-02-20 08:54:55

回答

2

下可能会感兴趣的

Vampir - 花钱

DTrace - 已安装在Mac上,提供的工具你所需要的,但还远远超出现成的解决方案

TAU

这些只是第一个想到的三个工具,我相信一些更加努力的谷歌搜索会变得更多。

你最后的评论也许我不知道如何使用一个很好做工精致,这些工具通常需要显著承诺使用它们,了解他们告诉你,并作出适当和性能增强修改你的程序。