有没有办法用详细的缓存/CPU 效率信息来分析 MPI 程序?

如何解决有没有办法用详细的缓存/CPU 效率信息来分析 MPI 程序?

操作系统:Ubuntu 18.04 问题:如何分析多进程程序?

我通常使用 GNU perf 工具来分析程序,如下所示: perf stat -d ./main [args],此命令将返回一个详细的性能计数器,如下所示:

         47,455.09 msec task-clock                #    8.602 cpus utilized          
           129,199      context-switches          #    0.003 M/sec                  
                92      cpu-migrations            #    0.002 K/sec                  
            16,228      page-faults               #    0.342 K/sec                  
   117,757,409,457      cycles                    #    2.481 GHz                      (49.84%)
   236,496,093,412      instructions              #    2.01  insn per cycle           (62.31%)
     1,454,901,353      branches                  #   30.658 M/sec                    (62.18%)
         6,168,091      branch-misses             #    0.42% of all branches          (62.30%)
   183,462,410,176      L1-dcache-loads           # 3866.021 M/sec                    (62.55%)
       189,736,991      L1-dcache-load-misses     #    0.10% of all L1-dcache hits    (62.75%)
         8,330,520      LLC-loads                 #    0.176 M/sec                    (50.14%)
           628,142      LLC-load-misses           #    7.54% of all LL-cache hits     (50.25%)

       5.516529249 seconds time elapsed

      46.947476000 seconds user
       0.989185000 seconds sys

我关注的是 cpu 效率(第 1 行)、IPC(第 6 行)、L1 和 LLC 带宽(第 9 行和第 11 行)。

但是现在,我需要分析一个 MPI 程序的每个进程,假设我们通过执行 mpiexec -np 3 ./main [args] 有 3 个进程,我如何获得 cpu 效率、IPC、L1 和 LLC 信息每个进程分别?(通过使用 perf stat -d,我只得到包含 3 个进程的整体信息,这对我来说目前还不够)

我想要的输出是这样的:

PID: 1
LLC Band.: xxx

PID: 2
LLC Band.: xxx

PID: 3
LLC Band.: xxx

我该怎么做? (我想知道 GNU gperf 可以这样做吗?或者有什么 C++ 方法可以做到这一点?)

解决方法

gperf 或 gprof 等基本分析器不适用于 MPI 程序,但有许多分析工具专门设计用于 MPI,用于收集和报告每个 MPI 等级的数据。几乎所有这些都可以收集缓存未命中的硬件性能计数器。这里有几个选项:

  • HPCToolkit 用于基于采样的分析。适用于未修改的二进制文件。
  • TAUScore-P 提供基于检测的分析。通常需要重新编译。
  • TiMemoryCaliper 允许您标记要测量的代码区域。 TiMemory 还有用于屋顶分析等的脚本。

体面的 HPC 中心通常会安装一个或多个。请参阅手册以了解如何收集硬件计数器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?