一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种针对高性能计算函数库中浮点算术表达式在指定区间内误差较大子区间划分方法及系统

2022-08-10 18:49:51 来源:中国专利 TAG:


1.本发明涉及高性能计算技术领域,尤其涉及一种针对高性能计算函数库中浮点算术表达式在指定区间内误差较大子区间划分方法及系统。


背景技术:

2.高性能计算领域是当前世界各国争相攀登的科技高峰,对国计民生有重大战略意义,其发展水平也是衡量国家综合国力的重要指标。目前,我国在高性能计算硬件方面已实现自主可控,并位居世界各国前列,但配套的国产平台软件生态建设、应用效能优化方面却相对滞后,尤其是浮点误差检测与精度优化方面,尚未见公开的方法和工具。这一现状在一定程度上制约国产平台高性能计算应用的研究与发展。
3.浮点计算作为高性能计算应用中的最主要的计算类型,其正确性影响着高性能计算应用的可靠性。然而浮点计算天然存在浮点误差,其形式隐蔽且难以准确检测。忽视浮点误差,轻则影响应用的正确性,重则造成重大安全事故,比如海湾战争期间美国爱国者导弹的发射失败就是由单个浮点表达式的误差累积造成的。此外高性能计算应用多数为规模大、耗时长的数值计算,浮点误差的累积效应可能导致不精确,甚至错误的计算结果,所以保证浮点计算精度满足要求至关重要。
4.上述现状表明关注浮点误差的重要性和精度优化的重大意义。高性能计算应用中的浮点运算一般可以抽象表示为一系列浮点算术表达式。但应用中除了浮点计算外,还包含条件判断、异常处理等等。整体分析浮点应用程序难度大,且检测分析效率过低。所以高性能计算应用中的一般精度优化思路是:首先将浮点程序的核心运算抽象为浮点算术表达式,然后针对浮点算术表达式进行误差分析和精度优化,最后将优化方法还原到浮点程序中,由此高效获取较为全面的精度优化方案。
5.给定一个浮点算术表达式,在给定的不同输入区间会有不同的误差表现,针对某些高误差区间,可以通过一些优化手段来降低误差从而提高正确性。如何准确定位具有高误差表现的区间尤为重要。
6.存在的问题:现有工具更重视找出引起最大误差的单输入,事实是在给定区间内不同的浮点算术表达式在某些小区间整体误差偏高,未见针对上述小区间的区间检测和优化方法,从而缺乏对引起高误差表现的这些小区间进行优化,进而缺乏对整体区间的一个优化。


技术实现要素:

7.本发明针对现有工具更重视找出引起最大误差的单输入,事实是在给定区间内不同的浮点算术表达式在某些小区间整体误差偏高,未见针对上述小区间的区间检测和优化方法,从而缺乏对引起高误差表现的这些小区间进行优化,进而缺乏对整体区间的一个优化的问题,提出一种针对高性能计算函数库中浮点算术表达式在指定区间内误差较大子区
间划分方法及系统,通过本发明可以得到在给定区间内浮点算术表达式的误差散点图,对误差散点图轮廓线分析,通过设置误差阈值,在经过划分子区间算法准确得到大于误差阈值的区间,针对这些小区间可以进一步通过一些优化手段进行精度优化,对于提高浮点表达式在给定输入域内整体误差表现具有很好的作用。
8.为了实现上述目的,本发明采用以下技术方案:
9.本发明一方面提出一种针对高性能计算函数库中浮点算术表达式在指定区间内误差较大子区间划分方法,包括:
10.步骤1:在指定区间对浮点表达式进行误差检测,得到其不同输入下的误差原始数据;
11.步骤2:将步骤1得到的误差原始数据导入到matlib中,得到误差分布散点图,其中横轴代表输入,竖轴代表其ulp误差大小;
12.步骤3:利用matlib中内置的boundary函数获取误差分布散点图的轮廓线,绘制在误差分布散点图上,得到轮廓线数据集,所述轮廓线数据集包括边界点的横坐标及其ulp误差;
13.步骤4:分析轮廓线数据集,设置一个标准ulp、即误差阈值,并将低于该标准ulp的ulp误差置为标准ulp;
14.步骤5:对设置误差阈值后的新轮廓线数据文本执行划分子区间算法,打印划分子区间算法执行结果。
15.进一步地,所述划分子区间算法包括:
16.步骤5.1:将每个轮廓线点的每条数据按照升序读入vector容器;
17.步骤5.2:遍历vector容器依次获取每个轮廓线点的ulp误差值,与设置的误差阈值比较;
18.步骤5.3:判断该点的ulp误差值是否大于误差阈值,若是进入步骤5.4,若否进入步骤5.7;
19.步骤5.4:将该点记为区间左边界,继续遍历,依次获取每个点的ulp误差值,与误差阈值进行比较,判断点的ulp误差值是否等于误差阈值,若是进入步骤5.5,若否进入步骤5.6;
20.步骤5.5:将该点上一点记为此区间右边界,继续遍历,依次获取每个点的ulp误差值,与误差阈值比较,即返回步骤5.3;
21.步骤5.6:如果没有点的ulp误差值等于误差阈值,将最后一点记为此区间的右边界,打印所有区间;
22.步骤5.7:判断是否遍历至最后一点,若是则打印所有区间,若否则继续遍历,重复步骤5.3。
23.本发明另一方面提出一种针对高性能计算函数库中浮点算术表达式在指定区间内误差较大子区间划分系统,包括:
24.误差检测模块,用于在指定区间对浮点表达式进行误差检测,得到其不同输入下的误差原始数据;
25.数据导入模块,用于将误差检测模块得到的误差原始数据导入到matlib中,得到误差分布散点图,其中横轴代表输入,竖轴代表其ulp误差大小;
26.轮廓线数据集得出模块,用于利用matlib中内置的boundary函数获取误差分布散点图的轮廓线,绘制在误差分布散点图上,得到轮廓线数据集,所述轮廓线数据集包括边界点的横坐标及其ulp误差;
27.误差阈值设置模块,用于分析轮廓线数据集,设置一个标准ulp、即误差阈值,并将低于该标准ulp的ulp误差置为标准ulp;
28.分区模块,用于对设置误差阈值后的新轮廓线数据文本执行划分子区间算法,打印划分子区间算法执行结果。
29.进一步地,所述划分子区间算法包括:
30.步骤5.1:将每个轮廓线点的每条数据按照升序读入vector容器;
31.步骤5.2:遍历vector容器依次获取每个轮廓线点的ulp误差值,与设置的误差阈值比较;
32.步骤5.3:判断该点的ulp误差值是否大于误差阈值,若是进入步骤5.4,若否进入步骤5.7;
33.步骤5.4:将该点记为区间左边界,继续遍历,依次获取每个点的ulp误差值,与误差阈值进行比较,判断点的ulp误差值是否等于误差阈值,若是进入步骤5.5,若否进入步骤5.6;
34.步骤5.5:将该点上一点记为此区间右边界,继续遍历,依次获取每个点的ulp误差值,与误差阈值比较,即返回步骤5.3;
35.步骤5.6:如果没有点的ulp误差值等于误差阈值,将最后一点记为此区间的右边界,打印所有区间;
36.步骤5.7:判断是否遍历至最后一点,若是则打印所有区间,若否则继续遍历,重复步骤5.3。
37.与现有技术相比,本发明具有的有益效果:
38.1、针对浮点算术表达式着重研究计算误差的检测和分析、精度优化等方面,本发明进一步完善高性能计算配套的国产平台软件生态建设,为高性能计算国产平台的实际应用开发和优化提供强有力的支撑。
39.2、高性能基础数学库是高性能计算机系统软件层中不可或缺的部分,是支撑科学计算的重要软件之一。通过提高单个浮点算术表达式的精度来整体提高高性能基础数学库的精度。
40.3、本发明适用于为浮点算术表达式提升精度,尤其是高性能计算应用的浮点运算。本发明的划分子区间算法具有准确性和高效性,本发明能够快速对浮点算术表达式误差散点图进行区间划分,准确找出具有较大误差的区间。
41.4、解决了传统划分方法的低效性。经过误差检测生成的浮点算术表达式的不同输入下的误差数据量可能有几十万,数据量庞大,传统的方式对整个数据进行处理,效率低下;经过数据得到误差散点图经过手动观察得到的区间不准确。本发明只针对得到的散点图的轮廓线进行处理,轮廓线数据量远小于整个散点图的数据,经过划分子区间算法得到最终区间,具有高效性和科学性。
附图说明
42.图1为本发明实施例一种针对高性能计算函数库中浮点算术表达式在指定区间内误差较大子区间划分方法的基本流程图;
43.图2为本发明实施例划分子区间算法流程图;
44.图3为本发明实施例bsplines0的误差散点图;
45.图4为本发明实施例得出的轮廓线示例图;
46.图5为本发明实施例基于误差阈值处理后的轮廓线点集示例图;
47.图6为本发明实施例划分子区间算法执行结果示例图;
48.图7为本发明实施例一种针对高性能计算函数库中浮点算术表达式在指定区间内误差较大子区间划分系统的架构示意图。
具体实施方式
49.下面结合附图和具体的实施例对本发明做进一步的解释说明:
50.如图1所示,一种针对高性能计算函数库中浮点算术表达式在指定区间内误差较大子区间划分方法,包括:
51.步骤s101:在指定区间对浮点表达式进行误差检测,得到其不同输入下的误差原始数据。
52.步骤s102:将步骤s101得到的误差原始数据导入到matlib中,得到误差分布散点图,其中横轴代表输入,竖轴代表其ulp误差大小。具体地,浮点计算时,更多地使用ulp作为误差衡量标准。ulp(unit in the last place)直译为浮点数尾数最后一位的值。ulp(x)表示距离实数x最近的两个浮点数的差值,通常用作浮点误差单位。假设实数则
53.步骤s103:利用matlib中内置的boundary函数获取误差分布散点图的轮廓线,绘制在误差分布散点图上,得到轮廓线数据集,所述轮廓线数据集包括边界点的横坐标及其ulp误差;具体地,boundary函数的输入是二维或三维空间的一组点,输出是这些点的边界。
54.步骤s104:分析轮廓线数据集,设置一个标准ulp、即误差阈值,并将低于该标准ulp的ulp误差置为标准ulp;具体地,选取轮廓线数据集进行分析的原因是考虑到散点图的数据量较大(达到几十万),不便于分析,故分析散点图的轮廓线,而非散点图,以降低分析数据量。
55.步骤s105:对设置误差阈值后的新轮廓线数据文本执行划分子区间算法,打印划分子区间算法执行结果。
56.进一步地,如图2所示,所述划分子区间算法包括:首先根据轮廓线水平先设置一条误差阈值,低于该误差阈值的误差全部置为设置的误差阈值,然后对新设置的轮廓线继续执行该算法,将轮廓线中大于设置的误差阈值的区间打印出来。所述划分子区间算法具体包括:
57.步骤s105.1:将每个轮廓线点的每条数据按照升序读入vector容器;
58.步骤s105.2:遍历vector容器依次获取每个轮廓线点的ulp误差值,与设置的误差阈值比较;
59.步骤s105.3:判断该点的ulp误差值是否大于误差阈值,若是进入步骤s105.4,若
否进入步骤s105.7;
60.步骤s105.4:将该点记为区间左边界,继续遍历,依次获取每个点的ulp误差值,与误差阈值进行比较,判断点的ulp误差值是否等于误差阈值,若是进入步骤s105.5,若否进入步骤s105.6;
61.步骤s105.5:将该点上一点记为此区间右边界,继续遍历,依次获取每个点的ulp误差值,与误差阈值比较,即返回步骤s105.3;
62.步骤s105.6:如果没有点的ulp误差值等于误差阈值(ulp==误差阈值,说明从左边界点到最后一点为一整个区间),将最后一点记为此区间的右边界,打印所有区间;
63.步骤s105.7:判断是否遍历至最后一点,若是则打印所有区间,若否则继续遍历,重复步骤s105.3。
64.为更好的理解本发明,从fpbench测试基准中选取特定浮点算术表达式做解释说明,以bsplines0为例。
65.bsplines0表达式为:(1-x)*(1-x)*(1-x)/6.0
66.步骤s201:通过对bsplines0浮点表达式在区间[0.01,100]进行50万大规模误差检测,得到其误差输入原始数据,即在特定输入下的误差。
[0067]
步骤s202:将步骤s201得到的误差原始数据导入matlib,得到其误差散点图,横坐标代表不同的输入,纵坐标代表ulp大小。bsplines0的误差散点图如图3所示。
[0068]
步骤s203:根据误差散点图画出其轮廓线图,通过matlib中内置的boundary画出由轮廓点组成的轮廓线。效果如图4所示。
[0069]
步骤s204:通过对图像进行分析,可以得到在1.3ulp下可以通过比如等价表达式替换等方法对具有高误差的情况进行优化。将误差阈值设置为1.3ulp,即低于1.3ulp的轮廓线点误差设置为1.3ulp,通过对轮廓线点集进行操作,得到图5。
[0070]
步骤s205:根据新的轮廓线点,导出其轮廓线点数据,通过划分子区间算法读取轮廓线点数据执行程序,输出其高于设置的误差阈值的区间,输出结果区间如图6所示。
[0071]
在上述实施例的基础上,如图7所示,本发明另一方面提出一种针对高性能计算函数库中浮点算术表达式在指定区间内误差较大子区间划分系统,包括:
[0072]
误差检测模块,用于在指定区间对浮点表达式进行误差检测,得到其不同输入下的误差原始数据;
[0073]
数据导入模块,用于将误差检测模块得到的误差原始数据导入到matlib中,得到误差分布散点图,其中横轴代表输入,竖轴代表其ulp误差大小;
[0074]
轮廓线数据集得出模块,用于利用matlib中内置的boundary函数获取误差分布散点图的轮廓线,绘制在误差分布散点图上,得到轮廓线数据集,所述轮廓线数据集包括边界点的横坐标及其ulp误差;
[0075]
误差阈值设置模块,用于分析轮廓线数据集,设置一个标准ulp、即误差阈值,并将低于该标准ulp的ulp误差置为标准ulp;
[0076]
分区模块,用于对设置误差阈值后的新轮廓线数据文本执行划分子区间算法,打印划分子区间算法执行结果。
[0077]
进一步地,所述划分子区间算法包括:
[0078]
步骤5.1:将每个轮廓线点的每条数据按照升序读入vector容器;
[0079]
步骤5.2:遍历vector容器依次获取每个轮廓线点的ulp误差值,与设置的误差阈值比较;
[0080]
步骤5.3:判断该点的ulp误差值是否大于误差阈值,若是进入步骤5.4,若否进入步骤5.7;
[0081]
步骤5.4:将该点记为区间左边界,继续遍历,依次获取每个点的ulp误差值,与误差阈值进行比较,判断点的ulp误差值是否等于误差阈值,若是进入步骤5.5,若否进入步骤5.6;
[0082]
步骤5.5:将该点上一点记为此区间右边界,继续遍历,依次获取每个点的ulp误差值,与误差阈值比较,即返回步骤5.3;
[0083]
步骤5.6:如果没有点的ulp误差值等于误差阈值,将最后一点记为此区间的右边界,打印所有区间;
[0084]
步骤5.7:判断是否遍历至最后一点,若是则打印所有区间,若否则继续遍历,重复步骤5.3。
[0085]
综上,
[0086]
1、针对浮点算术表达式着重研究计算误差的检测和分析、精度优化等方面,本发明进一步完善高性能计算配套的国产平台软件生态建设,为高性能计算国产平台的实际应用开发和优化提供强有力的支撑。
[0087]
2、高性能基础数学库是高性能计算机系统软件层中不可或缺的部分,是支撑科学计算的重要软件之一。通过提高单个浮点算术表达式的精度来整体提高高性能基础数学库的精度。
[0088]
3、本发明适用于为浮点算术表达式提升精度,尤其是高性能计算应用的浮点运算。本发明的划分子区间算法具有准确性和高效性,本发明能够快速对浮点算术表达式误差散点图进行区间划分,准确找出具有较大误差的区间。
[0089]
4、解决了传统划分方法的低效性。经过误差检测生成的浮点算术表达式的不同输入下的误差数据量可能有几十万,数据量庞大,传统的方式对整个数据进行处理,效率低下;经过数据得到误差散点图经过手动观察得到的区间不准确。本发明只针对得到的散点图的轮廓线进行处理,轮廓线数据量远小于整个散点图的数据,经过划分子区间算法得到最终区间,具有高效性和科学性。
[0090]
以上所示仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献