---
title: 示例4：MPI应用分析
description: "本示例通过使用鲲鹏DevKit系统性能分析工具的HPC应用分析，分析MPI应用，让用户清晰地了解到应用在各个rank下的通信状态。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/profiler/demo/KunpengDevKitDsug_0026.html
sourcePath: /source/zh/kunpengdevps/profiler/demo/KunpengDevKitDsug_0026.html
indexId: 9dbe4dcc1b874a488c98affc05e47ed2f8c4c1cc06f515be674f029d4a2223cc65
---
# 示例4：MPI应用分析

#### 简介

本示例通过使用鲲鹏DevKit系统性能分析工具的HPC应用分析，分析MPI应用，让用户清晰地了解到应用在各个rank下的通信状态。


#### 环境准备

1. 请确认服务器上的CPU是否为Kunpeng 920，操作系统内核为4.19及以上或patched openEuler 4.14内核及以上。
2. 请确认服务器上GCC版本是否为7.3.0及以上。
3. 请确认服务器上是否已安装鲲鹏DevKit系统性能分析工具。
4. 请从  GitHub(https://github.com/kunpengcompute/devkitdemo/tree/main/Hyper_tuner/testdemo/omp-mpi)
下载代码样例ring.c，执行以下命令赋予所有用户可读、可写和可执行权限。

```
chmod 777 ring.c
```


#### 精细化分析

1. 代码样例准备。
  编译ring.c，并赋予可执行文件所有用户可读、可写和可执行权限。

```
mpicc ring.c -O3 -o ring -fopenmp -lm && chmod 777 ring
```


2. 新建HPC应用分析任务，分析当前应用。
  单击系统性能分析后面的，选择“通用分析”，打开新建任务页面，选择“HPC应用分析”，参数配置完成后单击“确认”启动HPC应用分析任务。

  图1 新建HPC应用分析任务

**表1 配置参数说明**

| 参数 | 说明 |
| --- | --- |
| 分析类型 | HPC应用分析。 |
| 分析对象 | 应用。 |
| 模式 | Launch Application。 |
| 应用路径 | 输入程序所在的绝对路径，例如本示例将代码样例放在服务器“/opt/testdemo/mpi/ring”路径下（多节点环境下应用在对应目录下存在）。 |
| 分析模式 | 精细化分析。 |
| 共享目录 | 单节点情况下填入存在且可用的目录，多节点情况下需填入节点间的共享目录；例如本示例是在两个节点下进行采集所以填入节点间的共享目录“/home/share”。 |
| mpirun所在路径 | mpirun命令所在绝对路径。 |
| mpirun参数 | \-\-allow\-run\-as\-root \-H 节点IP:rank数（例如：\-\-allow\-run\-as\-root \-H 192.168.1.10:4） |
| 采样时长（s） | 60秒，采样时长过短可能会因为应用未结束（或应用中途停止）导致结果数据不完整。 |
| 统计更多调用栈信息 | 开启。 |


3. 查看分析结果。
  图2 rank to rank热力图

  如图2所示，单击查看rank-to-rank热力图，（ranki,rankj）对应数据为ranki发往rankj的数据和ranki接收自rankj的数据。在左侧图中使用鼠标框选需要查看的范围，右图为左侧框选的详细内容，单击或按钮可放大缩小，也可通过鼠标滑轮控制。

  图3 选择通信域

  选择通信域弹窗中可单击搜索“通信域名称”和“通信域成员”，单击对“通信域成员”排序，单击“查看详情”可查看通信域信息弹窗。

  图4 Node To Node热力图

  当统计对象为Node To Node时，可以查看当前rank的本地占比、跨DIE占比和跨片占比等信息。

  图5 MPI timeline

  选择不同的色块可以看到当前rank的通信模式，以及当前rank通信的持续时间，通信延迟时间。

  图6 MPI timeline-rank

  单击rank在某一时间段的region色块，显示在当前时间段内的PMU事件信息。


#### 统计分析

1. 代码样例准备。
  编译ring.c，并赋予可执行文件所有用户可读、可写和可执行权限。

```
mpicc ring.c -O3 -o ring -fopenmp -lm && chmod 777 ring
```


2. 新建HPC应用分析任务，并启动分析。
  单击系统性能分析后面的，选择“通用分析”，打开新建任务页面，选择“HPC应用分析”，参数配置完成后单击“确认”启动HPC应用分析任务。

  图7 新建HPC应用分析任务

**表2 配置参数说明**

| 参数 | 说明 |
| --- | --- |
| 分析类型 | HPC应用分析。 |
| 分析对象 | 应用。 |
| 模式 | Launch Application。 |
| 应用路径 | 输入程序所在的绝对路径，例如本示例将代码样例放在服务器“/opt/testdemo/mpi/ring”路径下（多节点环境下应用在对应目录下存在）。 |
| 分析模式 | 统计分析。 |
| 共享目录 | 单节点情况下填入存在且可用的目录，多节点情况下需填入节点间的共享目录；例如本示例是在两个节点下进行采集所以填入节点间的共享目录“/home/share”。 |
| mpirun所在路径 | mpirun命令所在绝对路径。 |
| mpirun参数 | \-\-allow\-run\-as\-root \-H 节点IP:rank数（例如：\-\-allow\-run\-as\-root \-H 192.168.1.10:4）。 |
| 采样模式 | Detail模式。 |
| 采样时长（s） | 60秒，采样时长过短可能会因为应用未结束（或应用中途停止）导致结果数据不完整。 |


3. 查看分析结果。
  图8 HPC应用分析结果总览

  如图8所示 “总览” 页签上方会展示相关的优化建议以及程序的执行时间，CPU使用率，CPU cycles/Retired instruction的比值（CPI），执行的指令数(Instruction Retired)，消耗在MPI阻塞函数上的时间百分比（MPI wait rate）等。

  图9 Hotspots

  如图9所示，Hotspots区域会展示出应用中热点函数调用CPU相关情况。分组方式为“function”选项，还可选“module”、“parallel-region”和“barrier-to-barrier-segment”。

  图10 内存带宽+HPC Top-Down

  如图10所示，内存带宽区域展示当前应用程序调用带宽的相关信息，并展示相关的指令分布（鼠标悬停于参数旁边的问号上可查看详细信息）。HPC Top-Down会展示Top-Down事件名称及事件比例（鼠标悬停于参数旁边的上可查看详细信息）。

  图11 MPI运行指标+PMU事件

  如图11所示，MPI运行时指标会展示当前MPI应用运行时的相关数据。PMU事件计数会展示出当前相关PMU事件及数量。
