用于处理输入操作数值的装置和方法与流程

文档序号:18667505发布日期:2019-09-13 20:23阅读:247来源:国知局
用于处理输入操作数值的装置和方法与流程
本技术涉及数据处理的领域。
背景技术
:在数据处理系统中使用浮点(fp)表示是常见的。浮点数包括有效数和指示该有效数的位的有效性的指数。这允许使用有限数量的位来表示大范围上的数字值。然而,关于浮点运算的问题是计算通常是非关联的、使总和变得有问题的事实。特别地,即使在加少量值时,程序设计员也需要担心获得不同的结果。为了设法解决关联性问题,已提出了新的数据类型,被称作高精度锚定(hpa)数。高精度锚定(hpa)数是由长二补码整数i(例如200位)和较小的锚整数a构成的对(i,a),所述较小的锚整数a通常通过指定i的最小位的有效性来表示i的各位的权重。可将浮点值转换成hpa形式,此后可以关联方式执行加法。可在hpa数的每个长整数可以被存储在单独的向量寄存器中的向量处理电路上处理hpa值。然而,hpa数量可被处理的效率将取决于由特定向量处理电路处理的向量长度。技术实现要素:根据第一示例配置,提供了一种装置,所述装置包括:一组向量数据存储元件,每个向量数据存储元件提供用于存储数据值的多个区段,多个通道被设置在所述组内,其中每个通道包括来自每个向量数据存储元件的对应区段;处理电路,所述处理电路用于通过对多个部分中的每一个执行独立算术运算来对包括所述多个部分的输入操作数值执行算术运算,以便产生包括多个结果部分的结果值;以及存储电路,所述存储电路用于将所述结果值存储在所述多个通道中的选定通道内,使得每个结果部分在不同的向量数据存储元件中被存储在针对所述选定通道的对应区段内。根据第二示例布置,提供了一种处理具有多个部分的输入操作数值的方法,包括:提供一组向量数据存储元件,每个向量数据存储元件提供用于存储数据值的多个区段,多个通道被设置在所述组内,其中每个通道包括来自每个向量数据存储元件的对应区段;通过对多个部分中的每一个执行独立算术运算来对输入操作数值执行算术运算,以便产生包括多个结果部分的结果值;以及将所述结果值存储在所述多个通道中的选定通道内,使得每个结果部分在不同的向量数据存储元件中被存储在针对所述选定通道的对应区段内。根据另一示例配置,提供了一种装置,所述装置包括:一组向量数据存储模块,每个向量数据存储模块用于提供用于存储数据值的多个区段,多个通道被设置在所述组内,其中每个通道包括来自每个向量数据存储模块的对应区段;处理模块,所述处理模块用于通过对多个部分中的每一个执行独立算术运算来对包括所述多个部分的输入操作数值执行算术运算,以便产生包括多个结果部分的结果值;以及存储模块,所述存储装置用于将所述结果值存储在所述多个通道中的选定通道内,使得每个结果部分在不同的向量数据存储装置中被存储在针对所述选定通道的对应区段内。在又一示例配置中,提供了一种用于控制主机数据处理装置以提供指令执行环境的计算机程序,所述计算机程序包括:一组向量数据结构,每个向量数据结构提供用于存储数据值的多个区段,多个通道被设置在所述组内,其中每个通道包括来自每个向量数据结构的对应区段;处理程序逻辑,所述处理程序逻辑用于通过对多个部分中的每一个执行独立算术运算来对包括所述多个部分的输入操作数值执行算术运算,以便产生包括多个结果部分的结果值;以及存储程序逻辑,所述存储程序逻辑用于将所述结果值存储在所述多个通道中的选定通道内,使得每个结果部分在不同的向量数据结构中被存储在针对所述选定通道的对应区段内。附图说明参考本技术的如附图中所图示的示例,将仅通过图示进一步描述本技术,在附图中:图1示意性地图示数据处理装置;图2示意性地图示数字值的不同表示;图3示意性地图示双精度浮点值与高精度锚定(hpa)值之间的关系的示例;图4示出冗余hpa值的示例,所述冗余hpa值使用包括具有重叠有效性的许多n位部分的冗余表示来表示数字值;图5示意性地图示在一个示例中hpa整数可以如何被存储在跨多个向量寄存器的选定通道内;图6是示意性地图示根据一个示例布置的可以如何将浮点数转换成hpa形式并进行处理的框图;图7示意性地图示可以在一个示例中使用的元数据的形式;图8是更详细地图示在一个示例中的可以与每个通道关联地提供的转换和处理电路的图;图9是图示根据一个示例执行来累加多个hpa数的过程的流程图;图10a至图10g提供图9中图示的操作的具体示例;图11图示在使用冗余hpa形式时可被执行来解析重叠的过程;图12图示可用于将多个通道中产生的hpa结果缩减成单个hpa结果的过程;图13图示根据一个示例的可以如何将hpa结果转换回成一系列浮点数;以及图14图示可以被使用的模拟器实施方式。具体实施方式如早先所提及的,关于浮点算术的问题在于计算通常是非关联的、使总和变得有问题的事实。例如,当加若干浮点值时,每次另一值被加到前一加法的结果时,结果被舍入和标准化,这意味着总体结果取决于值被加的顺序而不同。这使得难以使浮点算术并行化,因为除非以确切相同的顺序完成,否则总和是不可再现的。为了生成可再现的结果,通常必须顺序地执行一系列加法或减法,这可使浮点算术变得相对慢。程序设计员因此使用比他们需要的更高的准确度,希望避免这样不同的结果。程序员因此不能容易地使代码并行化,因为除非以确切相同的顺序计算,否则总和是不可再现的。问题对于程序可能需要加数百万个值的高性能计算(hpc)来说尤其严重。程序员希望使这些问题并行化,但是然后可再现性的缺乏使调试变得困难。即使针对那些机器的重新编程完美无缺,每种不同的机器配置也将产生不同的答案。如上面所提及的,为了设法解决关联性问题,已提出了新的数据类型,被称作高精度锚定(hpa)数。hpa数是由长二补码整数i(例如200位)和较小的锚整数a构成的对(i,a),所述较小的锚整数a通常通过指定i的最小位的有效性来表示i的各位的权重。该对在某种程度上类似于fp数的有效数和指数值,但不同之处在于长整数i未被标准化并且通常比fp有效数大得多,而且锚定值a对于hpa运算中的所有操作数来说是固定的。加fp数可以使指数改变,但是加hpa数不会改变锚。作为平凡示例,考虑由10位i和锚定值a=-4构成的hpa表示。在表1中给出了此格式的一些值。i(二进制)值(十进制)00000_000010.062500000_010000.500000_110001.500001_000002.000100_110009.511111_01000-1.5表1——示例hpa数(i,-4)当加这些数中的两个(假定0.5和1.5)时,锚(-4)不会改变,并且总和通过仅加i值方便地给出。由于hpa总和只是二补码加法,所以当范围足够时,hpa总和是关联的、确切的且可重复的。fp数具有大范围。双精度数(fp64)可以小于2-1000且大于21000,但是大多数累加不会横跨这整个范围。实际上,很难想象会在所有该范围上有意义地累加值的这类问题,并且甚至对于hpc来说大多数累加发生在有限范围上。预期对于要求比双精度算术宽的几乎所有应用来说,200位左右就足够了。假设程序员确定用于特定总和的所有数据具有小于2100的量值,并且量值低于2-50的位不会以任何有意义的方式影响总和。如果使用具有200位i的hpa格式(i,-50)来加数据,则累加是关联的并且可以任何顺序加这些数中的至少249个,而不用担心溢出。大多数现代架构具有能用于表示长整数的simd(单指令多数据)单元。利用一点额外逻辑来方便64位通道之间的进位,能使用256位simd单元来加256位整数。替代地,通过使用稍后更详细地讨论的冗余表示,能针对大多数加法避免通道之间的进位。这两种方法都在单个simd寄存器内保持长整数。然而,可在这样的simd单元内处理hpa整数的效率取决于simd单元的向量宽度。因此,将期望提供使得能实现诸如在处理hpa数时要求处理的那些长整数值这样的长整数值的高效处理的机制,其与正在通过特定simd单元处理的向量宽度无关,从而允许在各种各样不同的系统上采用本技术。根据一个示例布置,提供了一种具有一组向量数据存储元件的装置,其中每个向量数据存储元件提供用于存储数据值的多个区段。多个通道被认为延伸穿过所述一组向量数据存储元件,使得每个通道包括来自每个向量数据存储元件的对应区段。存储元件可采取各种形式,但是在一个示例布置中是向量寄存器堆的向量寄存器。处理电路被布置为对包括多个部分的输入操作数值执行算术运算。算术运算通过对所述多个部分中的每一个执行独立算术运算来实现,并且使得包括多个结果部分的结果值产生。然而,不是将结果值存储在单个向量数据存储元件内,而是替代地将存储电路布置为将结果值存储在所述多个通道中的选定通道内。通过这样的方法,每个结果部分然后被存储在针对选定通道的对应区段内的不同的向量存储元件中。根据上述技术,可看到的是结果值因此被存储在跨越多个向量数据存储寄存器的公共通道中。这提供很大的灵活性。特别地,结果值的大小不受单独的向量数据存储元件的宽度约束,并且替代地最大大小仅受所述组内的向量数据存储元件的数量约束。此外,这样的方法避免了向量数据存储元件的低效利用。特别地,由于向量数据存储元件的大小与结果值的大小之间的失配,不必浪费向量数据存储元件内的空间。实际上,在一个示例布置中,可以simd方式执行多个输入操作数值的并行处理,其中对应结果值被存储在关联的通道中。在一个示例布置中,这意味着单独的向量数据存储元件可在其相应的区段内存储多个结果值的对应部分,其中这些结果值中的每一个都延伸穿过其相应的通道内的多个向量数据存储元件。结果,可看到的是通过以上述的方式存储结果值,这显著地改进可伸缩性,并且提供向量长度不可知的技术,因为所选取的输入操作数值和结果值的大小不受由装置处理的向量的宽度约束。在一个示例中,处理电路被布置为在执行独立算术运算时将操作数值的每个部分作为整数值处理。这确保可以完全关联的方式以任何顺序处理多个输入操作数值。可使用本文描述的技术来处理任何形式的整数值。然而,在一个特定示例中,输入操作数值是hpa数的长整数分量。可单独地维护关于所关联的锚定值的信息,然后可以使用上述技术来以完全关联的方式非常高效地处理具有相同锚的多个hpa数的长整数操作数。在一个示例中,处理电路被布置为顺序地多次执行独立算术运算,以便每次处理电路执行独立算术运算时在选定通道内产生结果值的结果部分中的一个。可根据需要改变独立算术运算的排序。例如,在一个示例中可以对独立算术运算进行排序,使得从表示高阶位的那些开始并向表示低阶位的那些继续进行处理这些部分,但是替代地可以相反的顺序处理它们,使得与低阶位相关联的部分在与高阶位相关联的部分之前被处理。实际上,也不需要以通过由那些部分表示的位的有效性所规定的顺序处理这些部分。执行的算术运算可采取各种形式。然而,在一个示例布置中处理电路被布置为执行用于将输入操作数值与包括所述多个部分的另一操作数值累加的累加运算作为算术运算,以便产生包括所述多个结果部分的结果值。在需要将大量数加在一起的高性能计算环境中经常要求这样的累加运算,并且因此上述机制可提供用于处理这样的数的非常高效的技术。另一个操作数值可采取各种形式,但是在一个实施例中是现有结果值,并且处理电路被布置为执行累加运算以便生成更新的结果值以形成要存储在选定通道中的结果值。在一个示例中,存储电路可以被布置为跨越选定通道内的多个向量数据存储元件存储现有结果值,并且用由处理电路在执行累加运算时生成的结果值的对应结果部分覆写现有结果值的每个部分。结果,可迭代地执行同一独立累加运算许多次,以便将多个输入操作数的对应部分加在一起以产生累加结果部分。然后可针对每个部分依次重复该过程,以便产生表示许多输入操作数值的累加的结果值。此外,如早先所提及的,可跨越多个通道并行重复此过程,其中每个通道处理不同的多个输入操作数值,从而提供用于累加大量输入操作数值的非常高性能的技术。在一个示例布置中,处理电路被布置为基于锚定值识别输入操作数值的每个部分的位的有效性。在这样的布置中,输入操作数值表示hpa数的长整数部分,其中该长整数被分解成多个部分。利用锚定值的知识,处理电路然后可确定通过每个部分所表示的位的有效性。可以各种方式表示此有效性。例如,它可识别每个部分中的最低有效位的有效性。维护此有效性信息的方式可取决于实施方式而变化。在一个示例中,装置进一步包括元数据存储装置以为选定通道保持元数据,所述元数据包括针对输入操作数值的每个部分的元数据部分,并且提供使得处理电路能够识别输入操作数值的每个部分的位的有效性的信息。因此,纯粹作为示例,如果输入操作数值包括了四个部分,则为选定通道保持的元数据将识别四个部分中的每一个的元数据部分。当对那些部分中的一个执行每个独立算术运算时,可按需要访问对应元数据部分。在一个示例中,处理电路包括用于从提供的值和对应元数据部分生成输入操作数值的每个部分的转换电路。因此,在这样的示例中当设法将所提供的值转换成输入操作数值时参考相关元数据部分。在一个特定示例中,所提供的值是浮点值,并且与每个独立算术运算关联地,转换电路用于从浮点值和对应元数据部分生成输入操作数值的对应部分。特别地,由于元数据部分将识别与输入操作数值的对应部分相关联的位的有效性,所以转换电路可根据浮点值确定需要在输入操作数值的当前部分内表示浮点值的有效数的哪些位(若有的话),并且考虑到通过元数据部分所提供的有效性信息,针对那些位布置以被定位在输入操作数值的部分内的适当位位置中。在一个示例中,处理电路被布置为执行用于将来自输入操作数值的对应部分与包括所述多个部分的另一操作数值的对应部分累加的独立累加运算作为独立算术运算,以便产生结果值的对应结果部分,并且在独立累加运算期间使用转换电路来从浮点值和与对应部分相关联的元数据部分生成输入操作数值的对应部分。因此,在这样的布置中,输入操作数值的对应部分由转换电路在执行独立累加运算期间“及时”生成,使得然后可将它加到另一操作数值的对应部分中,以便产生结果值的对应结果部分。这提供用于执行累加的非常高效的技术。在一个示例中,输入操作数值和另一操作数值的对应部分具有相同的位有效性。输入操作数值的多个部分可在一个实施例中被布置为离散的非重叠部分。然而,在一个示例中各个部分被布置为重叠了许多位。特别地,在这样的示例中输入操作数值可以包括具有使用所述多个部分来表示p位数字值的冗余表示的m位值,其中每个部分包括n位,并且其中m>p>n。处理电路可以被配置为基于锚定值识别冗余表示的每个n位部分的位的有效性,并且在至少两个相邻的n位部分的组内,该组的下n位部分的多个重叠位具有与该组的至少一个上n位部分的多个最低有效位相同的有效性。通过这样的方法,可以对特定部分执行独立算术运算的多个实例,而不需要考虑溢出到表示结果值的更高有效位的下一个部分的可能性。替代地,操作可继续直到到达了据评估任何进一步的操作可能从重叠位产生溢出的点为止。那时,可采取步骤来将重叠位中表示的信息迁移到下一个最有效结果部分,此后对这些部分的独立处理可继续。这通过降低需要考虑潜在溢出的频率来提供显著地增强的性能。在一个实施例中,处理电路包括用于执行转换运算以将提供的值转换为具有冗余表示的经转换的m位数据值的转换电路。在一个特定示例中,如早先所讨论的,转换电路可以与相关n位部分关联地及时执行转换,使得相关n位部分由所提供的值(例如,浮点值)创建并且然后通过所关联的独立算术运算来处理以便产生结果部分。如早先所提及的,元数据存储装置可用于为选定通道保持元数据。在输入操作数值具有冗余表示的上述示例中,元数据可以包括针对输入操作数值的每个n位部分的元数据部分,并且提供使得处理电路能够识别每个n位部分的位的有效性和每个n位部分中的重叠位的数量的信息。视需要,还可在元数据内包括其他信息,例如以识别所述部分表示输入操作数值的最低有效位、输入操作数值的最高有效位还是中间部分。如早先所提及的,当使用冗余表示时可在需要考虑溢出的可能性之前对这些部分执行独立算术运算的多次迭代。然而,当确定了潜在溢出条件正在接近时,处理电路可在一个示例中被配置为对具有冗余表示的第一m位值执行重叠缩减操作以生成具有冗余表示的第二m位值,其中第二m位值的至少一个n位部分中的重叠位表示比第一m位值的至少一个对应n位部分的重叠位更小的量值。通过将给定的一组重叠位缩减至更接近于零,使得存在用于在后续加法期间容纳进一步进位的更多范围,在这些部分之间溢出的机会降低了。重叠缩减操作可以在一些示例中是用于将重叠位从冗余表示中的第一m位值的一个或多个n位部分传播到第一m位值的一个或多个后续部分以生成具有冗余表示的第二m位值的重叠传播操作。第二m位值表示与第一m位值相同的p位数字值,但是使用重叠位的不同的图案。使用重叠传播操作来实现重叠缩减具有如下优点:不要求加法寄存器来保存在重叠缩减中缩减的重叠位的值。通过将重叠位的值传播到下一个部分,可调整下一部分中的非重叠位以保存通过前一部分中的重叠位所表示的相同值,从而释放前一部分的重叠位中的空间以当对冗余地表示的第二m位值执行进一步操作时容纳更多的进位。可以各种方式执行重叠传播操作。在一个示例中,重叠传播操作使得它将第一m位值转换为所有重叠位都等于零的第二m位值。如早先所提及的,可在多个通道内复制上述技术以产生用于处理多个输入操作数值的非常高性能的机制。特别地,在一个这样的示例中,针对多个选定通道中的每一个复制处理电路,同时为所述多个选定通道中的每一个提供输入操作数值,其中所述多个输入操作数值中的每一个均包括所述多个部分,并且每个独立算术运算被布置为被跨越所述多个选定通道并行执行,以便产生各自包括多个结果部分的多个结果值。存储电路被布置为将所述多个结果值中的每一个存储在所述多个选定通道中的对应选定通道内,使得每个结果值的对应结果部分被存储在同一向量数据存储元件的对应部分中。所使用的通道的数量可根据需要而变化,但是在一个示例中可以利用所有通道,使得可在过程期间利用多个向量数据存储元件内的整个存储空间。纯粹作为示例,如果每个操作数值具有三个部分,则能指定三个向量数据存储元件以用于保持多个结果值的结果部分,每个寄存器存储那些结果值的对应部分。如果向量数据存储元件的宽度例如使得可提供十六个通道,则这将使得能够对十六个输入操作数值并行执行运算,其中所关联的结果值被存储在其关联的散布在三个向量数据存储元件上的通道内。在这样的布置中,元数据存储装置可被布置为为每个选定通道保持元数据,所述元数据包括针对对应输入操作数值的每个部分的元数据部分,并且提供使得处理电路能够识别对应输入操作数值的每个部分的位的有效性的信息。在任何特定通道内,所处理的操作数值通常将被布置为具有相同的有效性。视需要,不同的通道可对具有与由其他通道处理的操作数值不同的有效性的操作数值进行操作。然而,在一个示例中,与所述多个选定通道相关联的所述多个输入操作数值的对应部分具有相同的位有效性,并且针对每个选定通道复制元数据。通过这样的方法,可使用多个通道来并行处理具有相同的有效性的大量输入操作数值,并且同时跨越所有通道使用相同的元数据。作为这样的方法的结果,应领会的是,跨越通道并行执行算术运算将导致具有关联的结果部分的多个结果值的生成。那些结果值中的每一个中的对应结果部分然后将具有相同的有效性。视需要而定且当需要时,在一个实施例中处理电路可以进一步被布置为然后执行缩减操作以将多个结果值组合成单个结果值。由于多个结果值的对应部分具有相同的有效性,所以可容易地执行这样的操作以便从那些多个结果值产生单个结果值。视需要,该单个结果值然后可将被转换成另一形式,例如可以被转换回成一个或多个浮点值。通过执行这样的转换回成浮点格式,不需要单独地维护锚信息,从而允许将值存储回到存储器。现在将参考图描述特定示例。在下面讨论高精度锚定(hpa)格式。可在美国专利申请62/074,149、14/582,974、14/582,875、14/582,812、14/582,836、14/582,978、14/606,510和14/582,968中找到关于hpa格式的更多信息,其内容通过引用整体地并入本文。浮点数浮点(fp)是使用少量位来近似实数的有用方法。ieee754-2008fp标准提出了用于fp数的多种不同的格式,其中的一些是二进制64(也称为双精度或dp)、二进制32(也称为单精度或sp)和二进制16(也称为半精度或hp)。这些数64、32和16指代每种格式所要求的位数。表示fp数非常类似于科学课程中教导的“科学表示法”,其中不是负两百万而是我们写的是-2.0×106。这个数的各部分是符号(在这种情况下是负号)、有效数(2.0)、指数的基数(10)和指数(6)。所有这些部分都具有fp数中的类似物,尽管存在差异,然而其中最重要的是组成部分被存储为二进制数,并且指数的基数总是2。更准确地说,fp数由符号位、一定数量的偏置指数位和一定数量的分数位构成。特别地,dp、sp和hp格式由以下位构成:表2符号对于负数来说是1,而对于正数来说是0。每个数(包括零)都有符号。指数被偏置,这意味着真实指数与存储在数中的指数不同。例如,偏置sp指数是8位长度并且范围从0到255。指数0和255是特殊情况,但是所有其他指数都具有偏置值127,意味着真实指数比偏置指数小127。最小偏置指数是1,其对应于-126的真实指数。最大偏置指数是254,其对应于127的真实指数。hp和dp指数工作方式相同,其中偏置值被指示在上表中。sp指数255(或dp指数2047,或hp指数31)是为无穷大和称作nan的特殊符号(不是数字)而保留的。无穷大(其可以是正的或负的)具有零分数。具有指数255和非零分数的任何数是nan。无穷大提供饱和值,所以它实际上意指像“此计算产生了比我们可以此格式表示多少大的数”这样的某事。对于在实数上未在数学上定义的运算(例如除以零或者取负数的平方根)返回nan。具有任何格式的指数零是为次正规数和零而保留的。正规数表示值:-1符号×1.分数×2e其中e是从偏置指数计算的真实指数。术语1.分数被称作有效数,并且1未作为fp数的一部分被存储,而是替代地从指数推理。除零和最大指数外的所有指数都指示形式1.分数的有效数。指数零指示形式为0.分数的有效数,以及对于给定格式等于1-偏置值的真实指数。这样的数被称作次正规数(历史上这些数被称为非正规数,但是现代用法更喜欢术语次正规数)。指数和分数都等于零的数是零。下表具有hp格式的一些示例数。条目是二进制的,同时添加了‘_’字符以增加可读性。注意的是,次正规条目(表的第4行,具有零指数)产生与前一行中的正规条目不同的有效数。符号5位指数10位分数11位有效数值00111100_0000_0000100_0000_00001.0×2010111010_0000_0000110_0000_0000-1.1×2-100000110_0000_0000110_0000_00001.1×2-1400000010_0000_0000010_0000_00000.1×2-1411111100_0000_0000-无穷大01111100_1111_0011nan表3fp实施方式的复杂性的大部分是由于次正规数而导致的,因此它们常常通过微码或软件来处理。一些处理器在硬件中处理次正规数,与软件或微码实施方式相比较使这些运算加速了10至100倍。整数、定点、浮点处理符号的fp方式被称作符号量值,并且它与整数被存储在计算机中的方式(二补码)的常见方式不同。在符号量值表示中,相同数的正负版本仅在符号位上不同。由符号位和3个有效数位构成的4位符号量值整数会将加一和减一表示为:+1=0001-1=1001在二补码表示中,n位整数i通过二进制n+1位值2n+i的低阶n位来表示,所以4位二补码整数会将加一和减一表示为:+1=0001-1=1111二补码格式对于有符号整数实际上是通用的,因为它简化计算机算术。定点数确切地看来像整数,但是实际上表示具有一定数量的分数位的值。传感器数据常常具有定点格式,并且有在广泛采用fp之前编写的大量定点软件。定点数工作起来相当繁琐,因为程序员必须跟踪“二进制点”,即数的整数和分数部分之间的分隔符,并且还必须不断地移位数以使位保持在正确的地方。fp数没有这种难度,所以期望能够在定点数与fp数之间转换。能够做转换还意味着我们仍可使用定点软件和数据,但是我们在编写新软件时不限于定点。舍入fp数ieee-754标准要求的大多数fp运算是按照无界范围和精度进行的运算来计算的,然后进行舍入以适合fp数。如果计算与fp数确切地匹配,则该值总是被返回,但是通常计算产生位于两个连续浮点数之间的值。舍入是挑选两个连续数中的哪一个应该被返回的过程。存在许多舍入方式,被称作舍入模式;这些中的六个是:表4定义并未告诉我们如何以任何实际方式舍入。一个常见的实施方式是做运算,查看截断值(即适合fp格式的值)以及所有剩余位,然后在某些条件成立的情况下调整截断值。这些计算全部基于:l—(最低)截断值的最低有效位g—(保护)次最高有效位(即第一位未包括在截断中)s—(粘滞)不是截断的部分的所有剩余位的逻辑或给定这三个值和截断值,我们总是可根据下表来计算正确地舍入的值:模式改变为截断值rne如果(l&g)|(g&s)则递增rna如果g则递增rz无rp如果正且(g|s)则递增rm如果负且(g|s)则递增rx如果g|s则设置l表5例如,考虑将两个4位有效数相乘,然后舍入到4位有效数。sig1=1011(十进制11)sig2=0111(十进制7)乘产生sig1×sig2=1001_101(十进制77)lgss截断4位结果的最低有效位被标记为l,下一个位g和s是标记为s的剩余位的逻辑或(即s=0|1=1)。为了舍入,我们根据上表中的舍入模式和计算来调整我们的4位结果(1001)。所以例如在rna舍入时,g被设置所以我们返回1001+1=1010。对于rx舍入g|s为真,所以我们将l设置为1(它已经是1,所以在这种情况下没有任何变化)并返回1001。舍入整数和定点数如果我们将fp数转换为整数或定点,则我们也舍入。构思与fp舍入基本上相同。碰巧为整数的fp数总是舍入到该整数。所有其他fp数位于两个连续整数之间,并且舍入规定哪一个整数被返回。遗憾的是,由于二补码与符号量值形式之间的差异,用于整数的舍入逻辑稍微更难。递增符号量值数总是增加量值,所以被递增数离零更远。对于正二补码数发生同样的情况,但是负二补码数在被递增时变得更接近于零。这意味着舍入逻辑必须基于整数是正还是负来改变。这还意味着我们必须小心选择基数值(将被递增或者不递增的值)。对于正整数,该值只是截断fp有效数,所以1.37将具有1的基数值,并且具有1或2的结果。对于负整数,我们再次截断有效数并取结果的一补码(一补码是所有位反转的原始数),-1.37被截断为1然后反转,从而给出-2的基数值。然后一切都工作,因为我们想我们的结果为-2或(当被递增时)-1。为了使事情进一步复杂化,我们的转换方法要求某种计算来为负整数找到l、g和s。正确的舍入将要求我们完成二补码过程(反转并加1),然后计算l、g和s,但是加那个1与仅反转相比要慢。理想地我们希望从原始移位输入计算实际的l、g和s(即,在我们对符号做任何事情之前从输入计算。所以浮点1.37或-1.37都将被右移到整数1)。在反转之前设l0、g0和s0为最低有效位(lsb)、保护位和粘滞位,并且在反转之后设li、gi和si为lsb、保护位和粘滞位,最后在反转并加1之后设l、g和s为lsb、保护位和粘滞位。如果s0是零,则对si有贡献的位全部是一,因此s(通过将1加到那些si位来获得)也是零。如果s0是非零,则si不全部是一,因此s是非零。所以在所有情况下s0=s。如果g0是零,则gi是1,并且除了当存在来自s位的进位时之外的情况g也是一,这仅在s0为零时发生。如果g0是1,则gi是零,并且再次除了存在来自s位的进位的情况之外g也是一,这仅在s0为零时发生。所以g=g0^s0。通过非常类似的逻辑,l=l0^(g0|s0)。现在我们对于负整数和正整数两者具有l、g和s,我们可提出我们的舍入规则:表6定点数舍入方式与整数确切地相同。用于无符号转换(到整数或定点)的规则与用于正转换的规则相同。注入舍入用于做舍入的更快方式是注入舍入常量作为为几乎每个fp运算的一部分的有效数加法的一部分。为了看这如何工作,考虑加美元和美分数,然后舍入到美元。如果我们加$1.27+$2.35$3.62我们看到总和$3.62更接近于$4而不是更接近于$3,所以舍入到最近模式中的任一种应该返回$4。如果我们用二进制表示了数,我们能使用来自上一节的l、g、s方法来获得相同的结果。但是假设我们只加五十美分然后截断结果?1.27+2.35+0.50(舍入注入)4.12如果我们只从我们的总和($4.12)返回了美元金额($4),则我们已使用rna舍入模式正确地舍入。如果我们加$0.99而不是$0.50,则我们将使用rp舍入来正确地舍入。rne稍微更复杂:我们加$0.50,截断,然后查看剩余美分。如果剩余美分是非零,则截断结果是正确的。如果剩余零美分,则在注入之前我们确切地介于两美元金额中间,所以我们挑选偶数美元金额。对于二进制fp这相当于将美元金额的最低有效位设置为零。加三个数仅比加两个数稍微慢,所以我们通过使用注入舍入比在我们加两个有效数、检查l、g和s、然后根据舍入模式递增我们的结果情况下更快地得到舍入结果。实现注入舍入对于fp,舍入注入是三个不同的值中的一个,这些值取决于舍入模式并且(有时)取决于结果的符号。rna和rne都要求我们在g位置处注入1(这像在我们的美元和美分示例中加$0.50)。rp和rm舍入取决于符号以及模式。rp向上舍入正结果(将有效数的量值朝向正无穷大增加),但是截断负结果(挑选更接近于正无穷大的有效数)。类似地rm向上舍入负结果(将有效数的量值朝向负无穷大增加),但是截断正结果(挑选更接近于负无穷大的有效数)。因此我们将rm和rp分成两种情况:当符号与舍入方向匹配时向上舍入(ru),而当符号与舍入注入不同时截断(rz)。对于ru情况我们在g位位置处且在逻辑上对s有贡献的每个位置处注入1(这像在我们的美元和美分示例中加$0.99)。对于rz和rx模式,并且对于缩减为rz模式的rp和rm模式,我们注入零。对于大多数舍入模式,添加舍入注入然后截断给出正确地舍入的结果。两个例外是rne和rx,其要求我们在加法之后检查g和s。对于rne,如果g和s都为零则我们将l设置为0。对于rx,如果g或s是非零则将l设置为1。fp数不是实数吸引人的是将fp数认为是就像实数一样,但是甚至对于最基本的性质,它们也是根本不同的:它们不是关联的。例如,在sp中我们可加3个数并返回1百万或零,可能不是人们认为舍入误差的东西:(245+-245)+220=220245+(-245+220)=0他们不遵守分配律。再次在sp中:3,000,001*(4.00001+5.00001)=0x4bcdfe83(3,000,001*4.00001)+(3,000,001*5.00001)=0x4bcdfe82并且事情在溢出的情况下变得更糟:250*(278-277)=2127(250*278)-(250*277)=无穷大对于某些实施方式,除非我们处于默认nan模式(将所有nan转换为单个nan的模式),否则它们甚至不可交换,因为通常nana+nanb!=nanb+nana。数字加法和乘法是可交换的。由于ieeenan规则,没有乘法或加法标识。一和零作为用于数字值的标识。考虑fp数的一个有用方式是将它们认为是甚长定点数,其中至多几个(对于dp来说为53个)连续位可以是非零。例如,非无穷大dp数可在2046个位置中的任一个中具有有效数的第一位,并且第一位后面是52个其他有效数位,并且存在符号位,所以任何有限dp数可被表示为一个2046+52+1=2099位定点数。这样检查变得非常显然的是,加两个fp数通常不会产生另一fp数:加法的结果必须被舍入,使得它变成fp数。浮点(fp)算术的已知问题在于它是非关联的、使总和变得有问题的事实:·即使当加3个数时,程序设计员也需要担心截然不同的结果·程序设计员使用比他们需要更广泛的格式,希望避免截然不同的结果·程序设计员不能容易地使代码并行化,因为除非以确切相同的顺序计算,否则总和不可再现。例如,在单精度中,220+(-244+244)=220但是(220+-244)+244=0根据运算被执行的顺序,结果是一百万或零。这是一个极端示例,因为指数相差24,但如果指数相差1,或者即使所有指数都相同并且我们正在加多于3个东西,则我们可得到不同的答案。c编程语言通过要求按顺序从左到右评估总和来解决可再现性问题,但是这对正确性没有任何作用,并且使并行化变得不可能。问题对于程序可能需要加数百万个东西的高性能计算(hpc)来说尤其严重。程序设计员希望使这些问题并行化,但是然后可再现性的缺乏使调试变得比通常甚至更难。即使那些机器的重新编程完美无缺,机器的不同的配置也将产生不同的答案。hpa表示已提出了允许程序设计员可选范围内的浮点(fp)数的快速和正确累加的新的数据类型。对于将适应大多数问题的适度范围,累加比fp加法快,并且是关联的。关联加法允许问题被并行化,同时仍给出可再现且正确的结果,与现有硬件相比较使得能实现例如100倍或更高的加速。我们相信这些好处在高性能计算(hpc)空间中将是不可抗拒的,并且对许多非hpc应用有吸引力。图1示意性地图示用于在程序指令的控制下执行数据处理操作的数据处理装置2。数据处理装置2包括存储要处理的程序指令6和数据8的存储器4。处理器内核心10耦合到存储器4并且包括寄存器组12、处理电路14、指令取出单元16、指令流水线单元18和指令解码器20。应领会的是,在实践中数据处理系统2可以包括许多附加元件并且图1的表示被简化以帮助理解。在操作中,程序指令6由指令取出单元16从存储器4中取出并且被供应给指令流水线18。当程序指令到达指令流水线18内的适当级时,它们由指令解码器20解码并生成控制信号,所述控制信号用来控制寄存器组12和处理电路14的操作以执行通过解码的程序指令所指定的处理操作。可以从寄存器组12读取多个输入操作数并且将它们供应给处理电路14,其中它们被操纵,然后结果值被写回到寄存器组12中。寄存器组12可具有各种不同的形式。要操纵的操作数可以例如包括浮点操作数、定点操作数、整数操作数和hpa或rhpa数操作数(如稍后将描述的)。寄存器组12可以用来取决于寄存器组12的配置而存储这些类型的操作数的混合物。操作数可具有不同的精度水平,如可以通过其格式预定义的,或者如可以像将稍后关于hpa数操作数所描述的那样使用与寄存器相关联的元数据可编程地指定的。如图1中所示,寄存器组12可以包括用于指定与存储在寄存器组12的对应数据寄存器中的hpa或rhpa值相关联的元数据(在下面给出元数据的内容的示例)的元数据寄存器22。在一些情况下,每个数据寄存器可以具有对应元数据寄存器22,然而在其他情况下两个或更多个数据寄存器可以共享通过单个元数据寄存器22所指定的元数据。图2示意性地图示浮点操作数。浮点操作数由符号、指数和有效数形成。浮点操作数可表示具有通过其指数值所指示的各式各样量值的值。可用来表示数的精度受到有效数的大小限制。浮点运算通常实现起来比整数算术更复杂且更慢。图2还图示64位整数操作数。这样的整数操作数对于无符号整数可表示范围0到(264-1)内的数,或者对于有符号整数可表示范围-263到263-1内的数。整数算术(与浮点算术相比较)执行起来通常快并消耗比较少的能量,但是遭受如下缺点:与可以通过浮点值表示的数的范围相比较,可以指定比较有限范围的值的数。图2还图示包括多个分量(在此示例中三个)的向量的hpa(高精度锚定)数,在此示例中每个分量包括64位整数。hpa数具有与之相关联的元数据。元数据包括指示形成hpa数的一部分的分量的位的有效性的锚定值。锚定值直接地或者间接地指定位有效性的下边界和位有效性的上边界。在下面使用的术语元数据可被认为对应于包括指定hpa数的位有效性的锚定值的数据。不同的分量一起指定连续地横跨位有效性的此范围的位值。取决于位有效性的下边界和位有效性的上边界的位置,位有效性的范围可以包括二进制点位置。还可能的是,二进制点位置可以位于为特定hpa值所指定的位有效性的范围之外。可以提供锚定值,使得它们能够表示从可通过浮点值(例如双精度fp值)来表示的最小有效性延伸直到可通过该浮点值来表示的最高位有效性的位有效性的范围。形成hpa数的分量的数量可在不同的实施方式之间变化。分量的大小在一些实施例中可以是固定的,但是在其他实施例中可以变化。范围位有效性的总宽度可以在一些实施例中被约束为以固定分量大小为单位改变(例如在64位分量情况下,位有效性的范围可以具有例如64、128、192、256、...的宽度)。还可能的是,位有效性的范围的宽度能按照一个位宽度的步长连续地变化。锚定值(在元数据内)可以是可编程的,使得程序设计员可设置对应hpa值的有效性。锚定值可以以各种不同的方式指定位有效性。一个示例是指定每个向量分量的下边界位有效性。因此,每个向量分量可以包括表示其在位有效性的整个范围内的值的有效位的部分的整数值以及表示(锚定)该分量内的最低位的有效性的元数据。另一选项是锚定值指定整个hpa数的位有效性的下边界以及位有效性的范围的总宽度。另一个选项是锚定值可以包括指定位有效性的范围的下边界和上边界的数据。更进一步的变化也是可能的,诸如包括位有效性的范围的下边界的锚定值以及那些分量已知为固定宽度分量的分量的数量。图3示意性地图示可用双精度浮点表示的值的范围与hpa数的有效性范围之间的关系。在双精度浮点数的情况下,可以被指定的位值的范围从约2-1074扩展到2+1023(不对次正规数进行计数)。如所图示的,hpa数具有可编程位有效性范围,其可以被认为是可使用浮点值表示的位有效性的范围内的位有效性的窗口。此可编程位有效性可以通过下边界和上边界来指定,并且取决于下边界和上边界的值,可以被认为沿着通过浮点值所提供的位有效性的范围滑动。窗口的宽度以及其起点和终点可以通过指定位有效性的可编程元数据(其包括锚定值)的适当值来指定。因此hpa数可以具有由程序设计员选择为与要执行的计算匹配的形式。hpa格式允许快速、确切地且关联地执行两个或更多个值的加法,同时仍允许表示有效性的宽范围上的值。由于hpa值只是二补码数,所以它可使用整数加法器来加并且不需要像浮点算术那样进行舍入或标准化,这允许一系列加法被并行化,因为不管值被加的顺序如何结果都将是相同的。然而,通过定义指定hpa值的可编程有效性的元数据,然后可仍表示等效浮点值的有效性的全范围,但是而不需要提供非常宽的加法器(例如,跨越可通过双精度浮点值表示的全范围加两个2补码数将要求2098位加法器),并且替代地可编程有效性使得较小加法器能够在较大范围内集中于可编程位有效性的特定窗口。在实践中,大多数计算不要求有效性的整个范围可用于双精度浮点。例如,亚原子问题可能累加非常小的值并且天文复杂性可能累加非常大的值,但是将质子的宽度加到星系之间的距离通常不可用。甚至对于高性能计算,大多数累加都发生在有限范围之上。通常,编写程序的程序设计员将知道有用结果很可能下降(取决于应用)的值的预期范围。程序设计员可能确定特定总和的所有数据将具有小于260的量值并且量值低于2-50的值不会以任何有效的方式影响总和,所以在这种情况下通过将使用hpa格式的数据与128位的总数据宽度和将最低有效位的有效性指定为-50的锚定值相加,可以按任何顺序关联地加用于此特定应用的数。因此,通过使用锚定值来限制正在计算结果的有效范围,可使用相对小的一件硬件来在可编程地定义的窗口内计算结果。如果加法导致定义范围的高于上有效性边界的上溢或低于下有效性边界的下溢,则可产生异常并且这可发信号通知程序设计员已定义了错误的有效性边界并且应该在不同的元数据(例如不同的锚定值或hpa值的不同总体大小)情况下重复处理以针对结果定义有效性的不同窗口。当加或者减去两个hpa值时,锚定值对于两个hpa值来说是相同的并且结果也具有相同的锚定值—这与两个值的加法或减法可导致由于结果的标准化而对任何一个输入具有不同的指数的结果的浮点算术不同。如果输入被提供有不同的锚元数据,则它们被移位以使本身与结果所要求的目标有效性范围对齐。如果输入是以除hpa以外的表示(例如,整数或浮点)提供的,则它们被转换成共享相同锚定值的hpa值,并且相加以形成具有相同锚定值的结果。因此,用于hpa寄存器的元数据可被视为定义要在该寄存器中生成的结果值的有效性的目标范围,并且将不通过硬件来计算位于有效性的目标范围外的位,而不管输入值的实际有效性如何。rhpa表示虽然与浮点相比较hpa格式使得能实现快得多的加法,但是当hpa值的大小变得相对大时,那么用整数算术加两个hpa值可能仍然是相对慢的。例如,hpa格式可能要求横跨多个通道的操作数的加法,这在较大向量实施方式中可能是不希望的。例如,两个256位或512位值的加法可能花费一些时间,因为可以顺序地执行加法的每个64位通道以适应从一个通道被输入到下一个通道的进位。可通过使用图4中所示的冗余高精度锚定(rhpa)格式来更快地执行加法。如在hpa格式中一样,rhpa数包括具有定义锚定值的元数据的可变数量的分量,所述锚定值使得处理电路14能够识别每个分量的位的有效性。再次,锚定值可以是可编程的。对于rhpa,元数据可以以上面针对hpa所描述的方式中的任一种识别每个分量的有效性。然而,在rhpa格式中,数值使用向量的相邻通道包括重叠有效性的位的冗余表示来表示,这不管正在计算的通道的数量都允许恒定时间加法。冗余使得能够用较短的加法器并且在不在加法器之间传播进位信息的情况下执行诸如加法、累加和乘法这样的运算。这大大地加速数据值的处理。如图4的部分(1)中所示,使用rhpa表示的m位数据值被划分成各自包括n位的相应的向量通道(也称为组件、元件或部分),其中n<m。在此示例中n是64位,但是这只是一个示例并且其他通道大小(例如32或128位)也是可能的。每个n位部分被划分成一定数量v的重叠位和n-v个非重叠位。在此示例中,重叠位数v对于每个n位部分来说是相同的,但是还可以具有带不同数量的重叠位的不同的n位部分。当整数或浮点数被转换为rhpa格式时,非重叠位中的一些用从原始整数或浮点数映射的非符号信息填充,同时重叠位用符号位填充。出于基于通道的加法和减法目的,每个通道表现得像n位有符号二补码数(必要时具有从非重叠部分传播到重叠部分的进位),但是当从多通道视角观察时通道形成较大p位数的冗余混合符号表示。在图4的示例中存在四个通道,所以m=256,但是通道的数量可取决于硬件实施方式和/或针对给定rhpa数所定义的元数据而变化。图4的部分(2)示出部分(1)中所示的rhpa数的每个位的相对有效性。最低有效通道的重叠位v[0]具有与下一个通道的非重叠位nv[1]的v个最低有效位相同的有效性。同样地重叠位v[1]和v[2]分别具有与非重叠位nv[2]和nv[3]的v个最低有效位相同的有效性。通道之间的有效性重叠意味着rhpa数总体上表示小于存储位的总数m的p位值。如果v对于每个n位部分(除顶部部分以外)来说是相同的,则更一般地,如果不同的通道可具有不同数量的重叠位,则p=m-∑v,其中∑v是除顶部通道以外的每个通道中的重叠位数的总数。在p位值的每个重叠部分中,该p位数的实际位值通过较低通道的重叠位v和较高通道中的非重叠位nv的总和来表示(考虑可以通过在较低通道中加非重叠位nv和重叠位所引起的任何进位)。因此,在图4的部分(3)中示出了将rhpa值转换为等效整数值的一个方式,其中每个通道中的重叠位被符号扩展并加到较高通道的非重叠位(从低阶到高阶,在每个通道加法之后调整重叠位)。rhpa数在存在用于使用rhpa值的m位来表示给定p位数的不止一个方式的意义上是冗余的。例如考虑最低两个通道中的重叠,在重叠位数v=4的示例中,如果p位值的对应位是1111,则用于表示这个的一个方式将是在较低通道中具有重叠位v[0]=0b0000并且在次最高通道中具有非重叠位nv[1]=0b1111。然而,表示相同值的其他方式可能是v[0]=0b0101且nv[1]=0b1010,或者v[0]=0b1111且nv[1]=0b0000。注意的是,最高通道中的重叠位v[3]实际上不是重叠位,因为没有与其重叠的较高阶通道。因此,将高阶通道认为是具有所有非重叠位可能常常是有用的。因此,在一些情况下顶部通道可以被认为完全由非重叠位形成(使得p位值的最高有效位总体上对应于顶部通道中的m位值的最高有效位)。然而,在其他实施例中,可以优选将顶部通道视为也具有重叠位,使得通过rhpa所表示的p位数字值的最高有效位对应于顶部通道的非重叠部分(不包括重叠部分)的最高有效位。如果此方法允许以更对称的方式处理每个通道(与其他通道相比较对顶部通道被处理的方式有较少修改),则此方法可以使电路实施方式变得更容易。通过以如图4中所示的冗余形式表示p位数字值,可在没有通道之间的进位的情况下加若干rhpa数,因为来自给定通道中的非重叠部分的加法的任何进位可被容纳在相同通道的重叠部分内,而不需要将进位传播进入下一个通道。在每个通道中执行的加法简单地看到通过执行常规n位二补码加法来加的两个或更多个n位有符号整数,所述常规n位二补码加法完全独立于其他通道中的对应n位加法。这意味着可并行执行n位加法中的每一个,使得不管通道的数量,都可在执行n位加法所花费的时间内加全部m位值。事实上,可在没有通道之间的进位的情况下加至少(2v-1-1)个这样的rhpa数,同时在重叠部分中收集来自非重叠部分的加法的任何进位(如果存在具有不同数量的重叠位的通道,则此表达式中的v将是具有重叠位的任何给定通道中的最小重叠位数。第(2v-1)个加法将是可能能在通道之间生成进位的第一个(因为顶部重叠位是符号位,所以当存在来自第二最高有效重叠位的正或负溢出时发生通道溢出,当从所有位都为0的rhpa数开始时,可在已执行了最少2v-1个进一步加法之后发生正或负溢出)。例如,如果v=14,则这将允许在存在来自单个通道的溢出的任何风险之前将至少8191个rhpa数加到累加器(即总共8192个值被加)。这对于许多输入值的加法是常见的高性能计算领域是特别有用的。在实践中,因为并非每个加法将引起进入溢出部分的溢出,所以有时不止2v-1个累加是可能的,而没有来自n位部分的顶部位的溢出。偶尔地,如果已执行了足够的加法以引起来自n位通道的顶部位的溢出(或实际溢出)的风险,则可执行重叠缩减操作以将给定rhpa值转换为重叠位表示比给定rhpa值的重叠位小的量值的第二rhpa值,以有效地释放重叠部分中的位空间以用于容纳更多的进位。另外,当将rhpa数转换回为诸如整数或浮点这样的另一格式时,还可以执行这样的重叠缩减。然而,在实践中,可能不常常要求这样的重叠缩减操作,所以通过允许在n位加法所花费的时间内执行多个输入的m位加法,rhpa使得能实现处理时间的大节约。注意的是,术语“重叠缩减”不暗示必须将每一通道中的重叠位缩减到较小量值。至少一个通道使其重叠位在量值上缩减是足够的,并且可能的是,一些形式的重叠缩减能导致给定通道中的重叠位在量值上增加。hpa数的高效存储和操纵对于以下描述,将假定所使用的hpa形式是上面讨论的rhpa形式,其中每个部分包括许多重叠位,但是本文描述的技术同样地适用于其他hpa形式,例如不同的部分不包括重叠位的hpa形式。此后,术语hpa将用于指代正在操纵的hpa值,而不管它们是否是具有冗余形式。如将从早先讨论的图4中显而易见的,hpa数的不同的hpa部分可以位于单个向量寄存器的不同的通道内。然而,这产生许多潜在的问题。例如,当从浮点操作数创建hpa形式时,浮点操作数的分数需要连同期望的锚定值一起被传播到相关向量寄存器内的所有通道。每个通道然后将基于锚定值具有不同的通道锚。进一步地,在向量寄存器显著地大于hpa数的长整数值的情形下,例如在1024位寄存器保持hpa数的200位长整数的情况下,它可导致向量寄存器资源的浪费使用。进一步地,如果向量寄存器具有不足数量的位来表示hpa数的长整数的所有部分,例如如果向量寄存器是128位宽并且需要表示hpa数的200位长整数,则处理可能是有问题的。在此后讨论的示例中,为hpa数的各个部分提供替代存储布置。特别地,hpa数的长整数被布置以便被存储在跨越多个向量寄存器的公共通道内,如图5中示意性地图示的。特别地,提供了一组向量寄存器100,其中每个向量寄存器可被认为由用于存储数据值的多个区段构成。进一步地,可将多个通道认为是贯穿向量寄存器(在图5中图示的定向上的垂直方向上),前四个通道通过图5中的附图标记102、104、106、108来表示。然后可通过将hpa整数值的不同的部分存储在不同的向量寄存器中来将hpa数的长整数存储在公共通道内。针对示例hpa整数110示意性地图示了这个,所述示例hpa整数110被认为由四个部分构成,一个部分被存储在向量寄存器z0、z1、z2和z3中的每一个中。进一步地,所有部分都被存储在公共通道102内。通过以这种方式存储hpa数的整数,这产生许多显著的益处。例如,整数的大小不受单独的向量寄存器的宽度约束。进一步地,可避免向量寄存器的低效利用,因为可将多个hpa整数存储在跨越各个向量寄存器的不同的通道中,同时那些整数值然后能够被以simd方式并行操作。例如,考虑图5,如果图5中所示的向量寄存器中的每一个均将提供16个通道,则可将16个hpa数存储在四个向量寄存器z0至z3内,每个hpa数占据不同的通道。因此,可看到的是此方法显著地改进可伸缩性并且提供向量长度不可知的技术。这因此允许在各式各样不同的系统中采用该技术,所述各式各样不同的系统中的每一个均可以使用不同大小的向量寄存器来操作。因此存在将这样的存储技术用于hpa值将产生显著的性能益处的许多应用,但是一个示例与采用由armlimited所提出的可伸缩向量扩展(sve)的系统相关联。armlimited已将可伸缩向量扩展(sve)宣传为其针对科学hpc应用的64位isa。虽然sve当前不包括hpa支持,但是它在继续演进,并且对其指令集的几个适度添加将使得能实现非常高的hpa性能。sve的“可伸缩”部分指代它对于所有实施方式不要求相同的向量长度:sve向量可作为64位通道的任何多个对被实现在硬件中,从128到2048位。小芯片可能仅实现128位向量,然而超级计算机可能实现1024或甚至2048位向量。在单个sve寄存器中保持200位整数在128位实施方式上将是不可能的,而在2048位实施方式上浪费,但是遍布这些寄存器中的4个保持一定数量的200位整数充分利用sve的可伸缩性,并且在从小到大的任何硬件实施方式上工作很好。它还使程序设计员自由使需要使用较短或较长的整数:100位整数能装配在2个向量寄存器的对应通道中,而500位整数能装配在10个向量寄存器的对应通道中。出于性能和面积原因,sve在64位通道内执行算术。我们提出通过将大ihpa数分解成较小的冗余片来做hpa加法。每个64位通道将保持i的指定部分(假定p=50位,但是这可以是可编程的),同时剩余64位用于保持通道内的进位。这些剩余位被称为“重叠”位,因为它们具有与下一个最有效通道的l相同的数字权重。通道内的加法只是正常64位整数加法。每隔264-p个周期(即,对于p=50每隔16,000个周期左右),可能要求冗余消除步骤以防止通道溢出,并且在每次计算结束时,将要求逐通道过程以获得非冗余答案。为了将fp输入f转换为hpa数格式(i,a),每个64位通道检查f的指数,将它与锚a相比较,然后确定f的有效数的任何部分是否应该被加到考虑中的i的部分。可以跨越所有适用的通道并行做此比较。虽然f的有效数可能横跨两个部分(或对于fp64产品来说为三个部分,取决于p的值),但是可独立地创建和操纵每个部分。在下面陈述fp32数变成两部分hpa的示例转换,其中a被选取为0并且p被选取为50。在此示例中,fp32数被假定为占据向量寄存器通道的“右手”32个最低有效位,并且hpa数被假定为占据64位寄存器通道(包括50位值和14个重叠位)。如果fp数是:f=+1.01101011101000101111011×260fp32有效数,则f[23:0]=101101011101000101111011hpa数的部分1将具有调整后的部分锚=50并且被计算如下:i[1]=f[23:0]左移(指数-23)-部分锚=37-50=-13个地方(-ve左移是+ve右移->i[1]={{14个0},{39个0},f[23:13]=10110101110})(将指数调整23考虑浮点值的指数表示在23位分数的最高位左侧的隐含小数点的有效性,然而锚表示分数的最低有效位的有效性)。hpa数的部分0将具有调整后的部分锚=0并且被计算如下:i[0]=f[23:0]左移(指数-23)-部分锚=37-0=37个地方->i[1]={{14个0},f[12:0]=1000101111011,{37个0}}这产生hpa形式如下:表7一般地说,将hpa结果正确地舍入到单个fp结果必须是顺序过程,从而要求进位和舍入信息的逐通道传播。它将要求若干周期,但是对于每个累加仅必须发生一次。可替代地,如果则占据若干64位通道的非冗余hpa数能被并行转换为fp64数的向量。然后应该“重新标准化”结果得到的向量,使得最有效元素将完整hpa数表示到0.5ulp的准确度。在现在描述了高水平的hpa处理的基本原理后,我们现在更详细地描述如何可能在sve中实现hpa累加器。sve支持k×128位直到2048位的当前最大值(即1≤k≤16)的向量寄存器长度并且基于“向量长度不可知”(vla)处理的构思,由此具有不同的sve向量寄存器长度的不同的cpu可全部运行相同的sve程序。sve程序从系统寄存器读取可用向量长度并且“自我调整”以利用可用向量寄存器长度。因此,sve程序在128位颗粒内执行,同时cpu并行处理和可用向量硬件长度可支持的一样多的颗粒。如早先参考图5所提及的,为了实现向量长度不可知性,可以跨越多个sve寄存器展开hpa数。每个寄存器可以保持不同的hpa数的相同有效性的位:即,每个寄存器与给出相对于每个部分在hpa数中的位置调整的数的锚的值的有效性相关联。返回到在每个部分中保持p=50位的200位hpa数的早期示例,如果hpa数的锚是-80,则四个部分的有效性信息将是(+70,+20,-30,-80),同时每64位部分具有14个重叠位。注意的是,不需要按照图5中的示例将hpa数的单独的部分存储在连续寄存器中。以这种方式展开hpa数的主要优点是它们(或长整数)可被以simd方式处理,甚至跨越可以比长hpa数短的simd实施方式(例如128位向量)。第二优点是通过在每个向量内存储较短的hpa数,不会浪费较长的simd实施方式(例如1024位向量)。如果存在足够多的整数或hpa数,则不管sve实施方式长度向量都被充分地利用。跨越若干寄存器展开hpa数还允许hpa算术被高度地并行化,同时fp数的向量被累加在它们自己的64位通道中。另外,从存储器加载大量fp数量简化为简单且高效的连续向量加载。最后,hpa数的这种布局允许现有sve指令用于执行重要的hpa计算(诸如消除冗余或者将hpa数加在一起),因为许多hpa整数全部可被从低阶位到高阶位并行处理。该方案还加快hpa数到fp的转换和重新标准化,再次因为可从高阶通道到低阶通道或者从低阶通道到高阶通道同时地处理多个hpa数。图6图示以图5中讨论的方式展开的hpa数然后可以如何用simd方式处理。在此特定示例中,假定了一系列浮点数被加载到源向量寄存器165中。在此示例中,假定了每个浮点数是双精度浮点数,因此每个浮点数点数占据源寄存器165内的64位区段。多个64位通道152、154、156被认为延伸穿过向量寄存器组,并且单独的转换和处理电路170、172、174与每个通道相关联。电路170、172、174被布置为一次对hpa数的单个部分进行操作,以便产生要存储在目的寄存器180中的对应结果部分。从早先讨论的图5中应理解的是,hpa结果数的每个结果部分将占据不同的目的寄存器,因此随着电路处理hpa数的不同的部分,对应结果部分将被写入在不同的目的寄存器中。如稍后将更详细地讨论的,元数据被提供用于由转换和处理电路170、172、174在执行其转换和处理步骤时参考。特别地,在此示例中为另一个源寄存器160内的每个通道存储元数据。在通道的元数据内,为在该通道内处理的hpa数的每个部分提供元数据部分。元数据将识别与对应部分相关联的有效性(调整后的锚),并且可以识别其他信息,诸如重叠位数。当电路170、172、174正在处理hpa号的特定部分时,它们将从在源寄存器160内维护的通道元数据中检索所关联的元数据部分。在图6中所示的示例中,每个转换和处理电路将接收hpa数的将被处理的部分的输入浮点操作数和相关元数据部分,然后将使用例如早先参考表7中所示的示例描述的技术来从输入浮点操作数生成相关hpa部分。所生成的hpa部分然后能被直接地存储在结果寄存器180中,或者可以经受某个处理功能以便生成所关联的结果部分。例如,在一个实施例中可执行累加运算,其中当前hpa结果部分被从目的寄存器中检索并且然后与从输入浮点操作数生成的hpa部分累加以便产生更新的结果部分,所述更新的结果部分然后被写回到目的寄存器180的相关区段中。通过这样的方法,可看到的是经由多次迭代的执行,可并行在每个通道内执行多个累加运算以便生成表示累加结果的结果部分。还可针对hpa数的每个部分重复该过程以便在每个通道内产生一系列结果部分,该一系列结果部分共同地表示结果hpa值。在一个示例布置中,hpa处理要求关于锚、通道重叠和通道类型或宽数内的位置—顶部、底部或中间的信息(“元数据”)。预期hpa数量将通常不超过200位宽,同时锚范围类似于ieeefp32,使得hpa累加器将通常包括不多于四个部分。然后可将用于遍历4个64位部分的200位累加器的hpa元数据组织为4个16位字段,如图7中所示。特别地,可指定源寄存器160,其中在每个通道(例如64位)内像通过附图标记162、164、166、168所指示的那样提供四个元数据部分。每个元数据部分然后可为累加器结果的关联部分提供元数据。如通过图7中的扩展部分所示的,可将有效性(调整后的锚)信息包含在第一子部分192中,例如使用9位,然而可在第二子部分194中捕获重叠信息,例如包括5位。视需要而定,还可在第三子部分196中捕获类型信息,以识别所关联的部分是顶部部分(即表示最高有效位)、底部部分(表示最低有效位)还是中间部分。在任何特定通道内,被累加的hpa值将全部被布置为具有相同的锚,并且因此针对通道的元数据将同样地适用于在通道内处理的所有hpa值。原则上,可为每个通道指定不同的元数据,使得在一个通道中处理的值不必具有与在另一通道中处理的值相同的锚。然而,情况将常常是在所有通道内处理的所有值将被布置为具有相同的锚定值,并且在这种情况下可跨越整个向量寄存器160存储和复制元数据的64位。这使得针对每个通道产生的各种hpa结果能够在适当的时候彼此容易地累加,以便产生单个标量hpa结果。在这样的布置中,用于需要引用元数据的hpa的sve指令可指定元数据寄存器以及到正在处理的hpa部分的元数据的特定16位的2位指针。应该注意的是,虽然图7图示用于提供元数据的一种机制,但是还能设计用于以更压缩的方式存储元数据的替代方案,使得例如,元数据的8个通道可被存储在64位中。特别地,可能不需要“类型”字段并且可能能在大小上缩减ovlp和有效性字段以反映有限数量的可用配置。多个最重要的hpa运算是将fp数转换并累加成hpa格式。必须对要累加的每一fp数执行此运算,然而其他hpa运算(转换回为fp、消除hpa冗余等)不太频繁地发生数千次。因此,期望提供用于转换并累加fp数的高效硬件支持。图8示出针对将跨越向量单元重复的此运算的可能的64位数据路径,图8因此更详细地表示针对图6中所示的转换和处理电路170、172、174中的每一个的示例配置。输入浮点数据210由符号部分212、指数部分214和分数部分216构成。然后提取来自为通道保持的元数据的相关元数据部分作为元数据部分200,这包括类型字段202、重叠字段204和有效性字段206。或函数220对指数的各位执行或运算以便生成有效数的最高有效位,其然后被预附加到分数位216以形成有效数。特别地,如果指数是非零,则这指示浮点数是正规浮点数,因此有效数的最高有效位是逻辑一值。然而,如果指数的所有位都是零,则这指示次正规值,因此应该将有效数的最高有效位设置为零。减块222被布置为将指数214减去有效性206(必要时针对指数偏置值和分数字长进行调整),例如使用早先参考表7所描述的技术以便产生移位量,所述移位量然后用于控制移位电路224以将浮点有效数移位适当的量(酌情执行右移或左移)。与电路226然后接收重叠信息204,并且通过所指定的重叠位数(等于64-p)屏蔽来自移位电路的输出。此后,异或电路228在浮点数为负的(如通过符号值212所指示的)情况下对来自与电路226的输出执行二补码函数。此时,与具有给定有效性和重叠量的特定hpa部分相关的输入浮点数的位可用作二补码数,并且可作为一个输入被提供给加法器电路230(如果浮点操作数是负的则加法器还取1的进位值)。结果,可看到的是相关hpa部分可从输入浮点值“及时”生成,然后经受适当的处理操作以便生成对应结果部分。在所示的示例中,假定了处理操作是选择性累加运算。特别地,可选择性地使用与电路240来将保持在寄存器235中的当前值作为第二输入传播回到加法器230,从而允许前一个结果部分与从转换电路输出的输入操作数部分一起累加,以便产生存储在寄存器235中的更新的结果部分。以所示方式并入64位加法器和寄存器支持背对背hpa转换和累加指令的流水线执行。存在可用来触发图8中图示的电路以执行上述操作的许多方式,但是在一个实施例中,使用单个指令来发起图8的上述功能性。这样的指令可以被称为fp至hpa转换和加指令。用于fp至hpa转换和加指令的操作码(助记符“fcvth{a}”,其中{a}表示可选累加)在一个示例中包括用于fp源寄存器、元数据寄存器、目的累加器寄存器的标识符,以及用于选择元数据寄存器的子字段的索引。这非常符合sveisa设计原则,即操作码引用不超过三个向量寄存器。可构建实现其他重要的hpa运算的现有sve指令的短序列。周期性地,重要的是消除hpa数的冗余以便避免部分溢出。这可以通过简单地将较低hpa部分的重叠区域中的累加进位位加到下一个最高hpa部分的lsb来实现。在sve中可以在3指令程序中完成这个:(i)将较低的部分算术右移p个位置;(ii)将已移位的重叠位加到下一个较高的hpa部分;(iii)将重叠位与较低的hpa部分中从p导出的掩码进行立即与以迫使它们为零。此程序可以被应用于从最低通道向上工作的每一对相邻的hpa部分。在已累加了大块fp数之后,结果将被存储在置于许多sve通道上的多个累加器中。然后可以将这些累加器加在一起以针对具有相同索引的hpa通道的每个向量返回标量结果。在sve中可以通过对保持在多个hpa通道中的累加器执行向量缩减以形成标量hpa结果来容易地实现这个。结果得到的标量hpa数可以完全在每个部分的重叠区域中包含进位位,因此然后可在标量hpa数上运行冗余消除例行程序,之后将它转换回为fp形式。最后,可以将累加可再现的hpa结果转换回为浮点格式。用于确切地将hpa部分转换为标准化fp64数的算法(即假定p≥53)如下:(i)执行clz以定位前导‘1’的位置(ii)将指数计算为有效性+(63-clz)+fp64指数偏置值(iii)对于除最高hpa部分外的所有部分,将fp64结果的位[63]设置为0;将fp64结果的位[62:52]设置为所计算出的指数;如果偏置指数>0,则将hpa部分逻辑上左移clz-11个地方:否则将fp64结果设置为零。(iv)对于仅最高hpa部分:如果该部分是负的,则将fp64结果的位[63]设置为1并且否定该部分以获得正2补码数;将fp64结果的位[62:52]设置为所计算出的指数;如果偏置指数>0,则将hpa部分逻辑上左移clz-11个地方:否则将fp64结果设置为零。可每hpa通道在通常15个sve指令中实现此转换算法。应该注意的是,视需要而定,上述步骤(iii)和(iv)能被组合如下以涵盖不是最有效的部分可能为负的情况:(iii)如果该部分是负的,则将fp64结果的位[63]设置为1并且否定该部分以获得正2补码数;将fp64结果的位[62:52]设置为所计算出的指数;如果偏置指数>0,则将hpa部分逻辑上左移clz-11个地方:否则将fp64结果设置为零。当期望时,可产生尽可能准确地表示最终累加值的单个fp64结果。这可以例如通过应用由y.hida、x.s.li和d.h.bailey所建议的算法“algorithmsforquad-doubleprecisionfloatingpointarithmetic”,proc.15thieeesymposiumoncomputerarithmetic,vailco,june2001,pp.155-162来实现。从通道的底部对向上工作,fast2sum操作被连续地应用于下一个较高的通道并且从fast2sum获得上部总和。然后,过程被从刚刚获得的值的最上对向下重复并连续地应用于下一个较低值并且从fast2sum获得下部总和。然后可以保证fp64数的结果向量的最上元素在hpa数的0.5ulp内。包括l个部分的hpa累加器具有l·p位的字长并且占据l个sve向量寄存器。在k×128位sve向量单元上执行的fcvth{a}指令可将2k个fp64数或4k个fp32数转换并累加到2k个hpa累加器的一部分中。fcvth{a}指令是完全流水线的,使得可在n·(l/2k)+1个周期中将n个fp64加数的块累加到2k个p·l位hpa累加器中。l和k的典型值是2-4(但是k可以高达16),使得,如果l=k,则能在n/2个周期中在k个并行累加器中累加n个fp64数(或2n个fp32数)。相比之下,在arm的cortex-a72上,相同可再现的累加将要求3n个周期,因为总和必须按顺序发生,并且相关融合乘加(fma)在加法之间要求3个周期。因此hpa通常优于常规fp处理对于fp32累加提供12倍的加速。如上面所指出的,将需要周期性地消除或者解析hpa冗余。上述的方法取3·(l-1)个指令并且将需要每264-p个累加被执行一次:对于p=50的典型值,这表示<0.1%的微小处理开销。类似地,与对于n≈103或更高的n个数的hpa累加来说≈n/4个周期相比较,将hpa累加器的向量缩减为标量形式、解析标量hpa中的冗余并且将标量hpa转换回为fp64格式将对于l的代表性值通常取l+3·(l-1)+15·l≈19·l–3=35-73个指令。如从上述讨论中将显而易见的,主要常用的操作是转换和累加运算。图9是图示一个示例布置中的这样的操作的执行的流程图。在步骤300处,执行一个或多个连续加载操作以用浮点操作数填充许多向量源寄存器。这被示意性地图示在图10a的顶部中,其中通过执行连续向量加载操作来用浮点源操作数填充三个向量寄存器。在此示例中,假定了每个向量寄存器提供四个通道。在步骤305处,确定hpa表示的锚和大小。如早先所提及的,hpa表示的锚和大小可以是可编程的,并且意图是确立适合的范围以使得能够在累加多个操作数时捕获最高有效位。因此,在一个示例布置中,可执行扫描操作以考虑要累加的组中的所有浮点数,以确定哪一个浮点操作数是最大的。然后可确定用于hpa表示的部分的期望数量(可在不扫描要累加的所有浮点数的情况下选取此数量),同时最有效部分被选取为具有足以使得能实现要捕获的最大浮点操作数的最高有效位的有效性(如从扫描要累加的所有浮点数而确定的)。这因此规定在步骤305处对锚的选取。在步骤310处,然后为每个hpa部分设置元数据,并且跨越源寄存器zm中的通道中的每一个复制元数据。如早先所讨论的,每个通道中的元数据实际上将包括许多元数据部分,每个元数据部分对应于该通道内的hpa部分中的关联的hpa部分。然后可使用适当的索引值来进入到源寄存器zm中访问任何特定元数据部分。这被示意性地图示在图10a的下部中。特别地,基于源寄存器标识符和索引值,可访问每个通道内的特定元数据部分。如通过具体示例早先所提及的,在一种布置中通道可以是64位宽的,并且每个通道中的元数据可以包括四个16位元数据部分,其可例如通过取0与3之间的值的索引值i来识别。在步骤315处,将两个参数a和b设置为等于零,然后在步骤320处选择源寄存器a和hpa部分b。此后,在步骤325处,并行跨越每个通道,源寄存器a的该通道中的相关浮点操作数然后使用用于部分b的元数据被转换成考虑中的当前hpa部分,并且然后与用于部分b的目的寄存器中的当前结果部分累加以生成更新的结果部分。此后,在步骤320处确定了是否检测到重叠缩减条件,如果是这样的话,则在步骤335处执行重叠调整过程,例如使用早先讨论的技术。如果不存在重叠缩减条件,或者在存在的情况下紧跟重叠调整过程的执行之后,过程进行到步骤340,其中确定了是否有任何更多的源寄存器。在图10a中图示的示例中,将看到存在三个源寄存器,并且因此此时过程将遵循参数a在步骤345处被递增的“是”路径,并且过程返回到步骤320。图10b至图10d示意性地图示针对第一hpa部分(称为部分0)的步骤320至345的过程的三次迭代。在此示例中,针对部分0的结果部分被累加在目的寄存器zd内。图10b至图10d中所示的每个结果部分被以形式a[q][r]图示,其中“q”指示部分并且“r”指示hpa数。因此a[0][1]指示hpa结果1的部分0。如将从图10b看到的,第一指令不是累加指令,并且因此,在每个通道内,相关浮点值经受转换操作以生成第一hpa部分,其然后被存储在目的寄存器zd中。如图10c中所指示的,在下一次迭代中源寄存器移动到zn+1,相同的元数据部分被引用,并且在每个通道中执行累加运算以在目的寄存器中将经转换的部分与先前存储的结果部分累加(目的寄存器现在被称为zda以识别它是累加寄存器)。图10d然后图示源寄存器为zn+2的第三次迭代的相同过程。此后,在步骤340处将确定没有更多的源寄存器,并且过程将进行到确定了是否有任何更多的部分要处理的步骤350。在这种情况下,将确定有更多的部分要处理,并且过程将进行到步骤355,其中在过程返回到步骤320之前,参数a被重置为零并且然后在步骤360处递增参数b。对于参考图10a至图10g所图示的示例,然后将针对hpa数的下一部分执行通过步骤320至345的三次进一步迭代,如通过图10e和图10f示意性地所图示的。如所示,在此过程期间累加的结果部分被存储在单独的目的寄存器zd(a)+1中。一旦在步骤350处确定了没有更多的部分要处理,则过程在步骤365处结束。这被示意性地图示在针对每个hpa值由仅两个部分构成的示例的图10g中。如可从图10g看到的,紧跟上述过程之后存在然后跨越两个目的寄存器存储的四个hpa累加器值。每当在步骤330处确定了检测到重叠缩减条件时,则可在步骤335处执行重叠调整过程,如图11中示意性地图示的。如图11中所示,在第一过程期间zda的上部(即重叠)位被加到zda+1的底部位,然后使用所图示的移位、加和与指令被重置为零。这些指令因此执行早先讨论的移位、加和与运算。此后,可针对任何进一步的部分重复该过程。因此,如果hpa数中的每一个具有如图11中所示的三个部分,则然后可执行后续一系列移位、加和与运算以将zda+1的上部位加到zda+2的底部位。一旦已执行了所期望的转换和累加运算,然后就将已产生一系列hpa结果值,每个结果值占据一系列寄存器内的不同的通道,如图12中示意性地示出的。在一个示例布置中,通过一系列加运算,可将这些各种结果累加到如图12中所图示的单个标量hpa结果中。在此示例中,假定了任何重叠被首先解析,使得不需要指定重叠位的值。还假定了相同寄存器中的所有hpa部分具有相同的锚信息。如所示,可执行一系列现有sve缩减指令以产生关联的最终结果部分370、372、374,这三个部分表示一个最终hpa数。图13示意性地图示这样的最终hpa结果变成一个或多个浮点值的转换。在所示的示例中,可视需要而定为hpa部分中的每一个生成浮点值,以便保持在hpa数中可得到的精度。通过将这些值转换回为fp格式,不需要维护元数据信息,并且因此可在外存储浮点值以供将来参考,例如通过将它们写回到存储器。视需要而定,所创建的浮点值可被重新排序以便被存储在单个寄存器中,如通过图13的下部所示的。如图13中所示,可例如使用早先讨论的过程来执行一系列指令,一次对一个hpa部分进行操作以将该部分转换成浮点值。图14图示可以被使用的模拟器实施方式。虽然早先描述的示例在用于操作支持所涉及的技术的具体处理硬件的装置和方法方面实现本发明,但是还可以提供根据本文描述的示例的通过使用计算机程序来实现的指令执行环境。这样的计算机程序常常被称为模拟器,只要它们提供硬件架构的基于软件的实施方式即可。各种模拟器计算机程序包括仿真器、虚拟机、模型和二进制译码器,包括动态二进制译码器。通常,模拟器实施方式可以在主机处理器430上运行,从而可选地运行主机操作系统420,支持模拟器程序410。在一些布置中,在硬件与所提供的指令执行环境和/或在同一主机处理器上提供的多个不同的指令执行环境之间可以存在多个模拟层。在历史上,强大的处理器已被要求提供以合理的速度执行的模拟器实施方式,但是这样的方法在某些情况下可能是合乎情理的,诸如当由于兼容性或重用原因而期望运行另一处理器本机的代码时。例如,模拟器实施方式可以给指令执行环境提供主机处理器硬件不支持的附加功能性,或者提供通常与不同的硬件架构相关联的指令执行环境。在“someefficientarchitecturesimulationtechniques”,robertbedichek,winter1990usenixconference,pages53-63中给出了模拟的概要。就先前已参考特定硬件构造或特征描述了示例而论,在模拟示例中,可以通过适合的软件构造或特征来提供等效功能性。例如,特定电路可以在模拟示例中作为计算机程序逻辑被实现。类似地,存储器硬件(诸如寄存器或高速缓存)可以在模拟示例中作为软件数据结构被实现。在先前描述的示例中引用的硬件元件中的一个或多个存在于主机硬件(例如,主机处理器430)上的布置中,一些模拟示例可以在适合的情况下利用主机硬件。模拟器程序410可以被存储在计算机可读存储介质(其可以是非暂时性介质)上,并且向目标代码400(其可以包括应用、操作系统和管理程序)提供与正在由模拟器程序410建模的硬件架构的应用程序接口相同的程序接口(指令执行环境)。因此,可以使用模拟器程序410来从指令执行环境内执行目标代码400的程序指令(包括用于在相应的通道内执行hpa值的上述转换和累加的指令),使得实际上不具有上面讨论的装置的硬件特征的主机计算机430可仿真这些特征。大多数fp累加仅使用fp数的范围的一小部分,所以可使用hpa数来更快地且正确地计算它们。hpa积累是可再现的且可并行化的,并且在适当的数据界限情况下,是高度准确的或甚至确切的。对于程序设计员来说并在fp缺乏关联性引起问题的情况下,hpa的使用与fp相比不会明显更难。hpa对程序设计人员更容易。极少数人被训练来分析fp计算给出不良结果的情形。一个频繁响应是使用较宽的fp格式来重新编码,但是较宽的格式对于比fp64大的无论什么具有差性能并且消耗不必要的功率和硅面积。使用hpa给出更好的性能并且移除最有害的舍入问题。在第一示例布置中,一种装置可以包括处理电路,例如一个或多个cpu、gpu或其他适合的处理电路。所述处理电路可以被布置为对至少一个长整数操作数执行一个或多个算术运算。在示例中所述至少一个长整数操作数可以是二补码整数i。所述长整数操作数可以包括128位或更多位。所述装置可以附加地包括多个向量数据存储寄存器,例如向量存储寄存器可以是对所述处理电路可访问的静态或动态存储器的区域,其被布置为存储一个或多个一维数据阵列(向量)。在示例中一个或多个向量中的每一个均可以被用于向量处理,例如simd处理。在示例中所述多个寄存器中的每一个均可以被划分成多个区域0、...、n。可以并行在上面操作每个寄存器的相同区域,例如向量算术指令可以仅允许存储在第一向量寄存器的区域n中的元素参与与存储在来自所述多个其他向量寄存器的区域n中的元素的运算。在本文描述的示例中,可并行在上面操作的所述寄存器中的每一个的区域被描述为通道,例如每个寄存器的区域0形成单个通道,区域1形成另一个通道等。在示例中所述至少一个长整数操作数被存储在跨越所述多个向量数据存储寄存器的单个通道中,此通道在本文中被描述为公共通道。所述公共通道可以包括多个通道。在另一个示例中所述一个或多个长整数操作数中的每一个均被存储在所述多个通道中的一个或多个(例如跨越所述多个向量存储数据寄存器的通道0、...、n)中。在示例中同时地对所述多个长整数操作数中的每一个执行所述一个或多个算术运算中的每一个。跨越所述多个向量存储寄存器的公共通道的大小是可变的。在示例中所述一个或多个算术运算可以基于长整数操作数中的一个或多个生成结果值,其中对于所述至少一个算术运算,所述处理电路响应于指示所述结果值的目标有效性的可编程有效性数据。如上所述,在一个示例中高精度锚定数由以下一对数(i,a)构成:所述长整数操作数和所述可编程有效性数据,例如所述长整数操作数可以是高精度定点操作数。所述可编程有效性数据可以是较小的锚整数,其表示长二补码整数i的位的权重的值。在示例中所述长整数操作数中的一个或多个中的每一个均具有相同的可编程有效性数据。在一个示例中,所述处理电路可以被布置为从低阶位到高阶位对所述至少一个长整数操作数执行所述一个或多个算术运算。在替代示例中,所述处理电路被布置为从高阶位到低阶位对所述至少一个长整数操作数执行所述一个或多个算术运算。可以按照控制字段中指定的顺序布置所述多个数据存储寄存器。在示例中所述控制字段可以被包含在指令(例如,架构指令)内。在另一示例中,所述控制字段可以被包含在寄存器内。在示例中,可以在前述处理电路上执行方法,所述方法包括对所述至少一个长整数操作数执行所述一个或多个算术运算;其中,所述至少一个长整数操作数被存储在跨越所述多个向量数据存储寄存器的公共通道中。所述方法可以进一步包括对多个长整数操作数执行一个或多个算术运算,其中,所述多个长整数操作数中的每一个均被存储在跨越所述多个向量存储数据寄存器的多个公共通道中。所述方法还可以进一步包括基于所述多个长整数操作数生成结果值,其中对于所述至少一个算术运算,所述处理电路响应于指示所述结果值的目标有效性的可编程有效性数据,其中,所述多个长整数操作数中的每一个均具有相同的可编程有效性数据。在示例中,可以在作为高精度定点操作数的长整数操作数上执行所述方法。在本申请中,单词“被配置为……”用于意味着装置的元件具有能够执行所定义的操作的配置。在此上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,装置可以具有提供所定义的操作的专用硬件,或者处理器或其他处理器件可以被编程为执行功能。“被配置为”不暗示需要以任何方式改变装置元件以便提供定义的操作。尽管已在本文中参考附图详细地描述了本发明的说明性实施例,然而应当理解的是,本发明不限于那些精确的实施例,并且在不脱离如由所附权利要求所限定的本发明的范围和精神的情况下,本领域的技术人员可以在其中实现各种变化、添加和修改。例如,在不脱离本发明的范围的情况下,能用独立权利要求的特征做出从属权利要求的特征的各种组合。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1