如何分析OpenMP瓶颈

时间:2011-08-24 19:24:02

标签: c++ performance parallel-processing openmp

我有一个由OpenMP并行化的循环,但由于任务的性质,有4个critical子句。

什么是最好的方式来分析加速并找出哪些关键条款(或者可能是非关键的(!))占用循环中的最多时间?

我使用Ubuntu 10.04和g ++ 4.4.3

4 个答案:

答案 0 :(得分:4)

Scalasca是一个很好的工具,用于分析OpenMP(和MPI)代码并分析结果。 Tau也很好但很难使用。英特尔工具,如vtune,也很好,但非常昂贵。

答案 1 :(得分:4)

Arm MAP具有OpenMP和pthreads分析功能 - 无需修改或修改源代码即可运行。您可以看到同步问题以及线程花费时间到源代码行级别的位置。 OpenMP profiling博客条目值得一读。

MAP广泛用于高性能计算,因为它也是配置文件多进程应用程序,如MPI。

答案 2 :(得分:3)

OpenMP包含用于测量时序性能的函数omp_get_wtime()和omp_get_wtick(docs here),我建议使用这些函数。

否则尝试使用分析器。我更喜欢可以找到here的谷歌CPU分析器。

还有this回答中描述的手动方式。

答案 3 :(得分:-1)

还有一个ompP工具,在过去的十年中我已经使用了很多次。我发现它对于识别和量化负载不平衡以及并行/串行区域非常有用。该网页现在似乎已关闭,但今年早些时候我也在网络档案馆中找到了它。

编辑:更新后的主目录