CN103365824A - 使用级数展开的先验和非线性组件 - Google Patents
使用级数展开的先验和非线性组件 Download PDFInfo
- Publication number
- CN103365824A CN103365824A CN201310106033XA CN201310106033A CN103365824A CN 103365824 A CN103365824 A CN 103365824A CN 201310106033X A CN201310106033X A CN 201310106033XA CN 201310106033 A CN201310106033 A CN 201310106033A CN 103365824 A CN103365824 A CN 103365824A
- Authority
- CN
- China
- Prior art keywords
- value
- function
- integrated circuit
- assembly
- circuit according
- 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
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/544—Methods 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/02—Digital function generators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/02—Digital function generators
- G06F1/03—Digital function generators working, at least partly, by table look-up
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/02—Digital function generators
- G06F1/03—Digital function generators working, at least partly, by table look-up
- G06F1/035—Reduction of table size
- G06F1/0356—Reduction of table size by using two or more smaller tables, e.g. addressed by parts of the argument
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/02—Digital function generators
- G06F1/03—Digital function generators working, at least partly, by table look-up
- G06F1/0307—Logarithmic or exponential functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2101/00—Indexing scheme relating to the type of digital function generated
- G06F2101/08—Powers or roots
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2101/00—Indexing scheme relating to the type of digital function generated
- G06F2101/12—Reciprocal functions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Complex Calculations (AREA)
- Image Processing (AREA)
Abstract
本发明涉及使用级数展开的先验和非线性组件。在一个实施例中,实施先验函数或其他非线性函数的硬件基于该函数的级数展开。例如,泰勒级数展开可被作为基础来加以使用。可以使用泰勒级数的一个或多个初始项,并且这些初始项可以以硬件实施。在一些实施例中,针对泰勒级数的修改可以用于提高结果的精度。在一个实施例中,用于函数操作数的多个比特宽度可被接受用在给定的实施方式中。此外,还提供了一种用于构建在集成电路设计中使用的级数逼近组件库的方法,其中所述方法合成可接受的实施方式并测试结果的精度。产生预期精度等级的最小(面积方面)实施方式可以被选定为库元素。
Description
技术领域
本发明涉及集成电路领域,尤其涉及在集成电路中实施先验函数以及某些非线性函数。
背景技术
有一类数学函数被称为“先验”函数。先验函数是不能用有限的代数运算序列来进行表述的函数。其示例包括指数函数、对数函数以及三角函数。
先验函数在集成电路中具有多种用途。例如,在对诸如像素之类的视频值的操作中往往会用到不同的先验函数。作为示例,伽玛/去伽玛操作包含了先验函数。相应地,在集成电路中有必要实施先验函数。
由于先验函数不具有有限代数表示,因此这些函数不能直接用硬件实施。一种逼近先验函数的技术使用存储了给定先验函数在不同预选点的结果的查找表(LUT)。与函数的输入操作数最为接近的两个点从LUT中读出,并且这两个点之间的线性插值用于逼近针对该输入操作数的应答。为了实现可接受的精度等级,有必要将LUT做得非常大。某些其他非线性函数同样有可能需要大型LUT来提供可接受的精度等级(例如互反函数1/x、平方根等等)。
发明内容
在一个实施例中,实施先验函数或其他非线性函数的硬件基于该函数的级数展开。例如,泰勒级数展开可被作为基础来加以使用。可以使用泰勒级数的一个或多个初始项,并且这些初始项可以以硬件实施。在一些实施例中,针对泰勒级数展开的修改可以用于提高结果的精度。
在一个实施例中,用于函数操作数的多个比特宽度可被接受用在给定的实施方式中。提供了一种用于构建在集成电路设计中使用的级数逼近组件库的方法,其中所述方法合成可接受的实施方式并测试结果的精度。产生预期精度等级的最小(在面积方面)实施方式可被选定为库元素。
附图说明
以下的详细描述参考附图,现在对所述附图进行简要的描述。
图1是集成电路的一个实施例的框图。
图2是包含级数逼近组件的部件的一个实施例的框图。
图3是示出了泰勒级数展开的公式。
图4是基于泰勒级数展开的两个初始项实施的先验或其他非线性组件的一个实施例的框图。
图5是示出了为一个实施例生成用于泰勒级数展开的x-a项的框图。
图6是基于泰勒级数展开的三个初始项实施的先验或其他非线性组件的一个实施例的框图。
图7是关于某个间隔的中心的点的泰勒级数展开的一个实施例的图示。
图8是关于被选定成在间隔的每一个边界上都提供相等误差的点的泰勒级数展开的一个实施例的图示。
图9是关于第一导数项的线性插值逼近的一个实施例的图示。
图10是将线性插值逼近结果与泰勒级数展开相结合的经过修改的泰勒级数展开的图示。
图11是使用附加间隔的经过修改的泰勒级数的一个实施例的图示。
图12是使用级数的三个初始项的泰勒级数展开的一个实施例的图示。
图13是基于级数的三个初始项的经过修改的泰勒级数展开的另一个实施例的图示。
图14是针对三项泰勒级数的VFit(V拟合)逼近的图示。
图15是计算机可访问存储介质的一个实施例的框图。
图16是示出了用于构建先验函数实施库的一个实施例的流程图。
虽然本发明很容易采用不同的修改和替换形式,但是在附图中举例显示并且在这里详细描述了本发明的具体实施例。然而应该理解,这些附图以及与之相关的详细描述并不是为了将本发明局限于所公开的特定形式,相反本发明旨在覆盖落入附加权利要求所限定的本发明的实质和范围以内的所有修改、等价物以及替换方案。这里使用的标题仅仅用于组织目的,而不是用于限制说明书的范围。本申请中使用的单词“可以”是以一种宽松的意义使用的(也就是指代有可能),其并不具有强制意义(也就是指代必须)。同样,单词“包括”、“包含”指的是包括但不限于。
不同的单元、电路或其他组件可以被描述成是“被配置成”执行一个或多个任务。在这样的上下文中,“被配置成”是关于结构的广义陈述,其通常指的是“具有在工作过程中执行所述一个或多个任务的电路”。就此而论,即便所述单元/电路/组件当前并未开启,所述单元/电路/组件也可以被配置成执行所述任务。通常,形成与“被配置成”相对应的结构的电路可以包括硬件电路和/或存储可被执行以实施所述操作的程序指令的存储器。该存储器可以包括静态或动态随机存取存储器之类的易失性存储器和/或例如光盘或磁盘存储器、闪存、可编程只读存储器等等的非易失性存储器。同样,在本描述中,为了方便起见,不同的单元/电路/组件可被描述成执行一个或多个任务。这种描述应该被理解成是包含了短语“被配置成”。对于“被配置成”执行一个或多个任务的单元/电路/组件来说,对其进行的叙述并没有为该单元/电路/组件明确地援引U.S.C.112第6段的规定。
具体实施方式
现在转到图1,示出了集成电路10的框图。在所示出的实施例中,集成电路10包括多个部件12A-12H。部件12C以放大视图显示,并且其包含了组件14A-14C以及级数逼近组件16。在不同的实施例中,一个部件可以包括一个以上的级数逼近组件16,并且一个以上的部件可以包括多个级数逼近组件。
部件12A-12H可以被配置成执行所设计的集成电路10所要实施的不同操作。部件12A-12H可以是通过基于集成电路10的定义而将所述设计划分成逻辑子部分而被确定的。例如,集成电路10可以是片上系统(SoC)。部件12A-12H可以包括处理器、外设、通信交换电路、存储器控制器等等。所述部件可以具有多个层次等级(也就是说,这些部件可以包含其他部件)。例如,处理器部件可以包括取回和解码部件、缓存部件、指令发布部件、运行单元部件等等。除了其他部件之外,部件还可以包括组件,如果所述部件在层级中处于最低等级,那么所述部件可以仅仅包含组件。虽然在图1中没有显示,但是部件12A-12H通常可以根据需要互连,以便实施集成电路10的全部操作。
所述部件的组件14A-14C可以是不同的电路元件。举例来说,组件可以是数据流电路的实例,例如加法器、乘法器、复用器、移位器、旋转器、寄存器、存储器等等。组件14A-14C还可以是与在部件的寄存器传送级(RTL)描述中编写的表述相对应的逻辑电路。通常,RTL描述可以用诸如Verilog或VHDL之类的硬件设计语言来编写,并且可以依照注册状态(registered state)以及该状态上的逻辑操作来描述逻辑电路。所述注册状态可以保存在任何钟控存储设备中(例如寄存器、锁存器、触发器等等)。可以使用合成工具来读取RTL描述,并且可以产生与在集成电路10中实施的RTL描述相对应的逻辑电路。在其他情况中,设计人员可以开发定制电路,此外也可以借助原理图获取工具来获取定制电路。所述定制电路同样也可以是组件14A-14C。
级数逼近组件16可以是实施先验函数或其他非线性函数的组件。并非所有的非线性函数都是作为级数逼近组件实施的,但是其中一些函数可以从级数逼近实施方式中获益(例如互反函数1/x、平方根等等)。特别地,在一个实施例中,先验/非线性函数可以是由先验/非线性函数的级数展开导出的电路实施的。所述电路可以是从所述展开的选定项中导出的,和/或可以是从级数展开的初始项中修改而来的。在下文中更详细地论述了不同的实施例。在以下论述的一些情形中,先验函数可以作为示例来使用,但是级数展开逼近通常可以用于任何非线性函数。在其他情形中,使用倒数之类的非线性函数来作为示例。由此,级数逼近组件通常可以是使用先验函数或非线性函数的级数展开表示的项或是使用由级数展开项(例如经过优化而减小了误差得到的项)修改得到的项来逼近所述函数的组件。被逼近的函数可被称为级数逼近函数。
组件14A-14C以及16可以耦合在一起,以便实现部件12C的操作。由此,非级数逼近组件可以产生级数逼近组件的输入,反之亦然。此外,来自其他部件的输入以及针对其他部件的输出可以由先验和非级数逼近组件共同产生。
图2是可以在一个实施例中实施的部件12I的更具体的示例。图2的实施例可以是对像素值执行伽玛/去伽玛校正的伽玛/去伽玛校正部件。伽玛校正是一种非线性操作,其被应用于像素值以补偿人类视觉特性,从而相对于人类感知的光线和颜色的方式来改进像素比特的使用。伽玛校正通过将输入像素值提升至某个乘幂(通常被称为希腊字母“γ”并且由此作为函数名)来产生输出像素,其中所述乘幂对于伽玛函数而言通常介于0与1之间,对于去伽玛操作而言则大于1。伽马函数中接近零(像素值)的部分是略显线性的,随着像素值的增大,所述函数将会逐渐变得非线性。
在图2的实施例中,级数逼近组件可以包括log(x)组件20以及2X组件22。log(x)组件20可以实施以2为底的对数或log2。由于2到x次幂是x的log2的逆,因此2x组件20也可以被称为反对数组件。然而应该指出的是,在其他实施例中,只要用于对数函数和反对数函数的底匹配,那么可以使用任何底。另一个底的一个实施方式可以使用以2为底的对数函数以及反对数函数,并且所述实施方式可以将x的值与log2(底)相乘,从而得到正确的答案。举例来说,在一些实施方式中,需要以e为底,并且是可以结合log2(e)项实施。
在所示出的实施例中,输入像素值是整数,而级数逼近组件对浮点值操作。相应地,包含定点到浮点的转换组件24,以便转换像素值。
如上所述,伽玛校正是通过将像素值升至乘幂伽玛(powergamma)来执行的。通过采用像素值的对数,“升至乘幂”计算变成了乘法。相应地,在乘法器组件26中可以将log(x)组件20的输出与输入伽玛值相乘。其结果可被舍入并箝位在某个最大值,以便防止溢出(舍入/箝位组件28)。所得到的结果被提供给2x组件22。通过获取来自乘法器26的乘积的反对数,可以产生升至伽玛值的输入像素。该结果可以从浮点反向转换成定点(浮点到定点转换组件30)。在这个实施例中,在经过伽玛校正的像素中添加偏移(B),并且可以提供加法器组件32来添加所述偏移。其他实施例也可以不添加偏移,并且可以去除加法器组件32。所述结果可被舍入和箝位(组件34),并且可以被提供给复用器组件36。
应该指出的是,用于2-x和2x函数的泰勒级数值可以不同,因此这两个函数可以是独立的实施方式。在一些实施例中,可以实施2-x函数,并且可以用2-x实施2x。举例来说,2x在数学上与21、2x以及2-1的乘积是相等的。2x与2-1的乘积与2x-1是相等的,通过在指数中因数分解-1,所述2x-1也可以被写成2-(1-x)。相应地,2x在数学上同样等于21与2-(1-x)的乘积。通过使用以1-x作为输入的2-x函数以及将结果与2(21)相乘,也可以实现2x函数。与2相乘的运算可以作为移位来实施。如果需要的话,同样可以使用2的其他次幂。
在这个实施例中,输入像素范围的一部分是用线性运算逼近的。所述线性路径是作为乘法器组件38以及舍入/箝位组件40显示的。乘法器组件38可以被配置成将输入像素值与因数M相乘,其结果可以由舍入/箝位组件40执行舍入/箝位处理。在这个实施例中,得到的结果是复用器组件36的另一个输入。比较器组件42可以将像素值与使用线性路径的阈值相比较。所述阈值被显示成是比较器组件42的值Z输入。如果像素值小于或等于Z,则可以通过复用器组件36来选择线性路径。否则可以通过复用器组件36来选择非线性路径(包含组件20-34)。其他实施例未必实施线性路径,取而代之的是为整个函数范围使用非线性路径。在这样的实施例中,可以去除元件36、38、40和42。
如先前所述,关于级数逼近组件的一些实施例可以使用与该组件相对应的级数逼近函数的无限级数展开所导出的硬件来实施。所述无限级数展开将非代数的先验函数或非线性函数转换成代数。通过实施无限级数中的少量初始项,可以得到先验/非线性函数的相当精确的逼近。此外,在一些实施例中,级数逼近组件的误差特性可以通过修改初始级数展开实施方式来改进,以下将会对此进行更详细的论述。
在一个实施例中,泰勒级数展开被用作级数逼近组件的基础。在图3中示出了用于泰勒级数展开的公式。通常,泰勒级数展开(或者简称为“泰勒级数”)包含处于预选点(图3中的“a”)的函数值及其无限数量的导数。可以使用一个以上的预选点,在这种情况下,可选择与给定输入值最为接近的预选点,并且可以将其函数和导数值用于该给定输入值。为给定预选点使用的输入值的集合可被称为一个“间隔”,并且给定预选点可被称为与所述间隔相对应。如果仅仅使用一个预选点,那么所述间隔可以是x的整个范围。
通常,输入x的函数值(图3中的“f(x)”)是函数在点a的值(“f(a)”)与包含点a处的每个导数(“f'(a)”,“f''(a)”等等)和x与a之间的差值的乘积的总和。特别地,处于a的每个导数都可以除以与该导数的阶数相对应的阶乘(例如一阶导数被1的阶乘相除,二阶导数被2的阶乘相除,三阶导数被3的阶乘相除等等)。然后,所产生的结果可以与x和a之间的差值的导数阶数次幂相乘(对于一阶导数来说是“x-a”,对于二阶导数来说是“(x-a)2”,对于三阶导数来说是“(x-a)3”等等)。
如果级数逼近组件是用浮点操作数实施的,那么可以知道正规数的尾数介于正好1以及差不多2之间。如果a是在接近尾数范围中间的某个位置选择的,那么x-a的范围大约是-0.5到+0.5。x-a项升至的每一个附加乘幂将会导致产生越来越小的数字,由此减小了相应项在泰勒级数中的影响。如果在尾数范围中使用a的一个以上的值,那么较高阶导数的影响的减弱甚至会更为明显。相应地,以下将用于先验/非线性函数的泰勒级数的浮点实施方式用作示例。所述泰勒级数可以用于尾数生成,并且可以并行处理指数生成。
图4是示出了基于泰勒级数的浮点实施方式的级数逼近组件16的一个实施例的框图。图4的实施例实施泰勒级数中的最初两项(f(a)及其一阶导数f'(a))。该级数逼近组件16可以包括指数计算单元50以及尾数计算单元52。指数计算单元50被耦合成接收输入值的指数部分,并且被配置成产生输出指数。如果输出尾数需要规格化,那么可以对所述输出指数进行调整。
在所示出的实施例中,尾数计算单元52包括对于该实施方式中的每个选定的a的f(a)和f'(a)的值的查找表(LUT)(附图标记54)。在该表格中,预选点(“a”)的数量可以随实施例改变。每一个预选点都可以与尾数值的一个间隔相关联。相应地,所述尾数的最高有效位(MSB)可以定义哪一个间隔包含了输入尾数,并且这些MSB可以充当LUT54的输入。LUT54可以被配置成从响应于输入尾数的MSB而被选择的条目中输出f(a)和f'(a)的值。
来自LUT54的f(a)输出可以耦合作为加法器56的输入,并且f'(a)输出可以耦合作为乘法器58的输入。加法器56和乘法器58可以统称为乘法-加法电路或是乘法-加法单元。乘法器58的输出可以耦合作为加法器56的输入。所述乘法器58可以被耦合成接收来自LUT54的f'(a)值以及基于输入尾数及a的x-a项。
特别地,在一个实施例中,如果选择a作为间隔的中心,那么可以采用如图5所示的方式来计算x-a。图5示出了x的尾数部分(输入值)以及与x相对应的a值(也就是包含x的间隔的a值)。这两个尾数都是以处于二进制小数点左侧的默认1开始。此外,这两个尾数全都具有定义了所述间隔的相同的MSB尾数比特集合。由于这些比特还可以用作LUT54的地址比特,因此在图5中将这些比特例证成地址比特a6:a0。地址比特之后的MSB被显示成图5中的x值的符号比特(“s”)。该符号比特可被称为间隔符号比特。如果s比特是1,那么x的值大于或等于a,并且x-a的值是正的。如果s比特是零,那么x的值小于a并且x-a的值是负的。
如图5所示,如果所选的a处于间隔的中心,那么a的最低有效位(低于间隔符号比特)是零。由此,如果x大于a,那么x-a的值仅仅是x的最低有效位(例如图5中的d6:d0)。如果x-a的值为负,那么x-a是x的最低有效位的二进制反码。
对于基于图5的实施例来说,补充增量电路60可以被配置成产生x-a的值。如果x-a为正(间隔符号比特是a1),那么补充增量电路60可以被配置成将x的最低有效位作为x-a来传递。如果x-a为负,那么补充增量电路60可以被配置成将x的最低有效位的二进制反码作为x-a来传递。更普遍的,在其他实施例中,补充增量电路60可以被加法器取代,所述加法器被配置成从x中减去a。所述补充增量电路60的输出可以耦合作为乘法器58的输入。
作为选择,图4的实施例可以包括舍入LUT62。LUT54以及乘法-加法电路56/58会为每一个输入值x产生先验/非线性函数的逼近值。由此,在至少一些结果中有可能存在某些不精确性。特别地,所述结果未必满足浮点标准(例如电气与电子工程师协会(IEEE)标准754以及后续标准)的精度要求。该IEEE标准要求与完全精确的结果相比,结果要精确到+/-1/2的最小精度单位(unit in the last place,ULP)以内,并且还要求舍入在统计上是无偏向性的(也就是说,舍入关系的一半是上舍入,而另一半是下舍入)。在一个实施例中,在不包含舍入LUT62的情况下,级数逼近组件16可以产生精度处于一个完整ULP以内的结果。所述舍入LUT62可被编程,以便执行正确的舍入,包括满足在统计上无偏向性的要求。
在一些情况中,不满足IEEE标准精度的结果也是可以接受的。例如,在图形操作中可以使用级数逼近函数,并且由于视觉图像仍旧非常精确且在视觉上是赏心悦目的,因此一定数量的不精确性也是可以接受的。然而,如果需要更精确的结果,那么可以包含舍入LUT62。所述舍入LUT62可以包括用于每一个不产生IEEE精确结果的输入尾数值的舍入值,并且可以产生将结果舍入到IEEE精确结果的舍入因数。在一个实施例中,LUT62可以是两个表格:一个表格列举产生的结果是1ULP低的输入尾数,另一个表格列举产生的结果是1ULP高的输入尾数(与IEEE的正确结果相比较)。如果在表格中找到输入尾数,那么这些表格可以产生一个1,并且可以使用该输出来控制复用器,所述复用器选择舍入值-1(1ULP高),+1(1ULP低),或者在任何一个表格都不包含输入尾数的情况下选择默认值零。
在以下更详细描述的一个实施例中,可以为级数逼近组件16产生一个可执行模型。所述可执行模型可以用高级编程语言来表述,例如C、C++等等。所述可执行模型可以被编译成可执行二进制码,并且可以在计算机中的处理器上运行。作为替换,所述可执行模型也可以用可执行二进制码或是低级处理器指令来表述。更进一步,级数逼近组件16的RTL描述可以被模拟成可执行模型。所述可执行模型可以针对每一个可能的输入尾数运行,并且可以记录将结果舍入到+/-1/2ULP以内的舍入值来填充舍入LUT62。舍入LUT62的输出可以耦合作为加法器56的输入,并且加法器输出可以是IEEE的正确结果。在不包含舍入LUT62的实施例中,加法器56可以是双输入加法器。
该结果有可能不是正规浮点数(也就是说,尾数并不是在二进制小数点左侧并且剩余数字在二进制小数点右侧的单个二进制1。可以提供规格化电路64来对尾数进行规格化。加法器66可以被配置成通过添加规格化电路64应用的移位量来调整指数计算单元50产生的指数。
可以根据需要选择尾数宽度,以便在来自级数逼近函数(或是来自其中级数逼近函数是一个组件的完整函数)的结果中提供预期的精度等级。举例来说,如果所要操作的值是像素,那么稍大于预期颜色深度的尾数宽度是可以接受的。通常,尾数越宽,则来自级数逼近函数的结果与精确结果相比就越精确(因为在结果的LSB中出现误差)。然而,更宽的尾数通常也会导致更宽的乘法器58以及加法器56。特别地,对于乘法器58来说,在集成电路10中实现级数逼近组件16的过程中,增大的宽度可能导致面积的增大。如果为给定实施方式使用较窄的尾数,那么有可能需要定义更多的间隔来减小最大误差。更多的间隔可能增大LUT54的尺寸,但是较窄的尾数可能导致乘法器58/加法器56的尺寸减小。由此可以采用多种设计变体来满足级数逼近组件16的精度目标。在一个实施例中,可以使用为级数逼近组件15自动选择参数的方法。以下提供与这种方法相关的附加细节。
图6是级数逼近组件12的另一个实施例的框图。图6的实施例可以实施泰勒级数中的最初三项(对应于f(a),f'(a)以及f″(a))。与图4的实施例相似,图6的实施例可以实施指数计算单元50、尾数计算单元52以及加法器66来调整指数,以便进行规格化。尾数计算单元52可以包括LUT54、乘法器58、加法器56(具有三个或四个输入而不是两个或三个输入)、规格化电路64、补充增量电路60、以及可选地包括以与图4的实施例相似的方式耦合的舍入LUT62。
此外,图6的实施例可以包括f″(a)LUT70、乘法器72以及平方电路74。平方电路74可被耦合成接收x-a项,并且可以被配置成求取其平方值,由此产生作为乘法器72的输入的(x-a)2项。通常,平方电路74可以是一个乘法器。然而,由于已经知道同一个值被同时用作乘法器的操作数,因此乘法器可以从诸如乘法器58和72之类的完整通用乘法器简化而来。
乘法器72的另一个输入可以是来自LUT70的f″(a)项。与LUT54相似,LUT72可以用尾数的MSB来索引。LUT72可以与LUT54具有相同数量的条目,并且可以根据需要在物理上包含在相同的表格中。LUT70的输出可以是f″(a)项与2的阶乘(或者仅仅是2)相除的结果,以便与图3所示的泰勒级数的第三项相匹配。相应地,乘法器72的输出可以是泰勒级数的第三项。
应该指出的是,图4和6中所示的级数逼近组件16的实施例是组件16的逻辑表示。可以产生用于描述所示实施例的组件16的RTL描述,并且所述RTL描述可以用合成工具来进行合成,以便产生实际的实施方式。在不同的实施例中,所述合成工具可以产生逻辑设计的等效布尔值。
在不同的实施例中,可以支持多种级数逼近函数。例如,一个实施例可以支持以下的一项或多项:log(x),antilog(x)(或2x)、1/x、平方根倒数、平方根以及2-x。其他实施例可以根据需要支持上述函数以及其他函数的任何子集或是所有上述函数以及其他函数。
对于所支持的每一个函数来说,可以开发LUT表格54和70以基于泰勒级数逼近来计算尾数。可以直接由指数计算单元50计算指数。例如,对于1/x来说,该指数是输入指数减一的负值,但是尾数正好是1.0的情况除外,在该情况下,指数是输入指数的负值(也就是没有-1因数)。反平方根所具有的指数是输入指数除以2减去1之后的负值(如果尾数正好是1.0,则没有-1因数)。
接下来转到图7-14,这些附图以图形的方式示出了用于从泰勒级数中导出的实施例的级数逼近组件16的不同实施例。使用函数1/x作为示例。在每个图中,水平轴是函数的x输入的尾数部分,垂直轴是f(x)的值。该函数以实线曲线80示出。来自组件16的相应结果在每个图中以一条或多条虚线示出。
现在转到图7,该图示出了使用泰勒级数的最初两项以及尾数的单个间隔的泰勒级数。在这个示例中,a被选定成是所述间隔的中点(间隔/2)。由于在这个示例中示出了一个间隔,因此a是1.5。虚线82示出了该函数的两项泰勒级数的结果。在该图中可以看出,误差在a上最小(误差为零),并且会随着与a相隔的距离的增大而增大。包含更多的间隔可减小这种误差。
在这个示例中,最大误差在所述间隔的端点(对于一个间隔的情况而言,是值为1.0或是差不多2.0的尾数)。对于很多函数来说,在间隔一端处的误差可能大于另一端处的误差,因此最大误差可以是在间隔的一端处出现的误差。在函数1/x的示例中,未被修改的两项泰勒级数逼近在1.0处的误差在x=1.0处约为.111,以及在x=2.0处约为.0556。然而,选择a处于间隔的中心,可以允许x-a生成仅仅针对补充增量电路60。
在另一个实施例中,对两项泰勒级数进行优化可以使得所述间隔的每一端上的误差相等(或者在级数逼近组件16的误差范围中近似相等)。一种用于在每一端提供近似相等的误差的机制是将f'(a)项调整成所述函数在该间隔上的平均斜率(也就是平均的一阶导数f'(a))。对于函数1/x来说,该斜率可以是-0.5,并且a可以是2的平方根(例如约为1.414)。由于最大误差在间隔的某一端增大(其在图7的实施例中并不具有最大误差)的同时会在另一端减小,因此最大误差的大小可以减小。在图8中用虚线84图示了函数1/x的一个这样的实施例。每一端上的最大误差有可能约为0.086。为了继续使用处于间隔中点的a,可以在具有平均斜率的优化线条上重新评估f(a)。
应该指出的是,在其他实施例中,a可以用不同的方式选择。在这样的实施例中,可以使用一个完整的加法器来取代补充增量电路60,由此增大了x-a生成电路的尺寸。
图9示出了根据一个实施例使用了线性插值逼近。所述线性插值逼近可以被定义成是将级数逼近函数的间隔端点与一条线(例如图9中的线条86)相连。相应地,对于一个间隔的示例来说,最小误差(零值)处于端点x=1.0和2.0,而最大误差可能在中心附近出现。对于图9中的1/x的示例来说,最大误差可能在x=2的平方根的位置出现,并且可能约为0.086。如果实施的是线性插值逼近,难么线条86的斜率可以是来自LUT54的关于每一个间隔的f'(a)输出。
作为替换,已存储的f(a)值可以用于计算间隔的斜率f'(a)。在这样的实施例中,保存每一个间隔的端点的f(a)项,并且可以从LUT54中读出给定间隔的两个连续项。在一个实施例中,LUT54可被分成偶数和奇数部分,以免将第二读取端口添加到LUT54。一个f(a)项可以从偶数部分读取,并且另一个可以从奇数部分读取。可以使用加法器来从这两个f(a)项计算输入乘法器56的斜率(f'(a))项。可以从间隔的端点(例如从与给定输入值x更为接近的端点)而不是中心计算x-a项。此外,可以添加复用器来选择作为f(a)使用的端点值。
图10示出逼近1/x函数的另一个实施例。在该实施例中,将两项泰勒级数逼近(例如以上对照图7或图8描述的任一实施例)与图9的线性插值逼近相结合。图10的实施例在这里可被称为“中值拟合”。可以通过求取泰勒级数逼近之一与线性插值逼近的平均值来产生所述中值拟合。特别地,在一个实施例中,该平均值可以是几何平均值。在图10中示出了单个间隔示例的平均计算的结果。如果使用多个间隔,那么可以单独求取这些间隔的平均值,以便产生用于这些间隔的LUT值。在图10中用虚线88示出了所得到的逼近值。
对于中值拟合来说,最大误差可能在三个点上出现,但是该误差可能小于先前实施例的最大误差。特别地,最大误差可能处于端点并接近中间(举例来说,在图10所示的1/x的情况中处于x=2的平方根的位置)。在本示例中,最大误差可能约为0.043。
图11是示出了使用4个间隔时的逼近的图示。在图11中,这些间隔是用处于x=1.25、1.5、1.75以及2.0的垂直加粗虚线限定的。在每一个间隔内部,可以使用图7-10中的任一实施例。由此,这四条虚线90、92、94和96示出了每一个间隔内部的逼近。将图11与图7-10进行比较,可以清楚了解,通过使用附加间隔,可以显著减小误差。相应地,在每一个间隔的逼近复杂度与所使用的间隔数量之间可以保持平衡。
图12是在一个实施例中使用单个间隔的三项泰勒级数逼近的示例。在逼近中添加二阶导数项通常会具有在a的两边“弯曲”所述逼近的效果,由此会在两边将所述逼近更接近地引到所述曲线。在图12中,基于最初三项的逼近是以曲线110示出的。在图12中可以看出,三项逼近中的误差在端点处最大。
可以产生一种改进的三项泰勒级数逼近。举例来说,在图13中由曲线112示出了其中一种改进。该逼近将间隔端点处的误差减小到近似于零。在一个实施例中,图13的逼近可以包括使用所述间隔上的平均斜率作为f'(a)项(与图8的两项优化相类似)。假设f″(a)项等于0,那么可以在其中一个端点处(例如1.0端点)计算误差。然后,该误差可被设置成等于泰勒级数中的第三项,并且可以求解f″(a)来产生改进的三项泰勒级数逼近。在一个实施例中,f″(a)项可以是0.66667,并且误差可以减小到大约-0.01336(最小)以及0.009(最大)。对于1/x示例来说,具有相等的最小和最大误差+/-0.00736的最优解是通过试错法确定的。所述最优解包括值为0.66422的f(a)、值为-0.48531的f'(a)以及值为0.68612的f″(a)。
用于为广义函数(以及多个间隔)找出最优的三项泰勒级数逼近的处理可以是一个计算量很大的试错任务。图12所示的一种用于逼近三项泰勒级数的方法是执行这里描述的“Vfit(V拟合)”。所述Vfit使用与两项泰勒级数相同的硬件以及一个附加的加法器,以便从存储在LUT54中的f'(a)项以及存储在LUT54中的f''(a)项产生正确的f'(a)项。特别地,在较陡峭的子间隔中,使用来自LUT54的f″(a)项以使来自LUT54的f'(a)项更陡峭,并且使用来自LUT54的f″(a)项以使来自LUT54的f'(a)项更浅。在图14中示出了用于一个实施例的Vfit。在Vfit处理过程中,间隔可被视为两个子间隔,其中一个子间隔始于所述间隔的一个端点并且结束于a,而另一个子间隔始于a并且结束于所述间隔的另一端点。在图14中示出了Vfit的简化版本,所述版本选择a在间隔的中心处。在一个子间隔(例如图14的虚线98)上可以执行中值拟合。更具体地,所述中值拟合可以在具有更大的二阶导数的子间隔上执行。用于子间隔的中值拟合在处于中心的端点(a)终止,该端点并不在函数曲线80上。所述端点在图14中被例示为点100。对于另一个子间隔,可构造伪中值拟合线(图14中的线条102)。在一个实施例中,线条102可以通过以下处理构造:(1)在曲线80上找到点f(t),其中f(t)是通过点100并前进至间隔边界的线条与曲线80相切的点;以及(2)构造具有如下特性的伪中值拟合线,即曲线80与所述线条之间在t上的垂直距离等于所述线条与曲线80之间在间隔端点上的垂直距离。最后,用于该间隔的f'(a)值可以是穿过点100并且在间隔边缘(例如图14中的线条104)上与中值线98以及伪中值线102具有符号和幅度相同的距离的线条的斜率。
LUT54和70可以基于图14所示的逼近以如下方式来填充。f(a)值可以是点100;f'(a)值可以是线条104的斜率,以及f''(a)值可以是可被添加至f'(a)值而为每个子间隔产生图14的线条98和102的斜率的正值或负值。在一个实施例中,对于1/x示例来说,其结果可以是f(a)=.64983(在a=1.5),f'(a)=-.48583以及f″(a)=0.18084(因此,在较为陡峭的子间隔中,f'(x)=-0.66667,而在较浅的子间隔中,f'(x)=-0.30500)。
在另一个实施例中,可以使用更为优化的Vfit,其中为每一个子间隔都产生一个中值拟合线,并且所选择的a是两条中值拟合线相交的点。然后,f'(a)是根据穿过交叉点并且在间隔边缘与每一个子间隔的中值线都具有符号和大小相等的距离的线条的斜率计算的。在一个实施例中,1/x示例的结果可以是a=1.37258,f(a)=0.71783,f'(a)=-0.54642以及f''(a)=0.18214(因此,在较为陡峭的子间隔中,f'(a)=-0.72855,而在较浅的子间隔中,f'(a)=-0.36428)。
现在转到图15,示出了计算机可访问存储介质200的一个实施例的框图。一般来说,计算机可访问存储介质可以包括可供计算机在使用过程中访问以向计算机提供指令和/或数据的任何存储媒体。举例来说,计算机可访问存储介质可以包括磁性或光学媒体之类的存储媒体,例如磁盘(固定或可移除)、磁带、CD-ROM、DVD-ROM、CD-R、CD-RW、DVD-R、DVD-RW或蓝光。存储媒体还可以包括易失或非易失存储媒体,例如RAM(例如同步动态RAM(SDRAM)、RambusDRAM(RDRAM)、静态RAM(SRAM)等等)、ROM或闪存。存储媒体可以物理包含在由所述存储媒体为之提供指令/数据的计算机内部。作为替换,存储媒体也可以与计算机相连。例如,存储媒体可以经由网络或无线链路连接到计算机,例如网络连接存储器。存储媒体还可以通过通用串行总线(USB)之类的外设接口来进行连接。
图15的计算机可访问存储介质200可以存储以下的一项或多项:合成工具120、级数逼近组件生成器122、级数逼近组件RTL124、部件RTL126和/或一个或多个级数逼近组件可执行模型128。合成工具120可以包括当在计算机上运行时实施这里描述的合成工具的操作的指令。在一个实施例中,合成工具120可以是商用工具,例如SynopsysInc.、Cadence Design Systems,Inc.等等提供的工具。同样,级数逼近组件生成器122可以包括当在计算机上运行时实施这里描述的级数逼近组件生成器的操作的指令。所述级数逼近组件RTL124可以包括不同的级数逼近组件实施例的RTL描述。部件RTL126可以包括用于将级数逼近组件、非级数逼近组件和/或其他部件实例化的不同部件的RTL描述。级数逼近组件可执行模型128可以包括与级数逼近组件RTL124相对应的可执行模型。载体介质可以包括计算机可访问存储媒体以及诸如有线或无线传输之类的传输媒体。
还提供一种用于开发级数逼近组件库的方法,以便帮助设计人员以硬件有效实施级数逼近函数。合成工具可以使用组件的底层单元库来对级数逼近组件的LUT以及乘法-加法电路(相关示例参见图4和6)进行合成,从而尝试产生有效的网表实施方式。然而,合成工具的版本、合成工具的厂家以及单元库有可能会存在很大的差异。相应地,如果合成工具的版本或厂家发生变化,需要具有组件的可重新合成版本(例如RTL124)来重新生成所述库。换言之,满足集成电路10的精度需求且(在合成后产生的组件所占用的面积方面)最小的选择可能会依照合成工具的版本/厂家而不同。
级数逼近组件生成器122可以被配置成为处于用户设定的输入准则内的每一个可能的实施方式产生级数逼近组件RTL124以及级数逼近组件可执行模型128。图16是示出了级数逼近组件生成器122的一个实施例的操作的流程图。虽然为了易于理解采用了特定顺序来显示这些方框,但是也可以使用其他顺序。级数逼近组件生成器122可以包括指令,当在计算机上运行所述指令时,所述指令在计算机上实施图16所示的操作。
级数逼近组件生成器122可以被配置成接收描述级数逼近组件的可接收输入参数范围(方框130)。举例来说,这些输入参数可以包括可接受尾数宽度和/或查找表深度(间隔)的范围。LUT输出的深度(f(a)、f'(a)以及f″(a))可以是输入参数宽度,或者也可以直接用参数来改变。所述参数还可以包括所要实施的先验/非线性函数。在一些实施例中,这些参数还可以规定可被允许的级数展开(例如中值、线性插值、泰勒级数、两项、三项等等)。所述参数可以用任何预期的方式提供给级数逼近组件生成器122。例如,用户可以使用一个或多个输入设备来直接输入这些参数。此外,这些参数还可以保存在参数文件中。用户可以选择定义包含了用户认为未满足需求的实施方式的范围,以便确保所述方法的有效范围。换言之,如果尝试了至少一些不能实施的选项,则可以确信在该方法中产生并分析了很多可以实行的解决方案。
级数逼近组件生成器122可以在规定的范围内为每一个可能的级数逼近组件实施方式产生级数逼近组件RTL(方框132)。举例来说,每一个实施方式都可以被保存在其自己的RTL文件中。在规定的限度内,所产生的实施方式的集合可以是穷举性的。
级数逼近组件生成器122可以调用合成工具120来合成每一个实施方式(方框134)。在一些实施例中,级数逼近组件生成器122还可以产生每一个实施方式的可执行模型(方框136)。所述可执行模型可以用高级编程语言来表述,例如C或C++,并且可以被编译成可执行代码。通常,可执行模型可以模拟在相应的级数逼近组件生成器122中描述的电路的操作,由此为相同的输入操作数产生相同的结果。举例来说,所述可执行模型可以与对应于集成电路中的其他组件的可执行代码一起被用于验证目的。在一个实施例中,可执行模型可以包括与每一个可能的输入的结果有关的查找表,以及响应于输入操作数来读取所述表格的代码。在另一个实施例中,可执行代码可以包括根据实施方式来计算结果的代码。
级数逼近组件生成器122可以调用可执行模型,并且可以在每一个可能的输入上运用所述模型(方框138)。级数逼近组件生成器122可以将来自模型的结果与正确的结果(IEEE的精确结果或是处于1ULP的精度范围内的结果,这取决于是否需要IEEE的精确结果)相比较。该模型可以产生正确的结果(以此作为与RTL实施方式相对应的结果的补充)并进行比较。作为替换,级数逼近组件生成器122可以产生正确的结果并进行比较。作为选择,如果打算使用舍入LUT62,那么级数逼近组件生成器122可以通过记录产生不精确结果的输入以及不精确的值来产生LUT62(方框140)。所述值(尤其是不精确的负值)可以保存在LUT62中,以便校正这种不精确性。
一旦为每一个实施方式完成了合成以及精度确定(方框136和138结束),则级数逼近组件生成器122可以比较所合成的每一个实施方式的结果所占用的面积,并且可以选择满足级数逼近组件的精度需求且面积最小的实施方式(方框142)。所述面积可以通过放置所述合成提供的网表并对其进行布线来确定。作为替换,所述面积可以是从网表调出的门电路、定制电路和/或标准单元以及这些不同电路的相关尺寸中确定的。所选择的实施方式可被添加到实施库中,所述实施库可被提供给部件设计人员,以便在其部件中被实例化(方框144)。
对本领域技术人员来说,一旦全面了解了以上公开,那么众多的变体和修改将会是显而易见的。以下的权利要求应被解释成包含了所有这些变体和修改。
Claims (18)
1.一种集成电路,包括:
耦合在一起以实施为集成电路定义的操作的多个组件,其中所述多个组件中的第一组件是实施一个函数的级数逼近组件,并且其中所述级数逼近组件使用从所述函数的级数展开表示中导出的硬件来实施所述函数。
2.根据权利要求1所述的集成电路,其中所述硬件对应于级数展开中的选定项。
3.根据权利要求2所述的集成电路,其中所述选定项包括所述函数的一阶导数。
4.根据权利要求3所述的集成电路,其中所述选定项还包括所述函数的二阶导数。
5.根据权利要求2所述的集成电路,其中所述选定项被修改成逼近所述选定项。
6.根据权利要求5所述的集成电路,其中一阶导数项被修改成中数值拟合。
7.根据权利要求5所述的集成电路,其中二阶导数项被修改成v拟合。
8.根据权利要求1所述的集成电路,其中所述第一组件包括:
存储与集成电路实施的函数相对应的多个第一值以及多个第二值的表格,其中所述多个第一值包括所述函数在多个选定点上的值,并且其中所述多个第二值包括所述函数的一阶导数在所述多个选定点上的值,其中所述表格被耦合成接收所述函数的输入操作数的至少一部分,并且被配置成输出所述多个第一值中的一个第一值以及所述多个第二值中的一个第二值,其中所述第一值和第二值对应于所述函数的级数逼近中的项;以及
与所述表格相耦合的乘法-加法电路,所述乘法-加法电路被配置成将第二值乘以输入操作数与多个选定点中对应于所述第一值以及所述第二值的第一选定点之间的差值,并且其中所述乘法-加法电路被配置成将乘法结果与第一值相加。
9.根据权利要求8所述的集成电路,其中所述表格还被配置成存储多个第三值,其中所述多个第三值包括所述函数在所述多个选定点的二阶导数,并且其中所述表格被配置成响应于输入操作数的所述部分来输出所述多个第三值中的一个第三值。
10.根据权利要求9所述的集成电路,其中所述乘法-加法电路被配置成将第三值乘以输入操作数与第一选定点之间的差值的平方,以产生第二结果,并且其中所述乘法-加法电路还被配置成将第二结果与所述结果以及第一值相加。
11.根据权利要求8所述的集成电路,其中第一选定点处于使用第一值和第二值的输入操作数值的间隔的中心,以及其中如果差值为正,那么配置成计算所述差值的所述集成电路被配置成提供所述第一值的多个最低有效位作为所述差值。
12.根据权利要求11所述的集成电路,其中如果差值为负,则所述差值是多个最低有效位的二进制反码。
13.一种电路,包括:
耦合成接收函数的输入操作数的至少一部分的表格,所述表格具有多个条目,并且所述多个条目中的每一个都与输入操作数值的间隔相对应,并且其中所述多个条目中的每一个都存储与所述函数的级数展开中的第一个项相对应的第一值以及与所述级数展开中的第二个项相对应的第二值,其中所述表格被配置成输出来自多个条目中的选定条目的第一值和第二值,所述选定条目是响应于输入操作数而被选定的;以及
与所述表格耦合的乘法器,所述乘法器被配置成将第二值乘以输入操作数和处于值的间隔内部的第三值之间的差值;以及
与所述表格以及乘法器耦合的加法器,所述加法器被配置成将第一值和乘法器的结果相加。
14.根据权利要求13所述的电路,其中第一值是所述函数在第三值上的值,并且第二值是所述函数的一阶导数在第三值上的值。
15.根据权利要求14所述的电路,其中第三值处于所述间隔的中心。
16.根据权利要求14所述的电路,其中所述第三值是加法器的结果误差对于所述间隔的每一端近似相等的值。
17.根据权利要求14所述的电路,其中第二值是求取所述函数在第三个点上的一阶导数以及所述一阶导数的第二逼近值的平均值的结果。
18.根据权利要求17所述的电路,其中所述第二逼近值是通过在所述函数的间隔端点之间构造直线产生的。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/435,900 | 2012-03-30 | ||
US13/435,900 US9015217B2 (en) | 2012-03-30 | 2012-03-30 | Transcendental and non-linear components using series expansion |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103365824A true CN103365824A (zh) | 2013-10-23 |
CN103365824B CN103365824B (zh) | 2016-08-24 |
Family
ID=48044571
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310106033.XA Expired - Fee Related CN103365824B (zh) | 2012-03-30 | 2013-03-29 | 使用级数展开的先验和非线性组件 |
Country Status (7)
Country | Link |
---|---|
US (1) | US9015217B2 (zh) |
EP (1) | EP2645199A1 (zh) |
JP (1) | JP5666649B2 (zh) |
KR (1) | KR101471750B1 (zh) |
CN (1) | CN103365824B (zh) |
TW (1) | TWI484352B (zh) |
WO (1) | WO2013148619A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112749803A (zh) * | 2021-03-05 | 2021-05-04 | 成都启英泰伦科技有限公司 | 一种神经网络的激活函数计算量化方法 |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130185345A1 (en) * | 2012-01-16 | 2013-07-18 | Designart Networks Ltd | Algebraic processor |
US9207880B2 (en) * | 2013-12-27 | 2015-12-08 | Intel Corporation | Processor with architecturally-visible programmable on-die storage to store data that is accessible by instruction |
GB2525648C (en) * | 2014-05-01 | 2019-10-09 | Imagination Tech Ltd | Approximating functions |
US9779272B2 (en) * | 2015-04-14 | 2017-10-03 | Analog Devices, Inc. | Extended use of logarithm and exponent instructions |
CN105354006B (zh) * | 2015-11-27 | 2017-11-21 | 中国科学院计算技术研究所 | 一种非线性函数的快速运算装置及其方法 |
US10713013B1 (en) * | 2016-02-24 | 2020-07-14 | Xilinx, Inc. | Apparatus and method for an exponential operator for a half-precision floating-point format |
US10042607B2 (en) | 2016-08-22 | 2018-08-07 | Altera Corporation | Variable precision floating-point multiplier |
US10055195B2 (en) | 2016-09-20 | 2018-08-21 | Altera Corporation | Variable precision floating-point adder and subtractor |
US10331162B2 (en) * | 2017-05-15 | 2019-06-25 | International Business Machines Corporation | Power series truncation using constant tables for function interpolation in transcendental functions |
US10970080B2 (en) | 2018-02-08 | 2021-04-06 | Marvell Asia Pte, Ltd. | Systems and methods for programmable hardware architecture for machine learning |
US11016801B1 (en) | 2018-05-22 | 2021-05-25 | Marvell Asia Pte, Ltd. | Architecture to support color scheme-based synchronization for machine learning |
US10929778B1 (en) | 2018-05-22 | 2021-02-23 | Marvell Asia Pte, Ltd. | Address interleaving for machine learning |
US10929779B1 (en) | 2018-05-22 | 2021-02-23 | Marvell Asia Pte, Ltd. | Architecture to support synchronization between core and inference engine for machine learning |
US10997510B1 (en) | 2018-05-22 | 2021-05-04 | Marvell Asia Pte, Ltd. | Architecture to support tanh and sigmoid operations for inference acceleration in machine learning |
US10929760B1 (en) * | 2018-05-22 | 2021-02-23 | Marvell Asia Pte, Ltd. | Architecture for table-based mathematical operations for inference acceleration in machine learning |
US10891136B1 (en) | 2018-05-22 | 2021-01-12 | Marvell Asia Pte, Ltd. | Data transmission between memory and on chip memory of inference engine for machine learning via a single data gathering instruction |
US10871946B2 (en) | 2018-09-27 | 2020-12-22 | Intel Corporation | Methods for using a multiplier to support multiple sub-multiplication operations |
US10732932B2 (en) | 2018-12-21 | 2020-08-04 | Intel Corporation | Methods for using a multiplier circuit to support multiple sub-multiplications using bit correction and extension |
US20210200539A1 (en) * | 2019-12-28 | 2021-07-01 | Intel Corporation | Generic linear unit hardware accelerator |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6581085B1 (en) * | 1999-05-12 | 2003-06-17 | Ati International Srl | Approximation circuit and method |
JP2005227811A (ja) * | 2004-02-10 | 2005-08-25 | Olympus Corp | 近似回路 |
US20080228846A1 (en) * | 2007-03-16 | 2008-09-18 | Fujitsu Limited | Processing apparatus and control method thereof |
CN101741775A (zh) * | 2009-12-22 | 2010-06-16 | 上海大学 | 基于泰勒展开的单频率的ofdm时变信道估计方法 |
WO2012025796A1 (en) * | 2010-08-27 | 2012-03-01 | M.S. Ramaiah School Of Advanced Studies | Method and apparatus for direct digital synthesis of signals using taylor series expansion |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3003A (en) * | 1843-03-17 | Improvement in the method of propelling vessels by means of continuous streams of water | ||
US4482975A (en) * | 1982-03-29 | 1984-11-13 | Motorola, Inc. | Function generator |
US5197024A (en) | 1989-06-14 | 1993-03-23 | Pickett Lester C | Method and apparatus for exponential/logarithmic computation |
US5224064A (en) | 1991-07-11 | 1993-06-29 | Honeywell Inc. | Transcendental function approximation apparatus and method |
JP3091574B2 (ja) | 1992-07-21 | 2000-09-25 | 三洋電機株式会社 | データ変換回路及びデータ変換方法 |
US5367702A (en) * | 1993-01-04 | 1994-11-22 | Texas Instruments Incorporated | System and method for approximating nonlinear functions |
US6058473A (en) | 1993-11-30 | 2000-05-02 | Texas Instruments Incorporated | Memory store from a register pair conditional upon a selected status bit |
US5600581A (en) | 1995-02-22 | 1997-02-04 | Motorola, Inc. | Logarithm/inverse-logarithm converter utilizing linear interpolation and method of using same |
US5963460A (en) | 1996-12-17 | 1999-10-05 | Metaflow Technologies, Inc. | Apparatus for computing transcendental functions quickly |
US6223192B1 (en) * | 1997-10-23 | 2001-04-24 | Advanced Micro Devices, Inc. | Bipartite look-up table with output values having minimized absolute error |
US6127860A (en) | 1997-11-17 | 2000-10-03 | Lucent Technologies, Inc. | Linear expansion based sine generator |
US6363405B1 (en) | 1997-12-24 | 2002-03-26 | Elbrus International Limited | Computer system and method for parallel computations using table approximation methods |
US6567831B1 (en) * | 1997-12-24 | 2003-05-20 | Elbrus International Limited | Computer system and method for parallel computations using table approximation |
KR100321705B1 (ko) | 1998-09-29 | 2002-03-08 | 이계철 | 2의멱수함수를이용한신경회로망의비선형함수변환장치및그방법 |
US6760390B1 (en) | 2000-10-25 | 2004-07-06 | Motorola, Inc. | Log-map metric calculation using the avg* kernel |
US6807554B2 (en) | 2001-08-10 | 2004-10-19 | Hughes Electronics Corporation | Method, system and computer program product for digitally generating a function |
US6931612B1 (en) | 2002-05-15 | 2005-08-16 | Lsi Logic Corporation | Design and optimization methods for integrated circuits |
US6981009B2 (en) | 2002-07-09 | 2005-12-27 | Silicon Integrated Systems Corp. | Apparatus and method for computing a logarithm of a floating-point number |
US7117238B1 (en) * | 2002-09-19 | 2006-10-03 | Nvidia Corporation | Method and system for performing pipelined reciprocal and reciprocal square root operations |
KR100499111B1 (ko) | 2003-04-30 | 2005-07-04 | 삼성탈레스 주식회사 | 급수전개함수의 근사화 방법 및 그 시스템 |
JP3845636B2 (ja) | 2004-01-21 | 2006-11-15 | 株式会社東芝 | 関数近似値の演算器 |
JP2006065633A (ja) | 2004-08-27 | 2006-03-09 | Sony Computer Entertainment Inc | 演算方法および装置 |
US8346831B1 (en) | 2006-07-25 | 2013-01-01 | Vivante Corporation | Systems and methods for computing mathematical functions |
US8099685B2 (en) | 2007-07-31 | 2012-01-17 | Mentor Graphics Corporation | Model based microdevice design layout correction |
US20130185345A1 (en) * | 2012-01-16 | 2013-07-18 | Designart Networks Ltd | Algebraic processor |
US8504954B1 (en) | 2012-03-30 | 2013-08-06 | Apple Inc. | Methodology for automatically generating series-approximated components |
-
2012
- 2012-03-30 US US13/435,900 patent/US9015217B2/en not_active Expired - Fee Related
-
2013
- 2013-03-21 EP EP13160372.2A patent/EP2645199A1/en not_active Withdrawn
- 2013-03-26 WO PCT/US2013/033788 patent/WO2013148619A1/en active Application Filing
- 2013-03-29 JP JP2013086079A patent/JP5666649B2/ja not_active Expired - Fee Related
- 2013-03-29 KR KR1020130034906A patent/KR101471750B1/ko not_active IP Right Cessation
- 2013-03-29 CN CN201310106033.XA patent/CN103365824B/zh not_active Expired - Fee Related
- 2013-03-29 TW TW102111573A patent/TWI484352B/zh not_active IP Right Cessation
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6581085B1 (en) * | 1999-05-12 | 2003-06-17 | Ati International Srl | Approximation circuit and method |
JP2005227811A (ja) * | 2004-02-10 | 2005-08-25 | Olympus Corp | 近似回路 |
US20080228846A1 (en) * | 2007-03-16 | 2008-09-18 | Fujitsu Limited | Processing apparatus and control method thereof |
CN101741775A (zh) * | 2009-12-22 | 2010-06-16 | 上海大学 | 基于泰勒展开的单频率的ofdm时变信道估计方法 |
WO2012025796A1 (en) * | 2010-08-27 | 2012-03-01 | M.S. Ramaiah School Of Advanced Studies | Method and apparatus for direct digital synthesis of signals using taylor series expansion |
Non-Patent Citations (1)
Title |
---|
王彦国等: "位场向下延拓的泰勒级数迭代法", 《石油地球物理勘探》, vol. 46, no. 4, 15 August 2011 (2011-08-15) * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112749803A (zh) * | 2021-03-05 | 2021-05-04 | 成都启英泰伦科技有限公司 | 一种神经网络的激活函数计算量化方法 |
CN112749803B (zh) * | 2021-03-05 | 2023-05-30 | 成都启英泰伦科技有限公司 | 一种神经网络的激活函数计算量化方法 |
Also Published As
Publication number | Publication date |
---|---|
US20130262540A1 (en) | 2013-10-03 |
JP2013214305A (ja) | 2013-10-17 |
CN103365824B (zh) | 2016-08-24 |
US9015217B2 (en) | 2015-04-21 |
WO2013148619A1 (en) | 2013-10-03 |
JP5666649B2 (ja) | 2015-02-12 |
KR101471750B1 (ko) | 2014-12-10 |
TWI484352B (zh) | 2015-05-11 |
EP2645199A1 (en) | 2013-10-02 |
TW201346594A (zh) | 2013-11-16 |
KR20130111466A (ko) | 2013-10-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103365824A (zh) | 使用级数展开的先验和非线性组件 | |
US8504954B1 (en) | Methodology for automatically generating series-approximated components | |
US9958840B2 (en) | System and method for controlling system using a control signal for transitioning a state of the system from a current state to a next state using different instances of data with different precisions | |
CN102362274A (zh) | 方程的线性系统的处理 | |
CN103914297A (zh) | 适于考虑重新定时的可编程器件配置方法 | |
US10268450B2 (en) | Approximating functions | |
CN109863476A (zh) | 动态变量精度计算 | |
CN107038014B (zh) | 舍入反平方根结果 | |
Zhu et al. | Theoretical convergence rate lower bounds for variants of coarse mesh finite difference to accelerate neutron transport calculations | |
US9779061B2 (en) | Iterative refinement apparatus | |
Conrady et al. | LCS-based automatic configuration of approximate computing parameters for fpga system designs | |
KR20230104037A (ko) | 다양한 유형의 신경망 모델을 변환 및 활용할 수 있도록 하는 방법 및 장치 | |
EP4217865A1 (en) | Hardware accelerator for executing a computation task | |
Hayes | The Adams-Bashforth-Moulton integration methods generalized to an adaptive grid | |
US10037191B2 (en) | Performing a comparison computation in a computer system | |
Boom et al. | High-order implicit temporal integration for unsteady compressible fluid flow simulation | |
US20230418324A1 (en) | Method for programming an fpga | |
DeCaria | Variable Stepsize, variable order methods for partial differential equations | |
Lustri et al. | Locating complex singularities of Burgers’ equation using exponential asymptotics and transseries | |
CN112800669B (zh) | 专用加速器中基于概率图模型的多种近似技术误差评估方法 | |
KR102298685B1 (ko) | 근적외선 해석 방법 | |
KR102336535B1 (ko) | 테일러 급수를 이용한 제곱근 연산 방법 및 이를 이용한 장치 | |
Danell Håkansson et al. | An error assessment of matrix multiplications on posit matrices | |
KR101753162B1 (ko) | 이진수 연산의 선행 제로 비트수 계산방법 및, 그 장치 | |
Paschalidis et al. | An efficient spectral interpolation routine for the TwoPunctures code |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160824 Termination date: 20170329 |
|
CF01 | Termination of patent right due to non-payment of annual fee |