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安裝目錄
- 以觀測某軟件作業MPI交互信息為例,作業執行命令
LD\_PRELOAD=/data/apps/mpiP/mpiP-main/libmpiP.so nohup /mnt/work/run.sh 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在前。

- 最后一部分同樣是每個調用位置的統計信息,記錄的是通信的消息大小。








