论文部分内容阅读
伴随着计算机系统的飞速发展,软件在系统中发挥的作用日益关键。因软件可靠性问题造成的事故和灾难已屡见不鲜。与此同时,在高性能计算领域,高性能计算应用软件无法跟上高性能计算机硬件体系结构发展步伐的问题已受到各方关注,应用的局限性已严重降低了高性能计算机的使用率,针对应用软件性能、可靠性等方面的研究正进入研究人员的视野。基础数学函数作为高性能计算软件中的基础软件,众多领域的高性能应用都依赖于基础数学函数的计算结果,其计算结果对众多领域的高性能应用都起着决定性作用,因此其可靠性问题不容忽视。针对基础数学函数可靠性面临的问题,本文主要从认知基础数学函数特征和可靠性、评价基础数学函数可靠性、提高基础数学函数可靠性和验证基础数学函数可靠性四个方面进行研究,意在回答什么是基础数学函数可靠性,基础数学函数可靠性包括哪些内容,如何评价基础数学函数可靠性的高低,如何提高基础数学函数可靠性,如何验证基础数学函数可靠性的问题。本研究主要内容包括: ⑴在认知基础数学函数特征和可靠性方面,给出了基础数学函数可靠性的定义,明确了基础数学函数可靠性需要研究的内容。在此基础上,对从10个不同领域的高性能计算应用和以SPECfp2006为主的22个浮点基准测试程序中获取的26708条真实调用的基础数学函数信息进行了详细分析,从函数类型、调用模式、使用习惯三个方面研究发现了一些有益的结论并提出了一些对研究基础数学函数和高性能应用开发有用的建议。根据部分建议明确了本文研究的主体函数应为基础数学函数中的三角、指数、对数等双精度函数,研究的内容应主要包括异常处理等。 ⑵在评价基础数学函数可靠性方面,提出了一种基础数学函数可靠性模型----SN模型,该模型根据函数失效类型对数学函数可靠性影响程度的不同引入了影响因子,同时采用了指数分布数据生成方法等技术,增强了计算可靠性估计值的准确性。此外,结合数学函数的数学特性,对输入子集的出现概率进行了分类,使得利用模型计算函数可靠性的过程更趋近于函数的真实使用状态。通过对不同实现方式实现的数学函数的测试表明,与Nelson模型相比该模型的可靠性预估值更准确,对输入数据量的依赖更小,有效缓解了Nelson模型输入数据的随机选取具有盲目性和局限性的问题。此外,本文还实现了一个基于符号执行和动态插桩的基础数学函数输入子集判定方法,该方法首先通过符号执行找到程序中所包含的所有运行路径且根据不同路径给出具体输入;其次,根据已知输入进行单边折半扩展,并利用动态插桩确定运行路径,以确定每一条运行路径对应的输入边界点。该方法能够准确获取程序不同运行分支的输入子集,在程序测试、误差分析与检测等领域都将有广泛的应用。 ⑶在提高基础数学函数可靠性方面,主要通过异常处理方法提高设计阶段基础数学函数的可靠性,通过低误差的实现方法提高实现阶段基础数学函数的可靠性。在设计阶段,本文利用寄存器运算快的特点实现了浮点异常的编码;利用浮点函数计算集中的特点实现了一个基于核心运算隔离技术的分段式异常处理方法。该方法以准确处理各类异常为首要目标,并辅以将异常处理对函数性能的干扰降到最低的要求,充分利用各类异常伴随的错误码不同,可能触发的位置不同,触发条件不同的特点,围绕核心运算,将异常分为三个阶段进行处理:输入参数处理阶段,通过对输入参数的检测,保证进入核心运算的参数不会触发INV异常;特定代码检测阶段,在核心运算执行过程中检测并处理可能出现的DZE异常和INF异常;输出结果处理阶段,在核心运算后检测可能出现的FPF异常和DNO异常。该方法应用于Mlib浮点函数库,对库中600多个面向不同平台的浮点函数进行了测试。测试结果表明,该方法能够将出现浮点异常即中断的函数个数占总函数个数的比例从90%降到0%。在实现阶段,本文首先对四则运算的误差、定律及性质进行了分析,并基于运算规则实现了一种不依赖于外部资源的误差计算方法,在同等误差计算能力下运行更快于基于更高精度的误差计算方法。在此基础上,结合基础数学函数算法特点,以低误差的幂运算和求和运算为主体研究实现了一种适用于基础数学函数的低误差计算方法。该方法成功应用于Mlib浮点函数库中,与同功能相似算法实现的GNU函数库函数相比能够使函数误差平均降低8.1%、最大误差降低28.66%。此外,在gcc的4.5.1版本中测试出了一种舍入错误,该错误说明在某些特定环境下浮点数的四则运算并不可靠。 ⑷在基础数学函数可靠性验证方面,提出了面向多目标体系结构,全面可复用的一体化测试方法BMltest。测试方法结合函数特征值、IEEE-754特殊数,及利用浮点数生成规则实现的全浮点域指数分布的IEEE-754规范数构造了测试集,有效提高了测试集浮点数的覆盖率;提出了基于多精度库MPFR的精度测试方法,提高了精度测试的可靠性;提出了基于代码隔离的性能测试方法,最大限度地降低了外部环境对性能测试的干扰。针对大量的浮点测试结果,给出了合理的结果评价方案。测试方法使用的测试集数据与函数做到了相关性的极大分离,保证了测试方法的普适性,通过对包括GNU、Open64及Mlib函数库内所有855个函数的测试表明,BMltest方法的测试数据集更全面有效,精度测试方法更可靠,与其它测试方法相比,性能测试结果更准确稳定。