我一直在使用gprof
对代码进行基准测试,但自从我开始并行化后,我意识到gprof
没有提供有用的输出。
如何分析或做一些有助于找到瓶颈的事情?
我听说过Scalasca
和TAU
,但他们似乎有些矫枉过正。
答案 0 :(得分:5)
最简单易用的工具是perf
。它可以在任何Linux系统上轻松be installed,并且可以很好地与OpenMP或其他线程应用程序配合使用。
只需在命令行上运行sudo perf top
即可查看实时性能。这将告诉您当前正在消耗最多CPU资源的函数和源代码行,如top
对整个进程的影响。
使用以下命令添加应用程序:
perf record ./your-program your-parameter
perf report
将在函数和源代码行的基础上显示配置文件。调整perf
的参数很多,例如通过使用-g
启用调用图跟踪。
但是,虽然支持线程,但您无法轻易区分它们。所以你不知道哪个线程显示了什么性能特征。为此,您应该使用更专业的HPC工具,即使它们看起来有点矫枉过正。您必须考虑分析并行性能并不简单。无论你使用什么工具。
免费工具将是:
答案 1 :(得分:0)
如果您可以访问英特尔商业软件,则可以使用几种非常有用的工具。使用Intel Vtune amplifier,您可以检查串行运行的热点以及核心的有效使用情况(在图像中为24核openMP运行的摘要图表)