[发明专利]一种基于数学近似的浮点程序精度缺陷修复方法有效
申请号: | 201910033498.4 | 申请日: | 2019-01-14 |
公开(公告)号: | CN109840067B | 公开(公告)日: | 2021-04-20 |
发明(设计)人: | 毛晓光;陈立前;易昕;纪涛;王戟;董威;陈振邦;刘万伟;刘江潮 | 申请(专利权)人: | 中国人民解放军国防科技大学 |
主分类号: | G06F7/483 | 分类号: | G06F7/483;G06F11/07 |
代理公司: | 湖南兆弘专利事务所(普通合伙) 43008 | 代理人: | 周长清 |
地址: | 410073 湖南*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 数学 似的 浮点 程序 精度 缺陷 修复 方法 | ||
1.一种基于数学近似的浮点程序精度缺陷修复方法,其特征在于,步骤包括:
步骤S1.预处理;
步骤S2.定位精度缺陷:使用线性搜索算法查找包含能触发精度缺陷的最小输入区间Ierr;
步骤S3.生成数学近似:使用线性近似加误差补偿的方法来近似浮点程序在最小输入区间Ierr对应的数学函数执行,并使用迭代精化算法来生成满足给定精度需求的数学近似列表;
步骤S4.补丁生成和优化:将生成的数学近似列表转化为浮点程序补丁,然后对补丁执行性能进行优化;
步骤S5.补丁验证:对最小输入区间Ierr进行采样,测试所有采样输入对应的修复后的浮点程序的输出是否满足精度需求,若满足则修复结束,若不满足且分配的计算资源还未耗尽则返回S2重新执行,若计算资源已经耗尽,则返回修复未完成,修复结束。
2.根据权利要求1所述的基于数学近似的浮点程序精度缺陷修复方法,其特征在于,所述步骤S1的步骤包括:
步骤S11.将程序加载至动态重编译框架中;
步骤S12.识别目标程序中的浮点运算指令并替换为高精度运算指令;
步骤S13.完成所有浮点指令的替换,生成目标程序的高精度执行版本。
3.根据权利要求1所述的基于数学近似的浮点程序精度缺陷修复方法,其特征在于,计算程序输出误差的公式是:
其中fp(x)代表目标程序,f(x)代表目标程序对应的数学函数,x表示输入;
使用目标程序的高精度执行版本计算f(x)的输出值。
4.根据权利要求1-3中任意一项所述的基于数学近似的浮点程序精度缺陷修复方法,其特征在于,所述步骤S2使用线性搜索算法的具体步骤为:
步骤S21.从能触发精度缺陷的输入x做为初始点,并设定初始步长step;
步骤S22.根据步长选取新输入点,并搜索新输入点附近的输入是否能触发精度缺陷,若可以则调整步长step,并根据步长生成新的输入点,返回执行S22,若不可以,则进入S23;
步骤S23.对步长减半并对其值取反,根据步长选取新输入点,若步长小于给定阈值δ,存取新输入点,执行S25,否则执行S24;
步骤S24.搜索新输入点附近的输入是否能触发精度缺陷,若可以返回执行S23,若不可以对步长减半,根据步长选取新输入点,返回执行S24;
步骤S25.首次执行此步骤,重新选取x作为初始点,并设定初始步长为-step,返回执行S22,否则执行S26;
步骤S26.使用两次存下来的新输入点作为最小输入区间的边界产生能触发精度缺陷的最小输入区间Ierr。
5.根据权利要求4所述的基于数学近似的浮点程序精度缺陷修复方法,其特征在于,所述步骤S21中计算初始步长的公式是:
step=ulp(x)*j
其中,x是初始输入点,j是一个正整数,ulp(x)的计算公式如下:
所述步骤S22和S23中根据步长选取新输入点的具体计算公式是:
x′=x+step
所述步骤S22中调整步长的具体计算公式是:
step=times*step
其中times是[1.5,3.0]之间的一个实数;
所述步骤S23中给定阈值δ大小是:
δ=ulp(x)*100。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科技大学,未经中国人民解放军国防科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910033498.4/1.html,转载请声明来源钻瓜专利网。