DBI玄武
工具介绍
DBI玄武是一款动态精度分析工具,可以针对应用的运行进行汇编指令层面的插桩,用于自动化定位HPC精度问题。其关键特性如下:
- 毕昇编译器支持生成函数参数列表,并由人工删改部分参数后,获得最终的函数参数列表。
- DBI工具自动读取函数参数列表,并在应用运行时对函数的入口和出口进行自动插桩,无需重新编译即可定位精度差异的来源。
约束条件
源代码可以在x86平台和鲲鹏平台编译并成功运行。
使用指导:
- 利用编译器生成函数参数列表,或者人工编写函数参数列表
- 人工调整函数参数列表
- 删除需要被排除的函数参数(例如随机数,时间等参数)
- 部分编译器无法建立映射关系的指针长度,需要人工指定
- 分别在x86与ARM的机器上通过精度调优工具运行程序,获取输出
- 对比两种平台的输出,发现某个函数存在异常点
- 修改函数参数列表,仅保留异常函数,并将异常函数的所有函数参数wrap属性设置为false。
- 这样会将该函数所有的参数的原始值打印出来,可以比较具体是哪个值出现问题
配置文件关键字汇总:
关键字 |
含义 |
是否可选 |
默认值 |
---|---|---|---|
arg_idx |
参数索引 |
必选 |
无 |
arg_name |
参数名 |
可选 |
默认为arg#arg_idx |
ele_size |
元素大小(bits) |
可选 |
默认为8bits,即只检查1byte |
is_ptr |
是否指针 |
可选 |
默认为true |
ele_nums |
元素个数 |
可选 |
默认为1,即只检查一个元素 |
has_ret |
是否有返回值 |
可选 |
默认为false,即不检查返回值 |
ptr_level |
指针级别 |
可选 |
默认为1,即只做一级访存 |
md5_level |
参数输出形式 |
可选 |
0:所有参数全部输出原始值 1:每个参数生成一个MD5值并输出 2:每个函数的所有参数共同生成一个MD5值并输出 默认为false,即不打印,只作为生成MD5的一个值 |
is_struct |
是否结构体 |
可选 |
默认为false,即不是结构体 |
struct_type |
结构体类型 |
可选 |
默认为"" |
check_at_ret |
是否在函数返回时检查该参数(必须是指针) |
可选 |
默认为true,即在函数返回时检查该参数 |
- 对于一级指针,只检查数据是否一样,不检查数据的地址是否一样。同样地,对于高级指针,只检查最终的数据是否一样,不检查各级地址是否一样。
- Fortran语言中,所有的函数参数实际上都是以地址方式传入的,所以务必设置“is_ptr”= true。
- 如果需要忽略某个函数,可采用以下两种方式:
- 直接不填写该参数的相关信息
- 设置该参数的“ele_size”= 0
- 结构体形式的参数将在下一个版本中支持。
- 即使由于一些因素导致某函数的所有参数都无需检查,仍建议保留该函数名,以便于构建完整函数调用栈,从而定位精度差异点。
父主题: 精度调优工具