CN113454915A - 在锚定数据元素中编码特殊值 - Google Patents
在锚定数据元素中编码特殊值 Download PDFInfo
- Publication number
- CN113454915A CN113454915A CN201980092778.0A CN201980092778A CN113454915A CN 113454915 A CN113454915 A CN 113454915A CN 201980092778 A CN201980092778 A CN 201980092778A CN 113454915 A CN113454915 A CN 113454915A
- Authority
- CN
- China
- Prior art keywords
- anchor data
- data element
- value
- anchor
- bit
- 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.)
- Pending
Links
- 238000012545 processing Methods 0.000 claims abstract description 132
- 230000000295 complement effect Effects 0.000 claims abstract description 76
- 238000007667 floating Methods 0.000 claims description 62
- 238000006243 chemical reaction Methods 0.000 claims description 27
- 230000004044 response Effects 0.000 claims description 14
- 229920006395 saturated elastomer Polymers 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 10
- 230000001419 dependent effect Effects 0.000 claims description 3
- 238000003672 processing method Methods 0.000 claims description 3
- 230000001902 propagating effect Effects 0.000 claims description 3
- 239000013598 vector Substances 0.000 description 101
- 238000007792 addition Methods 0.000 description 68
- 238000000034 method Methods 0.000 description 31
- 230000008569 process Effects 0.000 description 15
- 238000009825 accumulation Methods 0.000 description 14
- 230000035508 accumulation Effects 0.000 description 12
- 230000008901 benefit Effects 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 9
- 238000001514 detection method Methods 0.000 description 8
- 238000013519 translation Methods 0.000 description 8
- 238000013459 approach Methods 0.000 description 7
- 238000002347 injection Methods 0.000 description 7
- 239000007924 injection Substances 0.000 description 7
- 230000009467 reduction Effects 0.000 description 6
- 238000004422 calculation algorithm Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 5
- 230000008030 elimination Effects 0.000 description 5
- 238000003379 elimination reaction Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 241000657952 Elderberry carlavirus E Species 0.000 description 3
- 206010042602 Supraventricular extrasystoles Diseases 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000000644 propagated effect Effects 0.000 description 3
- 230000011664 signaling Effects 0.000 description 3
- 102100041002 Forkhead box protein H1 Human genes 0.000 description 2
- 101710087994 Forkhead box protein H1 Proteins 0.000 description 2
- 230000001154 acute effect Effects 0.000 description 2
- 239000000654 additive Substances 0.000 description 2
- 230000000996 additive effect Effects 0.000 description 2
- 230000001427 coherent effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000008187 granular material Substances 0.000 description 2
- 101150008147 nanB gene Proteins 0.000 description 2
- 238000010926 purge Methods 0.000 description 2
- 230000008672 reprogramming Effects 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 238000004873 anchoring Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000007943 implant Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/485—Adding; Subtracting
-
- 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/487—Multiplying; Dividing
- G06F7/4876—Multiplying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/14—Conversion to or from non-weighted codes
- H03M7/24—Conversion to or from floating-point codes
Abstract
一种装置包括:处理电路,该处理电路用于执行数据处理;以及指令解码器,该指令解码器用于控制处理电路来执行锚定数据处理操作,以生成锚定数据元素。该锚定数据元素具有包括类型信息的编码,该类型信息指示该锚定数据元素是表示二的补码数的位的一部分,位的所述部分对应于可使用该锚定数据元素表示的给定有效值范围;还是表示除二的补码数的位的所述部分之外的特殊值。
Description
背景技术
技术领域
本技术涉及数据处理领域。
技术背景
通常在数据处理系统中使用浮点(FP)表示。浮点数包括有效数和指示该有效数的位的有效值的指数。这允许使用有限数量的位来表示大范围内的数值。然而,浮点算术的问题在于计算通常是非结合性的,这是造成总和问题的事实。具体地,即使在将少量值相加时,也需要担心编程器获得不同的结果。
为了寻求解决结合性问题,已经提出了一种新的数据类型,其被称为高精度锚定(HPA)数。高精度锚定(HPA)数可包括由长二的补码整数i(例如,200位)和小锚整数a组成的对(i,a),该小锚整数表示i的位的权重,通常通过指定i的最小位的有效值。浮点值可转换成HPA形式,然后可以结合性的方式执行相加。
发明内容
至少一些示例提供了一种装置,该装置包括:处理电路,该处理电路用于执行数据处理;以及指令解码器,该指令解码器用于控制处理电路来执行锚定数据处理操作,以生成锚定数据元素;其中:该锚定数据元素具有包括类型信息的编码,该类型信息指示该锚定数据元素是表示二的补码数的位的一部分,位的所述部分对应于可使用该锚定数据元素表示的给定有效值范围;还是表示除二的补码数的位的所述部分之外的特殊值。
至少一些示例提供了一种计算机程序,该计算机程序用于控制主机数据处理装置来提供用于执行指令的指令执行环境;该计算机程序包括:指令解码程序逻辑,该指令解码程序逻辑用于解码目标代码的程序指令,以控制主机数据处理装置来执行数据处理;所述指令解码程序逻辑包括锚定数据处理程序逻辑,该锚定数据处理程序逻辑用于控制主机数据处理装置来执行锚定数据处理操作,以生成锚定数据元素,其中:该锚定数据元素具有包括类型信息的编码,该类型信息指示该锚定数据元素:是表示二的补码数的位的一部分,位的所述部分对应于可使用该锚定数据元素表示的给定有效值范围;还是表示除二的补码数的位的所述部分之外的特殊值。
计算机程序可存储在存储介质上。存储介质可以是非暂态存储介质。
至少一些示例提供了一种数据处理方法,该数据处理方法包括:解码一个或多个指令;以及响应于所解码的指令,控制处理电路来执行锚定数据处理操作,以生成锚定数据元素,其中:该锚定数据元素具有包括类型信息的编码,该类型信息指示该锚定数据元素:是表示二的补码数的位的一部分,位的所述部分对应于可使用该锚定数据元素表示的给定有效值范围;还是表示除二的补码数的位的所述部分之外的特殊值。
本技术的另外的方面、特征和优点将从结合附图阅读的示例的以下描述中显而易见。
附图说明
图1示意性地示出了数据处理装置;
图2示意性地示出数值的不同表示;
图3示意性地示出了双精度浮点值和高精度锚(HPA)值之间的关系的示例;
图4示出了冗余HPA值的示例,该冗余HPA值表示使用冗余表示的数值,该冗余表示包括具有重叠有效值的多个N位部分;
图5在一个示例中示意性地示出了可如何将HPA整数存储在跨多个向量寄存器的选定通道内;
图6是示意性地示出根据一个示例性布置的可如何将浮点数转换成HPA形式并处理这些浮点数的框图;
图7示意性地示出了可在一个示例中使用的元数据的形式;
图8是更详细地示出在一个示例中可被设置成与每个通道相关联的转换和处理电路的示意图;
图9示出了锚定数据元素的编码,该锚定数据元素包括指示该锚定数据元素是表示二的补码数的位的一部分还是特殊值的类型信息;
图10示出了类型信息的编码;
图11示出了基于第一操作数和第二操作数的类型信息来设置结果锚定数据元素的类型信息的不同结果;
图12示出了用于实现包括类型信息的两个锚定数据元素的相加的电路逻辑的示例;
图13示出了重叠传播指示的示例;
图14示出了重叠清除指示的示例;并且
图15示出了可使用的模拟器示例。
具体实施方式
如前所述,浮点算术的问题在于计算通常是非结合性的,这是造成总和问题的事实。例如,当将若干浮点值相加时,每次将另一个值加到先前相加的结果时,将结果四舍五入并正规化,这意味着总体结果根据这些值相加的顺序而有所不同。这使得难以并行处理浮点算术,因为除非以完全相同的顺序完成,否则总和是不可再现的。为了生成可再现的结果,通常必须顺序地执行一系列相加或相减,这可使浮点算术相对较慢。
因此,编程器使用比它们所需更高的准确度,以希望避免此类不同的结果。因此,编程器不能容易地并行处理代码,因为除非以完全相同的顺序计算,否则总和是不可再现的。
该问题对于其中程序可能需要将数百万个值相加的高性能计算(HPC)尤其严重。编程器想要并行处理这些问题,但缺乏可再现性使得难以进行调试。即使对那些机器的重新编程完成得很完美,每个不同的机器配置也将产生不同的答案。
如上所述,为了寻求解决结合性问题,已经提出了一种新的数据类型,其被称为高精度锚定(HPA)数。HPA数可包括由长二的补码整数i(例如,200位)和小锚整数a组成的对(i,a),该小锚整数表示i的位的权重,通常通过指定i的最小位的有效值。该对一定程度上类似于FP数的有效数值和指数值,但不同之处在于长整数i未正规化并且通常远大于FP有效数,以及锚值a对于HPA操作中的所有操作数是固定的。将FP数相加可导致指数改变,但将HPA数相加不改变锚。
作为琐细的示例,考虑由10位i和锚值a=-4组成的HPA表示。该格式的一些值在表1中给出。
i(二进制) | 值(十进制) |
00000_00001 | 0.0625 |
00000_01000 | 0.5 |
00000_11000 | 1.5 |
00001_00000 | 2.0 |
00100_11000 | 9.5 |
11111_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寄存器中表示HPA(锚定数据)值(或长整数)的一种方法可以是将该HPA值的多个HPA(锚定数据)元素分配给单个SIMD寄存器内的相应向量通道。另选地,如下所述,另一种方法可以是:可将HPA值的相应锚定数据元素分配给多个不同SIMD寄存器内的对应向量通道,使得总体锚定数据值的每个部分处于不同向量寄存器的对应位置中,并且单个向量寄存器可保持多个锚定数据元素,其中每个锚定数据元素形成不同锚定数据值(HPA值)的一部分。
在下面讨论的技术中,装置可具有处理电路和指令解码器,该处理电路用于执行数据处理,该指令解码器用于控制该处理电路来执行锚定数据处理操作以生成锚定数据元素,其中该锚定数据元素具有包括类型信息的编码。类型信息指示锚定数据元素是表示二的补码数的位的一部分(其中位的该部分对应于可使用该锚定数据元素表示的给定有效值范围),还是表示除二的补码数的位的该部分之外的特殊值,该部分在该给定有效值范围内。提供可表示除二的补码数的一部分之外的特殊值的编码可用于使得锚定数据格式能够表示浮点数的特殊值,诸如非数字(NaN)或无穷大。另外,特殊值可用于表示以下情况:针对锚定数据元素假设的给定有效值范围不适于表示由处理电路执行的处理操作产生的数字。
用于处理特殊值的一种另选方法可以是在以下事实时进行编码:锚定数据元素表示与锚定数据元素本身分开的、在单独的寄存器内或在限定锚信息或锚元数据的寄存器内的特殊值,该锚信息或锚元数据识别可使用锚定数据元素或关于锚定数据元素的编码方式的其他信息来表示的给定有效值范围。然而,该方法的问题在于,这可能需要处理电路在执行锚定数据处理操作时更新两个单独的目的地寄存器。这对于一些微架构具体实施可能是不期望的,因为可能需要为处理电路提供两个单独的寄存器写入端口。指令集架构中可能存在需要更新两个或更多个目的地寄存器的相对较少指令,因此许多微架构具体实施可仅提供一个寄存器写入端口。因此,避免需要提供第二寄存器写入端口来支持特殊值的编码可有助于减小电路面积和功率消耗。另选地,即使装置具有多于一个寄存器写入端口,当处理锚定数据处理操作时,第二写入端口也可用于响应于不同指令而执行不同的寄存器写入,而不是用于与第一寄存器写入端口相同的指令。因此,可在不需要使用第二寄存器写入端口的情况下表示锚定数据值的特殊值,这可通过使得可用寄存器写入端口能够用于处理附加指令来节省电路面积和/或实现更好的性能。
处理电路可将类型信息存储在与锚定数据元素相同的寄存器中。
在一个示例中,锚定数据处理操作可包括浮动到锚定转换操作,以将浮点值转换成锚定数据元素。特殊值的编码对于浮动到锚定转换操作可能特别有用,因为这可有助于容纳浮点数的特殊值。例如,当待转换的浮点值表示特殊数字(诸如,正无穷大或负无穷大或NaN)时,处理电路可随后生成具有指示锚定数据元素表示特殊值的类型信息的锚定数据元素。该类型信息可区分由浮点值表示的特殊数字是正无穷大、负无穷大还是NaN。因此,该类型信息可具有被分配用于表示正无穷大、负无穷大和NaN的情况中的每一种情况的不同编码。
在浮动到锚定转换操作中,处理电路可基于指示锚定数据元素的给定有效值范围的锚元数据来生成锚定数据元素。例如,锚定数据元素可指定该锚定数据元素的最低有效位的有效值(其中该有效值指示由该最低有效位表示的二的幂),并且可提供指示由锚定数据元素表示的二的补码数的该部分的宽度(位的数量)的参数。浮动到锚定转换操作可使用该元数据基于所提供的浮点数来确定如何设置锚定数据元素内的位的值。锚元数据还可指示其他属性,诸如如下所述的多个重叠位和/或通道信息,该通道信息针对由一个或多个锚定数据元素构成的锚值指示锚定数据元素相对于其他元素的相对位置,例如锚定数据元素是表示锚定数据值的最高有效元素、最低有效元素还是中间元素。这可允许锚定数据值使用多个向量元素来表示长二的补码数。
上面的示例讨论了单个数据元素的生成,但是应当理解,对锚定数据元素的操作可以向量指令实现,其中可响应于一个指令而执行多个处理通道,每个处理通道基于作为输入提供的对应操作数来生成相应的锚定数据元素。对于浮动到锚定转换操作,可在每个通道中提供相应的浮点值,并且基于锚元数据的向量来将该相应的浮点值转换成相应的锚定数据元素。对于如下所述的加法运算,可在向量运算中将多对独立的相应锚定数据元素相加。如下所述,可能有用的是,将给定锚定数据值的相应锚定数据元素分散在多个不同向量寄存器中的对应位置处的对应数据元素上。然而,也可以在单个向量寄存器的相应向量通道中表示单个锚定数据值的相应元素。
在一些示例中,类型信息可指定锚定数据元素是否为饱和类型的锚定数据元素。饱和类型的锚定数据元素可以是取决于先前的锚定数据处理操作或先前的浮动到锚定转换操作的锚定数据元素,该先前的锚定数据处理操作导致对应的锚定数据元素上溢出,针对该先前的浮动到锚定转换操作,被转换的浮点值落在包括一个或多个锚定数据元素的锚定数据值的允许数字范围之外。除了如上所述表示正无穷大、负无穷大或NaN的特殊值之外,还可支持饱和类型,但是与这些特殊值不同,该饱和类型不具有浮点表示的类似特殊值。饱和类型可用于指示针对锚定数据值限定的有效值范围不适用于容纳锚定数据处理操作的所需输入的情况。例如,如果与锚定数据值相关联的元数据限定特定数字范围,但是随后提供浮点值作为输入(在该范围之外),则无法使用由锚元数据限定的有效值范围充分表示处理该浮点值的正确数字结果,并且饱和类型的锚定数据元素可用于指示这一点。
因此,在一个示例中,如果执行浮动到锚定转换操作以将浮点值转换成锚定数据元素,则处理电路可将锚定数据元素的信息类型设置为在以下情况中的一种情况下指示饱和类型:所述锚定数据元素将表示包括一个或多个锚定数据值的锚定数据值的最高有效元素,并且将浮点值表示为二的补码数将需要比可使用所述锚定数据元素表示的给定有效值范围具有更大有效值的至少一个位;或者所述锚定数据元素将表示包括一个或多个锚定数据值的锚定数据值的最低有效元素,并且将浮点值表示为二的补码数将需要比可使用所述锚定数据元素表示的给定有效值范围具有更低有效值的至少一个位。
因此,然而,如果被转换的浮点值表示特殊数字,则锚定数据值可被编码为如上所述表示正无穷大、负无穷大或NaN中的一者的特殊值,如果事实上浮点值没有映射到在可使用锚定数据元素表示的范围内的二的补码数是由于不适当地设置了关于该锚定数据元素的范围限定信息,则替代地可使用饱和类型。区分开饱和类型与其他类型的特殊值可用于使得软件代码能够识别操作序列失败的原因,该操作序列包括对锚定数据值的处理。
对于被指定为饱和类型的锚定数据元素,类型信息的编码可能无法区分该锚定数据元素是表示正值还是负值。相比之下,对于无穷大,可分别为正无穷大和负无穷大提供不同类型的编码。这认识到,当限定锚定数据值的可允许范围的锚元数据已被不适当地设置成使得发生饱和时,知道该值为正还是为负并不重要,因为在这些情况下,很可能将可能稍后使用不同的元数据重新运行代码。通过提供不能区分被标记为饱和类型的正值和负值的编码,这可节省的一些编码空间(这样可实现锚定数据元素的更有效编码),并且允许保留更多数量的位以用于表示所表示的二的补码数的位。
处理电路可具有加法电路以执行两个锚定数据元素的相加,从而生成结果锚定数据元素。如上所述,在一些情况下,这可被实现为向量运算,使得可将第一锚定数据元素的向量和第二锚定数据元素的向量相加,其中响应于向量指令而执行相应向量内的对应位置处的元素的多次独立相加,以生成包括多个结果锚定数据元素的结果向量。然而,也可以实现标量相加指令,该标量相加指令执行两个锚定数据元素的单次相加以生成结果锚定数据元素。
当执行两个锚定数据元素的这种相加时,有时可能发生上溢出。例如,在生成将表示锚定数据值的最高有效元素的结果锚定数据元素的相加中,如果被相加的两个锚定数据元素的总和将需要比可由锚元数据限定的允许有效值范围内的锚定数据值表示的最高位更高有效的至少一个位,则可能发生上溢出。如果在相加中生成结果锚定数据元素时发生上溢出,其中该结果锚定数据元素是锚定数据值的最高有效元素,则加法电路可生成具有指定结果锚定数据元素是饱和类型的类型信息的结果锚定数据元素。
锚定数据元素的类型信息可以多种方式进行编码。然而,在一个示例中,锚定数据元素可具有编码,其中当该锚定数据元素的预先确定位具有第一值时,该锚定数据元素表示二的补码数的位的该部分,而当该锚定数据元素的预先确定的位具有第二值时,该锚定数据元素表示特殊值。例如,预先确定位可以是锚定数据元素的最高有效位。因此,这可有效地解码,因为解码器可从单个位查核是否需要检查锚定数据元素的任何其他位来识别所表示的特定形式的特殊值,或者该元素是否简单地表示二的补码数的不是特殊值的一部分。例如,在预先确定位具有第二值的情况下,至少一个另外的位可表示所表示的特殊值的特定类型。另一方面,在预先确定位具有第一值的情况下,该至少一个另外的位可重复用于表示二的补码数本身的该部分的一部分,或表示用于容纳来自锚定数据元素的一部分的进位的至少一个重叠位,该锚定数据元素确实表示二的补码数的一部分。这提供了特别有效的编码,因为在元素不表示特殊值的更常见的情况下,用于编码特定类型的特殊值的位可重复用于其他目的。
一般来讲,在给定锚定数据处理操作中,当输入锚定数据元素具有等于第二值的预先确定位时,处理电路可生成具有等于第二值的预先确定位的对应结果锚定数据元素。因此,预先确定位在以下意义上可能是粘滞的:一旦在给定的一系列处理操作中被设置,在后续操作中生成的对应锚定数据元素就继续保留预先确定位等于第二值,以标记:在该操作序列中的某处已遇到为特殊数字的浮点值,或者锚定数据处理操作的结果不能被准确地表示在由用于给定锚定数据元素的锚元数据限定的给定有效值范围内。
更一般地,在其中输入锚定数据元素由类型信息指示为特殊数字的给定锚定数据处理操作中,对应的结果锚定数据元素也可用指定结果锚定数据元素表示特殊值的类型信息来指示。需注意,针对结果指示的特殊值的特定形式可能并不总是与针对输入锚定数据元素指示的特殊值的形式相同。例如,在两个锚定数据元素相加时,当这两个锚定数据元素的类型信息指示一个锚定数据元素表示正无穷大并且另一个锚定数据元素表示负无穷大时,结果锚定数据元素可生成有指定结果表示NaN的类型信息。
在一些示例中,锚定数据元素可使用冗余表示来表示,其中可在该元素内分配多个重叠位以容纳由在数据元素的较低有效部分内执行的相加产生的进位。这可有助于减少一系列锚定数据处理操作导致锚定数据元素的上溢出的可能性。该表示在以下意义上可能是冗余的:可能存在由多个锚定数据元素形成的锚定数据值的多个不同位模式,这些锚定数据元素可全部利用具有重叠位和非重叠位的不同组合来表示二的补码数的相同数值。下面提供更多信息。
因此,一般来讲,锚定数据元素可包括N位值,该N位值包括V个重叠位和W个非重叠位。重叠位和非重叠位的特定数量可以是固定的或可以是可变的,例如通过指定上述锚元数据中的信息。
在用于将浮点值转换成锚定数据元素的浮动到锚定转换操作中,当浮点值表示除特殊数之外的数字并且该数字在锚定数据元素形成其一部分的锚定数据值的允许数字范围内时,处理电路可将锚定数据元素的W个非重叠位设置为表示对应于浮点值的二的补码数的位的一部分。相比之下,锚定数据元素的V个重叠位可被设置为W个非重叠位的符号扩展。因此,初始重叠位可被设置为符号扩展,例如,全为零或全为一。然而,当由浮动到锚定转换操作生成的锚定数据元素随后在一系列相加中被处理时,这可导致多个进位进入重叠位中。为了计算出由总体锚定数据值以非冗余表示表示的二的补码数,可提供重叠传播操作以将由一个锚定数据元素的重叠位表示的进位传播到锚定数据值的下一个最高锚定数据元素的非重叠位中。
在一些示例中,N-V-W可大于0。也就是说,重叠位和非重叠位一起不占用锚定数据元素的全部N个位。这是因为至少一个其他位可用于表示指示元素是否表示特殊值的类型信息。
如上所述,可周期性地执行重叠传播操作,以将由重叠位表示的进位传播到下一个最高数据元素中。可提供重叠传播指令来控制处理电路执行重叠传播操作。响应于重叠传播指令,处理电路可将第一锚定数据元素的V个重叠位与第二锚定数据元素的W个非重叠位对准,并且将对准的重叠位和非重叠位相加以生成第二锚定数据元素的更新值。同样,这可作为向量运算来执行,其中响应于单个指令而对相应的一对第一锚定数据元素和第二锚定数据元素执行多个通道的重叠传播。
重叠传播操作可考虑在第一锚定数据元素和第二锚定数据元素中指定的类型信息,以确定如何为第二锚定数据元素生成更新的值。当第一锚定数据元素和第二锚定数据元素中的一者具有指定其表示上述特殊值类型中的一种类型的类型信息时,处理电路可保留第二锚定数据元素的先前值。例如,可抑制对第二锚定数据元素的更新,而不加上来自第一锚定数据元素的对准的重叠位。这确保了如果先前执行的锚定数据处理操作序列产生特殊值,则重叠传播操作的执行不会覆写该类型信息,并且事实上,尽管执行了重叠传播操作,也可从最终结果中识别出遇到了特殊值。这可使得编写或编译代码以执行锚定数据处理操作更简单,因为这意味着是否不需要经常查核特殊值。另选地,在第一锚定数据元素是特殊值的情况下,可更新第二锚定数据元素的类型信息以匹配第一锚定数据元素的类型信息。这将该类型信息传播到HPA值的较高元素,这可简化在执行一系列锚定数据处理操作之后对类型信息的查核。
另一方面,当对准的重叠位和非重叠位的相加导致第二锚定数据元素的上溢出时,处理电路可将第二锚定数据元素的类型信息设置为指示饱和类型值。此处,如果已存在来自最高有效重叠位的上溢出,则认为发生上溢出,如果不存在从非重叠位到重叠位的上溢出,则认为没有发生上溢出。在针对重叠传播操作的相加导致来自最高有效重叠位的上溢出的情况下,这意味着无法再在第二锚定数据元素中正确地表示正确结果,因此可指定饱和类型以启用后续指令来检测什么出错了。例如,这可以是软件代码应更频繁地触发重叠传播操作的标志。
在程序代码内使用时,重叠传播指令的一种用例可以是将同一锚定数据值的一对相邻锚定数据元素分别指定为第一锚定数据元素和第二锚定数据元素(其中第二锚定数据元素是表示该锚定数据值的比第一锚定数据元素更高有效部分的元素)。此处,该指令可用于将进位从同一锚定数据值的较低元素传播到下一个最高元素中。
然而,另一种用例可以是第一锚定数据元素包括给定锚定数据值的最高有效锚定数据元素,并且第二锚定数据元素包括“空”锚定数据元素,该“空”锚定数据元素不是与第一锚定数据元素相同的锚定数据值的一部分。这可用于有效扩展锚定数据值的范围以包括附加元素,从而容纳来自先前表示的锚定数据元素的顶部元素的进位位,这在随后将包括第一锚定数据元素的锚定数据值加到另一个锚定数据值的情况下可能是有用的,该另一个锚定数据值包括比第一锚定数据元素的位具有更大有效值的位。
应当理解,这些只是可如何使用重叠传播指令的两个示例-编程器或编译器也可找到其他用途。
处理电路还可响应于重叠清除指令而将目标锚定数据元素的重叠位清除为零。一旦重叠传播指令已将那些重叠位加到下一个最高锚定数据元素的非重叠位中,就可使用该指令来清除重叠位。将重叠传播和清除操作分成两个单独的指令可用于避免需要更新两个目的地寄存器的任一个指令,这具有上述优点。其他另选的架构可选择将这些指令组合成单个指令,该单个指令可响应于重叠传播指令本身而清除第一锚定数据元素的重叠位。也清除第一锚定数据元素的重叠位的这种组合重叠传播指令也可被视为重叠清除指令的示例。
响应于重叠清除指令,当目标锚定数据元素具有指定其表示特殊值的类型信息时,处理电路可保留目标锚定数据元素的先前值,即,不清除重叠位。同样,这使得能够保留类型信息。
在重叠清除指令的一些示例中,除目标锚定数据元素(可预期其在程序中对应于重叠传播指令所作用于的该对第一元素和第二元素中的最低有效元素)之外,该重叠清除指令还可指定第二锚定数据元素(预期其对应于该对中的较高元素),并且如果第二锚定数据元素的类型信息指示其是特殊值,则处理电路也可保留目标锚定数据元素的先前值。因此,即使重叠位本身的清除不依赖于第二锚定数据元素,但是考虑到该第二锚定数据元素的类型信息可允许重叠清除指令以与重叠传播指令类似的方式继续,使得在那些元素中的任一个元素指定该元素表示特殊值的情况下,同一锚定数据值的给定的一对较低锚定数据元素和较高锚定数据元素没有变化。
如上所述,当不表示特殊值时,给定锚定数据元素表示与可使用锚定数据元素表示的给定有效值范围对应的位的一部分。此处,术语有效值是指由给定位位置表示的二的特定幂。例如,二的补码数的表示24的位被认为比二的补码数的表示23的位具有更大有效值。即,二的补码数的最高有效位具有最大有效值,并且最低有效位具有最低有效值。
现在将参考附图描述特定示例。
下面讨论高精度锚(HPA)格式。关于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中,这些专利申请的内容全文以引用方式并入本文。
浮点数
浮点(FP)是使用少量位来取实数的近似值的可用方式。IEEE 754-2008 FP标准为FP数提出了多种不同格式,其中一些为二进制64(也称为双精度或DP)、二进制32(也称为单精度或SP)和二进制16(也称为半精度或HP)。数字64、32和16是指每种格式所需的位的数量。
表示
FP数非常类似于理科班中教的“科学记数法”,其中我们写-2.0×106,而不是负的二百万。该数字的部分为符号(在这种情况下为负)、有效数(2.0)、指数的底数(10)和指数(6)。所有这些部分在FP数中具有类似物,但存在差异,其中最重要的是组成部分被存储为二进制数,并且指数的底数总是2。
更确切地说,FP数由符号位、一定数量的偏移指数位和一定数量的小数位组成。具体地,DP、SP和HP格式由以下位组成:
格式 | 符号 | 指数 | 小数 | 指数偏移 |
DP[63:0] | 63 | 62:52(11位) | 51:0(52位) | 1023 |
SP[31:0] | 31 | 30:23(8位) | 22:0(23位) | 127 |
HP[15:0] | 15 | 14:10(5位) | 9:0(10位) | 15 |
表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.小数(1.fraction)×2e
其中e为根据由偏移指数计算的真指数。术语1.小数被称为有效数,并且1不作为FP数的一部分存储,而是从指数推断。除零和最大指数之外的所有指数指示形式1.小数的有效数。指数零指示形式0.小数的有效数,以及对于给定格式等于1-偏移的真指数。这种数字被称为次正规的(在历史上这些数字被称为非正规的,但现代用法优选术语次正规的)。
指数和小数两者均等于零的数字为零。
下表具有HP格式的一些示例性数字。这些条目为二进制的,其中添加‘_’字符以增加可读性。需注意,次正规条目(表中的第4行,具有零指数)产生与前一行中的正规条目不同的有效数。
符号 | 5位指数 | 10位小数 | 11位有效数 | 值 |
0 | 01111 | 00_0000_0000 | 100_0000_0000 | 1.0×2<sup>0</sup> |
1 | 01110 | 10_0000_0000 | 110_0000_0000 | -1.1×2<sup>-1</sup> |
0 | 00001 | 10_0000_0000 | 110_0000_0000 | 1.1×2<sup>-14</sup> |
0 | 00000 | 10_0000_0000 | 010_0000_0000 | 0.1×2<sup>-14</sup> |
1 | 11111 | 00_0000_0000 | -无穷大 | |
0 | 11111 | 00_1111_0011 | NaN |
表3
FP具体实施的大部分复杂性归因于次正规数,因此这些次正规数通常由微码或软件处理。一些处理器在硬件中处理次正规数,从而与软件或微码具体实施相比,将这些操作加速10倍至100倍。
整数、固定点、浮点
处理符号的FP方式被称为符号量值,并且其不同于将整数存储在计算机中的常见方式(二的补码)。在符号量值表示中,相同数字的正版本和负版本仅在符号位上有所不同。由符号位和3个有效数位组成的4位符号量值整数将如下表示加一和减一:
+1=0001
-1=1001
在二的补码表示中,(n+1)位二进制整数表示数值i-S*2n,其中i为由n+1位值的低阶n位表示的n位整数,并且S为(n+1)位值的最高有效位的位值(0或1)。因此,与对于符号位修改值的所有其他位的符号的符号量值数而言不同,对于二的补码值,最高有效位被负加权,并且所有其他位被正加权。因此,4位二的补码整数将如下表示加一和减一:
+1=0001
-1=1111
该二的补码格式对于有符号整数实际上是通用的,因为它简化了计算机算术。
固定点数看起来完全像整数,但实际上表示具有一定数量小数位的值。传感器数据通常为固定点格式,并且存在广泛采用FP之前编写的大量固定点软件。固定点数处理起来非常繁琐,因为编程器必须跟踪“二进制点”,即数字的整数部分与小数部分之间的分隔符,并且还必须不断地移位数字以将位保持在正确的位置。FP数不具有此困难,因此希望能够在固定点数与FP数之间转换。能够进行转换还意味着我们仍然能够使用固定点软件和数据,但我们在编写新软件时不限于固定点。
四舍五入FP数
IEEE-754标准要求计算大多数FP运算,就好像该运算是以无界范围和精度进行的那样,然后四舍五入以拟合FP数。如果该计算恰好匹配FP数,则始终返回该值,但通常该计算得出位于两个连续浮点数之间的值。四舍五入是选取应返回两个连续数字中的哪个数字的过程。
存在多种四舍五入的方式,这些方式被称为四舍五入模式;其中的六种模式为:
表4
该定义未告知我们如何以任何实际方式四舍五入。一种常见的具体实施是进行运算,查看截断值(即,拟合FP格式的值)以及所有剩余位,然后在某些条件成立的情况下调整该截断值。这些计算均基于:
L-(最低位)截断值的最低有效位
G-(保留位)下一个最高有效位(即,未包括在截断中的第一位)
S-(粘滞位)不是截断的一部分的所有剩余位的逻辑OR
考虑到这三个值和截断值,我们可始终根据下表计算正确四舍五入的值:
模式 | 对截断值的改变 |
RNE | 如果(L&G)|(G&S),则递增 |
RNA | 如果G,则递增 |
RZ | 无 |
RP | 如果为正和(G|S),则递增 |
RM | 如果为负和(G|S),则递增 |
RX | 如果G|S,则设置L |
表5
例如,考虑两个4位有效数相乘,然后四舍五入为4位有效数。
符号1=1011(十进制11)
符号2=0111(十进制7)
相乘得到
符号1×符号2=1001_101(十进制77)
L Gss
截断的4位结果的最低有效位被标记为L,下一位被标记为G,并且S为被标记为s的剩余位的逻辑OR(即,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、保留位和粘滞位,并且最终使L、G和S为反转并加1之后的lsb、保留位和粘滞位。
如果S0为零,则对Si有贡献的位全为一,因此S(通过将1加到那些Si位而获得的)也为零。如果S0不为零,则Si不全为一,因此S为非零。因此在所有情况下,S0=S。
如果G0为零,则Gi为1,并且G也为一,除了存在来自S位的进位时的情况之外,这仅在S0为零时发生。如果G0为1,则Gi为零,并且同样G也为一,除了存在来自S位的进位时的情况之外,这仅在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=220
245+(-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。数字相加和相乘是可交换的。
由于IEEE NaN规则,不存在乘法单位元或加法单位元。一和零用作数值的单位元。
考虑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值的可编程有效值的元数据,则仍然可表示等效浮点值的全部有效值范围,但不需要提供非常宽的加法器(例如,为了加在可由双精度浮点值表示的整个范围内的两个二的补码数,将需要2098位加法器),相反地,可编程有效值使得较小加法器能够聚焦于较大范围内的可编程位有效值的特定窗口。在实践中,大多数计算不需要可用于双精度浮点的整个有效值范围。例如,亚原子问题可能累加非常小的值,并且天文学复杂功能可能累加非常大的值,但是将质子的宽度加到银河系之间的距离通常不是有用的。即使对于高性能计算,大多数累加也在有限范围内发生。
通常,写入程序的编程器将知道有用结果可能落入的预期值范围(这取决于应用)。编程器可确定针对特定总和的所有数据将具有小于260的量值,并且具有低于2-50的量值的值将不会以任何有意义的方式影响总和,因此,在这种情况下,通过将使用总体数据宽度为128位的HPA格式的数据与将最低有效位的有效值指定为-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数作为整体表示P位值,该P位值小于存储位的总数量。如果对于每个N位部分(除顶部部分之外),V是相同的,则更一般地,如果不同的通道可具有不同数量的重叠位,则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)次相加将是可能在通道之间生成进位的首次相加(因为顶部重叠位是符号位,所以当存在来自第二最高有效重叠位的正上溢出或负上溢出时发生通道上溢出,这在已执行最小2V-1次进一步相加之后,在从所有位均为0的RHPA数开始时发生)。例如,如果V=14,则这将允许在存在来自单个通道的上溢出的任何风险之前将至少8191个RHPA数加到累加器(即,总共加8192个值)。这对于通常将许多输入值相加的高性能计算领域特别有用。在实践中,由于不是每次相加都将导致到上溢出部分中的进位,有时可能有超过2V-1次累加,而不没有来自N位部分的顶部位的上溢出。
偶尔,如果已经执行了足够相加而导致来自N位通道的顶部位上溢出的风险(或实际上溢出了),则可执行重叠减少操作来将给定RHPA值转换成第二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整数被认为由四个部分组成,一个部分被存储在向量寄存器Z0、Z1、Z2和Z3中的每个向量寄存器中。此外,所有部分都存储在共用通道102内。通过以这种方式存储HPA数的整数,这产生了许多显著的益处。例如,整数的大小不受单个向量寄存器的宽度的约束。此外,可避免向量寄存器的低效利用,因为可将多个HPA整数存储在跨各种向量寄存器的不同通道中,其中这些整数值则能够以SIMD方式并行操作。例如,考虑图5,如果图5所示的向量寄存器中的每个向量寄存器将提供16个通道,则16个HPA数可存储在四个向量寄存器Z0至Z3中,每个HPA数占用一个不同的通道。因此,可以看出,该方法显著改善了可伸缩性,并且提供了向量长度无关的技术。因此,这允许在各种不同的系统中采用该技术,每个系统可使用不同大小的向量寄存器来操作。因此,存在针对HPA值使用这种存储技术将产生显著的性能益处的许多应用,但一个示例与采用ArmLimited提出的可伸缩向量扩展(SVE)的系统相关联。
Arm Limited已将可伸缩向量扩展(SVE)宣布为其64位ISA,目标是科学HPC应用。虽然SVE当前不包括HPA支持,但其继续发展,并且对其指令集的一些适度添加将实现非常高的HPA性能。SVE的“可伸缩”部分是指其不需要对于所有具体实施为相同的向量长度:SVE向量可在硬件中实现为64位通道对的任意倍数,从128位到2048位。小芯片可能仅实现128位向量,而超级计算机可能实现1024或甚至2048位向量。在单个SVE寄存器内保持200位整数在128位具体实施中将是不可能的,并且在2048位具体实施中是浪费的,但是保持跨越这些寄存器中的4个寄存器的一定数量的200位整数充分利用了SVE的可伸缩性,并且在从小到大的任何硬件具体实施上效果良好。SVE还允许编程器根据需要使用更短或更长的整数:100位整数可适合在2个向量寄存器的对应通道中,并且500位整数可适合在10个向量寄存器的对应通道中。
出于性能和面积原因,SVE执行64位通道内的算术。我们建议通过将大的i个HPA数分解为较小的冗余块来进行HPA加法。每个64位通道将保持i的指定部分(比如p=50位,但这可以是可编程的),其中剩余的64-p位用于将进位保持在通道内。这些剩余位被称为“重叠”位,因为它们具有与下一个最高有效通道的lsb相同的数值权重。通道内的加法仅为正规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.0110 1011 1010 0010 1111 011×260
FP32有效数,f[23:0]=1 0110 1011 1010 0010 1111 011
HPA数的部分1将具有经调整部分锚=50,并且如下进行计算:i[1]=左移位(指数-23)的f[23:0]-部分锚=37-50=-13个位置(-ve左移位+ve右移位->i[1]={{14 0’s},{39 0’s},f[23:13]=1 0110 1011 10})
(将指数调整23考虑到以下事实:浮点值的指数表示隐含小数点在23位小数的最高有效位左侧的有效值,而锚表示小数的最低有效位的有效值)。
HPA数的部分0将具有经调整部分锚=0,并且如下进行计算:i[0]=左移位(指数-23)的f[23:0]-部分锚=37-0=37个位置->i[1]={{140’s},f[12:0]=10 0010 1111011,{370’s}}
这得到如下的HPA形式:
表7
一般来讲,将HPA结果正确四舍五入成单个FP结果必须是顺序过程,需要逐通道传播进位和四舍五入信息。这将需要多个循环,但对于每次累加而言这必须仅发生一次。另选地,如果p≤53,占用若干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所述,为了实现向量长度无关,HPA数可跨多个SVE寄存器进行布局。每个寄存器可保持不同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算术与在其自身的64位通道内累加的FP数的向量一起高度并行处理。此外,从存储器加载大量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位宽,其中锚范围类似于IEEE FP32,使得HPA累加器通常将包括不超过四个部分。然后,可将用于遍历4个64位部分的200位累加器的HPA元数据组织为4个16位字段,如图7所示。
具体地,可指定源寄存器160,其中在每个通道(例如,64位)内提供四个元数据部分,如附图标号162、164、166、168所示。然后,每个元数据部分可为累加器结果的相关联部分提供元数据。如图7中的扩展区段所示,有效值(经调整锚)信息可包含在例如使用9位的第一子部分192中,而重叠信息可被捕获在例如包括5位的第二子部分194中。如果需要,还可将通道类型信息捕获在第三子部分196中,以识别相关联部分是顶部部分(即,表示最高有效位)、底部部分(表示最低有效位)还是中间部分。
在任何特定通道内,累加的HPA值将全部被布置成具有相同的锚,因此用于通道的元数据将同样适用于在通道内处理的所有HPA值。
原则上,可为通道中的每个通道指定不同元数据,使得在一个通道中处理的值不必具有与在另一个通道中处理的值相同的锚。然而,通常情况是在所有通道内处理的所有值将被布置为具有相同的锚值,并且在这种情况下,64位元数据可被存储并复制在整个向量寄存器160上。这使得针对通道中的每个通道产生的各种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。OR函数220对指数的位执行OR运算,以便生成有效数的最高有效位,然后将该最高有效位预设为小数位216以便形成有效数。具体地,如果指数为非零,则这指示浮点数是正规浮点数,并且因此有效数的最高有效位是逻辑一值。然而,如果指数的所有位均为零,则这指示次正规值,并且因此有效数的最高有效位应被设置为零。
减法块222被布置成例如使用先前参考表7所述的技术从指数214减去有效值206(根据指数偏移量和小数字长的需要进行调整)以便产生移位量,然后将该移位量用于控制移位电路224以将浮点有效数移位适当的量(根据需要执行右移位或左移位)。
AND电路226然后接收重叠信息204,并且将来自移位电路的输出屏蔽指定数量的重叠位(等于64-P)。此后,如果浮点数为负(如符号值212所指示的),则XOR电路228对来自AND电路226的输出执行二的补码函数。此时,与具有给定有效值和重叠量的特定HPA部分有关的输入浮点数的位可用作二的补码数,并且可作为一个输入提供给加法器电路230(如果浮点操作数为负,则加法器也取为1的进位值)。因此,可以看出,相关HPA部分可从输入浮点值“动态地”生成,然后经受合适的处理操作以便生成对应的结果部分。
在所示的示例中,假设处理操作是选择性累加操作。具体地,AND电路240可用于选择性地将保持在寄存器235中的当前值作为第二输入传播回加法器230,从而允许先前结果部分与从转换电路输出的输入操作数部分累加,以便产生存储在寄存器235中的更新结果部分。以所示方式结合64位加法器和寄存器支持背对背HPA转换和累加指令的流水线执行。
存在可触发图8所示的电路来执行上述运算的多种方式,但在一个实施方案中,使用单个指令来发起图8的上述函数性。这种指令可被称为FP至HPA转换和相加指令。
在一个示例中,FP至HPA转换和相加指令(mnemonic“FCVTH{A}”,其中{A}表示可选累加)的操作码包括针对FP源寄存器、元数据寄存器、目的地累加器寄存器的标识符,以及用于选择元数据寄存器的子字段的索引。这非常符合SVE ISA设计原理,该SVE ISA设计原理是操作码参考不超过三个向量寄存器。
可构建实现其他重要HPA操作的现有SVE指令的短序列。
周期性地,重要的是消除HPA数的冗余以便避免部分上溢出。这可通过简单地将较低HPA部分的重叠区域中的累加进位位加到下一个最高HPA部分的LSB来实现。在SVE中,这可在3指令过程中实现:
(i)将较低部分向右算术移位P个位置;
(ii)将所移位的重叠位加到下一个较高HPA部分;
(iii)立即AND具有从较低HPA部分中的P导出的掩码的重叠位,
以迫使它们为零。
该过程可应用于每对相邻HPA部分,从最低通道向上进行。
另选地,可提供用于重叠传播和重叠清除的专用指令,如下面相对于图13和图14所述。
在已经累加了大量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并对该部分求反以获得正二的补码数;将FP64结果的位[62:52]设置为所计算的指数;如果偏移指数>0,则在逻辑上将HPA部分向左移位CLZ-11个位置:否则将FP64结果设置为零。
该转换算法可以每个HPA通道通常15个SVE指令来实现。
应当指出的是,如果需要,上述步骤(iii)和(iv)可如下组合以涵盖不是最高有效的部分可为负的情况:
(iii)如果该部分为负,则将FP64结果的位[63]设置为1并对该部分求反以获得正二的补码数;将FP64结果的位[62:52]设置为所计算的指数;如果偏移指数>0,则在逻辑上将HPA部分向左移位CLZ-11个位置:否则将FP64结果设置为零。
当需要时,可产生单个FP64结果,该结果尽可能准确地表示最终累加值。这可例如通过应用Y.Hida,X.S.Li以及D.H.Bailey在第十五届IEEE计算机算法研讨会,Vail CO,2001年6月,第155-162页的“Algorithms for Quad-Double Precision Floating PointArithmetic”中建议的算法来实现。
从底部的一对通道向上进行,将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个FP64附加物的块可在n×(l/2k)+1个循环中累加到2k个p×l位HPA累加器中。l和k的典型值为2-4(虽然k可高达16),使得如果l=k,则n个FP64数(或2n个FP32数)可在n/2循环中在k个并行累加器中进行累加。相比之下,在ARM的Cortex-A72上,相同的可再现累加将需要3n个循环,因为总和必须按顺序发生,并且相关的融合乘加运算(FMA)在相加之间需要3个循环。因此,与常规FP处理相比,HPA通常为FP32累加提供12倍加速。
如上所述,将需要周期性地消除或解决HPA冗余。上述方法采用3×(l-1)个指令,并且将需要每264-p次累加执行一次:对于p=50的典型值,这表示<0.1%的微小处理开销。类似地,与针对n个数字的HPA累加的≈n/4个循环(其中n≈103或更高)相比,将HPA累加器的向量减小到标量形式、解决标量HPA中的冗余以及将标量HPA转换回FP64格式通常将l+3×(l-1)+15×l≈19×l-3=35-73个指令用于l个代表值。
图9示出了针对锚定数据元素的编码的另一个示例,该锚定数据元素包括指定该锚定数据元素是表示二的补码数的一部分还是特殊值的类型信息。需注意,锚定数据元素中的类型信息不同于如图7所示的元数据中的通道类型信息196。在该编码中,最高有效位(在该示例中的位63)用于表示元素是表示标准HPA数位还是特殊值,该标准HPA数位表示二的补码数的一部分。当最高有效位为0时,那么HPA元素表示标准HPA数位(其表示二的补码数),其中重叠部分中的位具有与HPA值中下一个最高数位的最低有效位相同的有效值,类似于上述示例。
然而,当元素的最高有效位为1时,元素表示选自以下组的HPA特殊值:正无穷大、负无穷大、非数字(NaN)和饱和值。当最高有效位为1时,那么接下来的两个最高有效位(例如,如图9所示的位61和62)表示所表示的特殊值的特定类型。图10示出了针对标准HPA数位的位63至61的编码和特殊值的相应类型。
因此,当最高有效位为0时,那么接下来的两个位表示HPA数位的重叠位中的一些。另选地,如果使用不具有重叠位的非冗余HPA变体,则接下来的两个位可表示HPA数位的非重叠位。因此,原本将用于表示哪个特定类型的特殊值被编码的位可被重复用于表示二的补码数,这有助于提供有效的编码。
当最高有效位为1并且第三最高有效位为0时,那么HPA元素表示无穷大。第二最高有效位表示无穷大的符号。因此,元素的位63至61的编码110可表示负无穷大,并且编码100可表示正无穷大。正无穷大和负无穷大的编码也将可能被交换。当HPA元素被指示为表示正无穷大或负无穷大时,那么这意味着它是在一系列操作中生成的,该系列操作中的至少一个操作涉及浮点值到HPA格式的转换,其中该浮点值是正无穷大或负无穷大。
当元素的三个最高有效位指示101时,那么元素表示非数字(NaN)。这可以两种方式产生。或者,该元素可在涉及浮点值(其为NaN)的转换的一系列操作中生成,或者该元素可取决于两个HPA值的相加,其中这些HPA值中的一个HPA值为正无穷大并且另一个HPA值为负无穷大。
另一方面,当HPA元素的三个最高有效位的被编码为111时,那么这表示该值是饱和HPA值。饱和HPA值在浮点域中不具有类似值。然而,正无穷大或负无穷大指示HPA值由正无穷大或负无穷大的浮点值的转换产生,其中该浮点值将已从产生比可以浮点格式表示的量值更大的量值的计算导出,饱和HPA类型可指示:虽然输入到一系列HPA操作中的任何浮点数可能不是NaN或无穷大的非特殊数,但是饱和已由于HPA操作本身而出现,例如,因为设置可由HPA值表示的有效值范围的锚元数据使得输入浮点值和/或处理那些值的结果已生成在由元数据限定的范围之外的数字。
例如,当作用于HPA值的最高有效HPA元素(如图7所示的通道信息196所示)的HPA操作导致来自最高有效重叠位的上溢出时,可生成饱和类型。另选地,如果最高有效HPA元素和HPA值的重叠位不被认为是由HPA值表示的二的补码数的一部分,则如果HPA值的最高有效元素从最高有效非重叠位上溢出到最低有效重叠位,则可产生饱和类型。在HPA值的顶部元素的重叠位被认为是由HPA值表示的总体二的补码数的一部分的情况下,在位63至61中将饱和类型编码为111可以是特别有用的,因为这将意味着:根据定义,如果存在来自顶部重叠位的上溢出,则顶部两个重叠位将已经都等于1并且该上溢出将导致元素的最高有效位从0切换为1,使得该上溢出本身可导致对应元素被设置有在前三个位中等于111的类型信息。这可简化用于设置类型信息的逻辑,因为其可能不需要特定电路来检测上溢出并相应地设置该类型信息。另一方面,如果重叠位不被认为是由HPA值表示的二的补码数的一部分,则一些附加逻辑可检测从顶部非重叠位到重叠区域中的上溢出,并且相应地设置类型信息的前三个位。
任选地,当在HPA操作中发生下溢出时,也可使用饱和类型。例如,如果要转换成HPA格式的浮点值表示其HPA格式的精确表示将需要比可使用HPA格式表示的最低有效位更不有效的一些位的数(如由锚元数据限定的),则这可被检测为下溢出并且可指示饱和数据类型。另选地,可使用区分上溢出和下溢出的类型编码。然而,在实践中,发信号通知上溢出可能比发信号通知下溢出更重要,因为下溢出可简单地导致精度损失,而上溢出可导致返回不正确的处理结果。因此,在一些情况下,可选择以不使用由类型信息指示的数据类型来发信号通知下溢出。
因此,通常通过提供类型信息来支持对HPA值的饱和类型的指示,这可以允许程序代码在一系列HPA操作之后确定由那些操作产生的任何特殊值是由为特殊数的输入浮点数还是由因HPA处理而发生的上溢出导致的。这可能是有用的,因为在第二种情况下,程序代码可能能够调整锚元数据,然后重复该操作序列以便保持有效结果,然而如果特殊值来自原始浮点值中的特殊数,则利用不同的锚元数据重复HPA处理仍然不会产生非特殊结果。
虽然图10示出了可用于提供有效编码方案的类型信息的一个特定编码,但也可使用其他编码方案。
图9示出了针对单个HPA元素的编码。当HPA值由两个或更多个HPA元素形成时,如果那些HPA元素中的任一个HPA元素具有被设置为1以指示特殊值的顶部位,则可认为总体值是特殊的。在实践中,由于HPA值可如图5所示分散在多个不同向量寄存器上,因此每个HPA处理指令每次可仅看到一个元素,并且当处理HPA元素中的一个HPA元素时可能不明显的是,相同向量值的其他HPA元素中的一个HPA元素将检测到特殊值或上溢出。虽然如果输入浮点值是无穷大或非数字,这可能导致该浮点数被转换为的HPA值的所有元素被设置为指示特殊值,但是在饱和由HPA处理导致的情况下,饱和类型可能仅在例如HPA值的最高有效HPA元素中指示。
当将两个HPA元素相加在一起时,则可根据相加的两个元素中的类型信息来设置结果元素的类型信息。图11示出了示出可根据第一操作数和第二操作数的数据类型而出现的不同数据类型的表。表左侧的列示出了针对第一操作数中的数据类型的不同选项,并且沿着表顶部的行示出了针对第二操作数中的数据类型的不同选项。缩写Num表示标准二的补码数,即当元素的最高有效位为0时的数据类型。
如图11所示,如果相加的两个输入操作数均为标准二的补码数,则结果可以是另一个标准二的补码数,或者在存在来自HPA值的最高有效元素的上溢出的情况下可以是饱和值。在相加的两个操作数中的至少一个是特殊值的情况下,则结果也将为特殊的。因此,HPA元素的最高有效位在以下意义上是粘滞的:一旦其被设置为1,取决于该元素的所有后续HPA元素将生成有等于1的最高有效位,使得可在操作序列结束时检测到特殊值的出现。
如图11所示,如果相加的操作数中的任一个操作数为NaN,则结果也将为NaN。如果相加的操作数中的一个操作数为正无穷大并且另一个操作数为负无穷大,则也可产生NaN。如果相加的操作数中的一个操作数为正无穷大并且另一个操作数为除负无穷大或NaN之外的任何类型,则结果将为正无穷大。类似地,如果操作数中的一个操作数为负无穷大并且另一个操作数为除正无穷大或NaN之外的任何类型,则结果将为负无穷大。最后,如果操作数中的至少一个操作数为饱和值,则如果另一个操作数为标准二的补码数或饱和值,则结果也将为饱和的。
在一些情况下,可响应于产生某些结果的HPA加法而触发异常。在相加的两个操作数为标准二的补码数但发生上溢出并因此结果为饱和的情况下,则可发信号通知上溢出异常。对于除HPA值的最高有效元素之外的HPA元素,不应出现这种异常,因为程序代码应在已执行一定数量的HPA加法之后触发重叠传播操作,其中该数量被选择为使得HPA加法的数量不能导致超过顶部重叠位的上溢出。然而,对于最高有效元素,如果锚元数据尚未被正确设置,则可能发生上溢出。
如果不同的有符号浮点无穷大相加,使得结果被设置为NaN,则可产生无效的操作数异常。
根据所表示的特殊值的类型,当从浮点转换成HPA或从HPA转换成浮点时,可产生其他类型的异常。
图12示出了当考虑如图9至图11的示例中那样编码的特殊值时用于执行HPA加法的电路逻辑300的示例。电路逻辑300包括63位加法器302和特殊值检测电路304。加法器302接收相加的两个HPA元素中的每个HPA元素的较低63位(不包括指示值是否为特殊值的最高有效位),并且将这两组63位加在一起以产生63位总和(该总和用单个位值0作为前缀以产生被编码为非特殊值的64位结果),并且将该总和提供给多路复用器308。
与加法器的加法并行地,特殊值检测电路304接收要相加的HPA元素中的每个HPA元素(前三个位)的类型信息。特殊值检测电路304查核类型信息以确定哪些特殊值(如果有的话)被表示并基于图11的表中所示的组合,逻辑304确定结果是否应表示特殊值,并且如果是,则确定应对哪种类型的特殊值进行编码。当结果是特殊值时,则特殊值检测电路生成64位结果306,其中根据图11的表中指示的特殊值的类型对前三个位进行编码,该特殊值的类型是基于两个操作数的类型进行选择的。在结果是特殊的情况下,最低61位中的位值可采用任何值,因为一旦出现特殊值,HPA值就可能不再表示在范围内的有效二的补码数,因此在最低61位中指定什么信息并不重要。
多路复用器308在由特殊值检测电路304提供的64位值与由加法器提供的64位(包括等于0的顶部位)之间进行选择以指示非特殊数字。多路复用器基于由特殊值检测电路提供的指示结果是否应为特殊的值310来进行该选择。实际上,该信号310可以仅为64位值306的较高位,如图12的虚线所示。
因此,由于特殊值检测电路304与加法器本身并行地起作用,因此逻辑具有高速度,因为其具有与标准饱和整数加法器相同的逻辑深度。
当结果是特殊值时,特殊值检测电路304还可根据结果设置各种浮点状态标志,其可指示浮点操作的属性。这允许HPA处理在已使用浮点算术完全执行处理的情况下反映将预期的处理。例如,这些浮点标志可指示是应发信号通知下溢出异常或上溢出异常或者是否存在无效操作。
图12示出了单个相加通道,但应当理解,当在一对向量寄存器的对应通道中对相应成对的HPA元素执行单独的相加(类似于图6所示的转换操作的向量化)时,可为每个向量通道提供该电路逻辑。
当执行重叠传播操作时,也可考虑特殊HPA值。图13示出了重叠传播指令,该重叠传播指令是将三个向量寄存器指定为输入的向量指令。向量寄存器Zdu提供预期表示相同HPA值的一对相邻HPA元素中的较高HPA元素的HPA元素,并且还充当将存储该对中的该较高HPA元素的更新值的目的地寄存器。源向量寄存器Zl是其中每个通道提供该对元素中的与Zdu的对应向量通道中的较高元素对应的较低元素的向量寄存器。向量寄存器Zm为向量处理通道中的每个向量处理通道提供锚元数据。一般来讲,寄存器Zm中的锚元数据应为与输入寄存器Zl中指定的每一对的较低HPA元素相关联的锚元数据,但如果每一对中的较高HPA元素和较低HPA元素中的重叠位数量相同,则也将可使用为每一对中的较高元素提供锚元数据的寄存器。因此,3个寄存器的每个向量通道与不同的HPA值相关,并指定一对相邻元素Li、Ui和用于该HPA值的对应元数据Mi(在该示例中,存在4个向量通道,因此i=0...3,但其他示例可具有不同数量的通道)。
因此,在每个向量处理通道内,基于给定HPA值的对应的一对相邻元素中的较低元素Li和较高元素Ui以及基于与该对相邻元素相关联的元数据Mi来执行重叠传播操作350,以生成更新的值Ui’,该更新的值Ui’被存储到目的地寄存器Zdu内的对应元素位置。
每个通道内执行的重叠传播函数350的操作在图13的底部处示出。如图所示,操作包括将对应的一对元素中的较低元素Li向右移位对准移位量,该对准移位量取决于元数据寄存器Zm的对应通道Mi中的元数据。向量中的对准移位的大小可对应于每一对中的较低元素Li内的非重叠位数量W。由于不同的向量通道对应于完全不同的HPA值,因此如果用于那些不同通道的元数据指定不同的重叠位数量,则可能不同的向量通道可具有不同的对准移位大小。对准移位量可以不同方式确定,这取决于编码重叠位数量的方式。如果非重叠位的数量由元数据直接指定,则该数量可简单地直接用作对准移位量。然而,如果元数据指定重叠位数量V,则可从数据元素中的总位数量N和重叠位数量V导出对准移位大小,使得当使用1位作为值是否为特殊的指示符时,对准移位大小SH等于N-V-1。
因此,在将该对中的较低元素向右移位W个位之后,将该移位值加到该对中的对应较高元素Ui以生成更新的值Ui’,该更新的值Ui’被存储到目的地寄存器的对应通道中。因此,在较高元素和较低元素都不是特殊数字的情况下,较高元素Ui’的更新值将被设置为使得非重叠位等于该对中较低元素的重叠位和较高元素的非重叠位的总和。
然而,如果较低元素Li的顶部位为1或较高元素Ui的顶部位为1指示这些元素中的任一个元素为特殊HPA值,则较高元素可保持不变,而不执行移位以及重叠位和非重叠位的相加。这可减少所需的逻辑量。因此,特殊值和与特殊值相邻的元素可在进位消除期间保持不变,使得可在HPA操作序列结束时检测到特殊值已出现的事实。如果HPA数的任何一个或多个元素是特殊值,则该整个HPA数可被认为是在数字上无效的。
另选地,用于处理特殊值的出现的另一种方法可以是,如果该对中的较低元素Li是特殊的,则来自较低元素Li的类型信息可被复制到被写入目的地寄存器Zdu的更新的较高元素Ui’的类型信息。然后,利用这种方法,当通过对HPA值的连续的成对相邻元素执行进位传播指令来执行一系列进位消除时,可逐渐将特定值的信令传播到顶部通道,这可使得检测在到达一系列HPA操作的末尾时是否已生成任何特殊值更简单,因为这可允许简单地通过检查顶部通道的类型信息来检测特殊值的存在,而不需要查核HPA值的所有元素中的类型信息。
另一方面,如果该对中的较低元素和较高元素两者都是非特殊的,但是较高元素中的非重叠位和较低元素中的重叠位相加导致上溢出,则更新的较高元素Ui’的位63至61可被设置为111以指示饱和值,这类似于如上所述的相加的情况。
图13的底部处所示的操作可针对每个向量处理通道独立地执行,使得一个通道中的重叠传播可生成特殊值,而另一个通道不生成特殊值。
与如果需要用于执行对准移位、相加和对类型信息的设置的单独指令相比,提供如图13所示的专用重叠传播指令可大大减小执行重叠传播所需的代码大小。
图14示出了用于在如图13所示的重叠传播操作之后移除重叠位的对应重叠清除指令。即,一旦该对中的较低元素的重叠位已加到较高元素中,较低元素中的重叠位就可被清除为0。
至于重叠传播指令,重叠清除指令指定三个向量寄存器,然而,这次目的地寄存器Zdl提供HPA值的一对相邻HPA元素中的较低HPA元素,该较低HPA元素将由于重叠清除指令而被更新。另外两个源寄存器Zm、Zu分别表示元数据和该对中的较高元素。同样,这些寄存器是向量寄存器,因此在相应寄存器中对每组对应定位的向量元素执行多个独立通道的处理。此时,对每组对应元素执行的操作是重叠清除操作360,其采用该对HPA元素Li和Ui的值以及对应元数据Mi作为输入,并且生成待回写到目的地寄存器Zdl的对应通道的更新的值Li’。
以重叠清除函数360中的每个函数执行的操作在图14的底部处示出。如图14所示,重叠清除操作简单地将较低元素Li的重叠位清除为0,其中被设置为0的位的数量将取决于在元数据Zm的对应元素Mi中指定的重叠位194的数量。较低元素的非重叠位保持不变。在较低元素或较高元素均不表示特殊值的情况下,较低元素中的重叠位的清除与较高元素Zu无关。
如果较低元素Li的顶部位被设置为1以指示特殊值,则较低元素可保持不变,使得更新的值Li’等于输入值Li。任选地,如果较高元素Ui是特殊的,则较低元素也可保持不变,尽管这不是必需的。如果在一个具体实施方案中,无论较高元素是否被指示为特殊值,都要执行重叠清除,则指令根本不需要指定与较高元素Ui对应的寄存器Zu。然而,可能有用的是,操作取决于较高元素是否是特殊的,以避免对目的地寄存器执行不必要的写入。与图13的重叠传播指令不同,对于图14的重叠清除指令,不太可能希望将特殊值从HPA值内的给定的一对相邻元素中的较低元素传播到较高元素,因为这将需要用于指令的第二目的地寄存器,并且许多微架构可能不具有足够的写入端口来这样做。
因此,在使用中,预期图14的重叠清除指令可在如图13所示的重叠传播指令之后,该重叠传播指令作用于相同的一对寄存器,该对寄存器被指定为较低寄存器和较高寄存器。将该操作分成两个单独的指令可能对于确保每个指令仅需要指定一个目的地寄存器是有用的,如上所述,这在微架构中实现起来更简单。
然而,在允许响应于相同指令而更新指定两个不同目的地寄存器的指令的架构中,组合指令将可能执行图13和图14的两种函数。即,在非特殊输入的情况下,指令可触发将较低元素的重叠位加到较高元素的非重叠位中,并且还将较低元素的重叠位清除为0。这种指令可以与上文针对图13和图14所述的方式相同的方式处理特殊值,其中如果在输入寄存器处任一值是特殊的,则输出值可保持不变,或者较低元素的类型信息被传播到较高元素。
虽然图13和图14示出了重叠传播指令和重叠清除指令所作用于的第一锚定数据元素和第二锚定数据元素是相同HPA值的一对相邻元素Li、Ui的示例,但这不是必需的。另一种用例可以是由重叠传播/清除指令指定的第一锚定数据元素(Li)是给定HPA值的最高有效元素,并且第二锚定数据元素(Ui)是仅填充有符号位的“空”HPA元素。如果要将包括第一锚定数据值的HPA值加到包括比第一锚定数据值具有更大有效值的位的另一个HPA值,则这可能是有用的,在这种情况下,可能需要将来自第一锚定数据值的进位位加到第二HPA值内具有更大有效值的通道,这可通过首先从第一HPA值的顶部元素中剥离重叠位并将它们加到另外的“空”HPA元素的非重叠位中而变得更简单,该“空”HPA元素可被赋予与第二HPA值的相关HPA元素的通道有效值对应的通道有效值。应当理解,对于图13和图14所示的指令,其他用例也是可能的。
图15示出了可使用的模拟器具体实施。虽然先前所述的实施方案在用于操作支持所涉及的技术的特定处理硬件的装置和方法方面实现了本发明,但也可以提供根据本文所述的实施方案的指令执行环境,该指令执行环境是通过使用计算机程序来实现的。此类计算机程序通常被称为模拟器,在一定程度上是因为此类计算机程序提供硬件架构的基于软件的具体实施。模拟器计算机程序的种类包括仿真器、虚拟机、模型和二进制转换器,其包括动态二进制转换器。通常,模拟器具体实施可在支持模拟器程序410的主机处理器430上运行,该主机处理器任选地运行主机操作系统420。在一些布置中,在硬件和所提供的指令执行环境和/或在同一主机处理器上提供的多个不同指令执行环境之间可存在多个模拟层。在历史上,需要强大的处理器来提供以合理速度执行的模拟器具体实施,但这种方法在某些情况下可能是合理的,诸如当出于兼容性或重复使用原因而希望运行另一个处理器本地的代码时。例如,模拟器具体实施可向指令执行环境提供主机处理器硬件不支持的附加功能,或者提供通常与不同硬件架构相关联的指令执行环境。模拟概述在以下文献中给出:“Some Efficient Architecture Simulation Techniques”,Robert Bedichek,Winter1990USENIX Conference,第53-63页。
就先前已参考特定硬件构造或特征描述了实施方案而言,在模拟的实施方案中,等效功能可由合适的软件构造或特征提供。例如,特定电路可在模拟的实施方案中被实现为计算机程序逻辑。类似地,存储器硬件诸如寄存器或高速缓存存储器可在模拟的实施方案中被实现为软件数据结构。在先前所述的实施方案中参考的硬件元件中的一个或多个硬件元件存在于主机硬件(例如,主机处理器430)上的布置中,在合适的情况下,一些模拟的实施方案可利用主机硬件。
模拟器程序410可存储在计算机可读存储介质(其可为非暂态介质)上,并且向目标代码400(其可包括应用、操作系统和管理程序)提供程序接口(指令执行环境),该程序接口与模拟器程序410正在建模的硬件架构的应用程序接口相同。因此,可使用模拟器程序410从指令执行环境内执行目标代码400的程序指令(包括支持如上所述的对HPA值的处理的指令),使得实际上不具有上述装置2的硬件特征的主机计算机430可模仿这些特征。模拟器程序410可包括指令解码程序逻辑412,该解码程序逻辑用于解码目标代码400的指令并将其映射到由主机硬件430支持的本地指令。指令解码程序逻辑412包括锚定数据处理程序逻辑414,该锚定数据处理程序逻辑将HPA处理指令映射到用于执行如上所述的HPA(锚定数据处理)操作诸如FP转换、相加或重叠传播/清除操作的本地指令集。
在本申请中,字词“被配置为...”用于意指装置的元件具有能够执行所限定的操作的配置。在该上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,该装置可具有提供所限定的操作的专用硬件,或者可对处理器或其他处理设备进行编程以执行该功能。“被配置为”并不意味着装置元件需要以任何方式改变以便提供所限定的操作。
虽然本文已结合附图详细描述了本发明的示例性实施方案,但应当理解,本发明并不限于那些精确的实施方案,并且在不脱离所附权利要求书所限定的本发明的范围和实质的前提下,本领域的技术人员可在其中实现各种变化和修改。
Claims (25)
1.一种装置,所述装置包括:
处理电路,所述处理电路用于执行数据处理;和
指令解码器,所述指令解码器用于控制所述处理电路来执行锚定数据处理操作,以生成锚定数据元素;其中:
所述锚定数据元素具有编码,所述编码包括指示所述锚定数据元素是否表示以下各项的类型信息:
二的补码数的位的一部分,位的所述部分对应于能够使用所述锚定数据元素表示的给定有效值范围;或者
除二的补码数的位的所述部分之外的特殊值。
2.根据权利要求1所述的装置,其中所述处理电路被配置为将所述类型信息存储在与所述锚定数据元素相同的寄存器中。
3.根据权利要求1和2中任一项所述的装置,其中所述锚定数据处理操作包括浮动到锚定转换操作,以将浮点值转换成所述锚定数据元素。
4.根据权利要求3所述的装置,其中当所述浮点值表示特殊数字时,所述处理电路被配置为生成具有指示所述锚定数据元素表示所述特殊值的所述类型信息的所述锚定数据元素。
5.根据权利要求4所述的装置,其中所述类型信息区分由所述浮点值表示的所述特殊数字是正无穷大、负无穷大还是非数字。
6.根据权利要求3至5中任一项所述的装置,其中在所述浮动到锚定转换操作中,所述处理电路被配置为基于指示所述锚定数据元素的所述给定有效值范围的锚元数据来生成所述锚定数据元素。
7.根据任一前述权利要求所述的装置,其中所述类型信息指定所述锚定数据元素是否为饱和类型的锚定数据元素,所述饱和类型的锚定数据元素取决于以下中的一者:
先前的锚定数据处理操作,所述先前的锚定数据处理操作导致对应的锚定数据元素上溢出;和
先前的浮动到锚定转换操作,针对所述先前的浮动到锚定转换操作的所述浮点值在包括一个或多个锚定数据元素的锚定数据值的允许数字范围之外。
8.根据权利要求7所述的装置,其中在将浮点值转换为所述锚定数据元素的浮动到锚定转换操作中,所述处理电路被配置为在以下情况之一时设置所述锚定数据元素的所述类型信息以指示所述饱和类型:
所述锚定数据元素将表示包括一个或多个锚定数据值的锚定数据值的最高有效元素,并且将所述浮点值表示为二的补码数将需要比能够使用所述锚定数据元素表示的所述给定有效值范围具有更高有效值的至少一个位;或者
所述锚定数据元素将表示包括一个或多个锚定数据值的锚定数据值的最低有效元素,并且将所述浮点值表示为二的补码数将需要比能够使用所述锚定数据元素表示的所述给定有效值范围具有更低有效值的至少一个位。
9.根据权利要求7和8中任一项所述的装置,其中对于被指定为所述饱和类型的锚定数据元素,所述类型信息的编码无法区分所述锚定数据元素是表示正值还是负值。
10.根据权利要求7至9中任一项所述的装置,其中所述处理电路包括加法电路以执行两个锚定数据元素的相加,从而生成结果锚定数据元素;其中:
当所述两个锚定数据元素的所述相加在生成结果锚定数据元素时导致上溢出时,所述加法电路被配置为生成具有指定所述结果锚定数据元素是所述饱和类型的所述类型信息的所述结果锚定数据元素,所述结果锚定数据元素表示包括一个或多个锚定数据元素的锚定数据值的最高有效元素,所述一个或多个锚定数据元素各自指示由所述锚定数据值表示的二的补码数的位的相应部分。
11.根据任一前述权利要求所述的装置,其中所述锚定数据元素具有编码,其中:
当所述锚定数据元素的预先确定位具有第一值时,所述锚定数据元素表示二的补码数的位的所述部分;并且
当所述锚定数据元素的所述预先确定位具有第二值时,所述锚定数据元素表示所述特殊值。
12.根据权利要求11所述的装置,其中当所述锚定数据元素的所述预先确定位具有所述第二值时,所述锚定数据元素的至少一个另外的位表示由所述锚定数据元素表示的特殊值的类型。
13.根据权利要求12所述的装置,其中当所述锚定数据元素的所述预先确定位具有所述第一值时,所述锚定数据元素的所述至少一个另外的位表示所述二的补码数的所述部分的一部分,或表示用于容纳来自所述锚定数据元素的一部分的进位的至少一个重叠位,所述锚定数据元素表示所述二的补码数的所述部分。
14.根据权利要求11至13中任一项所述的装置,其中所述预先确定位是所述锚定数据元素的最高有效位。
15.根据任一前述权利要求所述的装置,其中在给定锚定数据处理操作中,当输入锚定数据元素具有指定所述输入锚定数据元素是特殊值的所述类型信息时,所述处理电路被配置为生成具有指定所述结果锚定数据元素是特殊值的所述类型信息的对应结果锚定数据元素。
16.根据任一前述权利要求所述的装置,其中所述处理电路包括加法电路以执行两个锚定数据元素的相加,从而生成结果锚定数据元素,并且
当所述两个锚定数据元素的两个类型信息指示所述两个锚定数据元素中的一个锚定数据元素表示正无穷大并且所述两个锚定数据元素中的另一个锚定数据元素表示负无穷大时,所述加法电路被配置为生成具有指定所述结果锚定数据元素表示非数字的类型信息的所述结果锚定数据元素。
17.根据任一前述权利要求所述的装置,其中所述锚定数据元素是N位值,所述N位值包括V个重叠位和W个非重叠位;并且
在用于将浮点值转换成所述锚定数据元素的浮动到锚定转换操作中,当所述浮点值表示除特殊数字之外的数字并且由所述浮点值表示的所述数字在允许的数字范围内时,所述处理电路被配置为将所述锚定数据元素的所述W个非重叠位设置为表示对应于所述浮点值的所述二的补码数的位的一部分,并且将所述锚定数据元素的所述V个重叠位设置为所述W个非重叠位的符号扩展。
18.根据权利要求17所述的装置,其中N-V-W>0。
19.根据权利要求17和18中任一项所述的装置,其中所述处理电路响应于重叠传播指令而将第一锚定数据元素的所述V个重叠位与第二锚定数据元素的W个非重叠位对准,并且将所述对准的重叠位和非重叠位相加以生成所述第二锚定数据元素的更新值。
20.根据权利要求19所述的装置,其中响应于所述重叠传播指令,当所述第一锚定数据元素和所述第二锚定数据元素中的一者具有指定所述特殊值的类型信息时,所述处理电路被配置为执行以下中的一者:
保留所述第二锚定数据元素的先前值;或者
当所述第一锚定数据元素的所述类型信息指示特殊值时,将所述第一锚定数据元素的所述类型信息传播到所述第二锚定数据元素的所述类型信息。
21.根据权利要求19和20中任一项所述的装置,其中当所述对准的重叠位和非重叠位的所述相加导致所述第二锚定数据元素的上溢出时,所述处理电路被配置为将所述第二锚定数据元素的所述类型信息设置为指示饱和类型值。
22.根据权利要求17至21中任一项所述的装置,其中所述处理电路响应于重叠清除指令而将目标锚定数据元素的所述重叠位清除为零。
23.根据权利要求22所述的装置,其中响应于所述重叠清除指令,当所述目标锚定数据元素具有指定所述特殊值的类型信息时,所述处理电路被配置为保留所述目标锚定数据元素的先前值。
24.一种计算机程序,所述计算机程序用于控制主机数据处理装置来提供用于执行指令的指令执行环境;所述计算机程序包括:
指令解码程序逻辑,所述指令解码程序逻辑用于解码目标代码的程序指令,以控制所述主机数据处理装置来执行数据处理;
所述指令解码程序逻辑包括锚定数据处理程序逻辑,所述锚定数据处理程序逻辑用于控制所述主机数据处理装置执行锚定数据处理操作以生成锚定数据元素,其中:
所述锚定数据元素具有编码,所述编码包括指示所述锚定数据元素是否表示以下各项的类型信息:
二的补码数的位的一部分,位的所述部分对应于能够使用所述锚定数据元素表示的给定有效值范围;或者
除二的补码数的位的所述部分之外的特殊值。
25.一种数据处理方法,所述数据处理方法包括:
解码一个或多个指令;以及
响应于所述解码指令,控制处理电路来执行锚定数据处理操作,以生成锚定数据元素,其中:
所述锚定数据元素具有编码,所述编码包括指示所述锚定数据元素是否表示以下各项的类型信息:
二的补码数的位的一部分,位的所述部分对应于能够使用所述锚定数据元素表示的给定有效值范围;或者
除二的补码数的位的所述部分之外的特殊值。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/268,665 US10459688B1 (en) | 2019-02-06 | 2019-02-06 | Encoding special value in anchored-data element |
US16/268,665 | 2019-02-06 | ||
PCT/GB2019/053402 WO2020161458A1 (en) | 2019-02-06 | 2019-12-02 | Encoding special value in anchored-data element |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113454915A true CN113454915A (zh) | 2021-09-28 |
Family
ID=68315003
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980092778.0A Pending CN113454915A (zh) | 2019-02-06 | 2019-12-02 | 在锚定数据元素中编码特殊值 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10459688B1 (zh) |
EP (1) | EP3921942A1 (zh) |
JP (1) | JP2022519258A (zh) |
KR (1) | KR20210122828A (zh) |
CN (1) | CN113454915A (zh) |
WO (1) | WO2020161458A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11704092B2 (en) * | 2020-10-27 | 2023-07-18 | Arm Limited | High-precision anchored-implicit processing |
GB2605568B (en) * | 2021-03-23 | 2023-05-17 | Imagination Tech Ltd | Performing operations using floating point values |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9916130B2 (en) | 2014-11-03 | 2018-03-13 | Arm Limited | Apparatus and method for vector processing |
US9928031B2 (en) | 2015-11-12 | 2018-03-27 | Arm Limited | Overlap propagation operation |
US9733899B2 (en) | 2015-11-12 | 2017-08-15 | Arm Limited | Lane position information for processing of vector |
US9720646B2 (en) | 2015-11-12 | 2017-08-01 | Arm Limited | Redundant representation of numeric value using overlap bits |
US9703531B2 (en) | 2015-11-12 | 2017-07-11 | Arm Limited | Multiplication of first and second operands using redundant representation |
US10579338B2 (en) | 2017-01-30 | 2020-03-03 | Arm Limited | Apparatus and method for processing input operand values |
-
2019
- 2019-02-06 US US16/268,665 patent/US10459688B1/en active Active
- 2019-12-02 WO PCT/GB2019/053402 patent/WO2020161458A1/en unknown
- 2019-12-02 CN CN201980092778.0A patent/CN113454915A/zh active Pending
- 2019-12-02 KR KR1020217028063A patent/KR20210122828A/ko active Search and Examination
- 2019-12-02 JP JP2021544755A patent/JP2022519258A/ja active Pending
- 2019-12-02 EP EP19816858.5A patent/EP3921942A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2020161458A1 (en) | 2020-08-13 |
EP3921942A1 (en) | 2021-12-15 |
US10459688B1 (en) | 2019-10-29 |
JP2022519258A (ja) | 2022-03-22 |
KR20210122828A (ko) | 2021-10-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107077416B (zh) | 用于以选择性舍入模式进行向量处理的装置和方法 | |
CN110036368B (zh) | 用于执行算术运算以累加浮点数的装置及方法 | |
CN108351761B (zh) | 将使用冗余表示的第一和第二操作数相乘的方法和装置 | |
CN110235099B (zh) | 用于处理输入操作数值的装置和方法 | |
CN108351776B (zh) | 数据处理方法和装置 | |
JP6803381B2 (ja) | 重複ビットを使用する数値の冗長表現 | |
CN113454915A (zh) | 在锚定数据元素中编码特殊值 | |
CN108351763B (zh) | 用于重叠传播操作的方法和装置 | |
CN113424452A (zh) | 锚定数据元素转换 | |
CN113424146A (zh) | 针对锚定数据值的上溢出或下溢出处理 | |
JP6886927B2 (ja) | 浮動小数点値の処理のための装置及び方法 | |
JP2023546454A (ja) | 高精度アンカー暗黙処理 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |