当前位置:主页 > 科技论文 > 软件论文 >

基于随机代数变换的数值程序优化方法

发布时间:2020-03-21 16:23
【摘要】:编写正确高效并且易于维护的程序在软件工程领域一直以来都是一件非常具有挑战性的工作,而数值计算程序作为一些资源受限、安全攸关系统的核心部件,保障其正确性、安全性以及计算效率显得尤为重要。目前,绝大多数数值计算程序都是使用浮点精度类型来编写,但是浮点精度类型存在其固有的问题,浮点精度类型在计算过程中会引入舍入误差,因此编写浮点类型的数值程序的开发人员必须具备非常专业的数值计算知识才能够开发出计算稳定的浮点精度程序,并且这样的代码中往往包含了大量的精度相关的操作,导致程序非常复杂难以维护。另一方面,软件开发人员也通过提高程序精度甚至是使用任意精度程序的方式来保证数值程序的正确性,然而这样的程序代码的计算效率会比原来的浮点精度程序慢上成百上千倍,耗费大量的计算资源。针对上述问题,本文提出了一种针对数值计算程序的整体优化方法,能够将任意精度类型编写的数值计算程序自动优化成为高效并且正确的浮点类型的数值计算程序。软件开发人员只需要按照需求中的数学公式编写清晰且易维护的任意精度代码,该优化方法可以自动将这样的代码转换成为与之等价的、正确并且高效的浮点类型的代码。这样一来,不仅数值计算程序的安全性与正确性能够得到保障,而且大大提升原来任意精度程序的执行效率,软件开发人员也不用关注浮点精度类型的误差处理细节,提升了数值计算程序的开发效率。本文的主要工作如下:本文提出了一种优化方法,能够将任意精度类型的数值计算程序优化成为与其等价的浮点类型的数值计算程序,从而使得编程人员只需要使用任意精度类型来设计以及实现数值计算程序。本文提出了一种稳定计算过程的搜索方法,该方法运用规则库中的规则,对不稳定的计算过程进行数学上的等价变换,能够找到一个不稳定计算过程的等价的稳定计算形式。基于上述优化方法,我们实现了一个数值程序的优化工具,该工具共分为四个不同的模块,包括稳定性分析模块,路径提取模块,随机代数变换模块以及路径合并模块。该工具以任意精度类型数值计算程序作为输入,能够生成与原任意精度数值程序等价的更为高效的浮点精度程序。我们在一些测试程序以及GNU科学计算库上评估了我们的优化工具,我们的工具能够成功的检测到这些程序中不稳定的计算过程并实现对这些程序的优化。
【图文】:

浮点精度,简单分析,二进制,代码


a邋—邋sin(1022),邋b邋—邋log(17.1),邋c邋=邋exp(0.42)逡逑在这个简单的例子中,所有的输入都是精确的,不存在误差。对应的C代逡逑码如图2-1所示,我们在64位的FedomlO操作系统上,使用GCC4.3.2编译逡逑器,使用2.9版本的GNCC库,,运行该代码,我们可以得到其计算结果为逡逑d邋=邋2.9103830456733704E邋-邋11,这个结果很显然是完全错误的,其准确的结果逡逑为d邋=邋-1.341818958E-12。如果我们将该计算过程使用的双精度类型修改为扩逡逑展的双精度类型(64位有效数字),同时我们也将使用到的函数修改为对应扩逡逑展双精度的版本,将sin(1022)改为sinl(1022),将log修改为logl,将exp改为逡逑expl,我们得到的结果为J邋=邋-1.3145040611561853E-12,这个结果和之前的答逡逑案一样,都是错误的。在这个计算问题上,即便是扩展的双精度类型也无法提逡逑供足够的精度使得计算结果正确。逡逑1逦#include邋<stdio.h>逡逑2逦#include邋<math.h>逡逑3逡逑4逦int邋main(void)邋{逡逑5逦double逦a邋=逦sin逦(le22);逡逑6逦double逦b邋=逦log逦(17.1);逡逑7逦double逦c邋=逦exp逦(0.42);逡逑8逦double邋d邋=邋173746*a邋+邋94228*b邋-邋78487*c;逡逑9逦printf逦(邋"d=%邋?邋16e\n’’

程序代码,示例,数学函数,动态分配


2.2任意精度计算逦13逡逑绝对不存在任何误差的。我们也可以使用real类型定义自定义数据类型,例逡逑如矩阵,复数等等,还可以使用REAL类型实现各种各样的数学函数。iRRAM逡逑库已经帮助我们实现了一系列常用的数学函数,包括了三角函数、反三角函逡逑数、对数指数函数、幂函数等等。逡逑我们在使用iRRAM时还有一些注意事项,首先,用户无法使用普通的10逡逑操作,必须使用iRRAM自己实现的IO库,否则可能会导致错误的输入输出。逡逑其次,数值计算程序中无法使用全局的REAL类型的变量,用户必须尽可能逡逑少地使用malloc函数来动态分配内存,可以使用alloca来动态分配内存。由于逡逑iRRAM的特殊语义,在使用第三方库时也必须倍加小心。逡逑inue’’i.”逡逑
【学位授予单位】:南京大学
【学位级别】:硕士
【学位授予年份】:2018
【分类号】:TP311.1

【相似文献】

相关期刊论文 前10条

1 李和松;濮国梁;;C语言大数值计算程序设计与实现[J];中学生数理化(学习研究);2016年11期

2 王桂霞,何满喜;提高数值计算程序质量的方法[J];内蒙古科技与经济;2000年04期

3 刘振华;气象出版社新书[J];气象;1985年08期

4 黄顺礼;预报水中结构件振动状况的数值计算程序[J];水利水电快报;1997年10期

5 刘兵;王辉;郝海燕;;Matlab中巧用符号运算实现数值计算程序的通用性[J];承德石油高等专科学校学报;2009年01期

6 王孝铣;;编译方法在数值计算程序设计中的应用[J];华北地震科学;1984年02期

7 张云泉,孙家昶,迟学斌,唐志敏;数值计算程序的存储复杂性分析[J];计算机学报;2000年04期

8 徐维铮;吴卫国;;爆炸波高精度数值计算程序开发及应用[J];中国舰船研究;2017年03期

9 朱辉;;提高数值计算程序效率的几点讨论[J];阜阳师范学院学报(自然科学版);2002年01期

10 熊祥正,李家胤,李天明,于秀云,葛鹏,关涛,文光俊,杨梓强,张冰,马文多,梁正;永磁体相对论磁控管的实验研究[J];强激光与粒子束;2000年01期

相关会议论文 前6条

1 陈国栋;刘楚芸;;结霜工况下冷风机特性参数数值计算[A];制冷空调新技术进展——第三届制冷空调新技术研讨会论文集[C];2005年

2 薛松龄;张林;赵民富;李晓轩;;矩形薄壁堰板溢流稳定性数值计算程序开发[A];北京核学会第十届(2014年)核应用技术学术交流会论文集[C];2014年

3 胡哓棉;潘昊;朱建士;;Steinberg-Guinan本构模型在平面冲击实验中的应用[A];第八届全国冲击动力学学术讨论会会议论文集[C];2007年

4 吉小明;;裂隙岩体多重介质流固耦合分析的全耦合数学模型与有限元公式[A];中国土木工程学会第九届土力学及岩土工程学术会议论文集(下册)[C];2003年

5 虞培清;王则胜;;摆线轮跨齿测量数值计算方法[A];人才、创新与老工业基地的振兴——2004年中国机械工程学会年会论文集[C];2004年

6 韦孟伏;刘继东;齐红莲;;铀铌合金X射线荧光无标精密定量分析[A];中国工程物理研究院科技年报(1999)[C];1999年

相关硕士学位论文 前5条

1 王协;基于随机代数变换的数值程序优化方法[D];南京大学;2018年

2 卢宁宁;岩石非定常参数流变数值计算程序研制[D];北京交通大学;2010年

3 徐良玉;高功率回旋管高频结构分析与研究[D];电子科技大学;2015年

4 李震;基于有限差分方法的可压缩流动大涡数值模拟[D];哈尔滨工业大学;2014年

5 赵小丽;土壤源热泵竖直埋管换热特性管内外耦合的三维动态编程数值研究[D];长安大学;2016年



本文编号:2593602

资料下载
论文发表

本文链接:https://www.wllwen.com/kejilunwen/ruanjiangongchenglunwen/2593602.html


Copyright(c)文论论文网All Rights Reserved | 网站地图 |

版权申明:资料由用户9d904***提供,本站仅收录摘要或目录,作者需要删除请E-mail邮箱bigeng88@qq.com