如何分析OpenMP瓶颈

How to profile OpenMP bottlenecks

本文关键字:OpenMP 瓶颈      更新时间:2023-10-16

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

分析加速并找出哪个关键子句(或者非关键(!))在循环中占用最多时间的最佳方法是什么?

我使用Ubuntu 10.04和g++ 4.4.3

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

Arm MAP具有OpenMP和pthreads分析功能,并且无需检测或修改源代码即可工作。您可以看到同步问题以及线程在源行级别花费时间的地方。OpenMP分析博客条目值得一读。

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

OpenMP包括用于测量计时性能的函数omp_get_wtime()和omp_get_wtick()(文档在这里),我建议使用它们。

否则,请尝试使用分析器。我更喜欢谷歌CPU分析器,可以在这里找到。

在这个回答中也有描述的手动方法

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

编辑:更新的主目录