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

一种基于国产异构众核平台的高精度浮点数模拟方法与流程

2022-03-22 20:19:19 来源:中国专利 TAG:


1.本发明涉及一种基于国产异构众核平台的高精度浮点数模拟方法,属于高精度浮点运算技术领域。


背景技术:

2.高精度浮点运算在许多大规模并行算法中都具有广泛地应用,但是当前国产异构众核平台只支持单精度与双精度浮点运算,没有相应的高精度浮点数指令支持,使得用户需要通过数组、标量以及复杂的算法来间接的实现高精度浮点数的功能,实现复杂且计算效率低。以80比特浮点数乘法为例,利用整型表示80比特浮点数的符号位以及指数位,利用无符号长整型表示其尾数位,相乘时,符号异或,指数相加,尾数相乘,但是64比特的尾数相乘产生128比特的乘积,长整型乘法无法实现,通常的做法是将两个64比特的无符号长整型拆分成四个32比特的数存储在无符号长整型中,然后分别相乘,错位相加,这种方法实现复杂,且没有使用国产异构众核平台支持的相应指令,计算效率低。


技术实现要素:

3.本发明的目的是提供一种基于国产异构众核平台的高精度浮点数模拟方法,以解决国产异构众核平台上高精度浮点运算实现复杂,计算效率低的问题。
4.为达到上述目的,本发明采用的技术方案是:提供一种基于国产异构众核平台的高精度浮点数模拟方法,用于对浮点计算精度以及计算效率要求较高的课题,利用标量模拟浮点数的符号位、指数位以及尾数位,并基于国产异构众核平台指令进行加速,实现高精度浮点数的加法、减法、乘法、除法、开方、取整、取小数、类型转换、比较、取绝对值、取反功能,基于以下配置:将高精度浮点数定义为结构体mdouble,mdouble的各个成员的定义均满足ieee 754,具体如下:包括以下步骤:s1、初始数据类型的转换与表示:利用数据类型转换函数实现源数据类型到高精度浮点数的转换;s2、根据具体功能,对符号位、指数位以及尾数分别进行相应的运算,并用指令进行加速;s3、对s2中的结果进行就近取偶舍入,并根据舍入结果对指数进行调整,得到高精
754,具体如下:typedef struct{
ꢀꢀꢀꢀꢀꢀꢀ
int s;
ꢀꢀꢀꢀꢀꢀꢀ
int e;
ꢀꢀꢀꢀꢀꢀꢀ
unsigned long f;} mdouble;s=0时,表示正数,s=1时,表示负数。
9.(二) mdouble的加法与减法mdouble的任意符号加减法可以通过同号加法与顺序减法来实现,同号加法即加法的两个操作数的符号相同,顺序减法即被减数与减数符号相同,且被减数大于减数。
10.mdouble数据间的同号加法算法如下:1、判断指数大小,并将小指数向大指数对齐,记录需要补齐的差值,如大指数为2,小指数为-2,则需要补4位,即需要尾数部分向右移4位;2、小指数数向右移位,此时需要进行舍入;然后利用长字加指令将两个尾数相加,并判断是否进位,若产生进位,需要向右进行移位,并进行舍入。
11.由于顺序减法的两个操作数符号相同,且被减数大于减数,因此减数的指数必然小于等于被减数的指数。经过指数对齐之后,减数的尾数也必然小于被减数的尾数,因此可如下实现mdouble的顺序减法:1、将减数的指数与被减数的指数对齐,记差值为,然后将减数的尾数向右移;2、小指数数向右移位,此时需要进行舍入;然后利用长字减指令将两个尾数做差,减数的尾数经过移位,必然小于等于被减数的尾数;3、判断差值的最高位是否为0,如果是,需要进行移位,并且根据移位调整差值的指数。
12.(三)mdouble的乘法mdouble的乘法遵循各部分各自运算的准则,即符号位异或,指数位相加,尾数位相乘。
13.由于mdouble的尾数是高位为1的64比特数,因此尾数相乘的乘积为128位,且乘积有以下特点:要么第128位为1且第127位为0,要么第128位为0且第127位为1。
14.本发明利用国产异构众核平台支持的无符号长字乘高位与长字乘分别计算尾数乘积的高64位于低64位,然后根据乘积的第128位对乘积进行舍入(就近取偶舍入),最后乘积保留64比特,然后根据保留的结果调整指数。
15.(四)mdouble的除法mdouble的除法利用牛顿迭代实现。
16.设有常数n和k,要完成n/k,可先求出1/k,再乘以n。设x = 1/k,xi为x = 1/k的第i次迭代,ri为第i次迭代的误差。根据牛顿迭代方程可得迭代公式为:当初值满足0《x0《2/k时,迭代过程收敛, 则
由此递推得于是mdouble的除法实现如下:定义两个mdouble类型的数mn和mk(mk的值不为0,若为0,输出异常),要完成mn/mk,可先利用牛顿迭代法求mk的倒数rmk,然后与mn做mdouble结构数乘法:1、将2表示为mdouble数,记为m2;将mk转为双精度,然后求其倒数作为迭代的初值,然后转为mdouble结构数记为rmk(还有另外一种做法,直接计算mk的尾数的倒数,产生新的mdouble数,记为mk1,初值的指数位mk1.e
ꢀ–ꢀ
mk.e,尾数位mk1.f);2、计算rmk(2-mk*rmk),结果存储到rmk中。
17.3、计算误差r = 1-mk*rmk,如果r小于一个我们给定的值,则计算结束,输出rmk,否则回到步骤2。
18.4、计算rmk*mn。
19.(五)mdouble的开平方利用牛顿迭代实现mdouble的开方。
20.设有常数n,计算,选取一个恰当的初值,从出发,利用牛顿迭代,可计算得常数n的开方。迭代公式如下:于是mdouble的开平方算法如下:定义mdouble类型的数mn,1、将2表示为mdouble数,记为m2;将mn0=mn/2作为迭代的初值。
21.2、计算temp = ,结果存储到temp中。
22.3、计算误差r = |mn
ꢀ‑ꢀ
temp|,如果r小于一个我们给定的值,则计算结束,输出temp,否则回到步骤2。
23.(六)mdouble的类型转换本发明实现了mdouble与double之间的类型转换。
24.1、mdouble转doublemdouble类型数据的符号位为double类型数据的符号位;mdouble类型数据的尾数位经过就近取偶舍入后剩下53位的低52位为double类型数据的尾数位(可能舍入会导致进位,如果进位则需要进行移位);mdouble类型数据的指数位加上1086即为double类型数据指数位(若尾数在舍入时产生了进位,此处还需要加1)。
25.2、double转mdoubledouble类型数据的符号位即为mdouble类型数据的符号位,double类型数据的指数位减1086即为mdouble类型数据的指数位,double类型非零数据的尾数位(52)第53位设为1,然后右移11位即为mdouble类型数据的尾数位。
26.(七)mdouble取小数mdouble类型数据的指数位的相反数表示在其尾数位中小数部分的位数,通过指数位取出尾数中小数部分,后根据mdouble尾数的要求调整取出的小数部分(即尾数部分最高位为1),然后相应的调整期指数,即完成该数据的取小数操作。
27.(八)mdouble取整数此处mdouble的取整数表示的是截断取整。由于mdouble类型数据的指数位的相反数表示在其尾数位中小数部分的位数,那么剩下的部分即为整数部分,若没有整数部分,则指数为0,否则指数与原数相等。
28.(九)mdouble比较定义两个mdouble类型的数m1、 m2,如果m1与m2异号,那么正的大于负的;如果同号,且都为正,那么指数大的数大;若指数位相等,那么尾数大的大;如果同号,且都为负,那么指数小的大;若指数相等,那么尾数小的大。
29.(十)mdouble取绝对值将mdouble数据的符号位置0即可。
30.(十一)mdouble取反mdouble数据的符号位为0的置为1,否则置为0。
31.采用上述一种基于国产异构众核平台的高精度浮点数模拟方法时,其基于国产异构众核平台,利用标量模拟高精度浮点数,并利用现有的国产异构众核平台支持的指令对高精度浮点数运算进行了加速,实现了高精度浮点数的加法、减法、乘法、取整、取小数、类型转换、比较、取绝对值、取反,并利用牛顿迭代实现了除法以及开方等功能,降低了用户的编程难度,使得高精度浮点运算的实现指令条数更少,计算效率更高,满足了国产异构众核平台用户对高精度浮点计算的需求。
32.上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
再多了解一些

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

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

相关文献