mpiP简介
mpiP是一个用于MPI应用程序的轻量级、伸缩性良好的MPI profiling库。由于mpiP只收集关于MPI函数的统计信息,因此与跟踪工具相比,它生成的开销和数据要少得多。
mpiP安装
最新版本的mpiP可以在github/LLNL/mpiP/releases/latest获取。
依赖库:安装mpiP之前需要安装两个依赖库
- libunwind
- binutils
注意:在Cenos7.9系统安装libunwind需要先对gcc进行升级
安装方法:
./configure
make
make install
安装后会生成一个动态库 libmpiP.so
mpiP使用
可以通过使用以下参数在运行时设置mpiP的行为。多个参数可以用空格或逗号分隔。
参数 | 描述 | 默认值 |
---|---|---|
-c | 生成简明版本的报告,省略特定流程的细节。 | |
-d | 禁止打印callsite细节部分。 | |
-e | 使用浮点格式打印报表数据。 | |
-f dir | 将输出文件记录在目录中。 | . |
-g | 打开mpiP调试模式。 | disabled |
-k n | 将调用站点堆栈回溯深度设置为。 | 1 |
-l | 通过使用MPI集合在每个调用站点的基础上生成调用站点信息,使用更少的内存来生成报告。 | |
-n | 不要截断调用站点中文件名的完整路径名。 | |
-o | 在初始化时禁用分析。应用程序必须使用MPI_Pcontrol()启用分析。 | |
-p | 点对点直方图报告消息大小和使用的通信器。 | |
-r | 通过在单个任务中聚合数据来生成报告。 | default |
-s n | 设置哈希表大小为。 | 256 |
-t x | 为报告设置打印阈值,其中是每个呼叫站点的MPI时间百分比。 | 0.0 |
-v | 生成简洁和详细的报告输出。 | |
-x exe | 指定可执行文件的完整路径。 | |
-y | 集体直方图报告消息大小和使用的通信器。 | |
-z | 在MPI_Finalize处禁止打印报告。 |
- 设置环境变量
在~/.bashrc文件中添加MPIP设置,如
export MPIP="-e,-f /data/apps/mpiP/logs,-y,-p"
在MPI命令之前执行环境配置命令,也可将其加入到~/.bashrc中,但不建议
LD\_PRELOAD=/data/apps/mpiP/mpiP-main/libmpiP.so
注:/data/apps/mpiP/mpiP-main/
为mpiP安装目录
- 以观测Abaqus作业MPI交互信息为例,作业执行命令
LD\_PRELOAD=/data/apps/mpiP/mpiP-main/libmpiP.so nohup /data/apps/Abaqus2/2021/linux\_a64/code/bin/ABQLauncher mp\_mode=mpi output\_precision=single cpus=64 mp\_host\_split=4 input=abaqus\_zhousw3\_IO.inp job=abaqus\_zhousw3\_IO scratch=/mnt/share/scratch1 interactive &
程序结束运行时会输出一个mpiP的输出文件到前面MPIP设置中指定的位置/data/apps/mpiP/logs
-
mpiP输出文件解读
- 打开输出文件可以看到几个部分。首先记录了程序运行的信息,每个MPI进程的分布:
- 第二部分记录了每个进程花在MPI相关的函数上的时间,占总的时间比例:
可以看到通信负载相对比较均衡。 - 第三部分展示了各个MPI相关函数调用的信息,每一个ID对应一个位置的调用(同样的MPI函数出现在不同地方的调用,有不同的ID,如下图的Waitall、Bcast、Isend等)
- 第四部分记录了总耗时在前20个的MPI函数调用。这里的site就对应上一部分的ID,可以据此判定这一项对应哪个位置的调用。
- 第五部分记录了发的消息总大小、次数、平均大小。按照消息总大小展示前20名的函数调用。
- 第六部分展示了集合通信的总耗时、通信子大小、数据大小(此为-y参数对应展示信息)。
- 第七部分展示了点对点通信的通信子大小、消息大小等,MPI_Sent %表示的是这一个调用占的发送消息的总比例(此为-p参数对应展示信息)。
- 第八部分是每个调用位置的统计信息。该部分首先是时间信息,包括了操作时间的最大最小值和平均值,以及该调用位置耗时在它进程的MPI总时间和整个程序时间中的占比(Rank列中的星号代表该调用位置的累加的信息)。这部分的排序是按字母序的,a开头的Allreduce在前。
- 最后一部分同样是每个调用位置的统计信息,记录的是通信的消息大小。