---
title: 差异分析工具
description: "从前文介绍的插桩分析计算结果差异方法中可以看出，在定位过程中有着大量的重复插桩动作，为了提高分析效率，Hawkeye是基于GDB的调试功能开发的，能够自动对函数插桩，递归遍历函数调用，自动记录存在计算差异函数的分析工具。"
url: https://www.hikunpeng.com/document/detail/zh/perftuning/computp-wp/kunpengcomputp_19_0018.html
sourcePath: /source/zh/perftuning/computp-wp/kunpengcomputp_19_0018.html
indexId: 01f1bb1cb7802c4b655e10e2c213d9c20da7819a3da75672c62da7d67dffdb3e60
---
# 差异分析工具

从前文介绍的插桩分析计算结果差异方法中可以看出，在定位过程中有着大量的重复插桩动作，为了提高分析效率，Hawkeye是基于GDB的调试功能开发的，能够自动对函数插桩，递归遍历函数调用，自动记录存在计算差异函数的分析工具。

图1 Hawkeye工具使用流程

#### 使用条件约束

1. 本工具使用到GDB调试功能和依赖二进制中的符号表，需要将待分析应用编译选项优化等级改至-O0，并增加-g选项。
2. 本工具只支持单线程调试，不支持OpenMP。


#### 使用步骤

下面以WRF 3.4.1应用举例。

1. 修改编译选项，优化等级更改为-O0，增加-g，删除-fopenmp、-qopenmp。
2. 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)
```


3. 将WRF二进制文件，算例，和Hawkeye工具放在同一目录。指定应用名称和主函数文件路径运行Hawkeye工具。

```
./hawkeye.sh wrf.exe wrf-3.4.1/dyn_em/solve_em.f90
```


  图2 Hawkeye工具分析结果

  分析结果会显示出鲲鹏和x86平台存在计算差异的函数及其路径，为方便开发人员定位，还显示出函数的调用堆栈。图3所示的是保存各个函数具体的MD5值文件的树状图，开发人员可以查看具体的MD5打印文件来进一步分析引起差异的原因。

  图3 Hawkeye工具保存函数输出MD5值的文件
