我正在尝试为多核 ARM 处理器进行多线程编程。我使用 valgrind 进行分析。我可以从主函数下的函数调用调用图中看到。如何解释函数之间的数据依赖关系?我的两个函数是从主函数分支出来的,我认为这意味着它们之间没有数据依赖关系并且可以并行运行,但事实并非如此。有人可以举个例子或在哪里知道吗?
问问题
84 次
1 回答
0
Callgrind(及其可视化工具 kcachegrind)不显示程序的哪些部分可以并行运行。Callgrind 是一个分析器:它显示程序的哪个部分正在消耗 CPU,或者正在执行大量缓存未命中,或者... kcachegrind 可视化调用图以显示这种消耗。如果您在 main 函数和其他函数之间看到箭头,则表示 main 已调用这些函数。
我不知道有什么工具可以分析程序并确定什么可以并行运行。
然而,Valgrind 有 2 个工具可以检测多线程程序中的竞争条件。一旦您将算法并行化,这些工具就可以检测错误(例如对共享变量的未受保护访问)。
于 2017-01-21T07:36:43.877 回答