差异分析工具
从前文介绍的插桩分析计算结果差异方法中可以看出,在定位过程中有着大量的重复插桩动作,为了提高分析效率,Hawkeye是基于GDB的调试功能开发的,能够自动对函数插桩,递归遍历函数调用,自动记录存在计算差异函数的分析工具。
图1 hawkeye工具使用流程
使用条件约束
- 本工具使用到GDB调试功能和依赖二进制中的符号表,需要待分析应用编译选项优化等级改至-O0和增加-g选项。
- 本工具只支持单线程调试,不支持openMP。
使用步骤
下面以WRF 3.4.1应用进行举例。
- 修改编译选项,优化等级更改为-O0,增加-g,删除-fopenmp、-qopenmp。
- WRF应用链接print_md5.o静态库库,该静态库包含读写输入值,计算输出md5功能。需要放在wrf.exe同目录,也可以自行指定目录。
修改main/Makefile文件,修改前:
$(LD) -o wrf.exe $(LDFLAGS) -fopenmp wrf.o ../main/module_wrf_top.o $(LIBWRFLIB) $(LIB)
修改后:
$(LD) -o wrf.exe $(LDFLAGS) -lcrypto print_md5.o wrf.o ../main/module_wrf_top.o $(LIBWRFLIB) $(LIB)
- 将WRF二进制文件,算例,和hawkeye工具放在同一目录。指定应用名称和主函数文件路径运行hawkeye工具。
./hawkeye.sh wrf.exe wrf-3.4.1/dyn_em/solve_em.f90
图2 hawkeye工具分析结果
分析结果会显示出鲲鹏和x86平台存在计算差异的函数及其路径,为方便开发人员定位,还显示出函数的调用堆栈。图3所示的是保存各个函数具体的MD5值文件的树状图,开发人员可以查看具体的md5打印文件来进一步分析引起差异的原因。