Fortran+openMP 的简单分析?

Simple profiling for Fortran+openMP?

我一直在使用 gprof 来对代码进行基准测试,但自从我开始并行化代码后,我意识到 gprof 并没有提供有用的输出。

我如何分析或做一些有助于找到瓶颈的事情?

我听说过 ScalascaTAU,但它们似乎有点矫枉过正。

最简单易用的工具是 perf. It can easily be installed 在任何 Linux 系统上,并且与 OpenMP 或其他线程应用程序配合得很好。

您只需在命令行中运行 sudo perf top 即可查看现场表演。这将告诉您当前消耗最多 CPU 资源的函数和源代码行,就像 top 对整个进程所做的那样。

为您的应用程序添加前缀:

perf record ./your-program your-parameter
perf report

将在功能和源代码行的基础上呈现配置文件。有很多参数需要调整 perf,例如通过使用 -g.

启用调用图跟踪

但是,虽然支持线程,但您无法轻易区分它们。所以你不会知道哪个线程表现出什么样的性能特征。为此,您应该求助于更专业的 HPC 工具,即使它们 看起来有点矫枉过正 。您必须考虑到分析并行性能并不简单。不管你用什么工具。

免费工具为:

  • HPCToolkit:使用最简单,因为它只使用采样,所以不需要重新编译你的应用程序
  • Score-P for recording and Cube 用于分析配置文件(站点似乎暂时关闭)
  • Tau

如果您可以访问英特尔商业软件,则有一些非常有用的工具。随着 Intel Vtune amplifier you can examine the hotspots for a serial run as well as the effective usage of your cores (in the image a summary graph for a 24 cores openMP run)