Skip to main content
QUICK REVIEW

[论文解读] Finding Root Causes of Floating Point Error with Herbgrind

Alex Sanchez-Stern, Pavel Panchekha|arXiv (Cornell University)|May 29, 2017
Image and Object Detection Techniques参考文献 23被引用 9
一句话总结

Herbgrind 是一种动态二进制分析工具,通过跨函数边界和堆分配数据追踪误差传播,识别大型 C/C++ 和 Fortran 应用程序中浮点数错误的根本原因。它使用带有符号表达式的影子执行和输入特征分析,将误差源抽象为可调试、可改进的代码片段,从而实现对真实世界科学软件中非局部、非组合性及非均匀浮点数错误的精确诊断。

ABSTRACT

Floating-point arithmetic plays a central role in science, engineering, and finance by enabling developers to approximate real arithmetic. To address numerical issues in large floating-point applications, developers must identify root causes, which is difficult because floating-point errors are generally non-local, non-compositional, and non-uniform. This paper presents Herbgrind, a tool to help developers identify and address root causes in numerical code written in low-level C/C++ and Fortran. Herbgrind dynamically tracks dependencies between operations and program outputs to avoid false positives and abstracts erroneous computations to a simplified program fragment whose improvement can reduce output error. We perform several case studies applying Herbgrind to large, expert-crafted numerical programs and show that it scales to applications spanning hundreds of thousands of lines, correctly handling the low-level details of modern floating point hardware and mathematical libraries, and tracking error across function boundaries and through the heap.

研究动机与目标

  • 解决缺乏诊断大型专家手工编写数值应用程序中浮点数错误根源的工具的问题。
  • 克服生产代码中非组合性、非局部性和非均匀性浮点数误差传播的挑战。
  • 使开发人员能够识别并改进对输出误差贡献最大的特定程序片段。
  • 将动态浮点数误差分析扩展到包含数十万行代码的真实世界科学应用程序。
  • 提供一种实用、高效且准确的调试解决方案,可与现代浮点数硬件和数学库协同工作。

提出的方法

  • Herbgrind 使用 Valgrind 二进制插桩框架,对已编译的数值程序执行动态二进制分析。
  • 它维护一个基于 MPFR 的高精度值的影子执行,以追踪中间舍入误差。
  • 一种类似污点分析的方法将误差影响从操作传播到程序输出和控制流决策。
  • 符号表达式抽象出导致误差的操作序列,支持数值分析和代码改进。
  • 输入特征分析识别触发显著误差的输入范围(完整或子集),有助于复现和调试。
  • 该工具支持复杂功能,如函数调用、堆分配、SIMD 指令和库函数包装,确保与真实程序行为的高度保真。

实验结果

研究问题

  • RQ1如何在使用低级语言编写的大型真实世界数值应用程序中识别浮点数错误的根本原因?
  • RQ2使用符号执行和输入特征分析的动态分析在多大程度上能减少浮点数错误诊断中的误报?
  • RQ3一个工具能否在准确追踪函数边界和堆分配数据间误差的同时,扩展到包含数十万行专家手工编写数值代码的程序?
  • RQ4Herbgrind 的各个组件——影子执行、符号表达式和输入特征分析——在准确性和性能方面分别起到什么作用?
  • RQ5Herbgrind 能否检测到即使在生产数值软件中专家开发者也未能发现的浮点数错误根源?

主要发现

  • Herbgrind 在三个大型专家手工编写的数值应用程序中成功识别出浮点数错误的根本原因,包括开发人员未能发现的情况。
  • 该工具可扩展至超过 300,000 行代码的应用程序,并正确处理复杂的底层细节,如浮点数硬件行为和数学库调用。
  • 在 FPBench 基准测试套件的受控实验中,证明了影子污点分析、符号执行和输入特征分析等组件对准确性和性能均至关重要。
  • 该工具正确追踪了误差在函数边界之间的传播,并通过堆分配的数据结构,展示了在非局部误差场景下的稳健性。
  • Herbgrind 的方法使开发人员能够将有问题的计算抽象为简化、可改进的程序片段,从而可针对性地进行数值优化。
  • 该实现已公开发布,并与 Valgrind 框架集成,支持在真实科学计算工作负载中部署。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。