CN112035796A - 面向集成电路的超低延时的整数次幂计算电路的优化方法 - Google Patents
面向集成电路的超低延时的整数次幂计算电路的优化方法 Download PDFInfo
- Publication number
- CN112035796A CN112035796A CN202010920109.2A CN202010920109A CN112035796A CN 112035796 A CN112035796 A CN 112035796A CN 202010920109 A CN202010920109 A CN 202010920109A CN 112035796 A CN112035796 A CN 112035796A
- Authority
- CN
- China
- Prior art keywords
- mae
- err
- point
- maximum
- value
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/17—Function evaluation by approximation methods, e.g. inter- or extrapolation, smoothing, least mean square method
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/11—Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Algebra (AREA)
- Computing Systems (AREA)
- Operations Research (AREA)
- Complex Calculations (AREA)
- Semiconductor Integrated Circuits (AREA)
Abstract
本发明公开了面向集成电路的超低延时的整数次幂计算电路的优化方法,包括:通过软件分段器,在给定的最大软件相对误差下得到最大分段,同时得到各分段对应的线性系数;软件量化器,在给定的硬件误差限制下得到各系数的最小小数位宽;分段线性近似电路,采用线性近似的方法实现2的任意次幂和以2为底的对数运算;倒数运算模块,用多路选择器和查找表的方式实现倒数。本发明适用于单精度及尾数位宽8‑16的浮点数,大的尾数位宽可以提高运算精度;与现有基于坐标旋转数字计算方法的架构相比,该发明在最大相对误差降低57.30%的基础上,分别节约面积、功耗、延时91.60%、89.84%和67.71%。
Description
技术领域
本发明涉及面向集成电路的超低延时的整数次幂计算电路的优化方法。
背景技术
低次根运算,特别是平方根、立方根运算,在科学计算、数字信号处理、图像综合等领域都有很广泛的应用。除此之外,高次根运算在3D图像、大气模型等领域也有很大应用,而且高次根计算实现有很大难度。而任意次根的实现能够很好的解决包括低次和高次根在内的计算问题。然而浮点数的任意次根计算的硬件实现有很大难度,现阶段主要采用软件的方法来实现,速度太慢无法满足要求。另外,部分研究者开始使用坐标旋转数字计算方法来实现浮点数任意次根的计算,但坐标旋转数字计算方法通过多次迭代的方式进行逼近,每次迭代必然带来一个时钟周期的延迟,很难满足一些对延迟要求高,但对精度要求低的应用,例如语音识别、自动驾驶及金融分析等应用。
发明内容
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供面向集成电路的超低延时的整数次幂计算电路的优化方法,包括:
一个软件分段器,在给定的最大软件相对误差下得到最大分段,同时得到各分段对应的线性系数;
一个软件量化器,在给定的硬件误差限制下得到各分段对应的线性系数的最小小数位宽;
一个分段线性近似电路,采用线性近似的方法实现2的任意次幂和以2为底的对数运算;
一个倒数运算模块,用多路选择器和查找表的方式实现倒数。
所述软件分段器具体执行如下步骤:
步骤a1,设定非线性函数f(x)通过分段线性函数h(x)来近似计算,f(x)输入的范围为[c,d]被分割成子区间[ci,di]i=1,2,3..,其中ci和di分别表示第i个分区起点值和终点值,每个子区间采用一个线性函数来hi(x)来表示;在f(x)该子区间内选择不同的两点(x1,f(x1))(x2,f(x2)),其中x1、f(x1)、x2和f(x2)为分别为第一点的横坐标、纵坐标及第二点的横坐标、纵坐标,则第i分段的线性方程表示为:
hi(x)=kix+bi (1),
bi=f(x2)-ki(x2) (3),
其中,ki和bi分别为第i分段线性方程的斜率和截距;通过上述式子就能够确定各个分段线性函数的参数;
浮点数R的N次根根据以下恒等式进行表示:
而浮点数R表示为:
其中,MR为浮点数的尾数部分,ER为阶码部分;
结合式(4)和(5)得到以下表示:
通过式(6),浮点数R的N次根被分解成多个子任务;
对于浮点数格式,尾数MR的范围为[1,2),log2(MR)采用线性近似的方法来得到:
log2(x)≈h_log2(x),x∈[1,2) (7)
其中输入x的值与MR的范围保持一致;
将式子(6)化简为:
其中P表示为:
P分为整数部分PI和小数部分PF,表示为:
P=PI+PF (10)
则式子(8)表示为:
2P=2PI×2PF (11)
其中整数PI在加上15后正好与单精度浮点的阶码格式一致,直接作为阶码输出由于PF大小在[0,1)范围内,2的PF次幂计算采用分段线性近似的方法来实现,表示如下:
2x≈h_pow2(x),x∈[0,1) (12)
由于x∈[0,1),所以2x值的取值范围为[1,2),满足浮点数输出尾数的表达要求,直接作为输出的尾数部分;
步骤a2,根据最大根计算的最大相对误差来得到子函数(7)和(12)的最大绝对误差,子函数再根据最大绝对误差进行分段,绝对误差AE和最大绝对误差MAE的定义为:
AE=|f-h| (13)
MAE=max|f-h| (14)
其中f表示精确值是通过MatLab内置函数计算得到,h是近似值,通过近似方法计算得到;
步骤a3,相对误差Errr、平均相对误差Avg_Errr及最大相对误差Max_Errr分别表示为:
Max_Errr=max(Errr) (17)
NUM表示输出结果的数量。
通过子函数(7)和(12)的分段器,实现公式(7)、公式(12)的非线性函数的分段,具体包括如下步骤:
步骤b1,初始化相关参数:
si表示当前分段的起点,等于上个分段的终点后一点;
ei为分段终点,初始化为输入的最大值;
li和ri分别是用于确定ei的二分法左窗口、右窗口;
预先设定mae_sw,mae_sw与实际使用场景需要的精度相关,一般取值在10-2~10-5之间。
步骤b2,通过式(13)计算出分区内的任意一点的绝对误差AE,通过式(14)求出分段内的最大绝对误差MAE,如果最大绝对误差MAE大于设定的软件最大绝对误差mae_sw,说明分段太大,则将左移到ei的位置以减小二分窗口的大小,同时ei移动到二分窗口的中点,重新开始步骤b2;如果最大绝对误差MAE小于mae_sw,则说明误差满足要求且可能存在两种可能,第一种可能:如果二分窗口能够减小,说明分段还能够增大,此时将li右移动ei处以减小二分窗口的大小,同时ei移动到二分窗口的中点,并重新开始步骤b2;第二种可能:二分窗口已无法减小,说明此时分段属于mae_sw限制下的最宽状态,则存储相应的参数及起点终点的信息;
步骤b3,将子函数分段器封装为函数seg_log2(a,b,mae_sw)和seg_pow2(a,b,mae_sw),分别用于对公式(7)和(12)中的非线性函数进行分段,其中a,b分别表示分段区间的起点和终点,seg_log2函数的输出为一个向量,用于存储分区的起始点及公式(1)(2)(3)中的k,b;
步骤b4,子函数分段器根据R1/N的最大相对误差得到mae_sw的最小值。
步骤b4包括:
步骤b4-1,进行初始化:rmae、lmae分别表示用于优化mae_sw的二分左窗口、右窗口,F为优化循环控制位;
步骤b4-2,计算最大相对误差:将子函数进行分段线性近似,遍历根据公式(15)求出的所有点的相对误差Errr,根据公式(17)求出最大相对误差Max_Errr;
步骤b4-3,优化mae_sw,如果Max_Errr大于设定的最大相对误差Errr_sw,则说明当前mae_sw太大,则rmae减小到当前mae_sw值,mae_sw移动到新二分窗口的终点;如果Max_Errr小于等于设定的最大相对误差Errr_sw,一种情况是mae_sw还能够继续增大,则rmae增大到当前mea_sw值,同时将mae_sw增大到新窗口的中点值,另一种情况是|rmae、lmae|<10-5,说明窗口已经足够小,mae_sw已优化完毕,当前mae_sw已为最优值;再通过所述mae_sw就能够确定最终的分段区间及各区间的参数。
所述软件量化器采用以下两个函数来分别表示二进制中的四舍五入及截位操作:
kq=round(k×2qw)×2-qw,
kq=floor(k×2qw)×2-qw,
其中qw表示量化后的小数位宽,kq和k分别为量化前和量化后的数据值;
软件量化器计算出每点近似值的大小,再根据式(17)得到Max_Errr,如果Max_Errr大于Errr_hw的值,则说明当前qw太小,则qw加1,直到Max_Errr满足Errr_hw的要求。
所述相对误差的计算采用MatLab内置函数round和floor来模拟硬件四舍五入和截位操作,其中存储在片上的系数采用四舍五入来提高精度,计算的中间结果采用截位来降低硬件复杂度。
所述分段线性近似电路包括:
减法器,将输入与每个分段的起点相减,并提取结果的符号位;
多路选择器,通过提取的符号位去选择存储在片上的线性方程参数,包括斜率和截距;
乘法器,采用两级流水的乘法器以减小关键路径的长度,将输入信号与多路选择器输出的斜率相乘;关键路径是指设计中从输入到输出经过的最大延时的组合逻辑路径;
加法器,将乘法器结果与多路选择器输出的截距相加。
所述倒数运算模块采用输入数据N作为选择信号,通过多路选择器选择预存储在片上的倒数结果。
本发明的优点如下:
本发明方法适用于单精度及尾数位宽8-16的浮点数,大的尾数位宽可以提高运算精度;与现有基于坐标旋转数字计算方法的架构相比,该发明在最大相对误差降低57.30%的基础上,分别节约面积、功耗、延时91.60%、89.84%和67.71%。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1是本发明提出的浮点数任意次根的计算流程。
图2是基于二分法的子函数分段方法。
图3在最大相对误差限制下求最小小数位宽流程示意图。
图4是分段线性近似优化电路结果图。
具体实施方式
实施例
分段线性近似是将非线性一元函数分成若干段,每段采用一个线性函数来近似,分段数越多,误差越小但硬件实现复杂度越高。假设非线性函数f(x)通过分段线性函数h(x)来近似计算,f(x)输入的范围为[c,d]被分割成子区间[ci,di]i=1,2,3..,每个子区间采用一个线性函数来hi(x)来表示。在f(x)该子区间内选择不同的两点(x1,f(x1))(x2,f(x2)),则第i分段的线性方程表示为:
hi(x)=kix+bi (1),
bi=f(x2)-ki(x2) (3),
通过上述式子就可以来确定各个分段线性函数的参数。
浮点数R的N次根根据以下恒等式进行表示:
而浮点数R(本发明采用单精度浮点数来做例子)表示为:
其中,MR为浮点数的尾数部分,ER为阶码部分。结合式(4)和(5)得到以下表示:
通过式(6),浮点数R的N次根被分解成多个子任务,其中难度较大的计算包括:基-2的对算运算、除法运算以及2的任意次幂运算。考虑到N在实际应用中为整数且范围不会过大,本发明中将2-63中整数的倒数通过软件算好后,在设计时存储在片上,在计算时通过输入N选择对应倒数的值,这样除法操作就被乘法操作取代。
对于浮点数格式而言,尾数MR的范围为[1,2)。而分段线性近似方法适用于输入范围比较窄的运算,所以log2(MR)采用线性近似的方法来得到:
log2(x)≈h_log2(x),x∈[1,2) (7)
其中输入x的值与MR的范围保持一致。然后就是以2为底的幂的实现。首先将式子(6)化简为:
其中P表示为:
P分为整数部分PI和小数部分PF,表示为:
P=PI+PF (10)
则式子(8)表示为:
2P=2PI×2PF (11)
其中整数PI在加上15后正好与单精度浮点的阶码格式一致,直接作为阶码输出即可,由于PF大小在[0,1)范围内,2的PF次幂计算可采用分段线性近似的方法来实现,表示如下:
2x≈h_pow2(x),x∈[0,1) (12)
该输出的结果的范围为[1,2),满足浮点数输出尾数的表达要求,可以直接作为输出的尾数部分。整个计算流程图如图1所述。
接下来将对软件分段器进行介绍,软件分段器首先需要根据最大根计算的最大相对误差来得到子函数的最大绝对误差,子函数再根据最大绝对误差进行分段。绝对误差AE和最大绝对误差MAE的定义为:
AE=|f-h| (13)
MAE=max|f-h| (14)
其中f是通过MatLab内置函数计算而来,h是通过近似方法计算而来。由于整个系统而言属于浮点数系统,所以根计算采用相对误差来衡量精度,相对误差Errr、平均相对误差Avg_Errr及最大相对误差Max_Errr分别表示为:
Max_Errr=max(Errr) (17)
NUM表示输出结果的数量。
下面来描述子函数的分段器,用于实现公式(7)、公式(12)的非线性函数的分段。首先需要初始化相关参数,其中si表示当前分段的起点,等于上个分段的终点后一点;ei为分段终点,初始化为输入的最大值;li和ri分别是用于确定ei的二分法左窗口、右窗口。通过式(13)计算出分区内的任意一点的AE,通过式(14)求出分段内的MAE,如果MAE大于设定的软件最大绝对误差mae_sw,说明分段太大,则将左移到ei的位置以减小二分窗口的大小,同时ei移动到二分窗口的中点;如果MAE小于mae_sw,则说明误差满足要求,一种可能就是分段还有增大的可能,则将li右移动ei处以减小二分窗口的大小,同时ei移动到二分窗口的中点,另一种可能二分窗口已无法减小,说明此时分段属于mae_sw限制下的最宽状态,则存储相应的参数及起点终点的信息。
将子函数分段器封装为函数seg_log2(a,b,mae_sw)和seg_pow2(a,b,mae_sw),分别用于对公式(7)和(12)中的非线性函数进行分段,其中a,b分别表示分段区间的起点和终点,函数的输出为一个向量,用于存储分区的起始点及公式(1)(2)(3)中的k,b。
接着子函数分段器需要根据系统的最大相对误差得到mae_sw的最小值,如图3所示。首先进行初始化,rmae、lmae分别表示用于优化mae_sw的二分左窗口、右窗口,F为优化循环控制位。然后计算最大相对误差,首先将子函数进行分段线性近似,遍历根据公式(15)求出的所有点的相对误差Errr,根据公式(17)求出最大相对误差Max_Errr。最后就是优化mae_sw,如果Max_Errr大于设定的最大相对误差Errr_sw,则说明当前mae_sw太大,则rmae减小到当前mae_sw值,mae_sw移动到新二分窗口的终点;如果Max_Errr小于等于设定的最大相对误差Errr_sw,一种情况是mae_sw还能够继续增大,则rmae增大到当前mea_sw值,同时将mae_sw增大到新窗口的中点值,另一种情况是窗口已经足够小,说明mae_sw已优化完毕,当前mae_sw已为最优值。再通过所述mae_sw就能够确定最终的分段区间及各区间的参数。该部分将Errr_sw设置为6e-04。
接下来来描述量化器,量化器采用以下两个函数来分别表示二进制中的四舍五入及截位操作:
kq=round(k×2qw)×2-qw,
kq=floor(k×2qw)×2-qw,
其中qw表示量化后的小数位宽。首先对图1中计算流程硬件的精度模拟计算。量化器是在分段器软件相对误差的基础上,引入了硬件量化误差,所以Errr_hw肯定比Errr_sw要大,设计中将Errr_hw设置为0.002。qw初始化为ceil(-log2(Errr_hw))是其可能的最小值,算出每点近似值的大小,再根据式(17)得到Max_Errr,如果Max_Errr大于Errr_hw的值,则说明当前qw太小,则qw加1,直到Max_Errr满足Errr_hw的要求,优化后得到qw的值为13。
硬件实现中的关键就是分段函数的实现,电路结构如图4所示。其中减法器,将输入与每个分段的起点相减,并提取结果的符号位;多路选择器,通过提取的符号位去选择存储在片上的线性方程参数,包括斜率和截距;乘法器,采用两级流水的乘法器以减小关键路径的长度,将输入信号与多路选择器输出的斜率相乘;加法器,将乘法器结果与多路选择器输出的截距相加。
另外,将2-63的倒数(通过MATLAB运算得到)存储事先存储在片上,小数位宽与量化器输出位宽保持一致,极为13位,输入N作为选择信号,通过多路选择器选择预存储在片上的倒数结果。
为了能够与最新的基于坐标旋转数字计算方法的浮点数任意次根的设计进行对比验证,本发明将电路实现误差也就是Errr_hw(硬件量化误差)设置为0.002,由于软件分段误差也就是mae_sw需要比Errr_hw小,一般他们之间通过mae_sw=Errr_hw*k,k为两者之间的比例因子,本例将k设置为0.3,所以mae_sw的值为6e-4。
确定好软件和硬件误差后,首先需要根据图2的分段器对函数(7)和(12)进行分段,并确定每个分段的起点和终点以及式(2)、(3)种的ki和bi。表1列出了函数(7)分段的结果,表2列出了函数(12)的分段结果。由于表格长度有限,仅能列出各个数据的有限小数位,但其实为无限小数。很显然无限小数无法在电路种实现,需要进行量化处理。
表1
分段编号i | 1 | 2 | 3 | 4 | 5 |
起点ci | 1 | 1.07421875 | 1.154296875 | 1.240234375 | 1.333007813 |
终点di | 1.073242188 | 1.153320313 | 1.239257813 | 1.33203125 | 1.431640625 |
斜率ki | 1.392307827 | 1.295871254 | 1.205989913 | 1.122207563 | 1.044116554 |
截距bi | -1.391857356 | -1.288306225 | -1.184601289 | -1.080727951 | -0.976670864 |
分段编号i | 6 | 7 | 8 | 9 | 10 |
起点ci | 1.432617188 | 1.5390625 | 1.653320313 | 1.776367188 | 1.908203125 |
终点di | 1.538085938 | 1.65234375 | 1.775390625 | 1.907226563 | 2 |
斜率ki | 0.971690265 | 0.904492435 | 0.841893694 | 0.783638209 | 0.738426532 |
截距bi | -0.872952073 | -0.769563803 | -0.666096175 | -0.562643849 | -0.476654026 |
表2
分段编号i | 1 | 2 | 3 | 4 | 5 |
起点ci | 0 | 0.121389389 | 0.237877846 | 0.349844933 | 0.457629204 |
终点di | 0.121388435 | 0.237876892 | 0.349843979 | 0.45762825 | 0.561531067 |
斜率ki | 0.723143259 | 0.785268888 | 0.849953952 | 0.917198386 | 0.987002427 |
截距bi | 0.999538426 | 0.991997061 | 0.976609954 | 0.953084861 | 0.921140525 |
分段编号i | 6 | 7 | 8 | 9 | 10 |
起点ci | 0.561532021 | 0.661823273 | 0.758745193 | 0.852517128 | 0.94333744 |
终点di | 0.661822319 | 0.75874424 | 0.852516174 | 0.943336487 | 1 |
斜率ki | 1.05936612 | 1.134289321 | 1.211771982 | 1.291814253 | 1.359423599 |
截距bi | 0.880506028 | 0.830920148 | 0.772130588 | 0.703893219 | 0.640387322 |
根据分段结果通过图3的量化器进行量化处理,得到最小量化位宽为13,同时得到各数据量化后的值,表3列出了函数(7)量化后的分段数据,表4列出了函数(12)的量化后的分段结果。表3、4中的数据可以直接转换为二进制数据,并在电路实现种使用。
表3
表4
整个电路的结构与图1的流程相对应,一个半精度浮点数有16位数据,包含1位符号位、5位阶码位以及10位尾数。由于输出必须是正数,所以符号位始终保持为1不变。首先将五位阶码减去15得到阶数的真实值,尾数(MR)通过线性近似电路得到log2(MR),线性近似电路后面会详细介绍,然后将ER-15和log2(MR)相加。于此同时,根据跟的阶次N输入通过多路选择器选择1/N的值,然后与ER-15+log2(MR)相乘得到式(9)中P的值。数据P中前4位为整数位,后13位为小数位。直接将前4位PI加上15后作为输出的阶码,而将后13位PF通过线性近似电路后得到2PF,即为输出的尾数MO。因为输出总是为整数,所以符号位一直保持1不变。
线性近似部分的电路图如图4所示。将输入数据与分段2-n的终点值相减,其中本设计中两个函数分段数n均为10,终点值di见表3、4。然后将每个减法结果的符号位提取出来得到S(1:n-1),n-1为S的位宽,对于本设计而言,S的位宽为9。根据S的值得到分段编号,如表5所示,同时通过多路选择器将对应分段的斜率ki和截距bi输出并放入寄存器中,然后将ki与寄存过一级的输出x相乘得到ki*x,乘法器的设计采用两级流水设计,具体如图4虚线框所示,将一部分数据先进行乘法,然后送入寄存器,再与另一部分相乘得到结果后再次存入寄存器。与此同时,截距bi也需要通过两级寄存器才能与ki*x相加最终得到结果线性近似的结果k*x+b。
表4
S(1:9) | 分段标号i |
111111111 | 1 |
011111111 | 2 |
001111111 | 3 |
000111111 | 4 |
000011111 | 5 |
000001111 | 6 |
000000111 | 7 |
000000011 | 8 |
000000001 | 9 |
000000000 | 10 |
本发明和最先进的基于坐标旋转数字计算方法的浮点数任意次根的设计在保持同等精度的情况下,采用Verilog硬件描述语言进行编码,并采用台积电40nm工艺进行综合,综合工具采用synopsys公司的Design Compiler(DC),综合后的对比数据如表5所示。本发明的最高频率位2.703GHz,比对比设计的2.38GHz要高,说明本发明更合理且关键路径比较短;在集成电路面积方面,本发明相比于对比设计节约最少91.6%;本发明相比于对比设计至少节约89.84%的面积。另外,为了展线本发明在延时上的优势,将本发明和对比设计的消耗的时钟周期及延时列在表6中,时间延时定义为:
其中CLK表示时钟周期,fmax表示最大频率。与对比结构相比,本发明节约63.33%的时钟周期及67.71%的时间延迟。
表5
表6
本发明提供了面向集成电路的超低延时的整数次幂计算电路的优化方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
Claims (8)
1.面向集成电路的超低延时的整数次幂计算电路的优化方法,其特征在于,包括:
一个软件分段器,在给定的最大软件相对误差下得到最大分段,同时得到各分段对应的线性系数;
一个软件量化器,在给定的硬件误差限制下得到各分段对应的线性系数的最小小数位宽;
一个分段线性近似电路,采用线性近似的方法实现2的任意次幂和以2为底的对数运算;
一个倒数运算模块,用多路选择器和查找表的方式实现倒数。
2.根据权利要求1所述的方法,其特征在于,所述软件分段器具体执行如下步骤:
步骤a1,设定非线性函数f(x)通过分段线性函数h(x)来近似计算,f(x)输入的范围为[c,d]被分割成子区间[ci,di]i=1,2,3..,其中ci和di分别表示第i个分区起点值和终点值,每个子区间采用一个线性函数来hi(x)来表示;在f(x)该子区间内选择不同的两点(x1,f(x1))(x2,f(x2)),其中x1、f(x1)、x2和f(x2)为分别为第一点的横坐标、纵坐标及第二点的横坐标、纵坐标,则第i分段的线性方程表示为:
hi(x)=kix+bi (1),
bi=f(x2)-ki(x2) (3),
其中,ki和bi分别为第i分段线性方程的斜率和截距;通过上述式子就能够确定各个分段线性函数的参数;
浮点数R的N次根根据以下恒等式进行表示:
而浮点数R表示为:
其中,MR为浮点数的尾数部分,ER为阶码部分;
结合式(4)和(5)得到以下表示:
通过式(6),浮点数R的N次根被分解成多个子任务;
对于浮点数格式,尾数MR的范围为[1,2),log2(MR)采用线性近似的方法来得到:
log2(x)≈h_log2(x),x∈[1,2) (7)
其中输入x的值与MR的范围保持一致;
将式子(6)化简为:
其中P表示为:
P分为整数部分PI和小数部分PF,表示为:
P=PI+PF (10)
则式子(8)表示为:
2P=2PI×2PF (11)
其中整数PI在加上15后正好与单精度浮点的阶码格式一致,直接作为阶码输出由于PF大小在[0,1)范围内,2的PF次幂计算采用分段线性近似的方法来实现,表示如下:
2x≈h_pow2(x),x∈[0,1) (12)
由于x∈[0,1),所以2x值的取值范围为[1,2),满足浮点数输出尾数的表达要求,直接作为输出的尾数部分;
步骤a2,根据最大根计算的最大相对误差来得到子函数(7)和(12)的最大绝对误差,子函数再根据最大绝对误差进行分段,绝对误差AE和最大绝对误差MAE的定义为:
AE=|f-h| (13)
MAE=max|f-h| (14)
其中f表示精确值是通过MatLab内置函数计算得到,h是近似值,通过近似方法计算得到;
步骤a3,相对误差Errr、平均相对误差Avg_Errr及最大相对误差Max_Errr分别表示为:
Max_Errr=max(Errr) (17)
NUM表示输出结果的数量。
3.根据权利要求2所述的方法,其特征在于,通过子函数(7)和(12)的分段器,实现公式(7)、公式(12)的非线性函数的分段,具体包括如下步骤:
步骤b1,初始化相关参数:
si表示当前分段的起点,等于上个分段的终点后一点;
ei为分段终点,初始化为输入的最大值;
li和ri分别是用于确定ei的二分法左窗口、右窗口;
步骤b2,通过式(13)计算出分区内的任意一点的绝对误差AE,通过式(14)求出分段内的最大绝对误差MAE,如果最大绝对误差MAE大于设定的软件最大绝对误差mae_sw,说明分段太大,则将左移到ei的位置以减小二分窗口的大小,同时ei移动到二分窗口的中点,重新开始步骤b2;如果最大绝对误差MAE小于mae_sw,则说明误差满足要求且可能存在两种可能,第一种可能:如果二分窗口能够减小,说明分段还能够增大,此时将li右移动ei处以减小二分窗口的大小,同时ei移动到二分窗口的中点,并重新开始步骤b2;第二种可能:二分窗口已无法减小,说明此时分段属于mae_sw限制下的最宽状态,则存储相应的参数及起点终点的信息;
步骤b3,将子函数分段器封装为函数seg_log2(a,b,mae_sw)和seg_pow2(a,b,mae_sw),分别用于对公式(7)和(12)中的非线性函数进行分段,其中a,b分别表示分段区间的起点和终点,seg_log2函数的输出为一个向量,用于存储分区的起始点及公式(1)(2)(3)中的k,b;
步骤b4,子函数分段器根据R1/N的最大相对误差得到mae_sw的最小值。
4.根据权利要求3所述的方法,其特征在于,步骤b4包括:
步骤b4-1,进行初始化:rmae、lmae分别表示用于优化mae_sw的二分左窗口、右窗口,F为优化循环控制位;
步骤b4-2,计算最大相对误差:将子函数进行分段线性近似,遍历根据公式(15)求出的所有点的相对误差Errr,根据公式(17)求出最大相对误差Max_Errr;
步骤b4-3,优化mae_sw,如果Max_Errr大于设定的最大相对误差Errr_sw,则说明当前mae_sw太大,则rmae减小到当前mae_sw值,mae_sw移动到新二分窗口的终点;如果Max_Errr小于等于设定的最大相对误差Errr_sw,一种情况是mae_sw还能够继续增大,则rmae增大到当前mea_sw值,同时将mae_sw增大到新窗口的中点值,另一种情况是|rmae、lmae|<10-5,说明窗口已经足够小,mae_sw已优化完毕,当前mae_sw已为最优值;再通过所述mae_sw就能够确定最终的分段区间及各区间的参数。
5.根据权利要求4所述的方法,其特征在于,所述软件量化器采用以下两个函数来分别表示二进制中的四舍五入及截位操作:
kq=round(k×2qw)×2-qw,
kq=floor(k×2qw)×2-qw,
其中qw表示量化后的小数位宽,kq和k分别为量化前和量化后的数据值;
软件量化器计算出每点近似值的大小,再根据式(17)得到Max_Errr,如果Max_Errr大于Errr_hw的值,则说明当前qw太小,则qw加1,直到Max_Errr满足Errr_hw的要求。
6.根据权利要求5所述的方法,其特征在于,所述相对误差的计算采用MatLab内置函数round和floor来模拟硬件四舍五入和截位操作,其中存储在片上的系数采用四舍五入来提高精度,计算的中间结果采用截位来降低硬件复杂度。
7.根据权利要求6所述的方法,其特征在于,所述分段线性近似电路包括:
减法器,将输入与每个分段的起点相减,并提取结果的符号位;
多路选择器,通过提取的符号位去选择存储在片上的线性方程参数,包括斜率和截距;
乘法器,采用两级流水的乘法器以减小关键路径的长度,将输入信号与多路选择器输出的斜率相乘;
加法器,将乘法器结果与多路选择器输出的截距相加。
8.根据权利要求7所述的方法,其特征在于,所述倒数运算模块采用输入数据N作为选择信号,通过多路选择器选择预存储在片上的倒数结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010920109.2A CN112035796B (zh) | 2020-09-04 | 2020-09-04 | 面向集成电路的超低延时的整数次幂计算电路的优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010920109.2A CN112035796B (zh) | 2020-09-04 | 2020-09-04 | 面向集成电路的超低延时的整数次幂计算电路的优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112035796A true CN112035796A (zh) | 2020-12-04 |
CN112035796B CN112035796B (zh) | 2023-05-16 |
Family
ID=73590506
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010920109.2A Active CN112035796B (zh) | 2020-09-04 | 2020-09-04 | 面向集成电路的超低延时的整数次幂计算电路的优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112035796B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112685002A (zh) * | 2021-01-07 | 2021-04-20 | 南京晓庄学院 | 基于pwl的浮点数对数计算架构 |
CN113065648A (zh) * | 2021-04-20 | 2021-07-02 | 西安交通大学 | 一种低硬件开销的分段线性函数的硬件实现方法 |
CN113269637A (zh) * | 2020-12-28 | 2021-08-17 | 上海能链众合科技有限公司 | 一种基于区块链的智能设备数据的存证与验证方法 |
CN114611052A (zh) * | 2022-03-14 | 2022-06-10 | 南京晓庄学院 | 采用通用分段线性方法的可重构多函数计算单元 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1225468A (zh) * | 1998-02-02 | 1999-08-11 | 国际商业机器公司 | 基本函数的高精度估算 |
US20080052338A1 (en) * | 2003-07-31 | 2008-02-28 | International Business Machines Corporation | Increased precision in the computation of a reciprocal square root |
CN107305484A (zh) * | 2016-04-19 | 2017-10-31 | 北京中科寒武纪科技有限公司 | 一种非线性函数运算装置及方法 |
CN110796246A (zh) * | 2019-10-29 | 2020-02-14 | 南京宁麒智能计算芯片研究院有限公司 | 一种基于线性分段的激活函数的硬件实现电路和方法 |
CN111078187A (zh) * | 2019-11-28 | 2020-04-28 | 南京大学 | 一种针对单精度浮点数的任意次方根求解方法及其求解器 |
-
2020
- 2020-09-04 CN CN202010920109.2A patent/CN112035796B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1225468A (zh) * | 1998-02-02 | 1999-08-11 | 国际商业机器公司 | 基本函数的高精度估算 |
US20080052338A1 (en) * | 2003-07-31 | 2008-02-28 | International Business Machines Corporation | Increased precision in the computation of a reciprocal square root |
CN107305484A (zh) * | 2016-04-19 | 2017-10-31 | 北京中科寒武纪科技有限公司 | 一种非线性函数运算装置及方法 |
CN110796246A (zh) * | 2019-10-29 | 2020-02-14 | 南京宁麒智能计算芯片研究院有限公司 | 一种基于线性分段的激活函数的硬件实现电路和方法 |
CN111078187A (zh) * | 2019-11-28 | 2020-04-28 | 南京大学 | 一种针对单精度浮点数的任意次方根求解方法及其求解器 |
Non-Patent Citations (4)
Title |
---|
FEI LYU 等: "Ultralow-Latency VLSI Architecture Based on a Linear Approximation Method for Computing Nth Roots of Floating-Point Numbers", IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS I: REGULAR PAPERS * |
HONGXI DONG 等: "PLAC: Piecewise Linear Approximation Computation for All Nonlinear Unary Functions", IEEE TRANSACTIONS ON VERY LARGE SCALE INTEGRATION (VLSI) SYSTEMS * |
史雄伟;王成;张春雷;陈乃奎;: "基于FPGA的浮点指数函数算法研究与实现", 计算机测量与控制 * |
高晓航: "快速硬件拟合技术研究及基于FPGA的实现", 中国优秀硕士学位论文全文数据库 信息科技辑 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113269637A (zh) * | 2020-12-28 | 2021-08-17 | 上海能链众合科技有限公司 | 一种基于区块链的智能设备数据的存证与验证方法 |
CN112685002A (zh) * | 2021-01-07 | 2021-04-20 | 南京晓庄学院 | 基于pwl的浮点数对数计算架构 |
CN113065648A (zh) * | 2021-04-20 | 2021-07-02 | 西安交通大学 | 一种低硬件开销的分段线性函数的硬件实现方法 |
CN113065648B (zh) * | 2021-04-20 | 2024-02-09 | 西安交通大学 | 一种低硬件开销的分段线性函数的硬件实现方法 |
CN114611052A (zh) * | 2022-03-14 | 2022-06-10 | 南京晓庄学院 | 采用通用分段线性方法的可重构多函数计算单元 |
CN114611052B (zh) * | 2022-03-14 | 2024-06-21 | 南京晓庄学院 | 采用通用分段线性方法的可重构多函数计算单元 |
Also Published As
Publication number | Publication date |
---|---|
CN112035796B (zh) | 2023-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112035796A (zh) | 面向集成电路的超低延时的整数次幂计算电路的优化方法 | |
Liu et al. | Design and analysis of approximate redundant binary multipliers | |
Chen et al. | Area-effective and power-efficient fixed-width Booth multipliers using generalized probabilistic estimation bias | |
Wang et al. | GH CORDIC-Based Architecture for Computing $ N $ th Root of Single-Precision Floating-Point Number | |
CN112486455A (zh) | 一种基于cordic方法求复数的n次开根号的硬件计算系统及其计算方法 | |
CN111984227A (zh) | 一种针对复数平方根的近似计算装置及方法 | |
Lyu et al. | Ultralow-latency VLSI architecture based on a linear approximation method for computing Nth roots of floating-point numbers | |
CN110187866B (zh) | 一种基于双曲cordic的对数乘法计算系统及方法 | |
Lyu et al. | PWL-based architecture for the logarithmic computation of floating-point numbers | |
CN117648959B (zh) | 支持神经网络运算的多精度操作数运算装置 | |
US10303439B2 (en) | Logarithm and power (exponentiation) computations using modern computer architectures | |
US20210064976A1 (en) | Neural network circuitry having floating point format with asymmetric range | |
CN111061992A (zh) | 一种基于抛物线的函数拟合方法及其装置 | |
CN111984226B (zh) | 一种基于双曲cordic的立方根求解装置及求解方法 | |
Chen et al. | Improved decimal floating-point logarithmic converter based on selection by rounding | |
Sadeghi et al. | Peano-vit: Power-efficient approximations of non-linearities in vision transformers | |
Lyu et al. | High-throughput low-latency pipelined divider for single-precision floating-point numbers | |
CN115936076A (zh) | 一种适配深度学习硬件加速器的可重构激活函数硬件装置 | |
CN113919264A (zh) | 基于通用线性近似算法的复数二次根计算电路设计方法 | |
CN114201140A (zh) | 指数函数处理单元、方法和神经网络芯片 | |
CN111353118B (zh) | 开平方的方法及相应的用于开平方的电路 | |
CN112685002A (zh) | 基于pwl的浮点数对数计算架构 | |
Ellaithy et al. | Double logarithmic arithmetic technique for GPU | |
Chen et al. | A novel decimal logarithmic converter based on first-order polynomial approximation | |
Rayapati et al. | EBACA: Efficient Bfloat16-based Activation Function Implementation Using Enhanced CORDIC Architecture |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |