CN113692561A - 用于使用逐次累积旋转电路计算初等函数的装置和方法 - Google Patents

用于使用逐次累积旋转电路计算初等函数的装置和方法 Download PDF

Info

Publication number
CN113692561A
CN113692561A CN202080028532.XA CN202080028532A CN113692561A CN 113692561 A CN113692561 A CN 113692561A CN 202080028532 A CN202080028532 A CN 202080028532A CN 113692561 A CN113692561 A CN 113692561A
Authority
CN
China
Prior art keywords
input value
function
circuit
elementary function
elementary
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202080028532.XA
Other languages
English (en)
Inventor
玛雅·穆吉尔
P·鲍拉佐拉
M·森蒂维兰
V·莱姆杜雷
S·阿格拉沃尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Optimum Semiconductor Technologies Inc
Original Assignee
Optimum Semiconductor Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Optimum Semiconductor Technologies Inc filed Critical Optimum Semiconductor Technologies Inc
Publication of CN113692561A publication Critical patent/CN113692561A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/17Function evaluation by approximation methods, e.g. inter- or extrapolation, smoothing, least mean square method
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5446Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation using crossaddition algorithms, e.g. CORDIC
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/548Trigonometric functions; Co-ordinate transformations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/552Powers or roots, e.g. Pythagorean sums
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/556Logarithmic or exponential functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Abstract

一种系统和加速器电路,包括寄存器文件,该寄存器文件包括用于存储用于评估初等函数的指令的指令寄存器,以及包括用于存储输入值的第一数据寄存器的数据寄存器。加速器电路还包括逐次累积旋转电路和确定电路,逐次累积旋转电路包括执行逐次累积旋转递推的可重新配置的内部级,确定电路基于指令确定初等函数的类型,并响应于确定输入值为定点数,将可重新配置的内部级配置为用于评估该类型的初等函数的配置,其中逐次累积旋转电路使用执行逐次累积旋转递推的可重新配置的内部级来计算初等函数的评估。

Description

用于使用逐次累积旋转电路计算初等函数的装置和方法
相关申请的交叉引用
本申请要求于2019年2月20日提交的美国临时申请62/807,852的优先权,其内容通过引用整体并入。
技术领域
本公开涉及用于实现特定初等函数的电路和方法,尤其涉及用于使用逐次累积旋转电路计算非三角初等函数的电路和方法。
背景技术
诸如图形处理单元(GPU)的加速器电路可以包括被配置为执行数值函数的计算的电路。数值函数可以根据由数值函数定义的某些数学关系将一个或多个输入值转换为一个或多个输出值。数值函数的示例可以包括被广泛用于诸如图像处理和机器学习之类的实际应用中的初等函数。
用于执行数值函数的计算的运算符的类型确定实现这些数值函数的电路的复杂性以及执行这些计算所需的时间。众所周知,与移位运算符或加法运算符的电路实现相比,乘法运算符的电路实现要复杂得多。因此,具有小尺寸集成电路(例如,小尺寸现场可编程门阵列(FPGA)电路)的电路通常不支持乘法运算符的直接计算。
附图说明
从下面给出的详细描述以及从本公开的各种实施方式的附图,将更全面地理解本公开。然而,不应认为附图将本公开内容限制于具体实施方式,而是仅用于解释和理解。
图1示出了根据本公开的实施方式的用于执行初等函数的计算的系统。
图2示出了根据本公开的实施方式的用于确定和配置初等计算电路的流程图。
图3示出了根据本公开的实施方式的逐次近似电路的内部级,其包括要被组合成单个块的每个操作的循环。
图4示出了根据本公开的实施方式的用于自适应地评估初等函数的方法的流程图。
具体实施方式
本公开的实施方式采用逐次累积旋转算法来执行初等函数的计算。逐次累积旋转算法使用累积和旋转而不是乘法来执行计算,从而显著降低了实现这些数值函数的硬件电路的复杂性。此外,逐次累积旋转算法的实施方式可以利用坐标旋转数字计算机(CORDIC)硬件架构来计算三角函数,从而获得实现三角函数和初等函数的单个硬件电路块。为三角函数设计的CORDIC硬件架构用于计算初等函数的重复使用可以节省电路面积并降低系统功耗。本公开中描述的逐次累积旋转算法用于计算定点输入值和浮点输入值的某些初等函数。逐次累积旋转算法采用旋转操作的一系列迭代步骤来近似关于一个或多个输入值的初等函数。本公开中的初等函数是指双曲函数
Figure BDA0003301325310000021
幂函数和对数函数(Ax,log(x))、倒数函数、平方根和平方根反函数等。这些初等函数是非三角函数。因为逐次累积旋转算法的每个迭代步骤都涉及旋转计算而不调用乘法计算,所以支持实现的电路可以简单得多,并且可以以在FPGA电路板上实现的小电路占用空间(即小电路面积)实现。
在计算初等函数时,输入值(例如实数)可以表示为定点数或浮点数。实数的定点数表示包括用于表示实数的整数部分的第一固定位数和用于表示实数的小数部分的第二固定位数。n位(二进制)点数可以被认为是n位整数除以比例因子2m。这相当于将数字视为在位m和m-1之间有一个小数点。下图假设一个8位数字,比例因子为25,因此小数点位于第5位和第4位之间。
7 6 5·4 3 2 1 0
在这种情况下,位模式0101_1001被解释为实数
Figure BDA0003301325310000022
定点数通常以与整数处理有符号数相同的方式表示负数,使用2的补码表示,而不是显式的符号位。
实数的浮点数表示包括符号位、表示有效数字(或有效数)的固定位数以及用于缩放有效数的指数。例如,在IEEE浮点数表示中,实数表示为±1.m*2exp,其中尾数1.m是范围(1.0…2.0]中的一个数,其中小数m为固定位数,其中位数取决于实现。指数exp是一个范围内的整数,该范围也取决于实现。符号位用于指示符号(+或–)。在IEEE单精度浮点的情况下,23位用于小数部分,m。指数exp的范围是127到-126。IEEE浮点数表示还包括特殊情况的表示,例如非规格化数和无穷大。
CORDIC算法在计算三角函数时使用旋转而不是乘法,允许三角函数计算的有效硬件实现。以计算正弦(即sin())和余弦(即cos())函数为例,CORDIC算法是通过重复应用恒等式来计算三角函数sinx和cosx。对于三角函数,
sin(x+y)=cos(y)[sin(x)+tan(y)cos(x)]
cos(x+y)=cos(y)[cos(x)-tan(y)sin(x)]
选择x=θi=tan-1(2-i),上面的方程可以写成
sin(θi+y)=cos(θi)[sin(y)+cos(y)/2i]
cos(θi+y)=cos(θi)[cos(y)-sin(y)/2i]
其中除以2i可以在硬件中实现(对于定点表示)为右移i次。
给定的输入角α在第一象限中可以近似为
Figure BDA0003301325310000031
其中δi=±1。近似的精度由项数n确定。给定α,三角函数值sinαn和cosαn可以使用以下递推计算:
sin(δiθii-1θi-1+…+θ0)=cos(θi)[sin(δi-1θi-1+…+θ0)+δicos(δi-1θi-1+…+θ0)/2i]
cos(δiθii-1θi-1+…+θ0)=cos(θi)[cos(δi-1θi-1+…+θ0)-δisin(δi-1θi-1+…+θ0)/2i]
请注意,该序列的计算包括在每一步乘以cos(θi)。这可以通过认识到这些乘法可以被分解从而有一个乘积
Figure BDA0003301325310000032
来避免。为了利用这一事实,可以重写递推,以便:
Figure BDA0003301325310000033
Figure BDA0003301325310000034
Xi=Xi-1iYi-1/2i
Yi=Yi-1iXi-1/2i
sinαn和cosαn可以通过在末尾乘以Kn来恢复,从而
sin(αi)=KiXi
cos(αi)=KiYi
如果可以基于对α的近似的精度预先确定n,则与Kn的最终乘法可以通过与Kn的预乘来避免。这相当于用Kn初始化X0和Y0。所以,
Figure BDA0003301325310000041
Figure BDA0003301325310000042
sin(αn)=Xn
cos(αn)=Yn
给定用于计算sin(α)或cos(α)的角度α,CORDIC算法包括在每个步骤i计算δi,以便最终的αn可以最好地近似α。标准方法是基于当前的近似值αi是否小于α来选择+或-。
如所示,用于计算sin和/或cos函数的CORDIC算法涉及移位运算符(>>)和加法/减法运算符(+/–),但没有乘法运算符。因此,CORDIC算法可以在诸如FPGA电路之类的小尺寸电路中实现。
一些实施方式可以使用双旋转2θi而不是单旋转θi。在双旋转中,每一步增加±2θi,而不是增加±θi
sin(x+2θi)=cos2i)[sin(x)+δi2tan(θi)cos(x)-tan2i)sin(x)]
cos(x+2θi)=cos2i)[cos(x)-δi2tan(θi)sin(x)-tan2i)cos(x)]
展开tan(θi)提供
sin(x+2θi)=cos2i)[sin(x)+δicos(x)/2i-1-sin(x)/22i]
cos(x+2θi)=cos2i)[cos(x)-δisin(x)/2i-1-cos(x)/22i]
双旋转的递推关系为:
Xi=Xi-1iYi-1/2i-1-Xi-1/22i
Yi=Yi-1iXi-1/2i-1-Yi-1/22i
在这种情况下,
Figure BDA0003301325310000043
Figure BDA0003301325310000044
使用双旋转的cos(θi)可以计算如下:
Figure BDA0003301325310000045
1/cos2i)=1+2-2i
对于使用CORDIC计算sin-1(v),算法可以选择一系列的δi来构建αn,使得sin(αn)接近v。算法是基于sin(αi)是否小于v来为δi+1选择+或-。为了计算Xi和Yi而不是sinαi和cosαi,可能需要修改此方法以评估:
sin(αi)<v≡KiXi<v≡Xi<v/Ki
现在,让vi=v/Ki。在这种情况下,可以使用双旋转CORDIC的以下递推
vi=v/Ki=vi-1/cos2i)=vi-1(1/cos2i))
请注意,对于单旋转CORDIC,1/cos2i)项将替换为1/cos(θi),这需要乘法才能实现。在双旋转CORDIC中,vi的递推可以简化为
vi=vi-1(1+2-2i)
其可以使用移位和加法来实现。
相应地,可以使用以下关系从反正弦计算输入的反余弦:
cos-1x=π/2-sin-1x
除了三角函数之外,实际应用还可以在计算中调用非三角初等函数。本公开通过利用用于计算三角函数的CORDIC递推的硬件实现来提供用于这些初等函数的自适应计算的系统和方法的各种实施方式,从而实现初等函数的硬件高效计算。为此,实施方式可以首先构造用于双曲函数的CORDIC递推,并使用用于双曲函数的CORDIC递推为其他初等函数提供自适应计算。
用于双曲函数的逐次累积旋转递推
逐次累积旋转递推可用于评估初等函数。本公开中的双曲函数可以表示为
Figure BDA0003301325310000051
Figure BDA0003301325310000052
其中A是实数。如果A是欧拉数e,则相应的函数是双曲正弦函数(sinh())和双曲余弦函数(cosh())。那么双曲函数之间的关系如下:
Figure BDA0003301325310000053
Figure BDA0003301325310000054
引入一个辅助函数:
Figure BDA0003301325310000055
请注意,该辅助函数的反函数是
Figure BDA0003301325310000056
对于-1≤x<1范围内的x,x的值可以近似为
Figure BDA0003301325310000057
其中T(θi)=2-i,从i=1开始。可能无法近似x的所有值,因为所写的级数可能不收敛
Figure BDA0003301325310000061
本公开的实施方式可以包括对算法的修改以满足收敛约束。修改可以包括近似级数中某些项的重复。要重复的项可能取决于基值A;对于A=e,索引k,3k+1,...,从k=4开始(即,4,13,40...)将被重复,导致xn的收敛估计。因此,当A=e时,
x6=δ112233444455
使用i表示项的索引,使用i'表示该项中用于θi的实际索引值,递推关系和转换函数可以用类似于三角函数的方式推导出来。对于双旋转,递推关系和转换函数为:
Figure BDA0003301325310000062
χ0=0
Figure BDA0003301325310000063
χi=χi-1iyi-1/2i′-1+xi-1/22i′
yi=yi-1ixi-1/2i′-1+yi-1/22i′
Figure BDA0003301325310000064
Figure BDA0003301325310000065
对于单旋转:
Figure BDA0003301325310000066
x0=0
Figure BDA0003301325310000067
Figure BDA0003301325310000068
Figure BDA0003301325310000069
Figure BDA00033013253100000610
Figure BDA00033013253100000611
逐次累积旋转递推类似于使用CORDIC递推计算三角函数的那些递推。因此,用于计算三角函数的CORDIC递推的内部级可以重新用于计算双曲函数。
幂函数
幂函数可以表示为
Figure BDA0003301325310000071
因此,给定来自前一节的递推,
Figure BDA0003301325310000072
使
Figure BDA0003301325310000073
Figure BDA0003301325310000074
Figure BDA0003301325310000075
通过这种方式,可以使用逐次累积旋转递推来评估幂函数。在一种特定情况下,要评估的幂函数是2x。在浮点数表示中计算2x可以如下实现。设|x|=w+f,其中w是浮点数的整数部分,f是浮点数的小数部分。对于正值x,2x=2w*2f和2f=1+m,0≤m<1。这可以转换为浮点数表示,其中w成为指数,而m成为小数。对于负值x,2x=2-w*2-f且0.5<2f≤1。这可以通过使用-(w+1)作为指数并通过将结果加倍将2f转换为1+m格式来转换为浮点数。可替代地,对于非零f,负值x可以表示为2x=2-(w+1)*2(1-f)。由于21-f=1+m,0≤m<1,这允许将结果转换为浮点数表示,其中-(w+1)代表指数部分,m代表小数部分。
用于针对范围(-1,1)中的x实现pow2(a)函数的逐次累积旋转递推的代码是:
Figure BDA0003301325310000076
该代码中的Kn和theta[]指的是为Power/Log导出的值。M[]用于将迭代i映射到i’;在针对基数2的该代码中,索引7被重复。
小数部分可能非常小,特别是当原始数是一个小的数时(即w=0)。在一个实施方式中,对于小的输入值,使用不同的近似值来评估2x,例如,基于2x的泰勒展开式的第一项
Figure BDA0003301325310000081
因此,对于小的x,2x可以近似为1+x*loge(2)。由于使用了近似值,可以进一步简化2x的计算。
对数函数
当一个数以浮点数表示x=(1+m)*2exp,0≤m<1表示时,则log2(x)=exp+log2(1+m)。用于针对在1≤v<2范围内的v评估log2(v)的逐次累积旋转递推可以通过搜索δi的序列以使得Pn收敛于期望的v来基于上面介绍的pow2()代码。在2x的情况下伴随的和
Figure BDA0003301325310000082
是期望的近似值。
递推
Figure BDA0003301325310000083
需要评估
Figure BDA0003301325310000084
Figure BDA0003301325310000085
Figure BDA0003301325310000086
因此,递推简化为
vi=vi-1(1-2-2i)
log2()的逐次累积旋转递推的代码为:
Figure BDA0003301325310000087
Figure BDA0003301325310000091
当小数部分m是小的值时,代替使用逐次累积旋转递推,log(x)可以近似如下:
Figure BDA0003301325310000096
因此,对于小的值m,log(m)的评估返回m*log2(e)。
倒数函数
可以使用如下所述的逐次累积旋转递推来评估倒数函数。log2(v)的计算包括确定满足
Figure BDA0003301325310000092
的一系列δi。相应的倒数函数
Figure BDA0003301325310000097
可以使用相同的递推但针对-δi并行计算。因此,在针对
Figure BDA0003301325310000098
评估该递推时:
Figure BDA0003301325310000093
并同时针对倒数函数
Figure BDA0003301325310000099
评估:
Figure BDA0003301325310000094
倒数的逐次累积旋转递推的代码为:
Figure BDA0003301325310000095
Figure BDA0003301325310000101
通过仅考虑尾数将v限制在1和2之间,结果的指数是输入的指数的负数。
如果v=(1+m)*2exp,0≤m<1并且m很小,则倒数函数可以针对小的输入值通过类似于2x的近似值来评估:
Figure BDA0003301325310000102
平方根和平方根反函数
使用双旋转计算log2(v),一系列δi满足
Figure BDA0003301325310000103
实施方式也可以通过使用具有相同δi的单旋转来同时计算
Figure BDA0003301325310000106
或者通过使用具有-δi的单旋转来计算
Figure BDA0003301325310000107
它们分别对应于v的平方根和反平方根。
当使用单旋转来计算2x时,使用的逐次累积旋转递推是:
Figure BDA0003301325310000104
用于计算平方根函数的逐次累积旋转递推的代码为:
Figure BDA0003301325310000105
Figure BDA0003301325310000111
可以使用相反的旋转以类似的方式计算平方根反函数:
Figure BDA0003301325310000112
在这些情况下,指数是输入的指数的一半(在平方根倒数的情况下为负)。如果指数是奇数,尾数(v)被视为在0.5≤v<1的范围内,否则被视为在1≤v<2的范围内。在平方根的情况下,对于奇数指数,指数在减半之前增加,以考虑对尾数范围的调整。
如果v=(1+m)*2exp,0≤m<1并且m很小,则可以采用使用泰勒展开式的第一项的近似值:
Figure BDA0003301325310000121
请注意,这适用于指数为偶数的情况。如果指数是奇数,则v在[0.5,1]范围内处理。对于奇数指数,v被建模为v=(1-m′)*2exp+1,0≤m′<1。对于小的m',可以采用使用泰勒展开式的第一项的近似值:
Figure BDA0003301325310000122
以上部分包括对定点逐次累积旋转的描述。在定点实施方式中,小数点后有固定位数,限制了可用精度的位数。如果小数点后有N位,则可表示的数字的粒度为2-N。这通常意味着xN+1可以是数字的精确表示,从而对上述初等函数进行非常好的数值评估。因此,只需要评估少量(N)的递推步骤,其取决于用于精度的位数。
然而,与定点数表示相比,浮点数表示包括一个非常小的指数,例如对于非规格化IEEE单精度浮点数为2-126或对于双精度浮点数为2-1022。可以表示的最小粒度非常小,如果使用定点逐次累积旋转来评估具有浮点输入值的初等函数,则需要评估大量的递推步骤。另一方面,如果只用少量的位来表示小浮点数,虽然绝对误差可能很小,但相对误差可能很大。例如,如果使用31位(基数为2-31)来表示2-55基数级别的浮点数,则相对误差可能高达224,这可能意味着评估的初等函数的尾数中的所有位是不正确的。因此,当输入值非常小时,将定点逐次累积旋转算法直接应用于浮点数表示不是硬件高效的或准确的。
代替将定点逐次累积旋转直接应用于浮点数表示,本公开的实施方式首先确定浮点输入值是否小。响应于确定浮点输入值不小,实施方式可以使用逐次累积旋转算法来计算初等函数。响应于确定浮点输入值很小,实施方式可以采用近似方法来计算初等函数。因此,可以以自适应方式评估初等函数的值。本公开的一个实施方式可以使用泰勒级数展开式的第一项作为具有小浮点输入的初等函数的近似值。在上面讨论了初等函数的泰勒展开式的第一项。在一个实施方式中,代替仅泰勒级数的第一项,小输入值α的近似值还可以包括泰勒级数的第二项(或更多项)。由于输入值是一个小浮点数,高阶项(二阶或以上)的乘法结果可以用更少的位(例如8位)来表示,而小浮点输入值的乘法电路可以是低位(例如,4或5位)乘法电路,与标准的16位或32位乘法电路相比,该电路的实现成本更低。
图1示出了根据本公开的实施方式的用于执行初等函数的计算的系统100。如图1所示,系统100可以包括硬件处理器102和协处理器104。处理器102可以是中央处理单元(CPU)、图形处理单元(GPU)或任何合适类型的处理装置。处理器102可以包括指令执行流水线(未示出)、寄存器文件(未示出)和实现根据指令集架构(ISA)106指定的指令的电路。指令可以包括用于计算定点和/或浮点初等函数的指令。在一个实施方式中,处理器102可以使用执行流水线来执行应用108。该应用可以包括被设计为解决诸如医学成像问题或机器学习问题的实际问题的程序的可执行代码。应用208在执行时可以包括对初等函数110的调用。
在一个实施方式中,系统100可以提供具有指定电路的协处理器(或加速器电路)104以支持初等函数110的计算。协处理器104可以是处理器102的一部分或通信连接到处理器102的单独逻辑电路。例如,协处理器104可以是在FPGA板上实现的加速器电路,以加速初等函数的计算。协处理器104可以包括寄存器文件118、确定电路112、近似电路114和可重新配置的逐次累积旋转递推电路116。
寄存器文件118可以包括指令寄存器120和数据寄存器122。指令寄存器120可以从执行初等函数110的处理器102的执行流水线接收指令并将指令存储在其中。在一个实施方式中,指令可以包括用于评估关于输入值的初等函数的计算指令。数据寄存器122可以存储与相应的初等函数计算指令相关联的输入值和输出值。在一个实施方式中,数据寄存器222可以包括可以相应地存储定点和浮点输入值以及浮点输出值的定点数据寄存器和浮点数据寄存器。处理器102的执行流水线可以将与初等函数计算相关联的输入值存储在数据寄存器122中,并从数据寄存器122中检索执行初等函数计算的结果。
确定电路212可以识别来自指令寄存器220的用于计算初等函数的指令以及与来自数据寄存器222的指令相关联的相应输入值。响应于识别包括输入值的指令,确定电路212可以解析指令和输入值,并进一步判断输入值是小值还是在小值范围内。如上所述,确定电路212可以基于一个或多个因素来确定输入值是否为小值,这些因素包括但不限于估计的绝对误差、估计的相对误差、初等函数的类型、浮点数表示的类型以及硬件约束。确定电路212可包括可基于输入值是否为小值的确定来路由输入值的开关电路(例如,多路复用器)。
确定电路112可以识别存储在指令寄存器120中的指令,并且进一步基于该指令确定要评估哪个初等函数。初等函数可以包括如上所述的幂函数、对数函数、倒数函数、平方根函数和平方根反函数。确定电路112还可接收与来自数据寄存器122的指令相关联的相应输入值并确定适当的电路块和配置以评估初等函数。
图2示出了根据本公开的实施方式的用于确定和配置初等计算电路的流程图200。如图2所示,在202,确定电路112可以接收输入值并且确定输入值是浮点值还是定点值。该确定可以基于可以指示输入值的类型的指令的标识。响应于确定输入值是定点数,在206,确定电路112可以将逐次累积旋转递推电路116(如图1所示)重新配置为可以评估由接收到的指令指定的初等函数的电路配置。在208,可重新配置的逐次累积旋转递推电路116可以使用关于定点输入值的逐次累积旋转递推来执行计算以获得初等函数的评估。
响应于确定输入值是浮点数,在204,确定电路112可以进一步确定输入值是否是小值。确定电路212可以基于一个或多个因素来确定输入值是否是小值,这些因素包括但不限于估计的绝对误差、估计的相对误差、初等函数的类型、浮点数表示的类型以及硬件约束。
响应于确定输入值是小值,在210,确定电路112可以将输入值路由到近似电路114以用于评估初等函数的近似值。在一个实施方式中,评估函数的近似值是评估函数的泰勒展开式的第一项,如上文结合不同的初等函数所讨论的。以此方式,确定电路112可以确定最合适的方式来计算在从处理器102接收的指令中识别的初等函数。
参考图1,可重新配置的逐次累积旋转递推电路116可以包括逐次累积旋转递推的内部级,其可以被重新配置为执行不同初等函数的递推,包括幂函数、对数函数、倒数函数、平方根函数和平方根反函数。每个操作的逐次累积旋转递推的内部级可以组合成单个块。图3示出了根据本公开的实施方式的逐次累积旋转电路的内部级300,其包括要被组合成单个块的每个操作的循环。根据正在计算的初等函数或三角函数,可以激活块的不同部分。
如图3所示,内部级300可以包括多路复用器302A、302B、双右移位器304A-304C、单右移位器306A-306C、比较器308、减法/加法电路310A-310C和加法/减法电路312A-312D的逻辑电路。内部级300可以为步骤i执行一次逐次累积旋转递推。到内部级300的输入可以包括ai、V、Y(或P)、X(或Q)和q,其中Y或P、X或Q的选择取决于如上所述要评估的函数。第一级还可以包括常数值A(基数)和0。在每次递推交互之后,内部级300可以生成包括ai、V、Y(或P)、X(或Q)和q的输出,这些输出可以用作下一级i+1的输入。
内部级300的某些组件可以被重新配置以实现不同的初等函数和/或三角函数。特别地,除了用于arctan函数之外,比较器308被配置为大于比较器(“>”)。在arctan函数情况下,比较器308被配置为小于或等于比较器(“≤”)。加法/减法电路312B被配置为评估三角函数,但被配置为用于评估幂函数和对数函数的减法/加法电路。减法/加法电路310A、310B被配置为评估三角函数,但被配置为用于评估幂函数和对数函数的加法/减法电路。多路复用器302A、302B可以为三角/双曲函数选择ai/A,为幂/对数函数选择Y/V。用于移位器304A、304C、306A的索引值i对于三角函数是顺序的,但包括如上文针对幂函数和对数函数所述的重复项。
使用内部级300来实现sincos(A)函数的示例。sincos(A)的内部级是:
Figure BDA0003301325310000151
内循环可以将ai、X、Y接收到内循环中并使用内循环中的常数2*theta和A计算ai、X、Y的新值。如图3所示的内部级300可以被配置为实现sincos(A)的该内循环。ai、X、Y和A和2*theta[i]一样在顶部输入。V和q被多路复用器302A、302B忽略。多路复用器302A用于选择ai,而多路复用器302B被配置为选择A。比较器308被设置为<,因此它实现ai<A。然后多路复用器用于动态控制ai、Y和X的加法/减法块。此外,逻辑块310A、310B被配置为减法。
通过展开,该内部级相当于
Figure BDA0003301325310000161
其由内部级300实现。可以使用内部级300类似地实现其他初等函数和/或三角函数。
另一个实施方式可以包括用于N个逐次累积旋转级中的每一个的不同硬件块。在又一个实施方式中,逐次累积旋转可以通过使用一个块N次来实现。在这种情况下,必须为每次迭代选择不同的移位值和2θ值。可以使用复杂的移位器,例如桶形移位器,因为~N个移位值是可能的。根据正在计算的函数,可以激活块的不同部分。
图4示出了根据本公开的实施方式的用于自适应地评估初等函数的方法400的流程图。参考图4,方法400可以在诸如如图1所示的硬件处理器102或加速器电路104(统称为处理逻辑)的处理装置上实现。在402,处理逻辑可以识别初等函数和初等函数的输入值。处理逻辑可以通过由处理逻辑执行的指令来识别初等函数和输入值。输入值可以用定点数表示或浮点数表示来表示。
在404,处理逻辑可以确定输入值是定点值还是浮点值。处理逻辑可以基于在如图1所示的指令集架构(ISA)106中定义的指令的标识符来做出确定。
响应于确定输入值是以定点数表示的,在406处,处理逻辑可以将逐次累积旋转内部级(例如,如图3中所描述和所示)重新配置为与所识别的初等函数相对应的电路配置,并进一步使用由重新配置的逐次累积旋转内部级电路支持的逐次累积旋转递推来执行对初等函数的评估。
响应于确定输入值是使用浮点数表示,在408,处理逻辑可以进一步确定输入值是否是小值并且基于该确定来评估初等函数。确定输入值是否小可以基于一个或多个因素,包括但不限于估计的绝对误差、估计的相对误差、初等函数的类型、浮点数表示的类型或硬件约束。在一个实施方式中,浮点输入值是否小的确定可以基于估计的绝对误差。例如,估计的绝对误差的目标界限可以由位数(N)表示(例如,2-N)。因此,小于估计的绝对误差的目标界限(例如,2-N)的浮点输入值被确定为小;在范围内或大于目标界限的浮点输入值被确定为不小。
类似地,在另一实施方式中,确定浮点输入值是否小可以基于估计的相对误差。例如,估计的相对误差的目标界限。CORDIC的当前实施方式是定点算法。n步CORDIC算法可以具有k2-n的残差。然而,对于浮点数表示,残差在一个由指数大小确定的范围内。在单精度数的情况下,指数可以小到2-149。仅使用CORDIC方法覆盖此范围将需要大约149个步骤。使用泰勒展开式的第一项作为小输入值的近似值可以降低计算的复杂度。
如上所述,代替执行逐次累积旋转算法,泰勒展开式的第一项(或可选地,第二或更高项)可以用作小输入值的初等函数的近似值。使用泰勒展开式的第一项近似初等函数的残差取决于函数本身。例如,幂函数、对数函数、倒数函数、平方根函数和平方根函数的反函数的残差项是x2的阶数,其中x是输入值。残差的这些界限可用于确定绝对误差或相对误差的界限,从而确定输入值是否小。因此,可以基于初等函数的类型来确定输入值是否小的阈值。
对于小的输入值,如果最后2k+1位的误差是可以接受的,使用更有利,那么对于单精度,小值和非小值之间的截止值可以设置在2-11+k。这将使误差保持在期望范围内。那么,逐次累积旋转算法只需要34-3k个步骤,所生成的最小结果是2-11+k,需要精确的最小位位置在24-2k。因此,5最低有效位(LSB)误差是可以接受的,截止值可以设置在2-9,而逐次累积旋转算法最多需要25个步骤。
响应于确定输入值不是小值,在406,处理逻辑可将输入值转换为定点数表示,并将逐次累积旋转内部级(例如,如图3所描述和所示)重新配置为与所识别的初等函数相对应的电路配置,并且进一步使用由重新配置的逐次累积旋转内部级电路支持的逐次累积旋转递推来执行对初等函数的评估。
响应于确定输入值是小值,在410,处理逻辑可以计算关于小输入值的初等函数的近似值。在一个实施方式中,具有小的浮点输入值的初等函数的近似值是泰勒展开式的第一项。通过将逐次累积旋转递推的次数减少到合理的数量,使用近似可以进一步简化初等函数的计算。
在412,处理逻辑可以生成用于评估初等函数的结果。对于浮点输入值,处理逻辑可以将由逐次累积旋转内部级300生成的定点结果转换回相应的浮点数表示。处理逻辑可以将评估结果存储在如图1所示的数据寄存器122中。
标准IEEE浮点表示包括特殊值的表示,例如+/-无穷大、信令和安静NaN以及非规格化数。此外,IEEE浮点表示可以识别某些异常,特别是INVALID、OVERFLOW、UNDERFLOW、DIVIDE-BY-ZERO和INEXACT。下表总结了针对操作推荐的动作。
表1
Figure BDA0003301325310000181
Figure BDA0003301325310000191
考虑到如表1所示的特殊输入值,当计算初等函数之一时,该方法和系统可以包括:
·确定输入值是表1中指定的特殊情况,并应用相应的规则来计算结果,包括可能产生异常;
·确定输入落入使用近似算法的范围内,使用近似来计算结果;
·否则使用逐次累积旋转算法。
使用逐次累积旋转算法计算初等函数包括以下步骤:
·标准化输入以提取用作逐次累积旋转算法的输入的数字,特别地,对于sin/cos函数,提取输入数字的整数和小数部分;
·执行逐次累积旋转算法的N个阶段以获得近似值,其中N是基于表示小数部分的位数确定的;
·生成用于初等函数的评估结果。
在本公开的一个实施方式中,初等函数的浮点输入值可以是IEEE单精度、双精度、四倍精度或八倍精度浮点数。对于单精度实施方式,定点数表示为61位数字,在(隐式)小数点后有α59位。
对于该实施方式,Pow2(基数2幂)函数的计算可以包括以下操作:
·响应于确定输入值是+无穷大输入值,将输出设置为+无穷大;
·响应于确定输入值为-无穷大输入值,将输出设置为0.0;
·响应于确定输入值为0.0,将输出设置为1.0;
·将输入v拆分为整数w和小数f;
·如果w≥128(单精度无法表示2v),则将输出设置为+无穷大;
·如果w≤-150(2v不能用单精度表示),则将输出设置为-无穷大;
ο如果w<-126,结果是非规格化数
·如果f<2-9,使用小值近似,其中结果的小数部分为ln(2)*f;
·否则,将f转换为定点数并运行适当的逐次累积旋转变体,以获得评估结果的小数部分;
·使用结果的小数部分转换为浮点值以针对结果的指数定义尾数和w。对于Log2函数:
·响应于确定输入值为+无穷大,将输出设置为+无穷大;
·响应于确定输入值为0.0,将输出设置为-无穷大;
·响应于确定输入值为负值(超出范围),将输出设置为NaN;
·响应于确定输入值为1.0,将输出设置为0.0;
·让v=1.m*2exp,其中
ο这是非规格化浮点数的自然格式
ο非规格化数可以标准化为该格式
οm是23位单精度
·如果m<216,则使用小值近似值m/ln(2)计算r=log2(1+m)
·否则将1.m转换为定点数并使用适当的逐次累积旋转算法来计算r=log2(1+m)。
·如果exp为非零,则缩放并将r添加到exp以获得结果;否则r是结果
·将结果转换回浮点。
对于倒数函数:
·响应于确定输入值为无穷大,相应地将输出设置为±0.0;
·响应确定输入值为±0.0,将相应的输出设置为±无穷大;
·如果输入|v|<2-127(则结果不可表示),则将输出设置为±无穷大;
·让v=1.m*2exp
·如果m=0,则将输出设置为2-exp
·否则,将1.m转换为定点表示并运行适当的逐次累积旋转变体;
·将输出转换为浮点表示并减去exp。
对于平方根函数:
·响应于确定输入值为±无穷大,将输出设置为±无穷大;
·响应于确定输入值为±0.0,将输出设置为0;
·响应于确定输入值为负输入值(其超出范围),将输出设置为NaN;
·对于偶数exp让v=1.m*2exp而对于奇数exp让v=0.1m*2exp+1,同时对于偶数和奇数情况让f=1.m/0.1m;
·对于偶数exp中的m<210,使用小值近似值(1+(m>>1));
·否则将小数部分转换为定点表示并运行适当的逐次累积旋转算法;
·将小数部分转换为浮点数并将指数设置为[exp/2]。
对于平方根反函数:
·响应于确定输入值为+无穷大,将输出设置为0.0;
·响应于确定输入值为±0.0,将输出设置为+无穷大;
·响应于确定输入值为负值(超出范围),将输出设置为NaN;
·对于偶数exp让v=1.m*2exp而对于奇数exp让v=0.1m*2exp+1,同时对于偶数和奇数情况让f=1.m/0.1m;
·对于偶数exp中的m<210,使用小值近似值(1-(m>>1));
·否则将小数部分转换为定点表示并运行适当的逐次累积旋转算法;
·将小数部分转换为浮点数并将指数设置为-[exp/2]。
虽然已经关于有限数量的实施方式描述了本公开,但是本领域技术人员将理解从中的许多修改和变化。所附权利要求旨在涵盖落入本公开的真实精神和范围内的所有此类修改和变化。
设计可以经历从创建到模拟再到制造的各个阶段。表示设计的数据可以多种方式表示设计。首先,由于在模拟中很有用,可以使用硬件描述语言或其他功能描述语言来表示硬件。此外,可以在设计过程的某些阶段产生具有逻辑和/或晶体管门的电路级模型。此外,大多数设计在某个阶段达到了表示硬件模型中各种装置的物理布局的数据级别。在使用传统半导体制造技术的情况下,表示硬件模型的数据可以是指定用于生产集成电路的掩模的不同掩模层上各种特征的存在或不存在的数据。在设计的任何表示中,数据可以存储在任何形式的机器可读介质中。存储器或诸如盘的磁或光存储装置可以是机器可读介质,用于存储经由调制或以其他方式生成以传输此类信息的光或电波传输的信息。当传输指示或承载代码或设计的电载波时,在执行电信号的复制、缓冲或重新传输的范围内,进行新的复制。因此,通信提供商或网络提供商可以在有形的、机器可读的介质上至少暂时地存储体现本公开的实施方式的技术的物品,例如编码到载波中的信息。
如本文所使用的模块是指硬件、软件和/或固件的任何组合。作为示例,模块包括硬件,例如微控制器,与非暂时性介质相关联以存储适于由微控制器执行的代码。因此,在一个实施方式中,对模块的引用是指硬件,其具体配置为识别和/或执行要保存在非暂时性介质上的代码。此外,在另一实施方式中,模块的使用是指包括代码的非暂时性介质,其具体适用于由微控制器执行以执行预定操作。并且可以推断,在又一实施方式中,术语模块(在该示例中)可以指微控制器和非暂时性介质的组合。通常,被示出为单独的模块边界通常变化并且可能重叠。例如,第一和第二模块可以共享硬件、软件、固件或它们的组合,同时可能保留一些独立的硬件、软件或固件。在一个实施方式中,术语逻辑的使用包括硬件,例如晶体管、寄存器、或其他硬件,例如可编程逻辑装置。
在一个实施方式中,短语“配置为”的使用是指布置、组装、制造、提供销售、进口和/或设计一种设备、硬件、逻辑或元件以执行指定或确定的任务。在该示例中,如果未操作的设备或其元件被设计、耦合和/或互连以执行所述指定任务,则它仍被“配置为”执行指定任务。作为纯粹的说明性示例,逻辑门可以在操作期间提供0或1。但是“配置为”向时钟提供使能信号的逻辑门不包括可能提供1或0的每个可能的逻辑门。相反,逻辑门是以某种方式耦合的,在操作期间,1或0输出是启用时钟。再次注意,术语“配置为”的使用不需要操作,而是关注设备、硬件和/或元件的潜在状态,其中在潜在状态下,设备、硬件和/或元件被设计为在设备、硬件和/或元件运行时执行特定任务。
此外,在一个实施方式中,短语“以”、“能够/以”和/或“可操作为”的使用是指以这样的方式设计的一些设备、逻辑、硬件和/或元件,其以指定方式使用设备、逻辑、硬件和/或元件。如上所述,在一个实施方式中,以、能够或可操作的使用是指设备、逻辑、硬件和/或元件的潜在状态,其中设备、逻辑、硬件和/或元件是不正在操作,而是设计成能够以特定方式使用设备。
如本文所使用的,值包括数字、状态、逻辑状态或二进制逻辑状态的任何已知表示。通常,逻辑电平、逻辑值或逻辑值的使用也称为1和0,它们仅表示二进制逻辑状态。例如,1表示高逻辑电平,0表示低逻辑电平。在一个实施方式中,诸如晶体管或闪存单元之类的存储单元可能能够保持单个逻辑值或多个逻辑值。然而,已经使用了计算机系统中值的其他表示。例如,十进制数字十也可以表示为二进制值910和十六进制字母A。因此,值包括能够保持在计算机系统中的信息的任何表示。
此外,状态可以由值或值的部分表示。例如,第一值,例如逻辑值,可以表示默认或初始状态,而第二值,例如逻辑零,可以表示非默认状态。此外,在一个实施方式中,术语重置和设置分别指默认值和更新值或状态。例如,默认值可能包括高逻辑值,即重置,而更新值可能包括低逻辑值,即设置。请注意,可以利用值的任何组合来表示任何数量的状态。
上述方法、硬件、软件、固件或代码的实施方式可以经由存储在可由处理元件执行的机器可访问、机器可读、计算机可访问或计算机可读介质上的指令或代码来实现。非暂时性机器可访问/可读介质包括以机器(例如计算机或电子系统)可读的形式提供(即,存储和/或传输)信息的任何机制。例如,非暂时性机器可访问介质包括随机存取存储器(RAM),例如静态RAM(SRAM)或动态RAM(DRAM);ROM;磁或光存储介质;闪存装置;电力存储装置;光存储装置;声学存储装置;其他形式的存储装置,用于保存从瞬态(传播)信号(例如,载波、红外信号、数字信号)接收的信息;等,它们将与可以从中接收信息的非暂时性介质区分开来。
用于对逻辑进行编程以执行本公开的实施方式的指令可以存储在系统中的存储器内,例如DRAM、高速缓存、闪存或其他存储装置。此外,指令可以经由网络或通过其他计算机可读介质来分发。因此,机器可读介质可以包括用于以机器(例如计算机)可读的形式存储或传输信息的任何机制,但不限于软盘、光盘、光盘只读存储器(CD-ROM)、磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM)、磁卡或光卡、闪存或有形的、机器可读的存储装置,用于经由电、光、声或其他形式的传播信号(例如,载波、红外信号、数字信号等)在互联网上传输信息。因此,计算机可读介质包括适合于以机器(例如,计算机)可读的形式存储或传输电子指令或信息的任何类型的有形机器可读介质。
在该说明书中对“一个实施方式”或“一种实施方式”的引用意味着结合该实施方式描述的特定特征、结构或特性被包括在本公开的至少一个实施方式中。因此,在本说明书各处出现的短语“在一个实施方式中”或“在一种实施方式中”不一定都指代相同的实施方式。此外,特定特征、结构或特性可以在一个或多个实施方式中以任何合适的方式组合。
在前述说明书中,已经参考具体示例性实施方式给出了详细描述。然而,很明显,在不脱离所附权利要求中阐述的本公开的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。因此,说明书和附图被认为是说明性的而不是限制性的。此外,上述实施方式和其他示例性语言的使用不一定指相同的实施方式或相同的示例,而是可以指不同的和有区别的实施方式,以及可能地相同的实施方式。

Claims (20)

1.一种加速器电路,包括:
寄存器文件,包括:
指令寄存器,用于存储用于评估初等函数的指令;以及
数据寄存器,包括用于存储与所述指令相关联的输入值的第一数据寄存器;
逐次累积旋转电路,其包括可重新配置的内部级以执行逐次累积旋转递推;以及
确定电路,用于:
基于所述指令来确定所述初等函数的类型;以及
响应于确定所述输入值为定点数,将所述可重新配置的内部级配置为用于评估所述类型的初等函数的配置,其中所述逐次累积旋转电路使用执行所述逐次累积旋转递推的所述可重新配置的内部级来计算所述初等函数的评估。
2.根据权利要求1所述的加速器电路,还包括近似电路,其中,所述确定电路还用于:
响应于确定所述输入值为浮点数,确定所述输入值是否属于小值范围;
响应于确定所述输入值在所述小值范围之外,
将所述浮点数转换为定点数;以及
将所述可重新配置的内部级配置为用于评估所述类型的初等函数的配置,其中,所述逐次累积旋转电路使用执行所述逐次累积旋转递推的所述可重新配置的内部级来计算所述初等函数的评估;以及其中所述近似电路用于:
响应于确定所述输入值属于所述小值范围,接收所述输入值并计算关于所述输入值的所述初等函数的近似值。
3.根据权利要求1或2所述的加速器电路,其中,所述初等函数的类型包括幂函数、对数函数、倒数函数、平方根函数或平方根反函数中的至少一种,并且其中所述逐次累积旋转递推包括关于所述输入值的单旋转操作或关于所述输入值的双旋转操作中的至少一个。
4.根据权利要求2或3所述的加速器电路,其中,为了确定所述输入值是否在小值范围内,所述确定电路基于估计的绝对误差、估计相对误差、所述初等函数的类型、用于所述浮点输入值的浮点数表示的类型或所述逐次累积旋转电路的硬件约束中的至少一个来确定所述输入值是否在小值范围内。
5.根据权利要求2或3所述的加速器电路,其中,所述逐次累积旋转电路重复所述逐次累积旋转递推中的至少一个,以及其中所述浮点输入值根据IEEE浮点数表示来表示。
6.根据权利要求2或3所述的加速器电路,其中,为了计算关于所述输入值的所述初等函数的近似值,所述近似电路用于:
使用所述初等函数的泰勒展开式的第一项或第二项中的至少一个计算所述初等函数的近似值;以及
将近似值存储在所述数据寄存器的第二数据寄存器中。
7.根据权利要求2或3所述的加速器电路,其中,所述逐次累积旋转电路还用于将所述初等函数的评估转换为浮点数表示,并将所述浮点评估存储在所述数据寄存器的第三数据寄存器中。
8.根据权利要求2或3所述的加速器电路,其中,所述可重新配置的内部级包括多路复用器、可重新配置的比较器、移位器、双移位器、加法电路或减法电路中的至少一个。
9.根据权利要求8所述的加速器电路,其中,响应于确定所述初等函数的类型是幂函数、对数函数、倒数函数、平方根函数或平方根反函数中之一,所述确定电路将所述可重新配置的比较器配置为第一模式;以及响应于确定所述初等函数的类型是三角函数,所述确定电路将所述可重新配置的比较器配置为第二模式。
10.根据权利要求2所述的加速器电路,其中,响应于确定所述输入值在所述小值范围之外,为了使用执行所述逐次累积旋转递推的所述可重新配置的内部级计算所述初等函数的评估,所述逐次累积旋转电路还用于:
将所述浮点输入值拆分为整数部分和小数部分;
将所述小数部分转换为定点数;
使用所述逐次累积旋转递推计算关于所述定点数的初等函数以生成定点结果;
将所述定点结果转换为浮点结果;以及
使用所述浮点结果和所述整数部分转换为浮点输出。
11.一种计算系统,包括:
用于存储输入值的存储装置;
处理器,用于执行包括用于评估关于所述输入值的初等函数的指令的应用;
加速器电路,通信地耦合到所述处理器,包括:
逐次累积旋转电路,其包括可重新配置的内部级以执行逐次累积旋转递推;以及
确定电路:
接收所述指令和所述输入值;
基于所述指令来确定所述初等函数的类型;以及
响应于确定所述输入值是定点数,将所述可重新配置的内部级配置为用于评估所述类型的初等函数的配置,其中,所述逐次累积旋转电路使用执行所述逐次累积旋转递推的所述可重新配置的内部级计算所述初等函数的评估。
12.根据权利要求11所述的计算系统,其中,所述加速器电路还包括近似电路,其中所述确定电路还用于:
响应于确定所述输入值是浮点数,确定所述输入值是否属于小值范围;
响应于确定所述输入值在所述小值范围之外,
将所述浮点数转换为定点数;以及
将所述可重新配置的内部级配置为用于评估所述类型的初等函数的配置,其中所述逐次累积旋转电路使用执行所述逐次累积旋转递推的所述可重新配置的内部级来计算所述初等函数的评估;以及其中,所述近似电路用于:
响应于确定所述输入值属于所述小值范围,接收所述输入值并计算关于所述输入值的所述初等函数的近似值。
13.根据权利要求11或12所述的计算系统,其中,所述初等函数的类型包括幂函数、对数函数、倒数函数、平方根函数或平方根反函数中的至少一种,并且其中所述逐次累积旋转递推包括关于所述输入值的单旋转操作或关于所述输入值的双旋转操作中的至少一个。
14.根据权利要求11或12所述的计算系统,其中,为了确定所述输入值是否在小值范围内,所述确定电路基于估计的绝对误差、估计相对误差、所述初等函数的类型、用于所述浮点输入值的浮点数表示的类型或所述逐次累积旋转电路的硬件约束中的至少一个来确定所述输入值是否在所述小值范围内。
15.根据权利要求11或12所述的计算系统,其中,为了计算关于所述输入值的所述初等函数的近似值,所述近似电路用于:
使用所述初等函数的泰勒展开式的第一项或第二项中的至少一个计算所述初等函数的近似值;以及
将所述近似值存储在所述数据寄存器的第二数据寄存器中。
16.根据权利要求11或12所述的计算系统,其中,所述逐次累积旋转电路还用于将所述初等函数的评估转换为浮点数表示,并将所述浮点评估存储在所述数据寄存器的第三数据寄存器中,并且其中所述浮点输入值是根据IEEE浮点数表示来表示的。
17.根据权利要求11或12所述的计算系统,其中,所述可重新配置的内部级包括多路复用器、可重新配置的比较器、移位器、双移位器、加法电路或减法电路中的至少一个。
18.根据权利要求17所述的计算系统,其中,响应于确定所述初等函数的类型是幂函数、对数函数、倒数函数、平方根函数或平方根反函数的其中一个,所述确定电路将所述可重新配置的比较器配置为第一模式;以及响应于确定所述初等函数的类型是三角函数,所述确定电路将所述可重新配置的比较器配置为第二模式。
19.根据权利要求12所述的计算系统,其中,响应于确定所述输入值在所述小值范围之外,为了使用执行所述逐次累积旋转递推的所述可重新配置的内部级计算所述初等函数的评估,所述逐次累积旋转电路还用于:
将所述浮点输入值拆分为整数部分和小数部分;
将所述小数部分转换为定点数;
使用所述逐次累积旋转递推计算关于所述定点数的初等函数以生成定点结果;
将所述定点结果转换为浮点结果;以及
使用所述浮点结果和所述整数部分转换为浮点输出。
20.一种用于自适应地计算关于输入值的初等函数的方法,所述方法包括:
由加速器电路从指令寄存器和数据寄存器中识别所述初等函数和所述输入值;
确定所述输入值是定点输入值还是浮点输入值;
响应于确定所述输入值是定点输入值,
确定所述初等函数的类型;
将逐次累积旋转电路的可重新配置的内部级配置为用于评估所述类型的初等函数的配置;以及
使用执行逐次累积旋转递推的所述可重新配置的内部级计算所述初等函数的评估;以及
响应于确定所述输入值是浮点输入值,
确定所述输入值是否属于小值范围;
响应于确定所述输入值在所述小值范围之外,
将所述浮点输入值转换为定点数;
将所述可重新配置的内部级配置为用于评估所述类型的初等函数的配置;以及
使用执行所述逐次累积旋转递推的所述可重新配置的内部级计算所述初等函数的评估;以及
响应于确定所述浮点输入值在所述小值范围内,计算关于所述输入值的所述初等函数的近似值。
CN202080028532.XA 2019-02-20 2020-02-20 用于使用逐次累积旋转电路计算初等函数的装置和方法 Pending CN113692561A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201962807852P 2019-02-20 2019-02-20
US62/807852 2019-02-20
PCT/US2020/018976 WO2020172369A1 (en) 2019-02-20 2020-02-20 Device and method for calculating elementary functions using successive cumulative rotation circuit

Publications (1)

Publication Number Publication Date
CN113692561A true CN113692561A (zh) 2021-11-23

Family

ID=72144730

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202080028714.7A Pending CN113711157A (zh) 2019-02-20 2020-02-20 用于使用坐标旋转数字计算机(cordic)对浮点三角函数进行硬件高效自适应计算的装置和方法
CN202080028532.XA Pending CN113692561A (zh) 2019-02-20 2020-02-20 用于使用逐次累积旋转电路计算初等函数的装置和方法

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202080028714.7A Pending CN113711157A (zh) 2019-02-20 2020-02-20 用于使用坐标旋转数字计算机(cordic)对浮点三角函数进行硬件高效自适应计算的装置和方法

Country Status (5)

Country Link
US (2) US20220137925A1 (zh)
EP (2) EP3928177A4 (zh)
KR (2) KR20210134349A (zh)
CN (2) CN113711157A (zh)
WO (2) WO2020172369A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114707110B (zh) * 2022-06-07 2022-08-30 中科亿海微电子科技(苏州)有限公司 一种三角函数和双曲函数扩展指令计算装置及处理器核

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1178588A (zh) * 1995-03-10 1998-04-08 摩托罗拉公司 使用移位装置的求幂电路及其使用方法
CA2255223A1 (en) * 1998-12-08 2000-06-08 Fayez Elguibaly An apparatus for determining the values of elementary, trigonometric and hyperbolic functions and process for making same
US20110320513A1 (en) * 2010-06-25 2011-12-29 Altera Corporation Calculation of trigonometric functions in an integrated circuit device
US20120089807A1 (en) * 2010-10-07 2012-04-12 Advanced Micro Devices, Inc. Method and apparatus for floating point register caching
CN108037906A (zh) * 2017-12-14 2018-05-15 中国人民解放军国防科技大学 基于tcordic算法的浮点基本函数实现方法及装置

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4896287A (en) 1988-05-31 1990-01-23 General Electric Company Cordic complex multiplier
US5349676A (en) * 1991-02-11 1994-09-20 General Electric Company Data acquisition systems with programmable bit-serial digital signal processors
US6385632B1 (en) * 1999-06-18 2002-05-07 Advanced Micro Devices, Inc. Fast CORDIC algorithm with sine governed termination
WO2002021323A2 (en) 2000-09-08 2002-03-14 Avaz Networks Hardware function generator support in a dsp
EP2541432A1 (en) * 2005-10-07 2013-01-02 Altera Corporation Data input and output in systolic array processors
US8572150B1 (en) * 2007-10-05 2013-10-29 Xilinx, Inc. Parameterization of a CORDIC algorithm for providing a CORDIC engine
JP5304483B2 (ja) * 2009-06-30 2013-10-02 富士通株式会社 演算処理装置
US8510354B1 (en) 2010-03-12 2013-08-13 Altera Corporation Calculation of trigonometric functions in an integrated circuit device
CN102073472B (zh) * 2011-01-05 2012-10-03 东莞市泰斗微电子科技有限公司 一种三角函数cordic迭代运算协处理器及运算处理方法
CN102722469A (zh) * 2012-05-28 2012-10-10 西安交通大学 基于浮点运算单元的基本超越函数运算方法及其协处理器
CN102981797B (zh) * 2012-11-02 2015-06-17 中国航天科技集团公司第九研究院第七七一研究所 基于cordic算法的反馈和流水线结构相结合的三角函数运算器
US10942706B2 (en) * 2017-05-05 2021-03-09 Intel Corporation Implementation of floating-point trigonometric functions in an integrated circuit device
US10168992B1 (en) * 2017-08-08 2019-01-01 Texas Instruments Incorporated Interruptible trigonometric operations

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1178588A (zh) * 1995-03-10 1998-04-08 摩托罗拉公司 使用移位装置的求幂电路及其使用方法
CA2255223A1 (en) * 1998-12-08 2000-06-08 Fayez Elguibaly An apparatus for determining the values of elementary, trigonometric and hyperbolic functions and process for making same
US20110320513A1 (en) * 2010-06-25 2011-12-29 Altera Corporation Calculation of trigonometric functions in an integrated circuit device
CN102959503A (zh) * 2010-06-25 2013-03-06 阿尔特拉公司 用于集成电路设备中的三角函数的计算
US20120089807A1 (en) * 2010-10-07 2012-04-12 Advanced Micro Devices, Inc. Method and apparatus for floating point register caching
CN108037906A (zh) * 2017-12-14 2018-05-15 中国人民解放军国防科技大学 基于tcordic算法的浮点基本函数实现方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
MEHER P K, ET AL.: "50 years of CORDIC: Algorithms, architectures, and applications", 《IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS I: REGULAR PAPERS》, pages 1893 - 1907 *

Also Published As

Publication number Publication date
EP3928176A4 (en) 2023-01-11
US20220129262A1 (en) 2022-04-28
KR20210134349A (ko) 2021-11-09
WO2020172368A3 (en) 2021-07-22
EP3928176A2 (en) 2021-12-29
EP3928177A4 (en) 2022-11-16
WO2020172369A1 (en) 2020-08-27
US20220137925A1 (en) 2022-05-05
CN113711157A (zh) 2021-11-26
WO2020172368A2 (en) 2020-08-27
US11928465B2 (en) 2024-03-12
EP3928177A1 (en) 2021-12-29
KR20210134915A (ko) 2021-11-11

Similar Documents

Publication Publication Date Title
CN107608715B (zh) 用于执行人工神经网络正向运算的装置及方法
US6360241B1 (en) Computer method and apparatus for division and square root operations using signed digit
US4777613A (en) Floating point numeric data processor
JP2020507844A (ja) 入力オペランド値を処理するための装置及び方法
EP3786780B1 (en) System to perform unary functions using range-specific coefficient sets
US20080263336A1 (en) Processor Having Efficient Function Estimate Instructions
KR100465371B1 (ko) 덧셈 및 반올림 연산을 동시에 수행하는 부동 소수점alu 연산 장치
Chen et al. Pipelined computation of very large word-length LNS addition/subtraction with polynomial hardware cost
US9703626B2 (en) Recycling error bits in floating point units
CN113692561A (zh) 用于使用逐次累积旋转电路计算初等函数的装置和方法
Piso et al. Variable latency Goldschmidt algorithm based on a new rounding method and a remainder estimate
CN106528050B (zh) 尾随或前导数字预测器
CN116166217A (zh) 执行浮点操作的系统和方法
Antelo et al. Error analysis and reduction for angle calculation using the CORDIC algorithm
EP0840207A1 (en) A microprocessor and method of operation thereof
Rudagi et al. Comparative analysis of radix-2, radix-4, radix-8 CORDIC processors
US6366939B1 (en) Apparatus for computing exponential and trigonometric functions
US20230334117A1 (en) Method and system for calculating dot products
Zhang et al. Elementary function computing method for floating-point unit
EP0837390A1 (en) Improvements in or relating to microprocessor integrated circuits
Sanchez et al. A Cordic-based Architecture for High Performance Decimal Calculations
Aggarwal et al. Leading one detection hyperbolic CORDIC with enhanced range of convergence
González-Díaz-Conti et al. An Optimization Methodology for Designing Hardware-Based Function Evaluation Modules with Reduced Complexity
Sanchez-Romero et al. A Cordic-based architecture for high performance decimal calculations
Hormigo et al. Variable-Precision Exponential Evaluation

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination