并行代码疑难解答

Posted

技术标签:

【中文标题】并行代码疑难解答【英文标题】:Troubleshooting parallel code 【发布时间】:2013-02-20 08:36:38 【问题描述】:

有哪些工具可以解决并行程序的问题?

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

我在 OS X 上使用 C++。

【问题讨论】:

很好,但没有任何代码也无济于事。这里没有算命先生! 如果更多人说确实需要,我可以发布一些有问题的代码,但我问的是在处理一系列问题时可用的工具,而不是针对特定问题的解决方案。 VS 中有一个不错的 dotnet 并行分析器(显示哪个线程正在等待什么),但我不知道其他平台有任何此类工具。您总是可以从计时每个可能等待的代码部分开始,例如同步原语。将测量的等待时间转储到日志中。如果有某种争执,您有机会弄清楚细节。 【参考方案1】:

以下内容可能感兴趣

Vampir -- 花钱

DTrace -- 已安装在您的 Mac 上,提供您需要的工具,但远非开箱即用的解决方案

TAU

这只是我脑海中最先浮现的三个工具,我相信更勤奋的谷歌搜索会出现更多。

您的最后评论也许我不知道如何使用一个井做得很好,这些工具通常需要做出重大承诺才能使用它们,了解它们告诉你的内容并做出适当的并对您的程序进行性能改进。

【讨论】:

以上是关于并行代码疑难解答的主要内容,如果未能解决你的问题,请参考以下文章

Spark基础知识解答

我现在需要用STM32控制FPGA并且和FPGA进行通讯,请问STM32和FPGA的接口怎样才能实现呢?请高手们帮忙解答

最全的Spark基础知识解答

markdown git挂起疑难解答代码段

机器学习基本概念解析,机器学习算法概论,机器学习疑难解答,代码分享

机器学习基本概念解析,机器学习算法概论,机器学习疑难解答,代码分享