技术新讯 > 计算推算,计数设备的制造及其应用技术 > 一种基于简单SIMD指令的浮点数倒数快速求解方法与流程  >  正文

一种基于简单SIMD指令的浮点数倒数快速求解方法与流程

  • 国知局
  • 2024-11-06 14:37:49

本发明属于计算机软件开发,具体涉及一种基于简单simd指令的浮点数倒数快速求解方法。

背景技术:

1、‌simd指令是提高处理器计算性能的有效办法。英特尔cpu、高通dsp和百度昆仑芯xpu等处理器都提供了simd指令。但由于simd指令的硬件实现较为复杂,有些处理器只提供了加减乘三种数学运算、简单逻辑运算等运算相关的simd指令,并未提供除法运算相关的simd指令,因此,在采用simd指令进行除法运算时通常需要基于现有的simd指令进行多步变换才能实现。例如,现有技术存在先求解正数的平方根倒数再对其进行平方运算以实现倒数求解的方式,然而该方法需要处理器提供平方根倒数运算相关的simd指令,进而适应于对正数的求解。

技术实现思路

1、有鉴于此,本发明提供了一种基于简单simd指令的浮点数倒数快速求解方法,采用简单simd指令实现了浮点数倒数的较精确近似值的快速估算。

2、本发明提供的一种基于简单simd指令的浮点数倒数快速求解方法,具体包括以下步骤:

3、步骤1、构建正数浮点数倒数近似值计算公式,如下所示:

4、

5、其中, xi为正浮点数 x的二进制表示,且, ex及 mx分别为正浮点数 x的指数部分二进制的整数值和整数部分二进制的整数值; yi为正浮点数 y的二进制表示, ky为计算参数;

6、步骤2、给定计算精度 ap,根据 ex基于步骤1构建的正数浮点数倒数近似值计算公式对 ky进行分段估算,形成由计算精度 ap、 ky估算值及与其对应的浮点数范围构成的 ky分段估算值表;

7、步骤3、对于能够被simd指令直接处理的、元素为浮点数的输入向量in,采用向量相减指令实现输入向量in与输入向量in的相减运算得到全零向量out;再采用向量比较指令对输入向量in与全零向量out进行比较,由比较结果形成符号向量sign;最后采用标量乘向量指令和标量加向量指令,修正符号向量sign中每个元素的符号使其与输入向量in对应元素的符号相同;

8、步骤4、采用向量相乘指令对符号向量sign与输入向量in进行相乘运算,实现输入向量in的正数化;

9、步骤5、对于输入向量in中的每个元素,根据确定的计算精度及元素所属的浮点数范围在 ky分段估算值表中查找对应的 ky估算值,由所有元素对应的 ky估算值构成浮点数向量vky;

10、步骤6、将输入向量in转换为无符号整数向量in_int,采用位与指令对in_int与标量0x1fffff进行位与计算得到向量mx_int;采用求和指令对mx_int与标量0x3f800000进行求和计算,并用求和计算的结果更新mx_int;将mx_int转换为浮点数向量mx_float,再采用乘法指令对mx_float与标量进行相乘计算得到浮点数向量mx;

11、步骤7、根据步骤5得到的浮点数向量vky及步骤6得到的浮点数向量mx,采用加、减及乘运算指令完成公式的计算得到浮点数向量magic;采用向量强制转换指令将magic等值转换为无符号整数向量magic_int,采用向量减向量指令对in_int与magic_int进行相减计算得到无符号整数向量out_int,再将out_int转换为浮点数向量out_f;最后采用乘法指令对out_f与sign进行相乘计算得到输入向量in的倒数的近似值。

12、进一步地,所述步骤1中所述构建正数浮点数倒数近似值计算公式的方式为:

13、步骤1.1、令正浮点数 x的倒数为 y,则有:,,其中,  ey及 my分别为正浮点数 y的指数部分二进制的整数值和整数部分二进制的整数值; xi和 yi满足,其中, kx为计算参数,,;

14、步骤1.2、采用泰勒公式展开,取 kx的二阶估计,则有: ,由此构建。

15、进一步地,所述步骤2中所述 ky分段估算值表的构建过程为:

16、步骤2.1、整数 ex的取值范围为[0,255],将该取值范围分为 ne段,每段包含256/ ne个数据,将该数据数量记为 le,则第 i段数据的取值为范围为,对应的第 i段数据所能表示的浮点数范围为;

17、步骤2.2、对每段数据从浮点数范围中取 nef个数据进行 ky估算,其中,第 j个浮点数表示为 x ij, x ij的取值为;

18、步骤2.3、设置 ky的初始值后,根据计算精度 ap对每个浮点数 x ij利用反馈迭代计算 ky的取值作为准估算值;

19、步骤2.4、采用计算每段数据的 nef个准估算值 ky ij的平均值 ky i,将 ky i作为对应段数据的 ky的估算值;由计算精度 ap、 ky i及其对应的段数据的浮点数范围构成 ky分段估算值表。

20、进一步地,所述步骤2.3中所述准估算值的计算方式为:

21、步骤2.3.1、计算浮点数 x ij的倒数 y ij;

22、步骤2.3.2、将 x ij对应的 xi ij代入计算得到 yi ij,再将 yi ij的二进制表示转换为浮点数 yf ij;

23、步骤2.3.3、根据公式计算得到结果差异 d ij,若 d ij的绝对值不大于计算精度 ap,则将 ky的当前值作为准估算值 ky ij,执行步骤2.4;否则根据公式更新 ky的取值后执行步骤2.3.2。

24、进一步地,采用牛顿迭代法对浮点数向量out_f及正数化的输入向量in进行处理得到正数浮点数倒数。

25、进一步地,所述采用牛顿迭代法对浮点数向量out_f及正数化的输入向量in进行处理得到正数浮点数倒数的方式为:

26、构建迭代体为:采用乘法指令将正数化的输入向量in与浮点数向量out_f进行相乘运算,再对相乘运算的结果乘以2.0得到中间结果向量tmp,采用tmp与out_f相乘的结果更新out_f;将迭代体执行两次迭代计算得到正数浮点数倒数。

27、进一步地,所述迭代体在昆仑芯xpu中对应的运算过程为:float32x16_t tmp =vvmul_float32x16(in, out_f)、tmp = svsub_float32x16(2.0f, tmp)和out_f = vvmul_float32x16(out_f, tmp)。

28、有益效果

29、本发明通过引入与倒数相关的计算参数 ky构建正数浮点数倒数近似值计算公式,将倒数运算转换为由简单simd指令构成的运算组合;再根据倒数计算的计算精度及正数浮点数的取值范围,采用简单simd指令分段估算计算参数 ky的取值建立 ky分段估算值表,对于输入向量根据计算精度及元素的取值范围从 ky分段估算值表中获取对应的计算参数 ky,再采用简单simd指令计算各元素的整数部分二进制的整数值,最后基于计算参数 ky、元素的整数部分二进制的整数值及元素的二进制表示根据构建的公式计算得到元素的倒数,进而完成输入向量的倒数计算,有效提高了处理器对倒数运算的计算速度,同时降低了对处理器支持复杂指令的要求。

本文地址:https://www.jishuxx.com/zhuanli/20241106/323208.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。