---
title: Hawkeye鹰眼
description: "在精度调优过程中有着大量的重复插桩动作，hawkeye的推出提高了分析效率。hawkeye是基于GDB（GNU Debugger，汇编语言调试工具）的调试功能开发的，能够自动对函数插桩，递归遍历函数调用，自动记录存在计算差异函数的分析工具。鹰眼下载地址：https://atomgit.com/openeuler/hpcrunner/tree/master/software/utils/hawkeye(https://atomgit.com/openeuler/hpcrunner/tree/master/software/utils/hawkeye)"
url: https://www.hikunpeng.com/document/detail/zh/perftuning/precisionopt/kunpengprecision_12_0028.html
sourcePath: /source/zh/perftuning/precisionopt/kunpengprecision_12_0028.html
indexId: 0e59fa1088779b278ace037994eea5a05c9560f956212141e2865df5d02250cc64
---
# Hawkeye鹰眼

#### 工具介绍

在精度调优过程中有着大量的重复插桩动作，hawkeye的推出提高了分析效率。hawkeye是基于GDB（GNU Debugger，汇编语言调试工具）的调试功能开发的，能够自动对函数插桩，递归遍历函数调用，自动记录存在计算差异函数的分析工具。鹰眼下载地址：https://atomgit.com/openeuler/hpcrunner/tree/master/software/utils/hawkeye(https://atomgit.com/openeuler/hpcrunner/tree/master/software/utils/hawkeye)

图1 hawkeye工具流程


#### 约束条件

本工具用到GDB调试功能，且依赖二进制中的符号表。需将分析应用编译选项的优化等级改至-O0，并且增加-g选项。

本工具只支持单线程调试，不支持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值的文件
