平方根运算中的推测性计算的制作方法

文档序号:20092219发布日期:2020-03-13 07:05阅读:170来源:国知局
平方根运算中的推测性计算的制作方法

本公开涉及数据处理。更具体地,其涉及平方根的计算。



背景技术:

平方根可以使用迭代数字递推法来计算。在每次迭代(而非第一次迭代)时,前一次迭代的结果为输入,并且一个或多个数字的结果为输出。执行每次迭代的电路需要快速运算,使得在处理器时钟的单个周期期间更大量的数字被输出。结果可以得到可以更快速地计算平方根的更快电路。



技术实现要素:

从第一示例配置来看,提供了一种数据处理装置,包括:输入电路,该输入电路用于接收与平方根指令相对应的信号,该平方根指令标识输入值;处理电路,该处理电路用于对输入值执行迭代平方根运算,处理电路包括:数字确定电路,该数字确定电路用于:针对当前迭代,确定平方根运算的至少部分结果的下一个数字;以及余数确定电路,该余数确定电路用于:针对当前迭代,确定平方根运算的至少部分余数,其中,针对当前迭代的下一个数字是基于来自前一次迭代的平方根运算的至少部分余数来确定的;针对当前迭代的至少部分余数是基于来自前一次迭代的平方根运算的至少部分余数和至少部分结果来确定的;并且处理电路适于在针对当前迭代的平方根运算的至少部分结果被确定之前,推测性地生成针对当前迭代的平方根运算的候选的至少部分余数的集合。

从第二示例配置来看,提供了一种数据处理方法,包括:接收与平方根指令相对应的信号,该平方根指令标识输入值;通过以下步骤对输入值执行迭代平方根运算:针对当前迭代,确定平方根运算的至少部分结果的下一个数字;以及针对当前迭代,确定平方根运算的至少部分余数,其中针对当前迭代的下一个数字是基于来自前一次迭代的平方根运算的至少部分余数来确定的;针对当前迭代的至少部分余数是基于来自前一次迭代的平方根运算的至少部分余数和至少部分结果来确定的;并且在下一个数字被确定之前推测性地生成针对当前迭代的平方根运算的候选的至少部分余数的集合。

从第三示例配置来看,提供了一种数据处理装置,包括:用于接收与平方根指令相对应的信号的模块,该平方根指令标识输入值;用于对输入值执行迭代平方根运算的模块,包括:用于针对当前迭代确定平方根运算的至少部分结果的下一个数字的模块;以及用于针对当前迭代确定平方根运算的至少部分余数的模块,其中,针对当前迭代的下一个数字是基于来自前一次迭代的平方根运算的至少部分余数来确定的;针对当前迭代的至少部分余数是基于来自前一次迭代的平方根运算的至少部分余数和至少部分结果来确定的;以及用于在下一个数字被确定之前推测性地生成针对当前迭代的平方根运算的候选的至少部分余数的集合的模块。

附图说明

本发明将参考附图中所示的本发明实施例仅通过示例的方式来进行进一步描述,在附图中:

图1示意性地示出了根据一些实施例的数据处理装置;

图2示出了根据一些实施例的处理电路的示例;

图3和图4示出了根据一些实施例的处理电路中电路的重新定位;

图5示出了根据一些实施例的处理电路的示例;以及

图6示出了根据一些实施例的显示数据处理方法的流程图。

具体实施方式

在参考附图讨论实施例之前,提供了以下实施例的描述。

根据一个示例配置,提供了一种数据处理装置,该数据处理装置包括:输入电路,所述输入电路用于接收与平方根指令相对应的信号,该平方根指令标识输入值;处理电路,该处理电路用于对输入值执行迭代平方根运算,处理电路包括:数字确定电路,该数字确定电路用于针对当前迭代确定平方根运算的至少部分结果的下一个数字;以及余数确定电路,该余数确定电路用于针对当前迭代确定平方根运算的至少部分余数,其中,针对当前迭代的下一个数字是基于来自前一次迭代的平方根运算的至少部分余数来确定的;针对当前迭代的至少部分余数是基于来自前一次迭代的平方根运算的至少部分余数和至少部分结果来确定的;并且处理电路适于在针对当前迭代的平方根运算的至少部分结果被确定之前推测性地生成针对当前迭代的平方根运算的候选的至少部分余数的集合。

通过推测性地生成平方根运算的候选的至少部分余数的集合,可以从数据处理装置所执行的运算的关键路径中省去对至少部分余数的生成。例如,这可以通过在执行其他运算的同时生成候选的至少部分余数的集合来实现。一旦已确定运算的下一个数字,这就可以用来选择一个候选者,以便针对当前迭代输出平方根运算所产生的至少部分余数。因此,执行一个迭代所花费的时间会减少。这可以减少对电路的时间限制,并且在某些情况下,可以使得时钟周期内所执行的迭代次数在系统中增加,其中,至少部分余数的生成未被推测性地确定。要注意,尽管本文使用了术语“平方根”,但可能出现如本领域所知的无法确定准确的平方根的情况(例如,由于数不合理,或无法用二进制表示)。因此,术语“平方根”旨在涵盖在这种情况下发生的平方根近似值。

在一些实施例中,用于当前迭代的平方根运算的候选的至少部分余数中的每一个都是冗余表示。冗余表示是一种能够在某些电路之间有效传递数据值的技术。具体而言,冗余表示将一个数表示为一对值,而不是单个值。这对值可以是总和和进位值,也可以正值和负值。某些电路(例如加法电路)处理以这种格式给出的数能够比处理以另一种格式给出的数更快。通过以冗余表示推测性地产生平方根运算的至少部分余数的候选值,可以从关键路径中省去将候选者转换为非冗余表示所可能花费的时间。

在一些实施例中,处理电路适于在由数字确定电路确定下一个数字之前推测性地生成针对当前迭代的平方根运算的候选的至少部分余数的集合。针对当前迭代的平方根运算的至少部分结果包括前一次迭代的平方根运算的至少部分结果和针对当前迭代计算的下一个数字。以这种方式,每次迭代都会将另外的数字添加到至少部分结果中。

在一些实施例中,候选的至少部分余数的集合包括至少部分余数集包含针对至少部分余数的最近数字的每个可能值的一个候选值。在每次迭代中,平方根运算的至少部分结果的另一个数字为输出。然而,对于作为输出的数字来说,仅存在有限数量的可能性。可能数字的数量取决于平方根运算的基数(r)。通常,数字可以取以下值:{-a,-(a-1),…-1,0,+1,…,+a},其中a≥ceil(r/2)且a<r。对于基数4,如果a=2,则这将给出集合{-2,-1,0,1,2}。这被称为最小冗余数字集。如果a=3,则有七个值{-3,-2,-1,0,1,2,3}。这被称为最大冗余数字集。如果a=4,则有九个值{-4,-3,-2,-1,0,1,2,3,4}。这被称为超冗余数字集,因为a>r-1。因此,数据处理装置通过针对每个可能的数字值生成一个候选者,来推测性地生成至少部分余数的候选集。通过使用最小冗余集,候选者的数量保持较低,并且从而考虑每个候选者所需的电路量也保持较低。在上面的示例中,一个候选者将与可能的数字-2对应,另一候选者将与可能的数字-1对应,等等。在所有这些可能的情况下计算出部分余数,一旦下一个数字已知,就可以确定这些可能的数字中哪一个是正确的,并且可以从候选者中选择对应的至少部分余数。这样就不需要仅在已知下一个数字之后才计算至少部分余数,从而从关键路径中省去了该计算。

在一些实施例中,数据处理装置包括使输入值归一化的归一化电路。在归一化形式下,尾数大于或等于1且小于2。然而,尾数的整数部分不被存储在浮点数中。此外,在一些实施例中,执行定标(scaling)(例如通过定标电路)。这允许对输入值以及输出值进行某些假设。例如,定标可能涉及更改尾数(例如将尾数除以2),从而调整指数。如果指数可以变为偶数,则平方根的指数可以通过将输入值的指数除以2来确定。

在一些实施例中,处理电路适于在单个时钟周期中执行两次迭代。通过减少执行每次迭代所需的时间,可以增加每个时钟周期可能的平方根运算的迭代次数。通过这种方式,本技术可适用于每一时钟周期至少实现两次迭代的电路。因此,整个平方根运算可以比其他建议的技术更快地执行(例如,使用更少的时钟周期)。

在一些实施例中,迭代平方根运算为基数4(radix-4)。本实施例的基数4实施方式使得可以在每次迭代时以两个二进制数的格式输出数字。例如,如果数字集包括{-2,-1,0,+1,+2},那么这些可以作为冗余表示的一部分以二进制编码为:-2=>10,-1=>01,0=>00,+1=>01,+2=>10。要注意,正值和负值的输出相同(例如,-2和+2都输出二进制值10)。这是因为在冗余表示中,负值和正值作为单独的词提供。例如,序列1,-2,0将被编码为01,00,00的正数词和00,10,00的负数词。在其他实施例中,其他基数是可能的,例如2或8。然而,由于有更多可能的输出数字,候选的至少部分余数的数量也将增加。因此,增加基数(从而减少确定平方根所需的迭代次数)会产生更具扩展性的电路。

在一些实施例中,来自前一次迭代的平方根运算的至少部分余数包含来自前一次迭代的平方根运算的至少部分余数的预定数量的最高有效位。不考虑来自前一次迭代的平方根运算的至少部分余数的所有位,只考虑来自前一次迭代的平方根运算的至少部分余数的预定数量的最高有效位。这个预定数量取决于平方根运算的基数,并且包含足够数量的位,以便包括舍入运算所必需的位。通过这种方式,可以丢弃对结果的整体输出没有影响的不重要的位,从而产生不那么复杂的电路。

在一些实施例中,以冗余表示形式提供了来自前一次迭代的平方根运算的至少部分余数和来自前一迭代的平方根运算的至少部分结果中的至少一个。

在一些实施例中,处理电路适于以冗余表示和非冗余表示针对当前迭代推测性地生成平方根运算的候选的至少部分余数的集合;并且以非冗余表示的针对当前迭代的平方根运算的候选的至少部分余数是基于来自前一次迭代的平方根运算的至少部分余数的最高有效位的。例如,这可以通过以冗余表示针对当前迭代生成平方根运算的候选的至少部分余数的集合,然后取这些候选者的最高有效位并将它们转换为冗余表示来实现。通过以冗余表示由当前迭代生成平方根运算的候选的至少部分余数的集合,所选候选者可以作为下一次迭代的输入提供。通过以非冗余表示提供近似余数的候选集,可以将所选候选者用作比较函数的一部分,以便选择下一次迭代的下一个数字。通过这种方式,可以从关键路径中省去平方根运算的两个元素,从而减少电路的时间限制。

现在将参附考图来描述特定实施例。

图1示出了根据一些实施例的装置100。装置100包括负责接收输入值的接收电路110。输入值可以作为对应于平方根指令的信号的一部分接收。信号的作用是使装置100对输入值执行平方根运算,以便输出与输入值平方根对应的值。要注意,输入值的实际平方根可能例如是一个无理数或另一种类型的无法用二进制表示法准确表示的数。因此,输出实际上可以是输入值平方根的近似值。

在接收电路110接收到输入值后,向归一化和定标电路120提供输入值。在一些实施例中,归一化和定标电路对输入值执行初始归一化和定标运算。可以执行这些运算,以便提高可以执行浮点运算的程度。例如,通过执行特定的运算,以便以特定的格式接收输入值,可以对平方根运算进行的方式进行假设。因此,可以简化平方根运算的进一步迭代,从而使用较少的电路,或者在其他情况下所需的较少量的处理周期内执行平方根运算。在一些实施例中,归一化过程使得平方根运算的初始迭代可以更快地进行。

在执行任何必要的归一化和定标后,输入值被传递到处理电路130。处理电路130包括初始迭代电路140以及数字确定电路150和余数确定电路160。在该实施例中,初始迭代电路140执行迭代平方根运算的初始迭代。在一些实施例中,初始迭代电路140的作用不是明确的、单独的元素,而是由数字确定电路150和余数确定电路160执行的。在其他实施例中,初始迭代电路是数字确定电路150和余数确定电路160的简化版本。具体而言,如果已知进入初始迭代电路140的输入具有特定的格式,则可以简化平方根运算的初始迭代。例如,如果已知输入值在两个边界之间(例如,通过归一化和定标电路实现),那么也可能已知输出值在两个边界之间,从而限制了第一次迭代中输出的可能数字。这样的技术超出了本公开的范围,除非本公开不排除所使用的这样的技术。

在执行初始迭代后,数字确定电路150和余数确定电路160执行平方根运算的进一步迭代。在每次迭代中,由数字确定电路150产生最终结果的一个或多个进一步的数字。当达到所需的精度水平时(例如,当已由数字确定电路150输出所需数量的数字时),由处理电路130执行的迭代运算结束,并且由数字确定电路150输出的数字集被串接。然后将串接的结果传递到定标和舍入电路170,其中,由定标和舍入电路170执行的定标运算可以对应于由归一化和定标电路120执行的任何定标运算的逆运算(inverse)。此外,根据对执行平方根运算的用户的需要,可能会发生许多不同的舍入运算。在执行任何定标和舍入运算后,最终结果由定标和舍入电路170输出。

图2示出了根据一些实施例的处理电路130的示例。在这些实施例中,数字确定电路150由第一数字确定电路部件150a和第二数字确定电路部件150b组成。第一数字确定电路部件150a负责从平方根运算的迭代中产生第一数字,第二数据确定电路部件150b负责确定从平方根运算的进一步迭代产生的结果的第二数字。类似地,余数确定电路160由第一余数确定电路部件160a和第二余数确定电路部件160b组成。与数字确定电路一样,第一余数确定电路部件160a负责产生平方根运算的迭代的余数值,第二余数确定电路部件160b负责从平方根运算的进一步迭代中产生进一步的余数值。

第一余数确定电路部件160a以冗余表示从前一次迭代接收至少部分根和余数值。至少部分根包括迄今为止由数字确定电路150输出的所有输出数字。该至少部分根是至少部分的,因为所有数字的串接可以是精确的平方根,但也可能不是。由下一个余数确定电路200a接收到至少部分根和余数值。这将根据以下等式计算当前迭代的余数:

rem[i+1]=r×rem[i]-si+1×(2×s[i]+si+1×r-(i+1))

其中‘i’是迭代次数,‘r’是基数(例如4),‘si’是迭代i中的数字输出,‘a’是以r为基数的最大输出数字,‘si’是迭代i之前的部分根。

注意,存在五个下一个余数电路200a、200b、200c、200d、200e。五个下一个余数电路200a、200b、200c、200d、200e中的每一个都推测性地确定下一个余数值,每个都假定针对将由第一数字确定电路部件150a输出的新确定的数字的不同值。因此,这些电路产生候选余数值的集合,每个候选余数值被输入到5:1多路复用器210中。以这种方式,下一个余数值rem[i+1]的五个不同候选值由下一个余数电路200中的每一个产生。一旦确定了当前迭代si+1的数字,这将用作5:1多路复用器210的选择信号,以选择要输出的五个候选者中正确的一个作为当前迭代的余数值rem[i+1]。因此,在对当前迭代的余数值进行计算之前,无需等待当前迭代的数字被已知。这可以显著减小“关键路径”的长度。

第一数字确定电路部件150a与第一余数确定电路部件160a基本上同时工作。第一数字确定电路部件150a采用前一次迭代的余数值rem[i]的最高有效位(冗余表示)作为输入。在本实施例中,假设平方根运算在基数4下进行,因此所需的适当精度水平为9位。因此,提供一个9位加法器220以将前一次迭代的余数的最高有效位从冗余表示转换为非冗余表示。然后将加法器220的输出提供给比较电路230。在这里,将余数值的最高有效位与不同的比较常数进行比较,以确定当前迭代si+1的输出数字。这些选择常数在文献中被提供,例如d.ercegovac和tomáslang于1994年通过kluweracademicpublishing出版的“divisionandsquareroot:digitrecurrentalgorithmsandimplementations”第8.2.1节。

然后将数字提供给至少更新部分根的根更新电路230以及提供给如前所述的第一余数确定电路部件160a中的5:1多路复用器210作为选择信号。

在本实施例中,第二数字确定电路部件150b以与第一数字确定电路部件150a的方式类似的方式工作。这里的显著区别在于:第二数字确定电路150b和第二余数确定电路160b的输出在执行进一步迭代的情况下可以作为输入提供回到第一数字确定电路150a和第一余数确定电路160a,或者在不执行进一步迭代的情况下可以作为最终结果输出。

因此,可以看出,通过提供下一个余数电路200,可以在已知该计算所需的至少一个输入之前,推测性地确定每次迭代的下一个余数值。具体而言,提供了下一个余数电路200,以便可以并行执行对下一个余数的计算,每个电路200a、200b、200c、200d、200e假设当前数字si+1的可能值中不同的一个。一旦已知当前数字si+1的实际值,就可以将其用作5:1多路复用器210的选择信号,以选择对应的余数值。因此,不必在已知当前数字si+1之后执行该计算,而是可以提前执行计算(例如,与数字确定电路150并行),并且在确定下一个数字si+1后,只需执行选择运算来输出对应的余数值。因此,一旦已知下一个数字,就可以快速输出余数值,从而快速完成运算。因此,减少了平方根运算每次迭代的时间约束。在某些情况下,这可以允许在处理器的单个周期中执行平方根运算的大量迭代。这进而使得平方根运算执行得更快。因此,技术人员将意识到,由于将特定部件置于处理电路130内,因此可以由电路并行和/或推测性地执行特定的运算,以使电路更快地工作。

图3示出了可以使用类似技术代替关于图2所示技术或与之一起使用的方式。具体而言,第二数字确定电路150b的9位加法器300不需要作为第二数字确定电路150b的一部分进行。具体而言,通过这些实施例可以认识到,9位加法器300的可能输入也受到限制,因此9位加法器300的输出可以推测性地产生。该运算可以在与第一数字确定电路150a的9位加法器220和比较电路230的运算相似的时间在第一数字确定电路150a中执行。以与关于图2所述的类似的方式,通过推测性地执行该计算,并且然后一旦已知下一个数字si+1就选择正确的输出,关键路径可以通过只要求在已知下一个数字si+1时进行选择运算而不是加法运算来减少。关于图4示出了如何配置这种电路的示例。

图4示出了处理电路130’的示例,其中9位加法器300电路已被移动到第一数字确定电路150a’。与先前描述的技术一样,9位加法器电路被提供5次300a、300b、300c、300d、300e,以便以非冗余表示推测性地产生针对当前迭代的余数值rem[i+1]。这是由于在本示例中提供了五个9位加法器300a-300e而产生的,每个加法器负责产生当前迭代的余数值rem[i+1]的候选值。每个加法器300a-300e表现得就像比较电路230输出的下一个数字是可能值-2、-1、0、1、2(对于基数4)中不同的一个一样。五个可能值的存在需要五个9位加法器。这些候选者被提供给5:1多路复用器400。到5:1多路复用器400的选择信号是当前迭代si+1的输出数字。因此,当已知下一个数字时,可以将其提供给多路复用器,以便以非冗余表示针对前迭代提供适当的余数值。因此,在确定数字之后,9位加法器电路300不需要工作。换言之,该电路已从关键路径中被移除,并且可以与已位于第一位确定电路150a’中的9位加法器220基本上并行工作。因此,在数字确定电路150的关键路径上存在的处理总量可以减少。同样,这会导致平方根运算执行得更快,并且使得定时约束更容易被满足。

图5更详细地示出了处理电路130”的实施例。特别要注意的是,9位加法器电路220已替换为8位加法器520。该加法器能够通过额外使用进位信号cin对9位进行有效的加法。同样在本实施例中,提供给比较电路230的选择常数是由于interval[i]而生成的。前两次迭代的间隔会发生变化(因为部分根的前两位数字决定了间隔),并且将迭代i处的部分根root[i]的可能范围划分为若干大小相等的区段。

间隔值通过间隔更新电路530在第一数字确定电路部件150a”中更新。对于下一个余数电路200,使用掩码(mask)将最近确定的数字(由两位组成,因为该实施方式是基数4)串接到移位部分根的正确位置处,并将该输入与前一次迭代的余数值rem[i]一起提供给4:2进位保存加法器。注意,掩码值在第一余数确定电路部件160a”和第二余数确定电路部件160b”之间右移两位。这是由于串接到两个部件160a”和160b”之间的另一数字(包含两个位)而产生的。要注意的是,部分根的许多输入都是56位。这是因为在双精度浮点数中,有53个小数位。舍入运算需要一个保护位。整数组分的添加位,加上填补位,使总数达到56位。针对余数输入提供了59位。这些包括55个小数位和4个整数位(由于余数的最大值)。

图6示出了根据一个实施例的显示数据处理方法的流程图600。在步骤610处,接收到输入,该输入指示作为平方根运算主体的值。在步骤620处,输入值被定标并被适当地转换为归一化格式。在步骤630处,执行平方根运算的第一次迭代。第一运算可以与其他迭代分开考虑,因为由于可能的输入值数量有限,而使得执行第一次迭代可能比其他迭代更快。在任何情况下,在步骤640处,针对单个时钟周期中的下两次迭代来确定下一个数字和至少部分余数值。该过程涉及在确定当前迭代的平方根运算的至少部分结果之前,针对这些迭代中的至少一次推测性地生成平方根运算的候选的至少部分余数集。在步骤650处,确定运算是否完成。这可以基于已经执行的迭代次数以及这些迭代是否达到了所需的精度水平来确定。如果要执行进一步的迭代(例如,过程没有完成),那么该过程将返回到步骤640,在步骤640处执行进一步的两次迭代。否则,在步骤660处,串接步骤630和步骤640的输出数字以产生结果。然后适当地对其进行定标和舍入,并在步骤670处输出最终值。注意,在一些实施例中,在步骤640处,可以指示只执行一次进一步的迭代,而不是两次迭代,例如,如果这样做会使精确度水平达到所需的水平。

因此,已经证明,通过在确定当前迭代的至少部分结果之前推测性地产生候选值的集合,可以减少对关键路径的运算数。因此,一些处理可以并行化,从而每次迭代完成所需的时间可以增加。这进而使得在单个时钟周期中可以放宽定时约束或相比于可能的其他情况执行更多次迭代。因此,平方根运算可以更快地执行。

在本申请中,词语“被配置为……”用于表示装置的元件具有能够执行所定义运算的配置。在该上下文中,“配置”是指硬件或软件互连的布置或方式。例如,装置可以具有提供所定义运算的专用硬件,或者可以对处理器或其他处理设备进行编程以执行该功能。“被配置为”并不意味着需要以任何方式更改装置元件来提供所定义的运算。

尽管已参照附图在本文中详细描述了本发明的说明性实施例,但应理解,本发明不限于那些精确的实施例,并且本领域技术人员可以在不脱离由所附权利要求限定的本发明的精神和范围的情况下在其中进行各种更改、添加和修改。例如,从属权利要求的特征的各种组合可以与独立权利要求的特征一起作出,而不脱离本发明的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1