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