如何分析OpenMP瓶颈

Mik*_*ail 6 c++ parallel-processing performance openmp

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

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

我使用Ubuntu 10.04和g ++ 4.4.3

Jon*_*rsi 5

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


Dav*_*id 5

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

MAP 广泛用于高性能计算,因为它还分析 MPI 等多进程应用程序。


NGa*_*ney 3

OpenMP 包括用于测量时序性能的函数 omp_get_wtime() 和 omp_get_wtick() (此处的文档),我建议使用这些函数。

否则尝试分析器。我更喜欢 google CPU profiler,可以在这里找到。

还有这个答案中描述的手动方式。