我正在尝试为多核ARM处理器进行多线程编程。我使用valgrind进行分析。我可以从main函数下的函数调用的调用图中看到。如何解释函数之间的数据依赖?我的两个函数是从main函数扩展出来的,我认为这意味着它们之间没有数据依赖关系,并且可以并行运行但不是。有人可以用一个例子来解释或者在哪里知道它吗?
答案 0 :(得分:0)
Callgrind(及其可视化工具kcachegrind)执行而不是显示程序的哪些部分可以并行运行。 Callgrind是一个分析器:它显示程序的哪个部分正在消耗 CPU,或正在做很多缓存未命中,或者...... kcachegrind可视化调用图以显示此消耗。 如果你看到主函数和其他函数之间的箭头,那就意味着 main已经调用了这些函数。
我不知道分析程序并确定可以运行的程序的工具 并行。
但是,Valgrind有两个工具可以检测多线程中的竞争条件 程序。一旦您对算法进行了并行化,这些工具就可以检测到错误(例如对共享变量的不受保护的访问)。