使用缩减宽度数据进行计算的方法和装置的制作方法

文档序号:6501706阅读:187来源:国知局
专利名称:使用缩减宽度数据进行计算的方法和装置的制作方法
公开领域本公开一般地涉及处理器系统,并且更具体地,涉及使用缩减宽度数据(reduced-widthdata)进行计算(calculation)的方法、装置和制品。
背景在很多应用领域中代数和超越函数是基础的。例如,三角函数(例如正弦和余弦函数)的估算(evaluation)对于许多图形应用的性能是至关重要的。传统的代数和/或超越函数估算算法通常提供具有从7位有效小数(例如IEEE单精度浮点)到16位有效小数(例如IEEE双精度浮点)范围的相对高精度和准确度的结果。
由于精度(precision)和准确度(accuracy)的要求,传统的代数和/或超越函数估算算法通常严重依赖于数据存储器访问。实现这些传统的算法常常涉及在数据存储器中储存包含预定值(例如预定多项式系数值)的值表。在运行时(runtime)期间,执行传统算法常常需要多次访问数据存储器以从值表取回预定值。多次访问数据存储器将相对大的负担施加于数据总线。此外频繁访问数据存储器常常导致反复访问(thrash)数据缓存,因为每个从数据存储器取回的新的数据元素(data element)可能被储存在数据缓存中,并由此覆写在将来的取回操作中可能需要的其他数据元素。
用于估算代数和超越函数的传统算法被典型地配置为在桌面(例如PC)和工作站平台上执行。通常,在桌面和工作站平台上执行传统算法是不成问题的,因为这些平台被典型地配置为包括相对大的主存储器、数据通路宽度和数据缓存大小。因此,与这些传统算法相关联的数据存储器访问施加在一条数据总线或多条数据总线上的负担典型地对整个系统性能有相对低的影响。
对代数和超越函数的精确的和准确的估算的需求存在于桌面和工作站平台之外。例如,估算代数和超越函数的需求也存在于移动平台,例如那些使用移动处理器(例如IntelXScale微处理器系列)的平台。但是,上述的传统代数和/或超越函数估算算法通常不适于在许多移动平台上执行。由于典型的移动平台处理器特性,例如缩减的数据通路宽度和数据缓存大小,从值表中取回预定值所需的数据存储器访问常常导致低下的和不可预知的性能。缩减的数据通路宽度可能需要多次访问来取回单个具有的数据宽度比可用数据通路宽度宽的预定值。此外,缩减的数据缓存大小导致数据缓存几乎整个被新取回的数据所覆写和/或填满,由此导致需要更加频繁地从数据存储器取回数据。
包含预定值的值表可能导致对于移动平台的进一步缺点。例如值表可能相对大并且需要存储器的大量空间,由此限制了移动平台上的应用和/或其他处理可用的存储器空间。此外,值表可能将对于大的存储器占用面积(footprint)的要求强加于移动平台,所述要求可能增大整个基于移动平台的系统设计的尺寸和成本。
附图简要说明

图1是可用于使用缩减宽度数据来估算函数的示例性方法或处理的流程图。
图2是可用于最小化目标函数与近似多项式之间的最大偏差的示例性近似比较(approximation comparison)的图。
图3是可用于产生与多项式相关联的短宽度系数值的示例性短宽度近似方法或处理的流程图。
图4是可用于产生与多项式相关联的长宽度系数值的示例性长宽度近似方法或处理的流程图。
图5是可用于估算多项式的示例性分割(split)输入参数方法或处理的流程图。
图6是可用于实现此处描述的方法的示例性系统的功能框图。
图7是可用于实现此处描述的装置、方法和制品的示例性处理器系统的框图。
详细描述图1是可用于使用缩减宽度数据来估算函数的示例性方法或处理100的流程图。示例性过程100可以用硬件(例如图6的示例性系统600)和/或储存于机器可访问介质上并且执行于处理器系统(例如图7的处理器系统710)上的软件来实现。可替换地,可以另外使用硬件和/或软件的任何所期望的组合。
通常,下面描述的方法可以用于估算函数,所述函数包括超越函数(transcendentalfunction)、代数函数、和包括近似例如超越函数和/或代数函数的近似多项式的多项式。超越函数和代数函数在本领域内是众所周知的,并且包括例如sin(x)、cos(x)、平方根函数等。
正如此处描述的一样,缩减宽度数据通常与使用缩减数据量来表示的数值相关联。例如,可以舍入(round)和截尾32位值以产生16位的缩减宽度值。附加地或可替换地,可以将32位值分割为多个较短的缩减宽度值,例如两个16位值。相对于传统的函数估算,使用缩减宽度数据来估算函数具有实质的益处。例如,在编译阶段缩减宽度数据值可以被储存在指令存储器中的指令内,从而减少运行时阶段访问数据存储器的次数。通过减少数据缓存被覆写的次数,减少数据存储器访问次数提高处理器系统(例如图7的处理器系统710)的性能。因此,更频繁地被使用的数据值保留在数据缓存中,无需耗费处理周期来刷新或恢复所述数据值。
通常,数据值作为立即数据值被储存在指令存储器而不是数据存储器中。例如,如果在运行时阶段加法指令求两个操作数或数据值之和,那么至少一个操作数可以作为立即数据值储存在加法指令中,只要该操作数具有足够小的值(也就是表示该操作数的数据位数足够小)。现今可获得的几种处理器,例如IntelXSale处理器,使得立即数据值能够被储存到指令中。立即数据值常常限于短宽度数据值,例如8位值或16位值。可以将具有立即数据值的指令写成例如如下所述的汇编指令的形式。
ADD U,X,#166在编译阶段,立即数据值166被储存在与指令存储器中的加法指令相关联的位字段(bitfield)中。在运行时阶段,取回加法指令还导致立即数值166被取回。
缩减宽度数据值也可以使能(enable)对耗费相对少的处理周期数的指令(例如短指令)的使用。一些处理器可以被配置执行短指令和长指令,所述短指令被配置为执行例如8位或16位操作,所述长指令被配置为执行例如32位操作。典型地,短指令比长指令耗费更少的处理周期。相比于至少使用一些短指令而获得的性能,只使用长指令来求数学函数的值可能导致差的性能。
缩减宽度数据值可以使采用更多(或只采用)短指令成为可能,所述短指令可以导致更快和更有效的数据处理。但是,缩减用于估算数学函数的值的数据宽度可以导致精度和准确度的损失。可以使用此处描述的方法,利用缩减宽度数据值来获取基本准确和精确的结果。
现详见图1,示例性的处理100包括设计阶段102、编译阶段104和运行时阶段106。设计阶段102先于编译阶段104发生,并且与程序员或软件开发者产生(例如编写)软件和/或固件(例如机器可访问并且可执行代码或指令)的时间相关联。程序员和软件开发者可以是人。可替换地或附加地,软件和/或固件可以由在处理器系统710(图7)上执行的应用产生。可以以任何编程语言,例如C/C++、Basic、Java、汇编程序等,来编写机器可访问代码或指令。此外,可以编写代码来实现导致处理器(例如图7中的处理器712)估算数学函数的机器可执行例程(routine),如以下更加详细描述的那样。具体来说,利用此处描述的示例性方法,代码可以使得处理器系统710能够利用缩减宽度数据值来估算函数。正如下面详细描述的,设计阶段102包括短宽度近似处理108和长宽度近似处理110。
可以在设计阶段以组合的形式使用短宽度近似处理108和长宽度近似处理110,以产生包括近似多项式的混合宽度多项式。正如结合图2更详细描述的,使用近似多项式来近似更复杂的数学函数,例如超越和/或代数函数。以下等式1中示出了示例性的近似多项式pa(x)。
等式1 pa(x)=p0+p1·x+p2·x2+…+pN-1·xN-1+pN·xN如等式1所示,近似多项式pa(x)包括输入自变量(argument)x和多个系数值p0,p1,p2,pN-1和pN,其中N与最高次项(highest-degree term)相关联并且“0”与第0项或常数项相关联。众所周知,近似多项式可以包括任意数量的项,并且可以用极小极大(minimax)近似方法和/或优化方法,例如Remez算法,来产生近似多项式。
通常,混合宽度多项式包括缩减宽度系数值,所述系数值包括至少一些短宽度系数值(例如8位或16位值)和至少一些长宽度系数值(例如32位值)。正如结合下面图3和图4更详细地描述的,可以通过确定一组与多项式相关联的系数值和缩减至少一些系数值的数据宽度(例如舍入、截尾等)来产生缩减宽度系数值。
编译阶段104与这样的时间相关联,即在设计阶段102产生的代码由执行于处理器系统(例如图7的处理器系统710)的编译器应用格式化为特定处理器的机器代码的时间。由编译器产生的机器代码是特定处理器的语言,所述语言包括表示特定处理器操作的代码或二进制字符串(string)的元素(elemental)组。所述代码或二进制字符串的元素组由特定类型(例如品牌,型号等)的机器或处理器(例如图7的处理器712)来解释。
众所周知,编译器通过把编程语言指令和相关联的数据(例如立即数据值)转换成机器代码并且将经转换的机器代码存入存储器中来将编程语言代码转换为特定处理器的机器代码。以这种方式,在运行时阶段106,处理器712可以基于经转换的机器代码实现或执行由程序员或软件开发者指定的操作。
储存系数值处理112通常在编译阶段104被执行,并且可以被用来在与处理器710(图7)相关联的存储器中储存系数值(例如在设计阶段102产生的缩减宽度系数值)。更具体地,正如下面结合图4更详细描述的,缩减宽度系数值可以被存入指令存储器。
在运行时阶段106,处理器712(图7)执行在编译阶段104编译过的机器代码。如图1所示,运行时阶段106与设计阶段102和编译阶段104是分开的。但是,运行时阶段106可以包括设计阶段102和编译阶段104。例如,设计阶段102的处理(例如短宽度近似处理108和长宽度近似处理110)、编译阶段104的处理(例如储存系数值处理112)和运行阶段106的任何处理可以被配置为由处理器系统710(图7)在相同的运行时环境(例如运行阶段106)中执行。
示例性的运行阶段106包括分割估算处理114。正如下面结合图4更详细描述的,分割估算处理114可以用于估算函数,例如多项式。更具体地,分割估算处理114可以用于将输入自变量值分割或解析成多个更短的自变量值或缩减宽度自变量值,并且基于所述多个缩减宽度自变量值和短指令来估算函数。此外,函数可以作为使用短指令的多个估算(evaluation)来进行估算,导致更快和更有效的估算处理。此外,虽然分割估算处理114可以与结合处理108和110标识的缩减宽度系数值一起实现,如图1所示,但是可替换地,分割估算处理114可以独立于示例性的处理108和110来实现。
图2是可用于最小化目标函数与近似目标函数的近似多项式之间的最大偏差的示例性近似比较200的图(plot)。目标函数可以包括超越函数和/或代数函数,并且可以使用近似多项式来估算。典型地,处理器系统,例如图7的处理器系统710,使用近似多项式来估算超越和/或代数目标函数,所述近似多项式能够比目标函数更快和更有效地被处理。通常,在输入自变量值的特定区间内,近似多项式典型地提供基本上体现了目标函数的特征并且表示了目标函数的数学估算。例如在输入自变量值区间x=[a,b],可以用具有上面等式1所示的近似多项式pa(x)形式的近似多项式来近似超越函数sin(x)。
示例性近似值比较200包括目标函数ft(x)202和估算的目标近似多项式pt(x)204在估算区间x=
]]>内相对于输入自变量x的图。目标近似多项式pt(x)204被产生以便在估算区间内最小化目标函数ft(x)的估算与目标近似多项式pt(x)的估算之间的最大偏差210。通常,最大偏差210的值基于近似多项式的近似系数值(例如等式1所示的系数值p0,p1,p2等)的选择。可接受的最大偏差可以基于对特定应用的准确度要求,并且可以例如在设计阶段102(图1)被选择。此外,近似多项式可以实现的准确度通常基于用于执行近似计算的多项式系数值的数量。
选择适当的近似多项式系数值可以包括产生近似多项式的操作和在给定输入自变量估算区间内将近似多项式的估算与目标函数的估算进行比较的操作的多次迭代,所述比较操作如图2中目标函数ft(x)202和目标近似多项式pt(x)204的图所示。
目标近似多项式pt(x)204的准确度也与用于近似目标函数ft(x)202的位数相关联。例如,可能需要以16位的准确度来近似目标函数ft(x)202。如果那样的话,选择近似系数值来使能16位准确度的近似。
图3是示例性的短宽度近似方法或处理300的流程图,所述方法或处理可用于产生与多项式相关联的短宽度系数值。示例性的短宽度近似处理300基本上与图1的短宽度近似处理108类似或相同,并且可以利用硬件(例如图6的示例性系统600)和/或储存于机器可访问介质(例如计算机可访问介质)并且执行于处理器系统(例如图7的处理器系统710)的软件来实现。通常,可以使用示例性的短宽度近似处理300来标识多个与多项式相关联的系数值并且基于所述多个系数值的至少一个来确定至少一个短宽度系数值。多项式可以是具有结合上面图2描述的近似系数值的近似多项式。如下更详细描述的,通过缩减近似系数值的数据宽度来产生短宽度系数值,以便短宽度系数值可以作为立即数值被存入指令存储器和/或使能运行时阶段(例如图1的运行时阶段106)中短指令的使用。
现参见图3,系数计数器Cm被初始化(框302)。系数计数器Cm被置为等于最高次值m,所述最高次值m指定要产生的初始近似多项式psi(x)的最高次近似系数值。例如,如果系数计数器Cm被置为等于5,可以产生具有最高次系数值是5次项中的系数值的5次近似多项式(例如p5·x5)。
近似初始目标函数fi(x)的初始近似多项式psi(x)被产生(框304)。初始目标函数fi(x)根据输入自变量x来定义并且可以是超越或代数函数,例如sin(x)。具有上文中等式1的近似多项式pa(x)形式的初始近似多项式psi(x)如下面的等式2所示。
等式2 psi(x)=p0+p1·x+p2·x2+…+pm-1·xm-1+pm·xm如等式2所示,初始近似多项式psi(x)是具有由最高次值m指定的最高次近似系数的m次多项式。
系数计数器Cm指定的近似系数值的数据宽度被缩减(框306)。例如,如果系数计数器Cm等于最高次值m,通过缩减近似系数值pm的数据宽度来产生短宽度系数值p′m。任何缩减值的数据宽度的操作可以用于产生短宽度系数p′m,例如舍入、截尾等。
随后,基于初始目标函数ft(x)和短宽度系数项(例如p′m·xm)产生更新的目标函数fsu(x)(框308)。具体来说,通过将输入自变量x提高到系数计数器Cm的值的幂(也就是xm)并且将该结果乘以短宽度系数值p′m来产生短宽度系数项p′m·xm。随后,通过从初始目标函数fi(x)中减去短宽度系数项p′m·xm来产生更新的目标函数fsu(x),如下面的等式3所示。
等式3 fsu(x)=fi(x)-p′m·xm=sin(x)-p′m·xm如等式3所示,函数sin(x)表示初始目标函数fi(s),并且更新的目标函数fsu(x)等于超越函数sin(x)减去短宽度系数项p′m·xm。
系数计数器Cm减1(也就是m-1)来指示下一个最高次近似系数值(例如pm-1)的次数(框310)。基于系数计数器Cm、更新的目标函数fsu(x)和已经产生的任何短宽度系数值(例如短宽度系数值p′m)随后产生更新的近似多项式psu(x)(框312)。通过产生近似更新的目标函数fsu(x)的当前近似多项式和将短宽度系数项p′m·xm加到当前近似多项式来产生更新的近似多项式psu(x)。当前近似多项式的次数由系数计数器的值来指定(例如pm-1)。例如,如果先前确定的近似多项式是5次多项式,则当前近似多项式将是4次多项式。更新的近似多项式psu(x)包括当前近似多项式加上短宽度系数项p′m·xm,如下面等式4所示。
等式4 psu(x)=p0+p1·x+p2·x2+…+pm-1·xm-1+p′m·xm基于更新的目标函数fsu(x)产生更新的近似多项式psu(x),因为更新的目标函数fsu(x)的估算被初始目标函数fi(x)减去短宽度系数项的差来补偿。因此,基于初始目标函数fi(x)和由短宽度系数项的差引入的补偿因子来产生更新的近似多项式psu(x)的近似系数值,以便通过更新的近似多项式psu(x)和初始目标函数fi(x)来实现初始目标函数fi(x)的准确近似。
更新的近似多项式psu(x)与初始目标函数fi(x)进行比较(框314)。通常,进行比较来确定相对于初始目标函数fi(x)的估算更新的近似多项式psu(x)的估算是否相对准确。更新的近似多项式psu(x)和初始目标函数fi(x)的比较可以基本上与上面结合图2描述的目标函数ft(x)和目标近似多项式pt(x)的比较类似。
对更新的近似多项式psu(x)和初始目标函数fi(x)的比较进行分析以确定更新的近似多项式psu(x)的准确度是否可以接受(框316)。如果该准确度可以接受,则系数计数器Cm的值和任何短宽度系数值(例如p′m)被存入储存区(框318)。控制随后传递到框306,其中下一个最高次近似系数值的宽度随后被缩减(例如p′m-1=RND(pm-1))(框306)。
如果在框316中准确度不可接受,那么先前产生的短宽度系数值被丢弃,并且系数计数器Cm的值和存入存储器中的任何短宽度系数值被传到长宽度近似处理(框320)。例如,如果经过几次短宽度近似处理300的迭代之后,初始近似多项式psi(x)的近似系数值中的3个(例如pm-2,pm-1,pm)被缩减到短宽度系数值(例如p′m-2,p′m-1,p′m)并且将下一个最高次近似系数值(例如pm-3)缩减到短宽度表示形式会导致框316中不可接受的最大偏差(例如图2的最大偏差210),那么短宽度系数值被传到长宽度近似处理(框320)。
因此,可以重复框306、308、310、312、314、316和318的处理直到更新的近似多项式的准确度不可被接受。因此,在短宽度近似处理300期间可以产生多个更新的目标函数fsu(x)和更新的近似多项式psu(x)。例如,可以根据下面等式5产生多个更新的目标函数fsu(x)直到更新的近似多项式的准确度不可被接受。
等式5 fsu(x)=fi(x)-…-p′m-2·xm-2-p′m-1·xm-1-p′m·xm图4是示例性的长宽度近似方法或处理400的流程图,所述方法或处理可用于产生与多项式相关联的长宽度系数。示例性的长宽度近似处理400可以基本上与图1的长宽度近似110和图3的长宽度近似320类似或相同。此外,示例性的长宽度近似处理400可以使用硬件(例如图6的示例性系统600)和/或储存于机器可访问介质并执行于例如图7的处理器系统的处理器上的软件来实现。此外,示例性的长宽度近似处理400可以与图3的示例性的短宽度近似处理300一起使用以产生具有短宽度系数值和长宽度系数值的混合宽度近似多项式。
可以基于例如近似系数值来产生长宽度系数值。近似系数值可以用任何数量的位(例如56位、64位等)来表示。因此,近似系数值被转换为长宽度系数值(例如32位值),以减少储存它们所需的存储器空间并且减少运行时阶段(例如图1的运行时阶段106)使用长宽度系数值计算(calculation)的复杂性。
可以基于系数计数器Cw和初始目标函数(例如结合上面图3描述的初始目标函数fi(x))来产生长宽度系数值。系数计数器Cw基本上与结合上面图3描述的系数计数器Cm类似或相同。
通过将系数计数器Cw置为等于最高次值w来将其初始化(框402)。最高次值w指定要为初始近似多项式pli(x)产生的最高次近似系数值的次数。此外,如果示例性的长宽度近似处理400与示例性的短宽度近似处理300(图3)一起使用,则可以通过取回在图3的框318中存入存储器的系数计数器Cm的最后一个值,将系数计数器Cm的值减1,并且将最高次值w置为等于所得结果来初始化系数计数器Cw。
初始近似多项式pli(x)被产生来近似初始目标函数fi(x)。初始近似多项式pli(x)中的近似系数值的数量由下面等式6所示的系数计数器Cw的值来定义。
等式6 pli(x)=p0+p1·x+…+pw-1·xw-1+pw·xw由系数计数器Cw的值指定的最高次近似系数值的数据宽度被缩减以产生长宽度系数值(框406)。例如,如果系数计数器Cw的值等于最高次值w,那么基于近似系数值pw产生长宽度系数值p′w。可以使用例如舍入、截尾等的任何操作来产生长宽度系数值。
执行比较操作来确定是否任何近似系数值仍需要被转换为长宽度系数值(框408)。具体来说,系数计数器Cw的值可以与初始近似多项式pli(x)的最低次项的次数进行比较。如果系数计数器Cw的值大于初始近似多项式pli(x)的最低次项的次数,则产生更新的目标函数flu(x)(框410)。
基于初始目标函数fi(x)和任何已经产生的长宽度系数值来产生更新的目标函数flu(x)(框410)。例如更新的目标函数flu(x)包括具有长宽度系数值p′w的长宽度系数项(例如p′w·xw)。通过将输入自变量x提高到系数计数器Cw的值的幂(例如xw)并且将该结果乘以长宽度系数值p′w来产生长宽度系数项p′w·xw。随后根据下面的等式7通过从初始目标函数fi(x)减去长宽度系数项p′w·xw来产生更新的目标函数flu(x)。
等式7 flu(x)=fi(x)-p′w·xw=sin(x)-p′w·xw如等式7所示,函数sin(x)表示初始目标函数fi(x)并且更新的目标函数等于函数sin(x)减去长宽度系数项p′w·xw的乘积。
随后,系数计数器Cw减1(例如w-1)来表示下一个最高次近似系数值的次数(例如pw-1)(框412)。随后,产生更新的近似多项式plu(x)来近似更新的目标函数flu(x)(框414)。更新的近似多项式plu(x)基于系数计数器Cw和更新的目标函数flu(x)来产生。如下面等式8所示,更新的近似多项式plu(x)被产生来近似更新的目标函数flu(x)并且包括如系数计数器Cw的值所指示的最高次项(例如pw-1·xw-1)。
等式8 plu(x)=p0+p1·x+…+pw-1·xw-1根据上面的等式8产生更新的近似多项式plu(x)之后,控制回到框406并且如系数计数器Cw所指示的最高次近似系数值(例如pw-1)被转换成长宽度系数(例如p′w-1)(框406)。如果在框408中确定其他近似系数值仍要被转换为长宽度系数值,那么产生另一个更新的目标函数flu(x)(框410)。可以以这种方式重复框406、408、410、412和414的处理直到初始近似多项式pli(x)的最低次系数值(例如p0)被转换为长宽度系数值。
如果在框408中确定了最后一个近似系数值已被转换为长宽度系数值,那么缩减宽度系数值(也就是与长宽度近似处理400相关联的产生的长宽度系数值和与短宽度近似处理300相关联的产生的短宽度系数值)被存入指令存储器的指令中(框416)。具体来说,在设计阶段(例如图1的设计阶段102)可以使用缩减宽度系数值作为立即数值来编写代码。在这种方式下,立即数值在编译阶段(例如图1的编译阶段104)可以存入指令存储器的指令中。随后,在运行时阶段(例如图1的运行时阶段106)缩减宽度系数值可以被多次使用来表示和估算混合宽度多项式。
图5是示例性的分割估算方法或处理500的流程图,所述方法或处理可用于通过分割输入自变量来估算多项式。示例性的分割估算处理500基本上与图1的分割估算处理114类似或相同,并且可以在运行时阶段(例如图1的运行时阶段106)使用硬件(例如图6的示例性系统600)或储存于机器可访问介质并且执行于例如图7的处理器系统710的系统上的软件来实现。此外,示例性的分割估算处理500可以结合在图3的短宽度近似处理300和/或图4的长宽度近似处理400期间产生的混合宽度系数值来使用。
多项式可以是近似多项式和/或可以包括结合图3的短宽度估算处理300和图4的长宽度估算处理产生的混合宽度系数值。但是,可以使用分割估算处理来估算任何多项式。
可以基于多个缩减宽度参数使用分割估算处理500来估算多项式。具体来说,缩减宽度输入参数可以通过为给定多项式p(x)中取回或接收输入自变量值x来产生。输入自变量值x可以是长值(例如32位值),所述长值需要使用长指令来估算多项式p(x)。例如,在IntelXSale处理器上,如果多项式p(x)的输入自变量值x和系数值是大于16位值,对多项式p(x)进行估算可能需要长乘法指令。但是,通过将输入自变量值x分割或解析成多个缩减宽度参数,例如包括8位或16位值的短宽度参数,可以使得短指令的使用能够进行,从而导致更快和更有效的多项式估算。例如,如下详细所述,如果输入自变量值x被分割成两个缩减宽度参数,多项式可以作为两个并行的估算实例来估算。一个估算实例可以基于缩减宽度参数中的一个来估算多项式而另一个估算实例基于另一个缩减宽度参数来估算多项式。
通过首先接收或取回输入自变量值x并且将该自变量值分割或解析成高位部分(high-portion)的自变量值xHI和低位部分(low-portion)的自变量值xLO来估算多项式p(x)(框520)。可以分割输入自变量值x以便至少高位部分自变量值xHI小于16位值以确保高位部分自变量值xHI和多项式p(x)的任何系数的相乘都小于或等于32位值。基于高位部分自变量值xHI和低位部分自变量值xLO,多项式p(x)可以随后作为两个并行的估算实例(即高位部分估算和低位部分估算)来进行估算。
基于高位部分自变量值xHI的高位部分估算从初始化系数计数器Ch开始(框504)。系数计数器Ch设置为等于多项式的次数值h,所述值h指定多项式p(x)的最高次项的次数。例如,如果多项式是5次多项式,那么多项式的次数值h就等于5。随后高位临时变量P被初始化并被置为等于多项式p(x)的最高次的系数值(例如P=ph)(框506)。可以基于系数计数器Ch的值标识最高次系数值。
系数计数器Ch减1(例如h-1)(框508)。在下面的框512中,系数计数器Ch的值可用于标识要被加到高位临时变量P的值的下一个系数。高位部分自变量值xHI与高位临时变量P的值相乘(框510)。在框510中的乘法可以使用短乘法指令来实现以产生乘积值P=ph·xHI。此外,通过覆写先前的内容,框510的乘法的结果被存入高位临时变量P。
基于系数计数器Ch,下一个最高次多项式系数被标识并且被加到高位临时变量P的值上(框512)。加法(框512)的结果可以如值P=ph·xHI+ph-1所示并且被存入高位临时变量P。执行测试以确定是否已到达最后的多项式系数(框514)。该测试可以包括基于系数计数器Ch和多项式p(x)的最低次项的次数的比较。例如,常数项(例如p0)指示最低次数等于0。如果框514中系数计数器Ch的值不等于多项式p(x)的最低次项的次数,控制传回框508。可以以这种方式重复框508、510、512和514的处理直到多项式p(x)的最后的系数值被加到高位临时变量P的值上,以产生高位部分估算结果p(xHI)。另一方面,如果在框514处系数计数器Ch的值等于多项式p(x)的最低次数,基于高位临时变量P(例如高位部分估算结果p(xHI))和低位临时变量Q的值可以确定多项式p(x)的最终估算结果,所述临时变量Q由结合下面描述的低位部分估算处理来确定。
基于低位部分自变量值xLO、高位部分自变量值xHI、多项式p(x)和系数计数器Cq,低位临时变量Q的值可以使用低位部分估算处理来确定。系数计数器Cq基本上与结合上面高位部分估算处理描述的系数计数器Ch类似或相同。此外,低位部分估算处理可以与高位部分估算处理并行执行。
关于自变量x对多项式p(x)求微分产生微分多项式 (框518)。系数计数器Cq随后通过设置其等于微分多项式次数值q来初始化(框520),所述值q指定微分多项式 的最高次项的次数。低位临时变量Q随后被初始化并且被设置为等于微分多项式 的最高次系数值(例如Q=pq)(框522)。最高次微分系数值可以基于系数计数器Cq的值来确定。
系数计数器Cq减一(例如q-1)(框524)并且在下面框528中标识下一个要加到低位临时变量Q的微分系数值。高位部分自变量值xHI与低位临时变量Q的值相乘(框526)。可以使用短乘法指令来实现框526中的乘法以产生乘积值Q=pq·xHT。此外,通过覆写先前的内容将乘法(框526)的结果写入低位临时变量Q中。
基于系数计数器Cq确定微分多项式 的下一个微分系数值并且将该值加到低位临时变量Q的值上(框528)。框528的加法的结果可以如值Q=pq·xHI+pq-1所示并且该结果可以存入低位临时变量Q中。执行测试来确定是否已经到达了最后的微分系数值(框530)。该测试可以包括基于系数计数器Cq和微分多项式 的最低次项的次数的比较。例如,常数项(例如p0)指示最低次数等于0。如果框530中系数计数器Cq的值不等于微分多项式 的最低次项的次数,控制回到框524。可以以这种方式重复框524、526、528和530的处理直到微分多项式 的最后的微分系数值已经被加到低位临时变量Q的值上。
另一方面,如果框530中系数计数器Cq的值等于微分多项式 的最低次项的次数,低位部分自变量值xLO乘以低位临时变量Q以产生低位部分估算结果 (框532)。低位部分的估算结果 被存入低位临时变量Q中并且是对框516中确定的最终结果的修正项(correction term)。此外,框532中的乘法可以使用短乘法指令来实现。
随后,通过把高位临时变量P的值加到低位临时变量Q的值来确定多项式p(x)的最终估算结果,如下面等式9和10所述。
等式9 p(x)=p(xHI+xLO)等式10p(x)=p(xHI)+xLO·ddxp(xHI)+O(xLO2)]]>等式9表示基于输入自变量值x的多项式p(x)的估算,所述输入自变量值x包括高位部分自变量值xHI和低位部分自变量值xLO的和。等式10将多项式p(x)的估算表示为高位部分估算结果p(xHI)、低位部分估算结果或修正项 和数量级项(order of magnitudeterm)O(xLO2)的和。
数量级项O(xLO2)指明引入到关于xHI和xLO的多项式p(x)的近似值的误差量。更具体地说,数量级项O(xLO2)与忽略超出最高近似项(例如 的项引起的误差量相关联。例如用于根据x=xHI+xLO来表示多项式p(x)的精确泰勒展开可以表示为如下面所述等式11。
等式11p(x)=p(xHI)+xLO·ddxp(xHI)+xLO22·ddxp(xHI)+xLO36·d2dx2p(xHI)+···]]>截尾项 等上面等式11所示的项的误差由与xLO2成比例的值来确定并且可以被表示为数量级项O(xLO2)。
在结果中的误差量,如数量级项O(xLO2)所表示的一样,是相对小的。因此,数量级项O(xLO2)可以在估算中被删去以产生如下面等式12所述的多项式p(x)的近似值。
等式12p(x)≈p(xHI)+xLO·ddxp(xHI)]]>图6是可用于实现在此描述的处理的示例性系统的功能框图。图6所示的结构可以使用硬件和/或软件的任何期望的组合来实现。例如可以使用一个或更多个集成电路、分立的半导体组件或无源电子组件。附加地或可替换地,可以使用储存于机器可访问介质的指令、代码或其他软件和/或固件等来实现图6的结构中的一些或所有或几部分,当所述指令、代码或其他软件和/或固件等被例如处理器系统(例如图7的处理器系统710)执行时实现在此公开的方法(例如结合图1到图5描述的方法)。
通常,在设计阶段(例如图1的设计阶段102)、运行时阶段(例如图1的运行时阶段106)或示例性系统600或处理器系统710(图7)的任何其他阶段或操作状态期间,示例性系统600使用函数发生器或选择器来产生多个函数。因此,示例性系统600可以用于例如产生目标函数(例如超越函数、代数函数等)和可以包括近似多项式的多项式。
在一些情况下,示例性系统600产生近似目标函数的近似多项式(例如pi(x)≈ft(x)=sin(x))。随后,示例性系统600可以基于近似多项式和目标函数进行比较以确定近似多项式的准确度。此外,示例性系统600产生可以在编译阶段(例如图1的编译阶段104)与指令一起被存入指令存储器中的缩减宽度数据值。缩减宽度数据值可以包括结合上面图3描述的短宽度系数值、结合上面图4描述的长宽度系数值以及结合上面图5描述的分割输入自变量值。此外,例如在运行时阶段106(图1),缩减宽度数据值可以使能(enable)使用短指令来估算函数。示例性系统600也可以被配置为通过例如结合上面图5描述的解析或分割输入自变量值和使用并行的估算处理来估算函数。
现详见图6,示例性系统600包括函数选择器602、缩减宽度数据发生器604、乘法器606、加法器608、减法器610、比较器612、微分器614和数据接口616,其中它们中的所有可以以可通信的方式如图所示地耦合。函数选择器602可以被配置为通过例如从存储器位置取回或接收目标函数和/或多项式或者通过产生目标函数和/或多项式来选择它们。例如,函数选择器602可以取回目标函数,例如在图3和图4的示例性方法中所用的目标函数ft(x)=sin(x)。此外,函数选择器602可以产生具有任何需要数量的近似系数值的近似多项式。此外,函数选择器602可以被配置为取回、接收和/或产生结合图3、4和5描述的任何数学函数。函数选择器602以可通信的方式耦合到缩减宽度数据发生器604,并且给缩减宽度数据发生器604提供系数值。此外,函数选择器602以可通信的方式耦合到乘法器606、加法器608、减法器610、比较器612和微分器614,并且因此可以被配置为向它们提供函数。
如图6所示,缩减宽度数据发生器604以可通信的方式耦合到函数选择器602、乘法器606、加法器608、减法器610和数据接口616。缩减宽度数据发生器604从函数选择器602中取得系数值并且从数据接口616中取得输入自变量值。缩减宽度数据发生器604可以被配置为基于所述系数值和所述输入自变量值产生缩减宽度数据。例如缩减宽度数据发生器604可以基于从函数选择器602中获得的系数值通过例如舍入或截尾系数值来产生缩减宽度数据(例如结合上面图3和图4描述的短宽度和长宽度系数值)。此外缩减宽度数据发生器604可以基于从数据接口616中获得的输入自变量值通过例如分割或解析输入自变量值来产生多个输入自变量值。
缩减宽度数据发生器604也可以被配置为给函数选择器602、乘法器606、加法器608、减法器610和数据接口616提供缩减宽度数据值。具体来说,函数选择器602可以被配置为基于缩减宽度数据值中的至少一些(例如缩减宽度系数值)来产生目标函数,例如结合图3和图4详细描述的更新的目标函数fsu(x)、flu(x)和更新的近似多项式psu(x)、plu(x)。
乘法器606、加法器608和减法器610可以被配置为从函数选择器602获得函数,从缩减宽度数据发生器604中获得缩减宽度数据值并且从数据接口616中获得输入自变量值。更具体地说,乘法器606、加法器608和减法器610可以被配置为基于从缩减宽度数据发生器604中获得的缩减宽度数据值和从数据接口616中获得的输入参数来估算从函数选择器602中获得的函数。在一个实施例中,如结合图3和图4更详细描述的,乘法器606、加法器608和减法器602可以被配置为基于输入自变量x的值或值的区间(range)来估算更新的近似多项式psu(x)和plu(x)。
乘法器606、加法器608和减法器610可以向比较器612提供函数估算值(evaluationvalue)。比较器612可以被配置为比较一个函数与另一个函数的估算值。例如,结合图2更详细的描述,比较器612可以被配置为通过在输入自变量值的区间上比较近似多项式的估算值和目标函数并确定最大偏差(例如图2的最大偏差210)来比较近似目标函数的近似多项式的近似准确度。
微分器614可以从函数选择器602中取得函数,例如,所述多项式可以包括近似多项式,并且计算(calculate)函数的导数以产生微分函数(例如微分多项式)。此外,微分器614可以给函数选择器602提供微分函数以便进一步处理。
例如在编译阶段104(图1),数据接口616可以从缩减宽度发生器604中获得缩减宽度系数值并且将缩减宽度系数值存入存储器中。例如在运行时阶段106(图1)数据接口616可以随后从存储器中取回缩减宽度系数值。此外,在运行时阶段106,数据接口616可以给乘法器606、加法器608、减法器610和比较器612提供输入自变量值。
图7是可用于实现在此描述的装置和方法的示例性处理器系统710的框图。如图7所示,处理器系统710包括耦合到互连总线或网络714的处理器712。处理器712包括寄存器组或寄存器空间716,在图7中所述寄存器组或寄存器空间716被描绘为整个是芯片上的(on-chip),但是可替换地,所述寄存器组或寄存器空间716可全部或部分位于芯片之外,并且通过专用电气连接和/或通过互联网络或总线714直接耦合到处理器712。处理器712可以是任何适当的处理器、处理单元或微处理器,例如Intel X-ScaleTM、Intel PentiumTM系列的处理器等。在下面详细描述的实施例中,处理器712是通常被称为IA-32处理器的32位Intel处理器。虽然未在图7中示出,但是处理器710可以是多处理器系统,并且因此可以包括一个或更多个附加的处理器,所述附加的处理器等同于或类似于处理器712并且被耦合到互连总线或网络714。
图7的处理器712被耦合到包括存储器控制器720和输入/输出(I/O)控制器722的芯片组718。众所周知,芯片组通常提供I/O和存储器管理功能以及多个通用和/或专用寄存器、定时器等,所述寄存器、定时器等可以被耦合到芯片组的一个或更多个处理器访问或使用。存储器控制器720执行这样的功能,它使得处理器712(或多个处理器,如果有多个处理器)能够访问系统存储器724和非易失性存储器725。
系统存储器724可以包括任何需要类型的易失性存储器,例如静态随机访问存储器(SRAM)、动态随机访问存储器(DRAM)等。非易失性存储器725可以包括任何非需要类型的易失性存储器,例如闪存存储器和只读存储器(ROM)。
I/O控制器722执行这样的功能,它使得处理器712能够通过I/O总线730与外部输入/输出(I/O)设备726和728通信。I/O设备726和728可以是任何需要类型的I/O设备,例如键盘、视频显示器或监视器、鼠标等。尽管在图7中存储器控制器720和I/O控制器722被描绘被芯片组718内的分离的功能模块,但是由这些模块执行的功能可以被集成到单个半导体电路中,或者可以使用两个或更多个分离的集成电路来实现。
在此所述方法可以用储存于机器可访问介质(例如计算机可访问介质)被处理器712执行的指令来实现。机器可访问介质可以包括固态、磁和/或光介质的任何需要的组合,所述固态、磁和/或光介质的任何需要的组合使用大存储量储存设备(例如盘片驱动器)、可移动储存设备(例如软盘、储存卡或储存棒等)和/或集成存储器设备(例如随机访问存储器、闪存存储器等)的任何需要组合来实现。
虽然这里已描述了某些方法、装置和制品,但是本发明的范围不限于此。相反,本发明覆盖按字面意义或等同原则落入所附权利要求书的范围内的所有方法、装置和制品。
权利要求
1.一种执行函数计算的方法,所述方法包括标识与函数相关联的系数值组;通过减少所述系数值中至少一个的数据宽度以拥有小于第二数据宽度的第一数据宽度来产生缩减宽度系数值;将所述缩减宽度系数值存入机器可执行指令。
2.如权利要求1所述的方法,其中所述函数是多项式。
3.如权利要求2所述的方法,其中所述多项式是近似超越函数和代数函数中至少一种的近似多项式。
4.如权利要求2所述的方法,其中所述缩减宽度系数值与所述多项式的最高次项相关联。
5.如权利要求1所述的方法,其中将所述缩减宽度系数值存入所述机器可执行指令的操作包括将所述缩减宽度系数值作为立即值储存。
6.如权利要求1所述的方法,其中将所述缩减宽度系数值存入所述机器可执行指令的操作包括在指令存储器中储存所述缩减宽度系数值。
7.一种用于执行函数计算的装置,所述装置包括包括存储器的处理器系统;以及储存于所述存储器的指令,所述指令使所述处理器系统能够标识与函数相关联的系数值组;通过减少所述系数值中至少一个的数据宽度以拥有小于第二数据宽度的第一数据宽度来产生缩减宽度系数值;以及将所述缩减宽度系数值存入机器可执行指令。
8.如权利要求7所述的装置,其中所述函数是多项式。
9.如权利要求8所述的装置,其中所述多项式是近似超越函数和代数函数中至少一种的近似多项式。
10.如权利要求8所述的装置,其中所述缩减宽度系数值与所述多项式的最高次项相关联。
11.如权利要求7所述的装置,其中储存于所述存储器的所述指令使得所述处理器系统能够将所述缩减宽度系数值作为立即值存入所述机器可执行指令。
12.如权利要求7所述的装置,其中储存于所述存储器的所述指令使得所述处理器系统能够将所述机器可执行指令存入指令存储器中。
13.一种其上存储有指令的机器可访问介质,所述指令在被执行时导致机器标识与函数相关联的系数值组;通过减少所述系数值中至少一个的数据宽度以拥有小于第二数据宽度的第一数据宽度来产生缩减宽度系数值;以及将所述缩减宽度系数值存入机器可执行指令。
14.如权利要求13所述的机器可访问介质,其中所述函数是多项式。
15.如权利要求14所述的机器可访问介质,其中所述系数值组与近似超越函数和代数函数中至少一种的近似多项式相关联。
16.如权利要求14所述的其上存储有指令的机器可访问介质,所述指令在被执行时导致所述机器基于所述多项式的最高次项产生所述缩减宽度系数值。
17.如权利要求13所述的其上存储有指令的机器可访问介质,所述指令在被执行时导致所述机器将所述缩减宽度系数值作为立即值存入所述机器可执行指令中。
18.如权利要求13所述其上存储有指令的的机器可访问介质,所述指令在被执行时导致所述机器将所述机器可执行指令存入指令存储器中。
19.一种执行函数计算的装置,所述装置包括包括闪存存储器的处理器系统;以及储存于所述闪存存储器的指令,所述指令使所述处理器系统能够标识与函数相关联的系数值组;通过减少所述系数值中至少一个的数据宽度以拥有小于第二数据宽度的第一数据宽度来产生缩减宽度系数值;以及将所述缩减宽度系数值存入机器可执行指令。
20.如权利要求19所述的装置,其中所述函数是近似超越函数和代数函数中至少一种的近似多项式。
21.一种确定多项式的估算值的方法,所述方法包括将输入自变量值分成多个缩减宽度值;基于所述多个缩减宽度值确定与所述多项式相关联的多个估算值;基于所述多个估算值确定所述多项式的所述估算值。
22.如权利要求21所述的方法,其中所述多个缩减宽度值的和等于所述输入自变量值。
23.如权利要求21所述的方法,其中确定所述多个估算值的操作包括使用短乘法指令确定所述多个缩减宽度值的至少一个和所述多项式的至少一个系数的乘积。
24.如权利要求21所述的方法,其中确定所述多个估算值的操作包括微分所述多项式。
25.如权利要求21所述的方法,其中确定所述多项式的所述估算值的操作包括确定所述多个估算值的和。
26.如权利要求21所述的方法,其中确定所述多个估算值的操作包括确定修正项值。
27.一种用于确定多项式的估算值的装置,所述装置包括包括存储器的处理器系统;以及储存于所述存储器的指令,所述指令使所述处理器系统能够将输入自变量值分成多个缩减宽度值;基于所述多个缩减宽度值确定与所述多项式相关联的多个估算值;以及基于所述多个估算值确定所述多项式的所述估算值。
28.如权利要求27所述的装置,其中所述多个缩减宽度值的和等于所述输入自变量值。
29.如权利要求27所述的装置,其中储存于所述存储器的所述指令使得所述处理器系统能够使用短乘法指令通过确定所述多个缩减宽度值的至少一个和所述多项式的至少一个系数的乘积来确定所述多个估算值。
30.如权利要求27所述的装置,其中储存于所述存储器的所述指令使得所述处理器系统能够通过微分所述多项式确定所述多个估算值。
31.如权利要求27所述的装置,其中储存于所述存储器的所述指令使得所述处理器系统能够基于确定所述多个估算值的和来确定所述多项式的所述估算值。
32.如权利要求27所述的装置,其中修正项值与所述多个估算值相关联。
33.一种其上存储有指令的机器可访问介质,所述指令在被执行时导致机器将输入自变量值分成多个缩减宽度值;基于所述多个缩减宽度值确定与所述多项式相关联的多个估算值;以及基于所述多个估算值确定所述多项式的所述估算值。
34.如权利要求33所述的其上存储有指令的机器可访问介质,所述指令在被执行时导致所述机器使用短乘法指令通过确定所述多个缩减宽度值的至少一个和所述多项式的至少一个系数的乘积来确定所述多个估算值。
35.如权利要求33所述的其上存储有指令的机器可访问介质,所述指令在被执行时导致所述机器通过微分所述多项式来确定所述多个估算值。
36.如权利要求33所述的其上存储有指令的机器可访问介质,所述指令在被执行时导致所述机器基于所述多个估算值的和来确定所述多项式的所述估算值。
37.一种用于确定多项式的估算值的装置,所述装置包括包括闪存存储器的处理器系统;以及储存于所述闪存存储器的指令,所述指令使所述处理器系统能够将输入自变量值分成多个缩减宽度值;基于所述多个缩减宽度值确定与所述多项式相关联的多个估算值;以及基于所述多个估算值确定所述多项式的所述估算值。
38.如权利要求0所述的装置,其中储存于所述闪存存储器的所述指令使得所述处理器系统能够使用短乘法指令通过确定所述多个缩减宽度值的至少一个和所述多项式的至少一个系数的乘积来确定所述多个估算值。
39.一种用于确定多项式的估算值的装置,所述装置包括被配置为产生至少一个缩减宽度数据值的缩减宽度数据发生器;以可通信的方式耦合到所述缩减宽度数据发生器并且被配置为基于所述至少一个缩减宽度数据值选择至少一个函数的函数选择器;以及以可通信的方式耦合到所述缩减宽度数据发生器和所述函数选择器的比较器,其中所述比较器被配置为基于所述至少一个函数执行至少一个比较。
40.如权利要求39所述的装置,其中所述至少一个函数包括近似多项式。
41.如权利要求40所述的装置,其中所述近似多项式与混合宽度多项式相关联。
42.如权利要求39所述的装置,其中所述至少一个缩减宽度数据值是短宽度系数值。
43.如权利要求39所述的装置,其中所述至少一个缩减宽度数据值是长宽度系数值。
44.如权利要求39所述的装置,还包括以可通信的方式耦合到所述函数选择器的微分器,所述微分器可以被配置为微分所述至少一个函数。
全文摘要
公开了使用缩减宽度数据来进行计算的方法、装置和制品。具体来说,示例性的方法确定与生成和估算函数相关联的缩减宽度数据值。缩减宽度数据值中的一些在编译阶段被存入指令存储器中的指令中,并且在运行时阶段从指令存储器中取回。
文档编号G06F7/00GK1890628SQ200480036215
公开日2007年1月3日 申请日期2004年11月17日 优先权日2003年12月3日
发明者T·唐, 高派·科里 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1