使用性能測試工具TAU測試MPI程序記錄

前言

最近又重新把性能測試給撿起來了。所以決定再重新使用TAU(Tuning and Analysis Utilities )來做一些性能測試。測試的程序主要是組裏一個師兄開發的基因組裝程序,使用MPI+C++編寫的。對於MPI的程序,當下來說最好的測試工具就是TAU了。
因爲這一篇博客主要是對測試過程做一個簡單的記錄,所以關於TAU的安裝過程、原理介紹等,大家可以在去查看相關的論文。

測試過程

1. 動態插樁(Dynamic instrumentation)

在mpirun的命令中插入一個tau_exec,實現動態插樁。
普通的MPI運行命令。後面是一系列程序運行的參數:

> mpirun -np 8 ./swap -k 19 -c 5 -i ./data/S.aureus.fasta -o Saur_k19_c5

加了tau_exec之後的運行命令:

> mpirun -np 8 tau_exec ./swap -k 19 -c 5 -i ./data/S.aureus.fasta -o Saur_k19_c5

接着目錄下會多了幾個類似於profile.0.0.0的文件。直接在當前目錄下執行pprof命令:

> pprof

顯示結果如下圖所示:
在這裏插入圖片描述
這種方法只能夠查看到MPI的函數調用情況,並不能看到用戶的自定義函數的調用情況。因此不太推薦這種插樁方法。

2. 源碼插樁(Source instrumentation)

直接在源碼中進行插樁。
首先,要選擇我們想要藉助TAU獲得的信息(e.g. MPI support, tracing, CUDA hardware counters, etc)。我們要將TAU_MAKEFILE變量設置爲相應的pdt。因爲我們現在使用TAU來測MPI程序的信息,因此將TAU_MAKEFILE變量設爲tau-mpi-pdt

> export TAU_MAKEFILE=$TAU_HOME/lib/Makefile.tau-mpi-pdt

接着,使用tau_cc.sh或者tau_cxx.sh而不是使用mpicc或者mpicxx來編譯cpp文件。以下代碼是從別處抄來的,因爲我測的這個程序使用MakeFile文件來進行編譯的,我就直接在MakeFile文件中進行修改,將mpicxx替換成tau_cxx.sh

> tau_cxx.sh wave2d.cpp -o wave2d

編譯完成後,還是使用mpirun運行:

> mpirun -np 4 tau_exec ./swap -k 19 -c 5 -i ./data/S.aureus.fasta -o Saur_k19_c5

接着就是使用各種可視化工具來對性能測試的數據進行可視化。pprof是一個基於文本的可視化工具。先使用pprof試試:

> pprof

在這裏插入圖片描述可以看出確實多了很多用戶自定義函數的執行情況,而不是只限於MPI函數。但是可能是因爲沒有解析出來的緣故,很多函數都只是給出了地址,而沒有給出函數名字。

另外一種可視化工具Paraprof,提供圖形化界面。

> paraprof

在這裏插入圖片描述主要是顯示四個節點(因爲MPI執行時設定的參數就是4)上函數執行時間的情況。

3. 基於編譯器的插樁(Compiler-based instrumentation)和可選擇代碼區域的插樁(Selective instrumentation

基於編譯器的插樁介於Source和Dynamic之間。而選擇代碼區域的插樁大致就是在代碼中指定一塊區域。兩個我都沒怎麼使用過,就不介紹了。文檔中還是推薦使用源碼(Source)插樁。

結尾

暫時主要就是這些內容,以後遇到新的內容我再進行更新。謝謝觀看!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章