我有一个由OpenMP并行化的循环,但由于任务的性质,有4个critical
子句。
什么是最好的方式来分析加速并找出哪些关键条款(或者可能是非关键的(!))占用循环中的最多时间?
我使用Ubuntu 10.04和g ++ 4.4.3
答案 0 :(得分:4)
答案 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工具,在过去的十年中我已经使用了很多次。我发现它对于识别和量化负载不平衡以及并行/串行区域非常有用。该网页现在似乎已关闭,但今年早些时候我也在网络档案馆中找到了它。
编辑:更新后的主目录