前言
最近又重新把性能測試給撿起來了。所以決定再重新使用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)插樁。
結尾
暫時主要就是這些內容,以後遇到新的內容我再進行更新。謝謝觀看!