用于处理浮点值的装置和方法与流程

文档序号:13811821阅读:181来源:国知局

本公开涉及数据处理,更具体地涉及当执行数据处理时对浮点值的处理。



背景技术:

数据处理装置能够接收浮点格式的值并且能够生成浮点输入值的和值,例如,求和操作。但是,针对执行这种浮点加法出现的问题是,其一般是不关联的。换言之,对三个或更多浮点值求和的结果取决于执行加法的次序。与大值相加的小值可能没有影响,所以程序员会选择首先对小值求和。类似地,对正浮点值和负浮点值求和的结果取决于求和的次序。如果预计将取消大值,则可以最后对小值求和。浮点数具有这样的编码,该编码一方面由于其能够表示非常大范围的值所有是有利的,另一方面其不可避免地会导致以下情况:当对多个浮点值求和时将存在精确度的损失并且该损失将根据对这些值的求和次序而不同。计算的这种不确定结果在数据处理的背景中通常是非常不希望出现的,而且在求和之前对这些输入值进行的观察和分类也会增加数据处理装置进行这种求和的复杂性从而降低处理速度。替代地,为了限制最终和值的精度,在高精度浮点数的背景中,由于被隐藏在输出和值的精确度之下的求和次序导致的用来实现确定的最终和值的任何变化都是不期望的。



技术实现要素:

在一个示例实施例中,存在一种装置,包括用于处理浮点值的中间表示的电路,其中,该中间表示包括:有效数段,该有效数段保存浮点值的有效数的表示,其中,浮点值的指数的低有效位部分定义有效数段中保存有效数的表示的位置范围;指数段,该指数段保存浮点数的指数的高有效位部分的表示,该高有效位部分的表示指示跨越浮点值的格式的值范围的多个连续窗口中的选定窗口,其中,有效数段的第一部分对应于选定窗口,并且其中,有效数段的第二部分对应于与邻近且低于选定窗口的值范围的另一窗口的重叠部分;以及卷影段,该卷影段在浮点值的有效数的表示被移到邻近且高于选定窗口的值范围的更高窗口时,保存用于填充有效数段的第二部分的值。

在另一示例实施例中,存在一种计算机程序产品,其上以非暂态方式存储有计算机程序,当该计算机程序在计算设备上执行时使得计算设备作为上述示例的装置进行操作。

在另一示例实施例中,存在一种软件,该软件在计算设备上执行时使得计算设备作为上述示例的装置进行操作。

在另一示例实施例中,存在一种存储浮点值的中间表示的方法,该方法包括:在中间表示的有效数段中存储浮点值的有效数的表示,其中,浮点值的指数的低有效位部分定义了有效数段中存储有效数的表示的位置范围;在中间表示的指数段中存储浮点值的指数的高有效位部分的表示,该高有效位部分的表示指示跨越浮点值的格式的值范围的多个连续窗口中的选定窗口,其中,有效数段的第一部分对应于选定窗口,并且其中,有效数段的第二部分对应于与邻近且低于选定窗口的值范围的另一窗口的重叠部分;以及当浮点值的有效数的表示被移到邻近且高于选定窗口的值范围的更高窗口时,存储用于填充有效数段的第二部分的值。

在另一示例实施例中,存在一种计算机程序产品,其上以非暂态方式存储有计算机程序,当该计算机程序在计算设备上执行时使得计算设备执行上述示例的方法。

在另一示例实施例中,存在一种软件,该软件在计算设备上执行时使得计算设备执行上述示例的方法。

在另一示例实施例中,存在一种装置,包括:用于存储浮点值的中间表示的部件,该部件包括:用于将浮点值的有效数的表示存储在中间表示的有效数段的单元,其中,浮点值的指数的低有效位部分定义有效数段中存储有效数的表示的位置范围;用于将浮点值的指数的高有效位部分的表示存储在中间表示的指数段的单元,该高有效位部分的表示指示跨越浮点值的格式的值范围的多个连续窗口中的选定窗口,其中,有效数段的第一部分对应于选定窗口,并且其中,有效数段的第二部分对应于与邻近且低于选定窗口的值范围的另一窗口的重叠部分;以及用于在浮点值的有效数的表示被移到邻近且高于选定窗口的值范围的更高窗口时,存储用于填充有效数段的第二部分的值的单元。

附图说明

下面将参考附图中所示的本技术的实施例,仅通过示例来进一步描述本技术,其中:

图1利用一个实施例中本技术的中间表示的一个准备示例,示出了双精度二进制64位浮点格式的值范围以及位于该范围中的三个示例浮点值;

图2详细示出了一个实施例中包括一些相关联的电路的针对双精度64位浮点值的本技术的中间表示;

图3示出了一个实施例中对于图2中所示的本技术的中间表示的替代中间表示;

图4示出了一个实施例中对于图2中所示的本技术的中间表示的具有两个卷影段的替代中间表示;

图5示意性地示出了一个实施例中用于生成并存储来自输入双精度浮点值的本技术的中间表示的电路;

图6示出了根据一个实施例的方法对本技术的中间表示中的两个有效数求和所执行的一系列步骤;

图7示出了在一个实施例中对本技术的中间表示中的有效数执行窗口移位操作所采取的一系列步骤;

图8a和8b示出了根据本技术的独立于三个浮点值的和值的计算的次序;

图9a示意性地示出了在一个实施例中用于使用本技术的中间表示执行浮点求和的装置;

图9b示意性地示出了在一个实施例中用于使用本技术的中间表示执行浮点求和的装置;

图10示意性地示出了在一个实施例中对本技术应用基于通道的向量处理;

图11a示意性地示出了在一个实施例中用于处理本技术的包括有符号和没有符号的表示二者的中间表示中的浮点值的装置;

图11b示出了图10b的装置能够执行的六个示例指令;以及

图12示意性地示出了在一些实施例中用于支持本技术的通用计算设备。

具体实施方式

至少一些实施例提供了包括用于处理浮点值的中间表示的电路的装置,其中,该中间表示包括:有效数段,该有效数段保存浮点值的有效数的表示,其中,浮点值的指数的低有效位部分定义有效数段中保存有效数的表示的位置范围;指数段,该指数段保存浮点值的指数的高有效位部分的表示,该高有效位部分的表示指示跨越浮点值的格式的值范围的多个连续窗口中的选定窗口,其中,有效数段的第一部分对应于选定窗口,并且其中,有效数段的第二部分对应于与邻近且低于选选定窗口的值范围的另一窗口的重叠部分;以及卷影段,该卷影段保存当浮点值的有效数的表示被移到邻近且高于选定窗口的值范围的更高窗口时用于填充有效数段的第二部分的值。

本技术提供了浮点值的中间表示(本文中也称为滑动窗口累加器(swacc)),该中间表示可以被看作给定指数范围中没有符号的浮点值的各种固定点表示。该中间表示具有三个核心部分,即有效数段、指数段、以及卷影段。浮点值的指数的值的一部分(低有效位部分)确定浮点值的有效数将被保存在中间表示(尤其是有效数段)中的位置。另外,中间表示的指数段保存浮点值的指数的高有效位部分的表示。本技术将与浮点值的特定格式相关联的值范围(例如,ieee754标准中指定的针对双精度64位浮点数的2-1023~21024)进一步划分为多个连续“窗口”,并且浮点值的指数的高有效位部分指示浮点值的有效数所位于的该多个窗口中的特定窗口。浮点值的指数的低有效位部分随后定义了浮点值的有效数位于选定窗口中的位置。

本技术在中间表示中提供的卷影段允许保存如选定窗口中表示的浮点值的有效数的高有效位部分的副本,本技术的发明人已经发现这是处理浮点值在多个连续窗口中的窗口之间移动(例如,当对该中间表示中的多个浮点值求和时)的有效机制。实际上,本技术规定,中间表示允许浮点值的有效数扩展超过选定窗口并且进入邻近且低于针对该有效数的选定窗口的值范围的另一窗口。值得注意的是,所提供的卷影段的大小对应于与更低的邻近窗口的重叠部分的大小。这意味着,如果需要对中间表示中的浮点值进行窗口移位,例如,因为需要将其与中间表示中的另一浮点值对齐(如下面进一步讨论的),或者由于对中间表示中的两个浮点值的求和产生了在中间表示中更适合表示在下一个更高窗口中的和值,则卷影段中保存的值使得能够精确确定下一个更高窗口中的适当表示。这是因为需要针对下一个更高窗口的与旧的当前窗口相重叠的区域的正确值,并且值得注意的是,迄今为止在当前窗口中保存的和值可以包括不会对新的更高窗口中的总和造成影响的一些值。换言之,卷影段保存在更早发生窗口移位的情况下该重叠部分将具有的值,因此新的更高窗口中表示的正确和值可以被确定。

在一些实施例中,该装置还包括对中间表示中的两个操作数执行求和操作的求和电路,其中,求和操作包括:对分别来自两个操作数的指数段的第一指数值和第二指数值进行比较;当第一指数值与第二指数值相差1时,对两个操作数中较小的操作数执行窗口移位操作,以将较小的操作数的选定窗口调整为匹配两个操作数中较大的操作数的选定窗口;以及分别对两个操作数的有效数段和卷影段求和,以生成中间表示中的和值。

为了能够对中间表示中的两个操作数求和,该装置可以被提供有求和电路。应该注意的是,求和电路用于执行求和操作的中间表示中的两个操作数可以来自各种来源。例如,两个操作数可以在该装置执行的求和指令中指定,这两个操作数中的至少一个可以在这样的指令中被给出作为中间值给出,并且这两个操作数中的一个或两个实际上可以由指令以它们的原始浮点格式提供或指定,该装置随后在执行求和操作之前,可以根据需要将这些浮点值中的一个或两个转变为中间表示中的两个操作数。执行求和操作的方式包括对两个操作数的指数段(在中间表示中)给出的指数值进行比较。将标识的特定特性是一个指数值何时与另一指数值相差1,这意味着操作数位于相邻窗口中,并且在这种情况下对较小的操作数执行窗口移位操作以对齐两个操作数的选定窗口(对齐到针对较大的操作数已经标识的选定窗口)。这使得能够执行适当的求和操作,从而生成中间表示中的和值。

在一些实施例中,该装置还可以包括存储一个或多个中间表示的存储电路。当求和电路执行求和操作时,两个操作数中的至少一个操作数可能已经被存储在存储电路中(并且随后被从存储电路取回)。在一些实施例中,两个操作数中的一者或二者可以被作为直接被加数提供给求和操作,例如,由将求和电路配置为执行求和操作的指令提供。

求和操作的和值的目标可以采取各种形式,但是在一些实施例中,求和操作是针对存储电路中存储的两个操作数之一的累加操作。

为了支持可能作为求和操作的一部分需要被执行的窗口移位操作,在一些实施例中,该装置包括:复制电路,该复制电路将较小的操作数的卷影段复制到较小的操作数的有效数段的第二部分;清除电路,该清除电路清除较小的操作数的卷影段并且清除较小的操作数的有效数段的第一部分;以及增加电路,该增加电路使较小的操作数的指数值增加1。因此,考虑到下一个更高窗口的移位,复制电路使得较小的操作数的卷影段随后被使用作为新放置在有效数段中,并且清除电路随后对较小的操作数的相关部分(卷影段)和有效数段的第一部分(当表示在较低窗口中时保存有效数段的相关部分)进行“重置”。最后,增加电路被提供以调整较小的操作数的指数值以将其移位到下一个更高窗口。结果,较小的操作数和较大的操作数随后直接被表示在同一窗口中,为针对它们将执行的求和做好准备。

可能存在作为求和操作的一部分对两个操作数的卷影段执行求和导致溢出的情况,并且在一些实施例中,求和电路具有这样的电路,该电路响应于对两个操作数的卷影段求和导致卷影溢出而对和值执行窗口移位操作,以调整两个操作数的选定窗口从而给出和值的选定窗口。因此,在这种情况下,该电路使得两个操作数的选定窗口(即,最初匹配的窗口,或者如上所述的较小的操作数刚好被调整到的窗口)能够被调整,以给出针对和值的适当窗口(即,一般是一个更高窗口)。

当发生这样的卷影溢出时,可能是卷影溢出可以直接被使用而不需要被以任何方式保存的情况,但是在一些实施例中,该装置包括卷影溢出存储装置和响应于对两个操作数的卷影段求和导致卷影溢出而将卷影溢出存储在卷影溢出存储装置中的电路。在一些实施例中,为了处理发生卷影溢出的情况,复制电路具有将卷影溢出复制到较小的操作数的有效数段的第一部分的最低有效位部分的电路。

还可能存在对两个操作数的有效数段的求和会导致有效数溢出的情况,并且在一些实施例中求和电路具有以下电路,该电路响应于对两个操作数的有效数段求和导致有效数溢出从而对和值执行窗口移位操作,以调整两个操作数的选定窗口从而给出和值的选定窗口。因此,当发生这种有效数溢出时,求和电路的该电路使能在和值上执行窗口移位操作,以将其表示从一个窗口移到更高窗口,从而在中间表示中更有效地表示和值。

在一些实施例中,复制电路具有将有效数溢出复制到较小的操作数的有效数段的第一部分的最低有效位部分的电路。作为求和结果生成的有效数溢出的值随后被适当捕捉用于后面的处理。

在发生这种有效数溢出的情况中,这可以是有效数溢出值可以被直接使用而不需要被以任何方式临时保存的情况,但是在一些实施例中该装置还包括有效数溢出存储装置和响应于对两个操作数的有效数段求和导致有效数溢出而将有效数溢出存储在有效数溢出存储装置中的电路。该有效数溢出值随后可以在被用在处理中间表示的后续阶段中之前而被保存。

当作为求和操作的一部分对两个操作数的指数值进行的比较揭示出这两个操作数相差1以上时,较小的操作数的卷影段不能被用来在较大的操作数的窗口中重新表示较小的操作数,并且较小的操作数随后实际在任何方面都被标识为显著小于较大的操作数并因此将不会影响由这两个操作数的求和而生成的最终和值。因此,在一些实施例中,求和电路响应于第一指数值和第二指数值相差1以上,而使用两个操作数中较大的操作数作为中间表示中的和值并且终止求和操作。换言之,此时,两个操作数中较小的操作数被简单丢弃,并且较大的操作数被用作中间表示中的和值。

本技术还使得可以用浮点格式表示的特殊数字能够被处理,并且因此在一些实施例中,中间表示包括存储特殊数指示符的特殊数字段,其中当浮点值为无穷大或非数字时该特殊数指示符具有特殊值。该特殊数指示符可以采用各种形式,例如,一方面,它可以仅仅是指示浮点值是这样的特殊数字的单个位,或者它可以是在中间表示中的其他字段不具有最大值时有条件地表示这样的特殊数字的单个位,或者它可以是使能保存特定种类的特殊数字(例如,无穷大或非数字)的更详细的表示的多个位。

当在输入浮点值中遇到这种特殊数字时,浮点求和的本质是和值也将是这样的特殊数字(例如,无穷大与任意浮点值之和也是无穷大),因此在一些实施例中,求和电路包括特殊数字处理电路,该特殊数字处理电路响应于特殊数指示符具有所设置的特殊值,而将和值中的特殊数指示符设置为特殊值并且终止求和操作。

可能存在装置(尤其是求和电路)的操作会导致所生成的值处于中间表示可以表示的范围以外的情况,因此在一些实施例中,增加电路响应于对和值执行窗口移位操作导致和值的指数段的指数溢出,而将和值中的特殊数指示符设置为特殊值。

当特殊数指示符具有所设置的特殊值时,本技术进一步规定:例如,出于诊断目的,随后可以重新使用中间表示的至少一段来指示浮点值不能表示在中间表示中的原因(例如,无穷大或非数字)。因此,在一些实施例中,该装置还包括综合电路,该综合电路响应于特殊数指示符被设置为特殊值而使综合信息被存储在有效数段、卷影段、和特殊数段中的至少一者中,其中,综合信息指示浮点值为无穷大或非数字的原因。

该综合信息可以采用各种形式,但是在一些实施例中,综合信息包括使得浮点值为无穷大或非数字的指令的程序计数器的至少一部分。程序计数器的该部分通常将被选择,用户使用程序计数器的该部分足以唯一地标识出导致浮点值为无穷大或非数字的指令(或者至少标识出随后可以被适当审查的少量指令)。可能存在指令没有被单独跟踪而是被成组跟踪的情况(例如,在无序处理器中),因此在一些实施例中,综合信息包括指示一组指令的程序计数器的至少一部分,其中,该组指令中的指令导致无穷大或非数字。

本技术还认识到,通过在基于通道的向量处理装置的背景中实现这些技术可以提高针对中间表示的处理效率。因此,在一些实施例中,该装置还包括基于通道的向量处理电路,其中,有效数段的长度对应于基于通道的向量处理电路的通道大小的第一倍数,并且卷影段的长度对应于基于通道的向量处理电路的通道大小的第二倍数。有效数段和卷影段与基于通道的向量处理电路的通道大小(或其数倍)的对齐使得求和电路能够得益于可以从使用基于通道的向量处理布置得到的处理效率。

但是,可能存在中间表示的这些段中的至少一段不是自然地与基于通道的向量处理配置的通道大小对齐的情况,在这种情况中,从通道大小中可用的附加空间可以被用来扩展这些部分中的一者。例如,在一些实施例中,当有效数段的第二部分的长度小于通道大小时,有效数段还包括有效数扩展部分,其中,第二部分的长度和有效数段扩展部分的长度加起来等于通道大小的长度。因此,有效数扩展部分通常用尽通道大小中的剩余可用空间,因此还使得更大的有效数表示能够被处理。

同样地,在通道大小中的这种可用的“附加”空间应用于有效数段的情况下,其还可以应用于卷影段(通过卷影段和有效数段的第二部分的大小对应),因此在一些实施例中,当卷影段的长度小于通道大小时,卷影段还包括卷影扩展部分,其中,卷影段部分的长度和卷影扩展部分的长度加起来等于通道大小的长度。因此,可以提供更大的卷影,即,与邻近且低于选定窗口的值范围的另一窗口的更大重叠部分,其中,浮点值的有效数被表示在中间表示中。

中间表示的指数段也可以与基于通道的向量处理电路的通道大小对齐,但是在进行求和操作的背景中,被求和的两个操作数的指数值通常不是它们本身被按照每个操作数的有效数的方式被求和,因此在一些实施例中,求和电路包括当指数段在基于通道的向量处理电路的通道中时将第一指数值和第二指数值中的一个进行清零的电路。因此,事实上,通过将第一和第二指数值中的一个清零,操作数的指数段仍可以按照与中间表示的其他段相同的方式(即,求和)由基于通道的向量处理电路处理,其中,一个指数值的剩余(非零)值为和值提供了指数值,并且指数段可以按照与中间表示的其他段相同的方式由基于通道的向量处理电路有效地处理。

该装置可以被设置为能够处理有符号和没有符号的中间表示,因此在一些实施例中,浮点值的中间表示是有符号的中间表示,并且该装置还包括用于处理正值的正中间表示和用于处理负值的负中间表示的电路。因此,正号和负号的中间表示都可以被处理。

处理这些有符号的中间表示的特定方式可以采用各种形式,例如,它可以被设置为该装置具有用于至少一个正中间表示的存储装置和用于至少一个负中间表示的存储装置,例如,从而可以针对正中间表示和负中间表示中的每个分别求和,且因此更加简单。

求和电路可以被配置为响应于通过各种方式接收到作为用于求和操作的操作数的有符号的浮点值,但是在一些实施例中,求和电路响应于作为两个操作数的有符号浮点值和输入的有符号中间表示的接收,生成作为结果的有符号的中间表示,其中:当有符号的浮点值是正浮点数时,作为结果的有符号的中间表示的正分量保存输入的有符号的中间表示的正分量与有符号的浮点值的绝对值的和值;当有符号的浮点值是负浮点数时,作为结果的有符号的中间表示的负分量保存输入的有符号的中间表示的负分量与有符号的浮点值的绝对值的和值。因此,当接收到有符号的浮点值时(该装置随后将该有符号的浮点值转换为中间表示),该装置可以保存正值和负值的分别的中间表示,因此,在知道哪个是哪个的情况下,只需要考虑每种类型的绝对值,并且可以执行正值和负值的中间求和,直到这两个值需要最终被结合在一起以产生输出的浮点和值为止。

在一些实施例中,求和电路响应于接收到作为两个操作数的两个有符号的中间表示,而生成作为结果的有符号的中间表示,其中:作为结果的有符号的中间表示的正分量保存两个输入的有符号的中间表示的正分量的和值;作为结果的有符号的中间表示的负分量保存两个输入的有符号的中间表示的负分量的和值。

当这些单独的中间正表示和中间负表示需要结合在一起以产生输出的和值时,可以通过从正中间表示的绝对值中减去负中间表示的绝对值(或者替代地看做正中间表示和负中间表示相加)来执行该结合,因此在一些实施例中,求和电路还包括通过从正中间表示的绝对值中减去负中间表示的绝对值,来将正中间表示与负中间表示结合在一起的电路。

尽管中间表示可以被该装置输出,但是一般情况是在该装置被布置为从外部源接收浮点值的情况下,对于该装置本身更有用的是输出浮点格式的值,因此在一些实施例中,该装置还包括转换电路,该转换电路通过根据有效数段的最高有效设置位的位置选择有效数段的内容,来给出输出浮点值的有效数并且根据最高有效设置位的位置从中间表示的指数段生成输出浮点值的指数,来将中间表示转换为输出浮点数。中间表示的有效数段中的有效数的定位对于标识浮点格式的有效数的正确表示是重要的,并且在这些实施例中这可以通过标识有效数段的最高有效设置位的位置而做出,从而生成输出浮点值的有效数。输出浮点值的指数还取决于最高有效设置位的位置,因为有效数被表示在有效数段中的位置越高(越靠左),其对应的输出浮点值的指数越大。

本技术还使得更大值的浮点值能够被表示在中间表示中,因为在一些实施例中,该装置还包括进位电路,该进位电路响应于指数段具有最大值而从有效数段向卷影段进位,并且其中,当指数段具有最大值时,有效数段和卷影段被级联来存储浮点值的有效数。因此,当指数段具有最大值时,已经达到了可以在有效数段中表示的最大有效数的限制,所以实施例规定卷影段随后可以被用来扩展有效数段(通过将卷影段和有效数段级联)从而表示更大的有效数。

实际上,不仅有效数段和卷影段可以被以这种方式级联,而且更一般地,有效数段、卷影段、以及特殊数段中的至少任意两者可以被以这种方式连接在一起从而存储比平常更大的有效数。相应地,在一些实施例中,当指数段具有最大值时,有效数段、卷影段、以及特殊数段中的至少两者被级联来存储浮点值的有效数。

在一些实施例中,有效数段的第三部分对应于与邻近且低于另一窗口的值范围的又一窗口的又一重叠部分。因此,在这些实施例中,中间表示可以保存对应于与其中表示有效数的窗口相邻的两个窗口的卷影段,并且因此可以容纳一个以上窗口的窗口移位。

该装置可以响应于使得其关于浮点值的中间表示的功能的特定方面被执行的至少一个专用指令。例如,在一些实施例中,该装置响应于指定浮点值的指令而使得存储电路存储该浮点值的中间表示。因此,在标识出该指令指定的浮点值后,该装置可以将其转变为其中间表示并且将其存储在存储电路中。该装置还可以响应于定义用于求和操作的操作数的至少一个求和指令。如上面提到的,这些被加数可以以多种方式被指定,例如,作为直接值,或者针对诸如本地寄存器之类的特定存储位置,并且在一些实施例中,该装置响应于指定直接被加数的求和指令来执行求和操作。

至少一些实施例提供了一种计算机程序产品,该计算机程序产品上以非暂态的形式存储有计算机程序,该计算机程序在计算设备上被执行时使得该计算设备作为上述任意配置的装置进行操作。

至少一些实施例提供了一种软件,该软件在计算设备上被执行时使得该计算设备作为上述任意配置的装置进行操作。

至少一些实施例提供了一种存储浮点值的中间表示的方法,该方法包括:在中间表示的有效数段中存储浮点值的有效数的表示,其中,浮点值的指数的低有效位部分定义了有效数段中存储有效数的表示的位置范围;在中间表示的指数段中存储浮点值的指数的高有效位部分的表示,该高有效位部分指示跨越浮点值的格式的值范围的多个连续窗口中的选定窗口,其中,有效数段的第一部分对应于该选定窗口,有效数段的第二部分对应于与邻近且低于选定窗口的值范围的另一窗口的重叠部分;以及当浮点值的有效数的表示移到邻近且高于选定窗口的值范围的更高窗口时,存储用于填充有效数段的第二部分的值。

至少一些实施例提供了一种计算机程序产品,其以非暂态方式存储有计算机程序,该计算机程序在计算设备上被执行时使得该计算设备执行可能根据相应装置的任何上述配置适当修改的上述方法。

至少一些实施例提供了一种软件,该软件在计算设备上被执行时使得该计算设备执行可能根据相应装置的任何上述配置适当修改的上述方法。

至少一些实施例提供了一种设备,包括:用于存储浮点值的中间表示的装置,该装置包括:用于在中间表示的有效数段中存储浮点值的有效数的表示的部件,其中,浮点值的指数的低有效位部分定义有效数段中存储有效数的表示的位置范围;用于在中间表示的指数段中存储浮点值的指数的高有效位部分的表示的部件,该高有效位部分指示跨越浮点值的格式的值范围的多个连续窗口中的选定窗口,其中,有效数段的第一部分对应于该选定窗口,并且其中,有效数段的第二部分对应于与邻近且低于选定窗口的值范围的另一窗口的重叠部分;以及用于在浮点值的有效数的表示移到邻近且高于选定窗口的值范围的更高窗口时存储用于填充有效数段的第二部分的值的部件。

现在参考附图描述一些特定实施例。

图1示出了如何使用在这里被称为“滑动窗口累加器(swacc)”的中间表示来表示三个不同的二进制64位浮点值(在该示例中,这些浮点值都是双精度ieee754格式的值)。图1中的水平线示出了这种浮点格式的值范围,即,可以由这种双精度64位二进制值表示的可能的值范围。因此,如所标记的,该水平线有效地表示出2099位固定点值。横跨该值范围示出了2的若干次幂的相对位置以及中间表示指数值(e)的范围(由2的相关次幂的四个最高有效位给出)。在附图的顶部示出了三个示例浮点值x、y、和z,并且给出了它们的二进制指数e和它们的尾部有效数(trailingsignificand)t。注意,示出了每个指数e的全部11位内容,但是为了说明的简明仅示出了52位有效数的最外层位值。图中示出了这三个浮点值中每个浮点值相对于水平值范围线的相对位置,由它们各自的e值指示,并且示出了这三个浮点值中每个浮点值的隐含的前导有效位。当将这些浮点值中的每个浮点值转换为swacc时,180位的有效数值被复制到由被标记为w_m和w_1两个分量形成的swacc的“纯粹窗口”,如下面将详细说明的。图1示出了针对浮点值z的这种复制。另外,需要注意的是,如图1中所示,这180位中的最高52位也被复制到swacc的“卷影”部分中,并且相应的指数值e(在本示例中为8)也被标出。

图2示出了作为浮点值的内部表示的用在一个实施例中的示例双精度swacc(在图中标记为“dswacc”)。该dswacc可以被看作256位向量,并且该dswacc的两个主要部分被标记为与64位通道和192位通道相对应,其指代dswacc将由基于通道的向量处理电路而处理的可能性,如下面参考图10将讨论的。现在注意,这种基于通道的向量处理装置的64位通道可以已经准备好处理这种dswacc。图2中所示的dswacc的字段分为两个主要部分,左侧部分与卷影有关,右侧部分与对应的浮点值的有效数和指数有关,参考其占用的图1所示的一系列多个连续窗口中的窗口。所示出的窗口字段是主窗口w_m(128位)、较低窗口w_l(52位)、窗口扩展w_e(8位),表示卷影的两个区域是较低卷影s_l(52位)和卷影扩展s_e(8位)。在本文中使用的术语中,“完整窗口”是{w_m,w_l,w_e},“单纯窗口”是{w_m,w_l},“完整卷影”是{s_l,s_e},“单纯卷影”是{s_l}。如图所示,窗口字段的最右端是指数表示e(4位),卷影段的最右端是特殊数部分ni(4位)。另外,示出了具有有效数溢出w_ov的窗口字段,并且示出了具有卷影溢出s_ov的卷影部分。最后,示出了通过将有效数溢出值w_ov和“islarge”值结合在一起的逻辑与(andlogic)以将dswacc的两个主要部分连接起来,其中,“islarge”馈送到卷影段的ni字段并且将在下面详细描述。

dswacc的分量的特定位大小可以采取其他形式,并且图3示出了dswacc的另一种可能格式。图3的dswacc比图2的dswacc占用更少的空间,因为尽管卷影段仍然占用64位通道,但是该示例中的完整窗口段对应于128位通道。当然,图3中使用的dswacc的表示仅能够保存比图2更小的有效数,但是这表示根据可用于处理和存储这样的dswacc的空间和该装置的期望输出精度的实施方式的权衡。替代编码可以使用例如,177到191位之间的32窗口dswacc实施方式(取决于w_e和s_e的大小)。一些编码可以包括有符号的浮点值的明确的有符号的swacc表示的符号位。针对二进制32的swacc编码可以被实现在包含23位卷影和20位w_m的74位中。一个替代是,在81位中使用32位w_m、23位w_l、以及3位e。其他示例编码包括将尾部有效数减少到20位,这允许具有20位w_m、或者具有第二个4位卷影的16位窗口的64位编码。

图4示出了另一特定示例的格式,其中可以看出,存在两个卷影段(w_s_a和w_s_b),其中,第一个卷影段(w_s_a)被提供以保存当前窗口(指数值e)位中与下一个更高窗口(指数值e+1)的较低窗口(w_l_a和w_l_b)重叠的卷影副本,第二个卷影(w_s_b)被提供以保存当前窗口(指数值e)位中与第二个更高窗口(指数值e+2)的较低窗口(w_l_a和w_l_b)重叠的卷影副本。因此,这种中间表示允许执行两个窗口的窗口移位。

图5示意性地示出了在一个实施例中用于swacc生成和存储的电路。该图的顶部示出了双精度64位浮点输入值,该浮点输入值的分量被swacc生成电路100接收。swacc生成电路100示意性地被示出为包括三个组件,即,有效数处理电路102、指数处理电路104、以及符号标识电路106。注意,指数处理电路104具有去往有效数处理电路102的输出,以使有效数处理电路102适当地确定有效数字段的相关内容。图5中还示出了swacc存储装置108,该swacc存储装置108被示意性地示出为在存储组件110-122中具有对于swacc分量w_m、w_l、w_e、e、s_l、s_e、以及ni的存储能力。swacc存储装置108可以是一个或多个寄存器、本地高速缓存存储装置、存储器中的存储区域等。还应该注意,swacc存储装置108实际上示出了针对这些组件110-122中的每个组件的三个单独存储元件,这些存储元件在本实施例中被用来分别存储对应于没有符号的浮点值、正符号的浮点值、以及负符号的浮点值的swacc表示。这些存储组件中的哪个用于所接收的浮点值是由符号标识电路106通过检查swacc生成电路100接收的浮点值来确定的。有符号的浮点值和没有符号的浮点值的处理将在下面参考图11a和11b更详细地描述。

一个实施例的装置(例如,下面针对图9a讨论的装置)能够对两个swacc操作数执行求和操作,这在一个特定实施例中可以根据图6中所示的方法步骤被执行。该流程开始于步骤130,在该处对两个swacc操作数进行求和。在该示例中,求和操作实际上是累加操作,其中,一个操作数op1被提供作为直接值,而另一操作数op0被保存在存储累加的和值的累加寄存器中。然后,在步骤132确定每个操作数是否具有指示对应的浮点值为无穷大或非数字的特殊数值ni。如果是,则流程进行到步骤134,在步骤134处相应地设置op0的ni字段,并且流程在步骤136结束。否则,流程进行到步骤138,在该处首先确定一个操作数的e值是否比另一个操作数的e值少1。如果是,则流程进行到步骤140,在步骤140处对较小的操作数(具有较小e值的操作数)执行窗口移位操作,以将该操作数的表示移位到与较大的操作数相同的窗口。该流程随后进行到步骤148。但是,如果两个操作数的e值不相差1,则在步骤142处确定它们是否相差1以上。如果是,则流程进行到步骤144,在步骤144处将op0更新为保存具有较大e值的操作数的值,然后求和操作在步骤146结束。否则,流程进行到步骤148,在步骤148处用操作数的完整卷影之和来替代op0的完整卷影(s_l,s_e),并且在步骤150处确定这些完整卷影的求和是否已经导致卷影溢出。如果是,则流程继续通过步骤152,在步骤152将该卷影溢出存储在卷影溢出寄存器(s_ov)中。然后,在步骤154,用操作数的完整窗口之和来替代op0的完整窗口(w_m,w_l,w_e)。然后在步骤156确定操作数的完整窗口的求和是否已经导致有效数溢出,如果不是则流程在步骤158结束。但是,如果发生了有效数溢出,则在步骤160对op0执行窗口移位以便将其重新表示在下一个更高窗口中。该流程随后在步骤162终止。

图7示出了在本技术的一个实施例中为了执行单个窗口移位所采取的步骤序列。该流程在步骤170处开始,在步骤170有swacc操作数需要进行单窗口移位。在步骤172,将w_m清零,并且在步骤174将s_ov、s_l、和s_e的值分别复制到w_m[0](即,主窗口w_m的最低有效位)、w_l、和w_e。然后,在步骤176处将卷影段分量s_l和s_e一起清零。在步骤178将swacc中的e的值加1。在步骤180确定e的增加是否导致其溢出,如果是则流程继续通过步骤182,在步骤182将swacc的ni值设置为1,以指示该窗口移位已经导致swacc移位到不能被表示的区域。该流程在步骤184结束。

返回考虑图1中所示的三个示例浮点值x、y、和z,图8a和8b示出了由swacc表示的这三个值的两种不同次序的求和,即,图8a中的(z+y)+x和图8b中的(x+y)+z。在图8a中,z和y的swacc表示的创建在头两行中示出,其中,每个浮点值在同一窗口中表示,即e=8。每个浮点值的主窗口w_m的最高52位被复制到较低的卷影段s_l中。这些swacc表示在图8a的第三行被累加,以给出z+y的swacc表示。然后,在下一行中,x的swacc表示被创建,但是注意,这使得x在比和值z+y更高的一个窗口中(e=9,比e=8高)。然后,对z+y(该值具有较低的e值)执行单个窗口移位,以将其表示在与x相同窗口(即,e=9)中。如图8a的倒数第二行所示,该移位包括将较低的卷影s_l复制到z+y的较低窗口w_l,然后对z+y和x求和以给出图8a的最后一行所示的(z+y)+x。图8b示出了(x+y)+z的计算,其中应该注意,该图包括(尽管没有明确示出)y和z的(分别的)窗口移位,以便首先将y与x的窗口(e=9)对齐,然后将z与x+y的窗口(e=9)对齐。尤其注意,图8a和8b中每个图的最后一行中分别示出的值,即,(z+y)+x和(x+y)+z相同(在卷影对于(z+y)被移位到e=9窗口的步骤尚不可用的情况下并不是这样)。换言之,swacc表示及其相关技术的使用已经确保x、y和z的求和是关联的,即三个操作数被求和的次序不会影响最终结果。

图9a示意性地示出了一个实施例中的装置200。装置200的主要组件是:swacc求和指令电路202、swacc生成电路204、swacc存储电路206、以及求和电路208。装置200对swacc求和指令的接收将其操作配置用于执行两个swacc操作数的求和。实际上,在图9a的示例中接收的swacc求和指令是累加指令,该累加指令使得指令中的直接值op1(浮点格式)被累加到swacc存储装置206中已经保存的swacc格式的浮点值(op0)。swacc求和指令电路将直接值op1传送给swacc生成电路204,该swacc生成电路204将该直接值转换为swacc表示,如上所述。swacc求和指令定义的其他控制信息被传送给求和电路208的控制电路210,以便配置求和电路208的主要组件如何针对该累加求和操作进行操作。

求和电路208的控制电路210以外的主要组件是:指数比较电路212、窗口移位器电路214、以及加法/总和生成电路216。一旦swacc生成电路204生成了op1的swacc表示,其指数值op1(e)即被传送到指数比较电路212。类似地,op1将被累加到的swacc值(op0)的指数值被从swacc存储装置206取出(由从swacc求和指令电路接收控制信号而发起并由swacc存储装置206接收)。该操作数的指数值op1(e)也被传送到指数比较电路212。指数比较电路212对op1(e)和op0(e)的相对值进行比较,比较结果被传送到窗口移位器电路214和加法/总和生成电路216。如果op1(e)和op0(e)相同,则不需要执行窗口移位,并且加法/总和生成电路216可以在op1和op0分别被从swacc生成电路204和swacc存储电路206接收到时,对op1和op0的值执行加法程序。同样地,如果op1(e)和op0(e)相差1以上,则不执行窗口移位,并且加法/总和生成电路简单地将swacc总和生成为具有较大指数值的操作数的值,该总数值被传送回swacc存储电路206进行存储。如果加法/总和生成电路216对完整窗口(w_m、w_l、w_e)的求和(执行图6的步骤154)导致有效数溢出(步骤156),则窗口移位器电路214被用于对op0执行窗口移位(步骤160),以便将其重新表示在下一个更高窗口中。

但是,如果指数比较电路212确定操作数的指数值相差1,则窗口移位器电路214执行窗口移位操作。为了能够执行该操作,窗口移位器电路214设置有复制电路218、清除电路220、以及增加电路222。这些组件基本上执行用于执行单个窗口移位的图7中所示的步骤,其中,步骤202由复制电路218执行,步骤204和206由清除电路220执行,并且步骤208由增加电路222执行。注意,路径从增加电路222通往特殊数处理电路230和综合处理电路232中的每个电路。如果e的增加(增加电路222执行步骤178)导致e的溢出,则特殊数处理电路230设置执行窗口移位的操作数中的ni的值,以指示窗口移位已经将该操作数移出了可以表示的范围。特殊数处理电路230通过在加法/总和生成电路213中的介入来执行ni的设置,结果,当发生e溢出时,其中的ni值被相应设置的swacc总和将由加法/总和生成电路216生成。综合处理电路232还从窗口移位器电路214接收有关e的值的信息,尤其是在e具有最大可能值时。在图2所示的dswacc的示例中,当e=0xf时,具有所设置的w-m[128]的值将因为太大而不能以浮点二进制64格式表示,所以该值在被转换为双精度浮点值的情况下将为无穷大。在其他情况中,其可以用作中间值,因为正和负swacc值之间的差可以将最终结果带回范围中。

另外,注意,在该示例中,当e=0xf时卷影是冗余的(因为不可能向e的更高值移位),因此在图9a中所示的实施例中,e的值被用在swacc中来指示通常仅包括w_m、w_l、w_e的“完整窗口”还包括s_l、s_e、ni,即,比dswacc大64位。参考图2和图3来看通常对应于完整窗口(w_m、w_l、w_e)以及完整卷影(s_l和s_e)的dwsacc的多个部分之间的进位通常如何取决于“islarge”,即,当e=0xf时如何设置值islarge。图9a示出了islarge值被从综合处理电路232传送到加法/总和生成电路216。

还应该注意,综合处理电路232具有来自特殊数处理电路230的输入,该输入用于当操作数中的一个是特殊数字时向综合处理电路232指示。由于完整窗口、完整卷影、以及大多数e对于特殊数值是没有意义的,所以综合处理电路232被布置为使用swacc的这些部分来存储综合信息,综合信息可以是用户用来诊断特殊数的原因的任何系统信息,但是在图9a中所示的示例中,该综合信息是由综合处理电路232接收到的程序计数器(pc)值(或至少是足以高概率标识指令的pc的位,例如,其可以是丢弃一些最高有效位和任何静态最低有效位)。该综合信息随后被加法/总和生成电路216传播,从而使得所生成的swacc值携带该综合信息。

装置200还包括swacc到浮点转换电路234,该电路接收swacc值并将其转换为适当的浮点格式,例如,上述二进制64格式。这种转换基本上是用于将浮点值转换为swacc格式的上述操作的反过程,因此要求找出完整窗口的最高有效位,以便确定其完整窗口应该(向右)移位多少以及作为结果的二进制64值中的e的值。

图9b示出了图9a的装置200的替代配置,该替代配置被以稍微简化的格式被示出。另外,相同的参考标号被用于图9a和9b中重复的组件,并在这里不再描述这些组件。图9a和9b的装置之间的关键区别在于,在图9b中窗口移位电路214分为三个部分,即如图所示的电路214a、214b和214c。提供这些窗口移位器中的每个窗口移位器的逻辑相对紧凑,基本上是一组多路复用器,因此该方法不是面积成本高的。

图10示意性地示出了可以高效地实现本技术(尤其是两个swacc值的加法)的基于通道的处理电路。如以上参考图2和3提到的,swacc值的配置(图2和图3的示例中的dswacc值)可以被定义为swacc值的分量与基于通道的向量处理电路的通道对齐。图10中所示的基于通道的向量处理电路300具有四个64位通道,因此图2中所示的dswacc可以由这四个通道容纳。因此,每个swacc操作数的每个64位部分被基于通道的向量处理电路并行处理,并且对每个部分并行执行相应操作,例如,上述求和操作,以便生成swacc结果值的对应64位部分。另外,注意,图10中所示的基于通道的向量处理电路300还包括清零电路302,该清零电路被配置为仅对在e值被处理的通道中的指数e分量清零。通过对这些e值中的一个进行清零,在基于通道的向量处理电路中提供的执行求和操作的求和机制随后可以在无需进一步适应修改的条件下被使用,因为swacc结果中的e值随后将仅由来自操作数之一的非零e值提供。应该记得,在swacc求和的背景中,对具有相同e值的swacc操作数执行该操作,从而正确地确定swacc结果的e值,即与两个输入操作数相同。

图11a示意性地示出了一个实施例中的装置320,该装置被配置为处理有符号的浮点值。所示出的实施例通过提供分别累加正swacc(pswacc)值和累加负swacc(nswacc)值的单独存储装置来实现对有符号的浮点值的处理。装置320的操作由从解码单元322接收的控制信号配置,该解码单元对从存储器获取的指令进行解码。控制信号在装置320中由控制单元324接收,控制单元324又控制该装置的其他组件的操作。示出了swacc生成电路326、求和电路328、以及转换电路330,它们通常如对于图9a中的相应组件204、208、和234所描述的那样操作。装置320还包括没有符号的swacc存储装置332、正符号的swacc存储装置334、以及负符号的swacc存储装置336。控制电路324标识累加操作数的没有符号或有符号的特性,使得执行针对适当的存储装置的循环。参考图5,该符号标识角色被示出为由符号标识电路106执行。在本技术的背景中,取决于极性的有符号swacc累加的分离确保了累加器的e值从来都不会减小并且窗口移位仅在一个方向发生。其还进一步移除了对于求和次序的任何依赖。来自三个存储组件332、334和336之一的swacc值可以被转换单元330转换为浮点值,该浮点值随后被存储在通用存储装置340中(在图11a的示例中该通用存储装置是外部存储器设备)。通用存储设备340还可以根据所执行的指令的特性来提供用于累加的操作数。为了从正符号swacc和负符号swacc值的单独累积生成最终结果,(在求和电路328中)从正符号swacc值中减去负符号swacc值(因为将理解的是,实际上每个值都是绝对值,存储位置定义其极性)。替代地,正和负swacc可以首先被转换为浮点值然后相减。

图11b示出了由本技术提供的一组示例指令,例如,可以由图9a、9b、或11a的装置适当地执行的指令。这些指令是:

-生成指令(i),用于提供将被转换为swacc格式的浮点值和所需要的目的地;

-求和指令(ii),用于提供将被求和的两个swacc操作数;

-求和指令(iii),用于提供将被求和的浮点值和swacc操作数(其中,浮点值首先将被转换为swacc格式);

-求和指令(iv),用于提供将被求和的两个有符号的swacc操作数;

-求和指令(v),用于提供将被求和的浮点值和有符号的swacc操作数(其中,浮点值首先将被转换为swacc格式);以及

-求和指令(vi),用于提供将被求和的有符号的swacc操作数和没有符号的swacc操作数、以及指示没有符号的swacc操作数的符号的附加符号值。

注意,对于指令(ii)到(vi)中的每个指令,可以可选地定义结果的目的地,否则操作将被视为对两个操作数中的第二个操作数的累加。本技术不限于图11b中所示的示例指令,并且也可以想到可以应用本技术的各种其他示例指令。为了给出这样的一个示例,可以提供指令“swaccsum(fp,fp,destination)”,其是提供swacc格式的将被求和的两个浮点值的求和指令(其中,每个浮点值将首先被转换为swacc格式)。

图12示意性地示出了可以被用来实现上述技术的一种类型的通用计算设备400。通用计算设备400包括经由总线422连接在一起的中央处理单元402、随机存取存储器404、以及只读存储器406。该通用计算设备400还包括经由通用总线422连接的网络接口卡408、硬盘驱动器410、显示器驱动器412、监视器414、以及具有键盘418和鼠标420的用户输入/输出电路416。在操作中,中央处理单元402将执行可以例如,被存储在随机存取存储器404和/或只读存储器406中的计算机程序指令。在这种情况中,程序指令可以另外从硬盘驱动器410获取或者动态地经由网络接口卡408下载。所执行的处理的结果可以经由所连接的显示器驱动器412和监视器414被显示给用户。用于控制通用计算设备400的操作的用户输入可以经由所连接的用户输入输出电路416从键盘418或鼠标420接收。将理解的是,计算机程序可以通过各种不同的计算机语言编写。计算机程序可以本地存储在记录介质上,或者动态地被下载到通用计算设备400。当在适当的计算机程序的控制下进行操作时,通用计算设备400可以执行与swacc值的处理和存储有关的上述技术,并且可以被认为形成了用于执行这些技术的装置。通用计算设备400的架构可以相当多地改变,并且图12仅示出了一个示例。

简言之,本技术涉及使用具有有效数段、指数段、以及卷影段的中间表示来处理浮点值。浮点值的指数的低有效位部分定义有效数段中保存有效数的表示的位置范围。指数段保存指数的高有效位部分的表示,该高有效位部分指示跨越浮点值的格式的值范围的多个连续窗口中的选定窗口。有效数段的第一部分对应于选定窗口,第二部分对应于与邻近且低于值范围的另一窗口的重叠部分。卷影段保存大小对应于第二部分的第一部分中高有效位部分的副本。卷影段允许选定窗口被移位,从而使得多个值的求和产生独立于这些值被求和的次序的相同结果。

至少一个实施例提供了一种装置,包括用于处理浮点值的中间表示的电路,该电路包括:有效数处理电路,用于处理中间表示的保存浮点值的有效数的表示的有效数段,其中,浮点值的指数的低有效位部分定义有效数段中保存有效数的表示的位置范围;指数处理电路,用于处理中间表示的保存浮点值的指数的高有效位部分的表示的指数段,该高有效位部分指示跨越浮点值的格式的值范围的多个连续窗口中的选定窗口,其中,有效数段的第一部分对应于选定窗口,并且其中,有效数段的第二部分对应于与邻近并低于选定窗口的值范围的另一窗口的重叠部分;以及卷影处理电路,用于当浮点值的有效数的表示被移到邻近且高于选定窗口的值范围的更高窗口时处理用于填充有效数段的第二部分的值。

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

尽管这里参考附图详细描述了说明性实施例,但是将理解的是,本发明不限于这些精确实施例,并且本领域技术人员可以在不偏离所附权利要求限定的范围和精神的条件下做出各种改变、添加、以及修改。例如,在不偏离本发明的范围的条件下,可以对独立权利要求的特征和从属权利要求的特征进行各种组合。

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