一种共享种子的浮点函数计算方法及处理器与流程

摘要: 本技术涉及浮点处理器、向量运算、人工智能加速器,尤其涉及一种共享种子的浮点函数计算方法及处理器。背景技术:1、倒数(recip)、倒数平方根(rsqrt)以及平...
一种共享种子的浮点函数计算方法及处理器与流程

本技术涉及浮点处理器、向量运算、人工智能加速器,尤其涉及一种共享种子的浮点函数计算方法及处理器。

背景技术:

1、倒数(recip)、倒数平方根(rsqrt)以及平方根(sqrt)是向量浮点处理器、ai加速器的基础特殊函数,大量用于softmax、sigmoid、silu以及rmsnorm、layernorm归一化、统计运算和距离计算场景。在大模型推理场景中,一般不要求输出严格精确舍入的fp32结果,但需要保证fp32输入不被过早截断,维持bf16输出结果的数值稳定性。

2、软件实现依靠除法或数学库完成运算,会占用较多指令与寄存器带宽,运算延迟大。硬件实现方面,若为recip、rsqrt、sqrt分别设置独立运算单元,浮点分类、规格化、指数处理、特殊值判断等电路重复配置,芯片面积、功耗及验证成本较高;查表加多阶多项式逼近的方案,则需要大容量系数存储与多路乘法器,硬件开销较高。

3、newton-raphson迭代、查表生成初始种子属于本领域公知数值方法。现有部分方案公开了bf16平方根、倒数平方根指令语义,但未公开完整的种子-迭代硬件通路,也未实现三类函数共享前端;部分架构需要先输出fp32中间结果,再执行独立指令转换得到bf16,带来寄存器搬移与调度开销。

4、因此,现有技术缺少这样一套硬件架构:能够共享硬件前后端同时支持recip、rsqrt、sqrt三类函数,采用分段种子产生迭代初值,复用处理器固有的fp32融合乘加单元完成迭代修正,末端直接输出bf16结果,消除中间格式转换带来的开销。

技术实现思路

1、为了解决现有技术的缺陷,本技术提供一种共享种子的浮点函数计算方法及处理器,采用一套共享的硬件前后端同时支持recip、rsqrt、sqrt三种特殊函数,依靠分段种子产生初值,复用处理器固有的fp32融合乘加单元完成迭代修正,末端直接输出bf16,消除中间格式转换开销。

2、为实现上述目的,本技术提供一种共享种子的浮点函数计算方法,包括:

3、接收fp32格式的输入数据和用于选择倒数函数、倒数平方根函数或平方根函数的功能请求;对所述输入数据执行共享的浮点分类、尾数规格化和指数处理,其中对次正规输入执行前导零检测、有效数左移和指数补偿,对倒数函数的负输入保存并恢复符号;

4、由共享种子生成路径根据调整后的规格化尾数和所述功能请求产生初始种子,所述共享种子生成路径包括共享的种子生成硬件、分段地址形成接口和种子输出路径;

5、根据所述功能请求调用fp32融合乘加运算资源对所述初始种子执行误差迭代,形成规格化近似结果;

6、基于所述指数信息重构所述规格化近似结果,形成正常函数近似结果;

7、在分类阶段产生对应特殊输入的特殊值候选结果;

8、根据分类标签在所述特殊值候选结果与所述正常函数近似结果之间进行选择;

9、对选择后的结果仅执行一次fp32至bf16的rne就近舍入并输出bf16结果。

10、进一步地,所述倒数函数、倒数平方根函数和平方根函数共享符号、零、无穷、nan、负有限数和次正规数分类、尾数规格化、指数拆分、种子地址形成及末端bf16舍入路径。

11、进一步地,在所述功能请求选择倒数函数时,使用初始种子y0和规格化尾数m计算残差1-m×y0,并根据所述残差形成倒数规格化近似结果y1_recip=y0×(2-m×y0)。

12、进一步地,在所述功能请求选择倒数平方根函数时,先根据x=m×2e得到调整后的规格化尾数m'和e':当e为偶数时,m'=m,e'=e;当e为奇数时, m'=2m, e'=e-1,使e'为偶数;计算t=m'×y0,计算h=1.5-0.5×t×y0,再计算规格化倒数平方根y1_rsqrt=y0×h,并乘2-e'/2恢复结果。

13、进一步地,在所述功能请求选择平方根函数时,复用倒数平方根函数形成的规格化y1_rsqrt,计算s=m'×y1_rsqrt,并乘2e'/2形成平方根近似结果。

14、进一步地,所述共享种子生成路径将调整后的规格化尾数映射到第i个分段的分段变量u∈[0,1),并按照y0=ai+bi×u产生初始种子,其中 (ai,bi)为按函数模式分别寻址的分段参数;所述分段参数由离线拟合或者带偏置拟合生成并固化。

15、进一步地,标准质量模式使用第一参数精度的种子并执行一次迭代后输出bf16,函数控制、质量控制、次正规控制和异常控制彼此独立。

16、进一步地,高精度模式通过至少以下其中一种方式提高内部计算质量:扩展所述分段参数的有效位数,或者追加一次所述误差迭代;高精度模式运算完成后仍在末端输出bf16;质量控制字段用于选择标准质量模式或者高精度模式。

17、更进一步地,令n=vlen/32,接收第一fp32源向量和第二fp32源向量,各源向量包括n个fp32元素并各自产生n个bf16结果;第一fp32源向量的n个bf16结果写入目的向量低vlen/2位,第二fp32源向量的n个bf16结果写入目的向量高vlen/2位;当vlen=128时,第一fp32源向量的4个bf16结果写入目的向量[63:0],第二fp32源向量的4个bf16结果写入目的向量[127:64],拼接得到满vlen位宽的bf16目的向量。

18、为实现上述目的,本技术还提供一种共享种子的浮点函数处理器,包括:

19、共享分类和规格化模块,被配置为接收fp32输入并根据功能请求执行分类、尾数规格化和指数处理,其中所述共享分类和规格化模块包括次正规前导零检测、规格化移位和指数补偿路径;

20、共享种子生成模块,被配置为根据调整后的规格化尾数和功能请求产生初始种子;

21、迭代控制模块,与fp32融合乘加单元连接并被配置为产生倒数、倒数平方根或平方根的规格化近似结果;

22、指数重构模块,被配置为接收所述规格化近似结果和指数信息并形成正常函数近似结果;

23、特殊值候选与选择模块,被配置为在特殊值候选结果与所述正常函数近似结果之间选择;

24、bf16舍入输出模块,被配置为在所述选择之后仅执行一次fp32至bf16的rne就近舍入并输出bf16结果。

25、进一步地,所述共享分类和规格化模块对于x=m×2e在e为偶数时,m'=m,e'=e;在e为奇数时,m'=2m,e'=e1,从而使e'为偶数,并将m'和e'提供给倒数平方根或平方根路径。

26、进一步地,所述共享种子生成模块包括rom或配置寄存器,所述rom或配置寄存器包括按recip和rsqrt模式分别寻址的分段区域,由函数模式和分段索引i共同形成地址,每个分段存储参数(ai,bi),并根据段内变量u计算y0=ai+bi×u。

27、进一步地,所述迭代控制模块被配置为:控制所述fp32融合乘加单元对倒数函数计算残差e0=1-m×y0并计算y1=y0+y0×e0,其中乘法可由fma(a,b,0)执行;对倒数平方根函数计算t=m'×y0、h=1.5-0.5×t×y0和y1=y0×h,其中乘法可由fma(a,b,0)执行;以及对平方根函数计算s=m'×y1并按指数信息重构。

28、更进一步地,所述bf16舍入输出模块支持双源向量模式;在双源向量模式下,接收第一fp32源向量和第二fp32源向量各自产生的n个bf16结果,将第一fp32源向量结果写入满宽bf16目的向量低vlen/2位,将第二fp32源向量结果写入所述目的向量高vlen/2位;处理器配置独立的次正规控制字段与独立的异常控制字段,次正规输入可选择规格化通路或者零化,异常场景可独立选择输出无穷、最大有限数或者nan候选。

29、为实现上述目的,本发明还提供一种电子设备,包括存储器、处理器,以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器采用如上所述共享种子的浮点函数处理器,用于执行所述存储器所存放的计算机程序,以实现如上所述的共享种子的浮点函数计算方法。

30、为实现上述目的,本发明还提供一种计算机可读存储介质,所述存储介质中存储有计算机程序,所述计算机程序由处理器加载并执行,以实现如上所述的共享种子的浮点函数计算方法。

31、相较于现有技术,本技术具有如下有益效果:本技术将recip、rsqrt、sqrt三类函数的浮点分类、规格化、特殊值处理、种子寻址、末端舍入通路进行硬件共享,无需为三类函数分别配置全套前端电路;平方根运算复用倒数平方根的迭代中间结果,不需要独立的种子生成与迭代通路;迭代运算复用处理器原生fp32融合乘加单元,无需增设专用乘法阵列;仅在通路末端执行一次fp32-to-bf16舍入,消除中间格式转换、寄存器回写开销;向量模式下支持双源向量并行运算,充分利用向量寄存器带宽,降低读写功耗。

32、本技术的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本技术而了解。