如何分析OpenMP瓶颈
How to profile OpenMP bottlenecks
我有一个由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存档中找到了它。
编辑:更新的主目录
相关文章:
- OpenMP阵列性能较差
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- OpenMP:并行更新数组总是需要减少数组吗
- 如何使用OpenMP并行这两个循环
- 从python调用openMP共享库时,未定义opnMP函数
- 如何使用OpenMP并行化此矩阵时间矢量运算
- 如何使用OpenMP使这个循环并行
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 查找最近配对时的OpenMP竞赛条件
- 使用输入打破 OpenMP 中的循环
- 为什么 openmp 的并行不适用于矢量化色彩空间转换?
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- OpenMP 加上unordered_map<字符串、双字符串的缩减>
- OpenMP 与有序和关键指令并行
- OpenMP:'parallel for loop'瓶颈
- OpenMP代码远慢于串行内存或线程开销瓶颈
- 如何分析OpenMP瓶颈