TAU 中的profile和trace

预备知识

  • profile侧重结果,trace侧重过程。

  • 对于两个不同类型的测试(profile or trace),需要指定不同的makefile文件,各类makefile文件在tau编译配置时根据参数指定生成。

自动化插桩的过程:

  • 添加或者设需要的makefile

  • 根据待插桩的源码,设置相应的tau编译器(可在makefile中替换或者直接使用tau编译器编译)

例子:

1
2
3
4
5
6
7
8
9
10
11
12
#设置tau makefile
export TAU_MAKEFILE=/home/xxxx/tools/tau_TRACE_PAPIWALLCLOCK/x86_64/lib/Makefile.tau-papi-pdt-trace

#设置插桩参数
export TAU_THROTTLE=0
export COUNTER1=P_WALL_CLOCK_TIME
export COUNTER2=PAPI_L1_DCM
export COUNTER3=PAPI_FP_INS

#调用tau编译器
tau_f90.sh  -c  hps_em_comp.f90
tau_cxx.sh  main.cpp  hps_em_comp.o -o mytest
  • 此外,进一步的详细插桩可以通过在编译时指定配置文件
1
tau_f90.sh -tau_options=-optTauSelectFile=ins_file -c  hps_em_comp.f90
  • 配置文件格式如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#Tell tau to not profile these functions
BEGIN_EXCLUDE_LIST
double* get(int size)
END_EXCLUDE_LIST

#Exclude these files from profiling

BEGIN_FILE_EXCLUDE_LIST
*.so
END_FILE_EXCLUDE_LIST

BEGIN_INSTRUMENT_SECTION
#插桩所有在文件loop_test.cpp中函数multiply内的循环
loops file="loop_test.cpp" routine="multiply"
#插入代码段

file = "line_test.cpp" line = 9 code = "printf(\"i=%d: \", i);"
exit routine ="int foo()" code = "cout <<\"exiting foo\"<<endl;"
entry routine ="int foo()" code = "cout <<\"entering foo\"<<endl;i"
END_INSTRUMENT_SECTION
  • 使用PAPI测量更多指标,首先下指定使用papi参数编译的tau ,makefile,其次,使用环境变量PAPI_EVENT

  • 当一次要采集多个指标时,可以通过设置COUNT <1-25>来实现

1
2
3
export COUNTER1=P_WALL_CLOCK_TIME
export COUNTER2=PAPI_L1_DCM
export COUNTER3=PAPI_FP_INS
  • 之后用paraprof –pack 命令打包结果成ppk,上传至数据库。
1
paraprof --pack pdata.ppk