前言
最近又重新把性能测试给捡起来了。所以决定再重新使用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)插桩。
结尾
暂时主要就是这些内容,以后遇到新的内容我再进行更新。谢谢观看!