CN108351761A - 使用冗余表示的第一和第二操作数的乘法 - Google Patents

使用冗余表示的第一和第二操作数的乘法 Download PDF

Info

Publication number
CN108351761A
CN108351761A CN201680064809.8A CN201680064809A CN108351761A CN 108351761 A CN108351761 A CN 108351761A CN 201680064809 A CN201680064809 A CN 201680064809A CN 108351761 A CN108351761 A CN 108351761A
Authority
CN
China
Prior art keywords
overlapping
bit
channel
value
significant
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.)
Granted
Application number
CN201680064809.8A
Other languages
English (en)
Other versions
CN108351761B (zh
Inventor
大卫·雷蒙德·鲁茨
内尔·伯吉斯
克里斯托弗·尼尔·海因兹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
Advanced Risc Machines Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Advanced Risc Machines Ltd filed Critical Advanced Risc Machines Ltd
Publication of CN108351761A publication Critical patent/CN108351761A/zh
Application granted granted Critical
Publication of CN108351761B publication Critical patent/CN108351761B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/544Methods 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 for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/50Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/53Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
    • G06F7/5324Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel partitioned, i.e. using repetitively a smaller parallel parallel multiplier or using an array of such smaller multipliers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/533Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
    • G06F7/5334Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product
    • G06F7/5336Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product overlapped, i.e. with successive bitgroups sharing one or more bits being recoded into signed digit representation, e.g. using the Modified Booth Algorithm

Abstract

提供了一种用于将包括至少两个X位部分的第一操作数和包括至少一个Y位部分的第二操作数相乘的方法。生成至少两个部分乘积,每个部分乘积包括第一操作数的选定X位部分和第二操作数的选定Y位部分的乘积。根据指示部分乘积的有效数的有效数指示信息来将每个部分乘积转换为冗余表示。在冗余表示中,部分乘积使用多个N位部分来表示,并且在至少两个相邻N位部分的组中,该组的较低N位部分的多个重叠位具有与该组的至少一个较高N位部分的一些最低有效位相同的有效数。将以冗余表示来表示的部分乘积相加。

Description

使用冗余表示的第一和第二操作数的乘法
技术领域
本技术涉及数据处理的领域。
背景技术
在数据处理系统中通常使用浮点(FP)表示。浮点数包括有效数和指示有效数的位的有效值的指数。这允许使用有限数目的位来表示大范围上的数值。然而,浮点运算的一个问题是计算通常是非关联的。例如,当将多个浮点值相加时,每次将另一值加到前一加法的结果中时,结果被舍入并且标准化,这意味着总体结果根据将值相加的顺序而不同。这使得难以并行化浮点算法,因为总和是不可重现的,除非以完全相同的顺序完成。为了生成可重现的结果,通常必须按顺序执行一系列加法或减法,这可能使得浮点运算相对较慢。
发明内容
至少一些示例提供了一种用于将包括多个X位部分的第一操作数和包括至少一个Y位部分的第二操作数相乘的数据处理方法,包括:
生成多个部分乘积,每个部分乘积包括第一操作数的选定X位部分和第二操作数的选定Y位部分的乘积;
对于每个部分乘积,根据指示部分乘积的有效数的有效数指示信息来将部分乘积转换为冗余表示,其中,在所述冗余表示中,部分乘积使用多个N位部分来表示,其中,在冗余表示的至少两个相邻N位部分的组中,该组的较低N位部分的多个重叠位具有与该组的至少一个较高N位部分的多个最低有效位相同的有效数;以及
将以冗余表示来表示的多个部分乘积相加。
至少一些示例提供了一种数据处理装置,包括:
乘法电路,用于将包括多个X位部分的第一操作数的选定X位部分和包括至少一个Y位部分的第二操作数的选定Y位部分相乘以生成部分乘积;
转换电路,用于根据指示部分乘积的有效数的有效数指示信息来将部分乘积转换为具有冗余表示的转换部分乘积,其中,在所述冗余表示中,部分乘积使用多个N位部分来表示,其中,在冗余表示的至少两个相邻N位部分的组中,该组的较低N位部分的多个重叠位具有与该组的至少一个较高N位部分的多个最低有效位相同的有效数;以及
加法电路,用于将转换部分乘积加到具有所述冗余表示的累加器值。
附图说明
现在将参考附图仅以示例的方式描述本发明的实施例,其中:
图1示意性地示出了数据处理装置;
图2示意性地示出了数值的不同表示;
图3示意性地示出了双精度浮点值和高精度锚(HPA)值之间的关系的示例;
图4示出了冗余HPA(RHPA)值的示例,其使用包括具有重叠有效值的多个N位部分的冗余表示来表示数值;
图5示出了用于定义冗余HPA值的每个部分的有效值并且用于定义重叠位的数目的元数据的示例;
图6示出了使用RHPA表示的累加运算的示例;
图7示出了在单个运算中将三个或更多个RHPA值相加的示例;
图8示出了其中在单个运算中相加的每个RHPA值都转换自输入向量的相应元素的示例;
图9示出了使用RHPA表示来累加值的方法;
图10和11示出了将浮点值转换为RHPA值的示例;
图12示出了用于生成非冗余形式的RHPA值的重叠传播运算的第一示例;
图13示出了用于生成限制冗余形式的RHPA值的重叠传播运算的第二示例;
图14示出了将限制冗余RHPA值转换为非冗余RHPA值的示例;
图15示出了用于将来自RHPA累加器的重叠位添加到重叠累加器值的重叠累加操作的示例;
图16示出了同时将转换自浮点值的转换RHPA值加到限制冗余RHPA累加器并且执行重叠传播以将经更新的RHPA累加器保持为限制冗余形式的示例;
图17示出了将非冗余形式的RHPA值转换为浮点值的示例;
图18示出了将限制冗余形式的RHPA值转换为浮点值的示例;
图19示出了将RHPA值转换为浮点值的第三示例;
图20示出了使用RHPA值的加法来将两个操作数值的部分乘积相加的示例;
图21示出了使用通道位置信息来基于将由该通道生成的结果元素在相应结果值中的相对位置来控制每个处理通道的示例;
图22示出了使用通道位置信息来控制比结果向量长度更宽或更窄的结果值的生成的若干示例;
图23示出了为每个处理通道指定锚值、重叠位的数目和通道位置信息的元数据寄存器的示例;
图24示出了使用输入映射信息来标识输入向量的哪些元素将由与单个向量内的独立结果值相对应的处理通道的不同子集来处理的示例;
图25示出了其中RHPA值的不同N位部分具有不同数目的重叠位的示例;
图26示出了使用RHPA格式将两个长整数相乘以将整数的各个部分的部分乘积相加的示例;
图27是示出可以如何使用一系列流水线化部分乘积累加运算来计算两个长整数的乘积的示例的时序图;
图28是示出用于将最终乘法结果转换为非冗余格式的一些重叠传播加法可以如何与用于累加部分乘积的一些加法并行执行的示例的另一时序图;
图29示出了将长整数操作数映射到浮点值的向量的示例;以及
图30示出了使用浮点乘法器来确定输入操作数的部分的各个对的部分乘积的示例;
图31和32示出了分别将正浮点值和负浮点值转换为RHPA格式的数值示例;
图33示出了在两个RHPA操作数的加法期间的通道溢出的示例;
图34示出了从RHPA值消除通道溢出的示例;
图35示出了将RHPA值转换为非冗余形式的示例;以及
图36到39提供了为什么图16所示的运算产生限制冗余形式的结果的解释。
具体实施方式
下面将描述一些具体示例。应理解,本技术不限于这些示例。
下面讨论高精度锚(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数与科学课程中教导的“科学记数法”非常相似,其中,负200万我们写作-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
负数的符号为1,正数的符号为0。每个数(包括零)都具有符号。
指数被偏置,这意味着真指数(true exponent)与存储在数字中的指数不同。例如,偏置SP指数长为8位,范围从0到255。指数0和255是特殊情况,但所有其他指数都有偏置127,这表示真指数比偏置指数小127。最小偏置指数为1,对应于-126的真指数。最大偏置指数为254,对应于127的真指数。HP和DP指数的工作方式相同,具有上表示出的偏置。
SP指数255(或DP指数2047或HP指数31)被保留用于无穷和称为NaN(不是数字)的特殊符号。无穷(可以是正或负)具有零小数。具有指数255和非零小数的任何数字都是NaN。无穷提供了饱和值,因此它实际上表示类似于“该计算产生比我们可以以该格式表示的数字更大的数字”。针对对于实数的未数学定义的运算返回NaN,例如,除以零或者取负数的平方根。
任何格式的指数零被保留用于次正规数(subnormal number)和零。正规数(normal number)表示值:
-1符号×1.小数×2e
其中,e是从偏置指数计算的真指数。术语1.小数被称为有效数,并且1未被存储为FP数的一部分,而是从指数推断的。除了零和最大指数之外的所有指数都指示形式1.小数的有效数。指数零指示形式0.小数的有效数,以及等于给定格式的1-偏置的真指数。这样的数字被称为次正规(历史上这些数字被称为非正规,但现代用法优选术语次正规)。
指数和小数都等于零的数字是零。
下表具有一些HP格式的示例数字。这些条目是二进制的,添加“_”字符以提高可读性。注意,次正规条目(表的第4行,指数为零)与前一行中的正规条目相比产生不同的有效数。
符号 5位指数 10-位小数 11-位有效数
0 01111 00_0000_0000 100_0000_0000 1.0×20
1 01110 10_0000_0000 110_0000_0000 -1.1×2-1
0 00001 10_0000_0000 110_0000_0000 1.1×2-14
0 00000 10_0000_0000 010_0000_0000 0.1×2-14
1 11111 00_0000_0000 负无穷
0 11111 00_1111_0011 NaN
FP实现方式的大部分复杂性是由于次正规,因此它们通常由微码或软件来处理。一些处理器在硬件中处理次正规,与软件或微码实现方式相比,将这些运算加速了10到100的因子。
整数、定点、浮点
处理符号的FP方式被称为符号-大小,它与常规方式的不同之处在于整数被存储在计算机中(二进制补码)。在符号-大小表示中,同一数字的正和负版本仅符号位不同。包括符号位和3个有效数位的4位符号-大小整数将正1和负1表示为:
+1=0001
-1=1001
在二进制补码表示中,n位整数i由二进制n+1位值2n+1的低位n位表示,因此4位二进制补码整数将正1和负1表示为:
+1=0001
-1=1111
二进制补码格式对于有符号整数实际上是通用的,因为它简化了计算机算术。
定点数看起来完全像是整数,但实际上表示具有一定数目的小数位的值。传感器数据通常以定点格式,并且在广泛采用FP之前编写了大量的定点软件。定点数用起来非常沉闷,因为程序员必须跟踪“二进制点”,即数字的整数部分和小数部分之间的分隔符,并且还必须持续地移动数字以保持位处于正确的地方。FP数没有该困难,因此期望能够在定点数和FP数之间进行转换。能够进行转换还意味着我们仍可以使用定点软件和数据,但我们在编写新软件时不限于定点。
舍入FP数
IEEE-754标准要求大部分FP运算以如下方式来计算,如同该运算是以无限范围和精度完成的,并然后被舍入以符号FP数。如果计算完全匹配FP数,则始终返回该值,但通常情况下,计算产生位于两个连续浮点数之间的值。舍入是选择应返回两个连续数字中的一个的过程。
存在许多舍入方式,称为舍入模式;其中的六个是:
该定义未告诉我们如何以任何特定方式进行舍入。一个通用实现方式是执行运算,查看截断值(即适合FP格式的值)以及所有其余位,并然后如果某些条件成立则调整截断值。这些运算全部基于:
L-(最低)截断值的最低有效位
G-(保护)下一最高有效位(即未包括在截断中的第一位)
S-(粘附)不是截断的一部分的所有其余位的逻辑OR
给定这三个值和截断值,我们总是可以根据下表来计算正确地舍入的值:
例如,考虑将两个4位有效数相乘,并然后舍入到4位有效数。
sig1=1011(十进制11)
sig2=0111(十进制7)
相乘产生
sig1×sig2=1001_101(十进制77)
L Gss
截断4位结果的最低有效位被标记为L、下一位G,并且S是被标记为s的其余位的逻辑OR(即S=0|l=1)。为了舍入,我们根据舍入模式和上表中的计算来调整我们的4位结果(1001)。因此,例如,在RNA舍入中,G被设置,因此我们返回1001+l=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有贡献的位全部为1,因此S(通过将这些Si位1加获得)也是零。如果S0为非零,则Si不全是1,因此S为非零。因此在所有情况下,S0=S。
如果G0为零,则Gi为1,并且G也是1,除了S位有进位的情况,这种情况仅当S0为零时才发生。如果G0是1,则Gi是零,并且G也是1,除了S位有进位的情况,这种情况仅当S0为零时才发生。因此G=G0^S0。
通过非常相似的逻辑,L=L0^(G0|S0)。
现在我们有用于负整数和正整数二者的L、G和S,我们可以提出我们的舍入规则:
模式 对正值的改变 对负值的改变
RNE 若(L&G)|(G&S)则增加 若(L&G)|(G&S)则增加
RNA 若G则增加 若(G&S)则增加
RZ 若(G|S)则增加
RP 若(G|S)则增加 若(G|S)则增加
RM
RX 若G|S则设置L 若G|S则设置L
定点数舍入与整数完全相同。用于无符号转换(到整数或定点)的规则与用于正转换的规则相同。
注入舍入
进行舍入的更快方法是注入舍入常数来作为几乎每个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个数字相加并返回一百万或0,也许不是人们认为的舍入错误:
(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)尤其严重,在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,在处理电路14中对它们进行操作并然后将结果值写回到寄存器库12。
寄存器库12可以具有各种不同的形式。例如,将被操作的操作数可以包括浮点操作数、定点操作数、整数操作数、以及HPA或RHPA数操作数(如稍后将描述的)。寄存器库12可用于根据寄存器库12的配置来存储这些类型的操作数的混合。这些操作数可以具有不同等级的精度,如可以由其格式预定义,或者如可以使用与寄存器相关联的元数据可编程地指定,这将在后面关于HPA号码操作数进行描述。
如图1所示,寄存器库12可以包括元数据寄存器22,其用于指定与存储在寄存器库12的相应数据寄存器中的HPA或RHPA值相关联的元数据(元数据的内容的示例在下面给出)。在一些情况下,每个数据寄存器可以具有相应的元数据寄存器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位加法器),相反,可编程有效数使得较小加法器能够集中于较大范围内的可编程位有效数的特定窗口。实际上,大多数计算不需要双精度浮点的整个范围的有效数。例如,亚原子问题可能累加非常小的值,并且天文学并发症(astronomic complication)可能累加非常大的值,但是将质子的宽度与星系之间的距离相加通常不会有用。甚至对于高性能计算,大部分累加在有限范围上发生。
通常,编写程序的程序员将知道其中有用的结果可能下降的预期的值范围(取决于应用)。程序员可以确定特定总和的所有数据将具有小于260的大小,并且具有低于250的大小的值将不会以任何有意义的方式影响总和,因此在这种情况下,通过使用具有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位部分是相同的,但如下面的图25所示,也可以具有包括不同数目的重叠位的不同的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位加法可被并行执行,以使得不管通道的数目,整个M位值可以在执行N位加法所需的时间内相加。
实际上,至少(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能够大大节省处理时间。注意,术语“重叠减少”并不意味着每个通道中的重叠位必须减小到更小的量级。至少一个通道减小其重叠位的量级是足够的,并且一些形式的重叠减少(例如,下面讨论的图13的限制冗余示例)可能导致给定通道中的重叠位量级增加。下面描述重叠减少操作的一些示例。
图5示出了针对RHPA值定义的元数据的示例。在该示例中,元数据包括锚向量和重叠大小值V,该锚向量包括多个锚元素w[i],每个锚元素指定RHPA值的相应通道中的最低有效位的有效数(或“权重”),该重叠大小值V指定每个通道中重叠位的数目。
在一些情况下,用于RHPA数的元数据还可以显示地或隐式地通过标识位M的总数(给定通道大小N,可以从其确定通道的数目)来标识RHPA数所包括的N-位通道的数目。
与其中连续通道中的w[i]、w[i+1]将相差通道大小N的HPA格式不同,对于RHPA值,连续通道中的权重w[i]、w[i+1]相差N-V(通道大小减去重叠位数)。因此,处理电路14可以根据元数据中的锚向量和重叠大小来标识RHPA值内的每个位的有效数。具有锚值w[i](j=0到N-1)的给定通道的给定位j的有效数由w[i]+j给出。注意,在两个或更多个RHPA数的相加期间,不必需要考虑锚值或重叠大小,并且可以将数简单地相加以形成结果。处理器在RHPA格式和其他格式(例如,整数或浮点数)之间进行转换时使用锚值,并且在执行重叠传播或去往/来自其他格式的转换时参考重叠大小值V。
图5将重叠大小值V示出为与锚向量分离,但在另一示例中,重叠大小V可以在锚向量自身中指定。例如,与用于保持RHPA值的寄存器12相同大小的单指令多数据(SIMD)向量寄存器可被分配用于存储元数据,并且向量寄存器的每个通道保持相应的处理通道的相应锚值w[i]以及重叠大小V。
此外,在控制寄存器中定义这些参数不是必要的。在一些系统中,重叠大小V对于给定硬件实现方式可以是固定的,并且可能不是用户可编程的。然而,使得程序员能够指定重叠大小V对于权衡在不在通道之间传播进位的情况下可以执行的连续加法的数目和用于将给定大小P的值相加所需的通道的总数可能是有用的。通常,重叠大小V越大,则可以在没有重叠传播的情况下执行更多的加法,但这将导致给定大小P的数字需要更多的通道。通过减小重叠大小V,给定大小的数字可以使用更少的通道来相加,这可以通过允许使用更宽向量处理器的相应的通道子集来并行地将两个或更多个单独的RHPA值集合相加来允许性能节省(例如,参见下面讨论的图21-24),但在该情况下,将更快到达溢出边界并且在可能需要将重叠位传播到后续通道之前可能执行更少的加法。
在其他示例中,可以在编码用于控制RHPA值的处理的指令时指定重叠大小V。类似地,锚向量也可以在指令中标识。在一些示例中,不同于锚向量单独地指定每个通道的有效数,元数据可以简单地指定RHPA值的给定通道内的给定位的有效数,并且其他通道的有效数可以从该位有效数导出。例如,如果仅指定最低通道的位有效数,则可以通过将N-V的倍数与最低通道的有效数相加来计算其他通道的有效数。
图6示出了使用RHPA格式来加速累加运算的示例,其是相对常见的运算,特别是在其中可能需要将数千或甚至数百万个不同值相加在一起的高性能计算中。可以提供累加器寄存器30来以表示目前相加的所有值的运行总数的RHPA格式存储累加器值。在每个周期中,提供输入操作数32以加到RHPA累加器值。对于一些指令,输入操作数32可以由指令直接指定。对于其他类型的指令,输入操作数32可以是应用于由指令直接指定的操作数的一些其他处理操作的结果(例如,乘加指令可以通过将两个值相乘来生成输入操作数32)。输入操作数32可以是整数值或浮点值。
输入操作数32被提供给生成RHPA数36的相应的N位部分A[0]到A[3]的多个通道转换单元34。每个通道转换单元34接收如由与RHPA累加器值相关联的元数据的锚向量的相应元素定义的该通道的有效数w[i],并且使用它来将输入操作数32的位(在浮点值的情况下,有效数的位)映射到该通道中的相应有效数的位。对于一些通道,在输入操作数32中可能没有位与具有该通道中的任何位的有效数相对应,并且因此这些通道可被完全填充符号位(如果输入操作数32为正则为0,如果输入操作数32为负则为1)。每个通道的重叠位被设置为符号位。下面将在图10和11中更详细地描述整数或浮点值到RHPA的转换。
所生成的RHPA值36的每个N位部分然后由针对每个通道并行提供的相应加法电路单元38加到累加器值的相应部分。每个加法电路单元38与其他加法电路单元38并行地执行独立的N位有符号二进制补码加法,以产生被写回到累加器寄存器30的相应部分的结果的相应N位部分,以替换累加器的前一个值。加法是独立的,因为没有进位在通道之间传播。
通过多次重复累加运算,一系列输入操作数可被快速、准确和关联地加在一起,并且输入操作数被输入的顺序不会影响结果。这意味着累加可被更快地执行。例如,可以并行地提供图6所示的电路的两个或更多个实例以相加要相加的值的阵列的相应子集,以形成多个部分累加器值。然后可以将每个部分累加器值相加以形成最终结果。由于浮点的非关联性质,这对于浮点算术是不可能的。
最终累加结果可以留在累加器寄存器30中作为RHPA值用于进一步处理,或者转换回替代数字表示。下面描述将RHPA转换为整数或浮点的技术。
一些示例在本文是有用的。为了便于解释,考虑包括被分为四个8位通道的32位数字的小RHPA格式。对于这些示例V=4,因此每个通道具有4个非重叠位和4个重叠位。不是试图将FP数转换为这种格式,而是使用16位符号-大小整数作为输入。我们还假设0的隐式锚,因此我们对所有整数值感兴趣(如果初始值是FP格式,则如果存在任何小数输入位,则它们将被丢弃-但这可能不是符号大小整数输入)。
示例1:假设我们将符号大小十六进制整数123a转换为RHPA格式。锚为零,因此低阶通道的非冗余位包括输入的权重为20到23的部分,即a=1010(二进制)。数是正的,因此低阶通道的重叠位为零,给出二进制0000_1010的低阶通道值。类似地,下一通道包括输入的权重为24到27的部分,在这种情况下3=0011(二进制)。以所有通道继续(它们都被并行计算),我们得到RHPA数:
0000_0001 0000_0010 0000_0011 0000_1010
示例2:将923a转换为RHPA是类似的(这是符号-大小格式的-123a),但由于设置了符号位,因此每个通道都得到了它在前面例子中完成的二进制补码:
1111_1111 1111_1110 1111_1101 1111_0110
示例3:将7fff(最大可能正输入)加到123a示出了重叠位的效用。rhpa是将16位符号大小数加到小RHPA数中的一个的小程序。该加法容易处理,因为由于重叠位而在通道之间没有进位。
$rhpa 0102030a 7fff
0000_0001 0000_0010 0000_0011 0000_1010
+0000_0111 0000_1111 0000_1111 0000_1111
=0000_1000 0001_0001 0001_0010 0001_1001
例4:将20f0加到923a示出了不同的通道可以具有不同的符号:两个通道是正的并且两个通道是负的。
$rhpa fffefdf6 20f0
1111_1111 1111_1110 1111_1101 1111_0110
+0000_0010 0000_0000 0000_1111 0000_0000
=0000_0001 1111_1110 0000_1100 1111_0110
下面附录A中示出了其他示例。
除了使得能够使用比常规HPA更窄的附加电路单元来将值相加之外,RHPA还可能快得多,因为它可以同时累加多个值。然而,利用常规HPA,给定的非常宽的加法器一次只能相加两个HPA值,而利用RHPA,由于重叠位可以容纳对累加器的多达2V-1-1个值的加法而不必担心通道溢出,则这意味着许多值的加法可以作为单个运算来执行,其中同时相加所有值,而不需要多个连续相加。
例如,图7示出了j个RHPA值(j大于或等于3)的加法,其中,每个加法电路单元42包括j到2的约简树(reduction tree)44(华莱士树(Wallace tree),类似于在乘法器中使用的),其可以将j个分离的N位值减少为两个N位项,然后是进位传播加法器46,用于将该两个N位项相加以产生N位结果值R。例如,j可以是4、8或16,并且被比较以顺序地一次加一个值,这可以大量减少相加给定数目的数据值所花费的时间。RHPA可能的原因是重叠位允许我们相加多个条目而不会跨过通道边界。
如图8所示,在单个运算中相加的RHPA值可以从在输入向量中指定的相应输入值中导出。在该示例中,输入向量的每个元素是相应的浮点值FP0-FP3。处理器具有通道转换单元34的阵列,每个通道转换单元的功能与图6的通道转换单元相同,但接收不同的浮点输入FPj或锚权重w[i]。通常,通道转换单元34-ji生成对应于原始输入向量的浮点值FPj的RHPA值的第i个元素。例如,浮点值FP0被提供给第一行的通道转换单元34-00到34-03中的每一个,通道转换单元34-00到34-03产生相应的RHPA值RHPA0的各个元素RHPA0[0]到RHPA0[3]。类似地,其他行生成对应于浮点值FP1到FP3的RHPA值RHPA1-RHPA3的元素。每个所生成的RHPA值的相应元素由加法电路单元相加以生成累加器值的相应结果。每个通道的处理与其他通道完全并行地执行。
尽管图8示出了其中输入向量中的浮点值的数目与RHPA值的处理通道的数目相同的示例,但这不是必需的。例如,8元素浮点向量可被映射到8个4元素RHPA值,其中,4个处理通道将每个RHPA值的相应元素相加。RHPA值内的通道的数目取决于RHPA值的元数据,而不是输入向量的大小。
此外,尽管为了便于解释而在图7和8中未示出,但在一些情况下,被加的RHPA值中的一个可以是累加器值R的前一个值自身。
图9示出了使用RHPA格式来执行累加的方法。在步骤480处,接收到一个或多个接下来的输入值。这些输入值可以是由指令直接指定的操作数,或者可以是响应于指令而执行的一些其他处理的结果,例如,乘法的乘积。如图7和8所示,在一些情况下,此时可能接收到多个输入值。在步骤482处,接收到的(一个或多个)输入值被转换成RHPA格式。下面将参考图10和11来描述该转换的示例。在步骤484处,并行加法电路单元38、42执行(一个或多个)输入值的相应N位部分和累加器值的并行N位加法以产生结果的相应N位部分,并且结果被写到累加器寄存器30。每个N位加法可以是可以与其他加法完全并行执行的标准二进制补码N位加法。替代地,当两个或更多个输入值被加到累加器时,则N位加法可以包括使用华莱士树将多个项减少到两个项,并且使用进位传播加法器将这两个项相加以生成结果的相应N位部分。
在步骤486处,确定是否满足重叠传播条件。如下面所讨论的,当例如已经执行了一定数目的累加时、当某个通道中的重叠位达到给定值时、或者当步骤484处所执行的N位加法中的一个期间从给定通道发生实际溢出时,可以认为满足重叠传播条件。如果满足重叠传播条件,则在步骤488处,对累加器值执行重叠传播操作以将重叠位从一个通道传播到后一通道,这减少了从给定通道溢出的机会。下面描述重叠传播操作的各种示例。重叠传播操作的结果被写回到累加器寄存器,以便可以利用通道之间减少的溢出机会来执行进一步累加。另一方面,如果未满足重叠传播条件,则步骤488被省略。在步骤490处,确定是否更多输入值将被考虑,如果是,则方法返回到步骤480。如果否,则方法结束,或者可选地,在步骤492处,最终累加器结果可以被转换为另一表示,例如,浮点、定点或整数。下面参考图17到19描述用于执行该转换的技术。
尽管图6-8示出了对RHPA格式的值执行加法的示例,但还可以执行其他运算。例如,更一般地,处理电路14可以具有多个运算电路单元以并行地执行独立的N位运算,以计算两个或更多个RHPA值的相应N位部分的函数以生成也是RHPA格式的结果值的相应N位部分。例如,每个N位运算可以包括下列项的任一项:加法或减法、乘法、逻辑运算(例如,AND、OR、NOR、XOR等)、伽罗瓦(Galois)域运算等、或者两个或更多个这种运算的组合。使用RHPA格式支持N位运算的步骤,该运算使得进位被容纳在同一通道内,这有助于加快长值的处理。
转换为RHPA表示
图10和11示出了将浮点值转换为RHPA值的示例。如图10所示,根据浮点值的指数E和在用于将被执行的RHPA计算的元数据中定义的锚值,转换实质上将浮点值的有效数F的位映射到RHPA值的相应的非重叠位,其可以跨多于一个通道。如果浮点值为负,则在将它们映射到RHPA非重叠位时,有效位被取反。另一方面,RHPA值的重叠位用符号位填充。如果浮点值为正(由符号位S=0指示),则每个通道的重叠位V将为零,并且如果浮点值为负(符号位S=1),则重叠位V被设置为1。
图11更详细地示出了转换操作。图11示出了用于生成RHPA值的单个N位通道的处理操作。为了生成整个RHPA值,图11所示的运算将针对每个通道被执行(优选地并行执行,尽管也可以使用串行实现方式)。因此,例如,图11对应于图6或8所示的单个通道转换单元34的操作。
如图11所示,通过包含隐式位50,将所存储的小数F扩展为实际有效数,如果浮点值为正规且非零,则隐式位50等于1,并且如果浮点值为次正规或零,则隐式位50等于0。此外,实际有效数(1.F或0.F)在最高有效段被填补等于‘0’的N-V个位。所得到的值被输入到左移位器52,其将该值左移多个位位置,Lshift。移动量Lshift基于正被转换的浮点值的指数E和正被处理的特定通道的通道锚值w[i]来计算。
通常,Lshift被计算等于以下值,其中,Z=E-B-w[i]+1:
●如果Z≤0,则Lshift=0(当浮点值比将生成的通道的任何位较不重要时,是这种情况)
●如果Z≥N-V+Fsize,则Lshift=0(当浮点值比将生成的通道的任何位更重要时,是这种情况)
●否则,Lshift=Z。
其中:
●E是浮点值的(偏置)指数
●B是用于正被使用的特定浮点表示的偏置值,例如,对于单精度B=127并且对于双精度B=1023
●w[i]是正被生成的当前通道的通道锚值,其指示该通道中的最低有效位的有效数
●Fsize是实际有效数中的位数(包括0或1的隐式位,但不包括N-V个‘0’位),例如,对于单精度Fsize=24或者对于双精度Fsize=54。
●N是通道大小(RHPA值的一个通道中的总位数),以及
●V是重叠位的数目。
将理解,用该精确的运算集合来计算偏移量不是必须的-可以使用给出等同结果的任何操作。此外,在其中通道锚值w[i]指示除了通道的最低有效位之外的位的有效数的示例中,可以相应地调整Z的表达式。
移位结果54的顶部N-V个位被选中。如果0<Z<N-V+Fsize,则来自原始有效数的至少一个位将被移入该窗口。移位结果54的顶部N-V个位在最高有效端被填补V个重叠位。重叠位初始地被设置为0。如果原始浮点值的符号位S为0(浮点值为正),则该值被输出为当前通道的转换N位通道值60。另一方面,如果浮点值为负(符号位=1),则该值被取反62(反转所有位并加1),并且结果被输出为转换N位通道值60。
总之,锚值w[i]给出我们针对当前通道所关心的最小位的权重(在对应于N-V的通道之间具有锚的差异)。使用移位器52来选择由通道表示的范围内的适当的有效位。如果我们正在转换正数,则重叠位包含0,并且如果我们正在转换负数,则我们利用移位结果的N位二进制补码来填充通道,这会使得用1来填充重叠位。然后可以针对每个通道并行地执行该运算以生成总体RHPA值。
图10和11示出了将浮点值转换为RHPA值。在转换定点或整数值时,操作是相同的,除了在上述表达式中没有指数和指数值E被有效地固定为某个已知值(对于整数为零,并且对于定值为非零),并且原始值Fsize中的位数可以不同。对于浮点,如果原始值与该通道所表示的范围重叠,则来自有效数的位被映射到N位通道的相应位,但是无取反是必须的,因为定点或整数值已经是使用有符号数字表示的二进制补码(与FP数的符号-大小表示相对)。
重叠减少
如上所述,我们可以相加至少2V-1个数而不用担心通道溢出,即其中特定N位通道的值发生变化以致丢失信息的情况。通道溢出将在从通道的第二个最高有效重叠位发生进位时会发生。为了避免丢失信息,当我们处于或靠近通道溢出边界时,可以执行重叠减少操作以减少正被使用的重叠位的数目,以释放重叠位中的空间以在必要时容纳其他进位。通常,重叠传播操作可以包括其中第一RHPA值被转换为第二RHPA值的任何操作,其中,第二RHPA值的至少一个N位部分中的重叠位表示比第一RHPA值的相应部分中的重叠位更小的大小。
执行重叠减少的一种方式是执行重叠传播操作,其中,来自给定通道的重叠位被传播到下一最高通道并且被添加到该通道中的非重叠位。通过将重叠位传播到下一通道,前一通道中的重叠位被推更靠近零,这减少了另一个加法导致通道溢出的机会。存在执行重叠传播操作的各种方式,下面参考图12到14描述其中的三种。
图12示出了重叠传播操作的第一示例,其中,给定RHPA值被转换为“非冗余”RHPA值,其指其中每个通道中的重叠位都为0的RHPA值。尽管“非冗余冗余HPA”值的概念可能看起来矛盾,但术语“非冗余”被用于指代仅存在一种使用其中所有重叠位都是0的RHPA值来表示给定值的方式的事实(与具有一些非零重叠位的RHPA值相反,其允许多种方式来表示同一数值)。利用非冗余RHPA值,非重叠位NV具有与相应位在常规二进制补码整数或定点值中具有的位值相同的位值。
如图12所示,为了使得给定RHPA值非冗余,首先执行初始N-位加法70,以将来自最低通道的重叠位V[0]的N位符号扩展版本添加到下一最高通道的全部N位(包括非重叠位NV[1]和重叠位V[1]),以生成包括修改非重叠位NV’[1]和修改重叠位V’[1]的N位值。尽管修改重叠位V’[1]经常可以与原始RHPA值的相应重叠位V[1]相同,但有时添加来自较低通道的符号扩展重叠位V[0]可能导致传播到重叠位中的进位,导致修改重叠位V’[1]的值不同。这是后续加法被顺序执行的原因。因此,对于每个后续通道,执行另外的N位加法72、74以将在前面的加法中生成的修改重叠位V’[1]、V’[2]的N位符号扩展添加到下一最高通道的所有N位,以产生进一步的修改非重叠位和重叠位,直到达到最终通道为止。然后形成非冗余RHPA值,其中,最低通道中的非重叠位NV[0]从原始RHPA值直接映射,对应于修改非重叠位的其他通道中的非重叠位NV’[1]、NV’[2]、NV’[3]在相应的加法70、72、74中生成,并且所生成的非冗余RHPA值中的全部重叠位被设置为0。
总之,使得数字非冗余通过以下操作来实现:将给定通道的非重叠位添加到来自先前通道的符号扩展重叠位,从低阶通道开始并继续到高阶通道,在给定通道的重叠位已被传播到下一通道之后将这些重叠位归零。由于每次加法都需要由前面的加法生成的修改重叠位,因此这是连续过程,并且因此如果原始RHPA值的向量相对较宽,则该过程可能很慢。
将RHPA值转换为非冗余形式的数值示例如下所示,同样V=4并且N=8:
步骤1:符号扩展通道0重叠位,添加到通道1,清零通道0重叠位
1101_0111 0111_1010 0111_0011 0000_0100
+1111_1000
=0110_1011<=新通道1
步骤2:符号扩展新通道1重叠位,添加到通道2,清零新通道1重叠位1101_01110111_1010 0000_1011 0000_0100
+0000_0110
=1000_0000<=新通道2
步骤3:符号扩展新通道2重叠位,添加到通道3,清零新通道2重叠位
1101_0111 0000_0000 0000_1011 0000_0100
+1111_1000
=1100_1111<=新通道3
最终非冗余值:
1100_1111 0000_0000 0000_1011 0000_0100
图13示出了将RHPA值转换为“限制冗余”(或“最小冗余”)RHPA值的重叠传播操作的第二示例。在限制冗余RHPA值中,在任何给定通道中,相应的一组重叠位对应于+1、0和-1中的一个并且不能取任何其他值。也就是说,给定通道中重叠位V的位的模式如果被解释为有符号整数,则具有+1、0和-1的值。当考虑总体RHPA值中的重叠位V的有效数时,重叠位实际上表示+2W、0或-2W的值,其中,W是下一最高通道中的最低位的有效数。在限制冗余形式中,不同的通道针对重叠位可以具有不同的值,但每个通道具有受限于集合{+1,0,-1}中的一个的重叠位。给定通道中的最低有效两个重叠位将为0b01、0b00、0b11以分别表示+1、0、-1,并且如果V>2,则同一通道的任何其他重叠位将等于该通道的第二最低有效重叠位。
如图13所示,限制冗余转换的优势是整个重叠传播操作可被并行地执行。如图13所示,执行多个并行N位加法76,每个N位加法76将给定通道的符号扩展重叠位V[i]添加到下一最高通道的非重叠位NV[i+1](其中下一最高通道中的重叠位已经被设置为0)。这些加法中的每一个都生成限制冗余RHPA值的相应N位部分。通过将原始RHPA值中最低通道的非重叠位NV[0]直接映射到限制冗余值的相应位并将最低通道中的重叠位设置为零,来简单地形成限制冗余RHPA值的最低有效通道。由于每个通道最多使用其自己的通道中的信息和来自相邻低阶通道的重叠位来并行地完成所有步骤,因此该方法比用于使得向量非冗余的过程快得多。
下面示出了将RHPA值转换为限制冗余的示例。
步骤1:从相邻低阶通道创建符号扩展重叠值
0000_0111 0000_0111 1111_1000
步骤2:每个通道清除其自己的重叠值
1101_0111 0000_1010 0000_0011 0000_0100
步骤3:将来自步骤1和2值相加
1101_0111 0000_1010 0000_0011 0000_0100
+0000_0111 0000_0111 1111_1000
=1101_1110 0001_0001 1111_1011 0000_0100
限制冗余值:
注意,示例6中的限制冗余值具有限于集合{+1,0,-1}的重叠值。另外注意,限制冗余值与在上述非冗余示例中表示同一数字的非冗余值完全不同。与图12的顺序过程不同,该类型的转换可以在单个周期内完成。
一旦数字是限制冗余的,则可以相加最少2V-1-2个另外的FP值而不会导致通道溢出。还可以将至少2V-2个限制冗余RHPA值加在一起而不引起通道溢出。该最后一个限制对于结合可能来自其他SIMD单元或其他处理器的部分累加是意义的。
注意,在图13的限制冗余重叠传播操作中,可能在原始RHPA值具有其中所有重叠位V[i]都为0的通道时,限制冗余RHPA值中的相应通道可能由于由该通道的非重叠位NV[i]和下一最低通道的重叠位V[i-1]的相加而导致的进位,而具有表示+1或-1的重叠位V’[i]。因此,将理解,术语“重叠减少操作”并不意味着所有通道必须减少它们的重叠位的大小-在一些通道中重叠位的大小可能增加。然而,通常,重叠减少操作将使得减少至少一个通道中的重叠位的大小。
如果需要非冗余RHPA值,则可以通过执行图12的相同顺序方法来从冗余限制RHPA值生成。然而,非冗余RHPA值还可以通过以下操作来生成:首先使用关于图13所讨论的方法将给定RHPA值转换为限制冗余形式,并且然后将限制冗余值映射到非冗余RHPA值,如图14所示。该方法的优势是可以用一系列并行N位运算(而不是图12中的顺序操作)来生成非冗余RHPA值。
通常,图14所示的方法基于将被转换为非冗余形式的限制冗余RHPA值来生成重叠值和非重叠值。重叠值表示限制冗余RHPA值的所有重叠位的总数(考虑每个位的符号和相关的有效数),并且非重叠值表示所有非重叠位的总数(同样,考虑它们的符号和有效数)。如图14的部分E所示,重叠值和非重叠值被相加以生成非冗余RHPA值,并且该相加由并行加法器78在N位块中执行。如果执行重叠值和非重叠值的完全M位相加,则每个加法器78将非重叠值和重叠值的相应N位部分与表示将从下一最低通道传播的进位值的进位位C相加在一起,以生成非冗余RHPA值的相应部分。
如图14的部分E所示,非重叠值简单地对应于具有被设置为0的任何重叠位V的限制冗余RHPA值(如上所述,顶部通道可以被视为不具有任何重叠位,因此可以在非重叠值中保持不变)。
以上面示出的限制冗余RHPA值为例(同样N=8并且V=4):
相应的非重叠值将是:
1101_1110 0000_0001 0000_1011 0000_0100
另一方面,生成重叠值稍微更复杂,因为重叠位额一些集合可能表示-1,并且因此这些位的总数被从表示+1或0的重叠位的总数中减去。例如,在限制冗余RHPA值中:
重叠位表示:
但这些指示对非重叠值的下一最高通道的调整如下:
(注意,限制冗余RHPA值的通道1中的重叠位实际上表示例如对通道2的调整)。我们可以有效地看到,重叠位表示具有+1、0或-1的符号数字的高基数二进制补码值。例如,限制冗余RHPA值(将被添加到通道3)的通道2中的重叠位表示+1*2^w[3](其中,w[3]是通道3的最低有效位的权重)。类似地,限制冗余RHPA值的通道1中的重叠位表示-1*2^w[2]等。
因此,可以通过从表示0或+1的重叠位的总数减去表示-1的重叠位的总和来计算对于所有重叠位的总数的等同二进制补码值:
示例A:
(重叠位代表0或+1的通道中的重叠位的总数)
VHR-:0000_0000 0000_0001 0000_0000 0000_0000
(重叠位表示-1的通道中的重叠位的总数)
被表示为等同加法(取反第二个值)将是:
在实践中,如在限制冗余RHPA值中,每组重叠值只能取值-1、0和+1,仅需要考虑每通道的最低有效两个重叠位(其将取值0b11、0b00或0b01中的一个),并且所有其他重叠位将等于通道的第二最低有效重叠位。
因此,如图14的部分B所示,仅需要考虑每通道两个位。如图14的部分B的左侧所示,形成第一值VHR+,包括与除了最低通道之外的每个通道相对应的一对位,并且对于每一对:
-该对的高位等于0,并且
-如果相应通道中的重叠位表示-1或0,则该对的低位等于0,并且
如果相应通道中的重叠位表示+1,则该对的低位等于1。
注意,如果将该方法应用于上述示例,则第一值VHR+将等于示例A所示的顶部值中以粗体显示的位。
类似地,如图14的部分B的右侧所示,可以形成第二值VHR-,包括每通道(不包括最低通道)的一对位,并且对于每一对:
-该对的高位等于0,并且
-如果相应通道中的重叠位表示+1或0,则该对的低位等于0,并且
如果相应通道中的重叠位表示-1,则该对的低位等于1。
同样,注意,这实际上代表了上面示例A所示的底部值中的每通道最低有效两个位(粗体显示)。
然后可以从第一值VHR+减去第二值VHR-(或者可以将VHR+加到VHR-的二进制补码)以生成重叠值的相应的两位部分V’[0]、V’[1]、V’[2]。这些两位部分中的每一个等同于重叠值的相应通道的底部两个位(参见上面示例A的重叠值中以粗体显示的每通道两个位)。每个两位部分然后可被符号扩展(如果顶部位是0,则扩展0,并且如果顶部位是1,则扩展1)以生成图14的部分E所示的重叠值的相应N位部分。
部分A、C和D示出了用于确定进位位C[1]到C[3](进位位C[0]总是0)以加到部分E中的加法的相应通道的的进位前瞻(lookahead)方案。
如部分A所示,提供逻辑82以检查除最低通道之外的限制冗余RHPA值的每个通道的非重叠位NV[1]、NV[2]、NV[3]。用于给定通道NV[i]的逻辑82确定相应的非重叠位模式NVP[i],其指示以下位模式之一:
●传播(p)-当NV[i]的所有位都是1时
●杀死(k),其中NV[i]的所有位都是0
●生成(g),其中NV[i]的最低有效位为1并且所有其他位为0
●加倍(d),其中NV[i]的最低有效位为0并且其他所有位为1
●无趣(u),对应于任何其他位模式。
将理解,不是对原始限制冗余RHPA值的运算,位模式标识逻辑82还可以应用于部分E所示的非重叠值中的非重叠位的集合。因此,通常,每组非重叠位的位模式被标识。
类似地,如图14的部分C所示,已经生成了重叠值的位对,位模式标识逻辑82按照与非重叠值相同的方式将每个位对分类为p、k、g、d(对于重叠值,不可能有“无趣”情况,因为仅两个位被比较)。同样,位模式标识逻辑82可以在对位对进行符号扩展之后被应用以形成部分E所示的完全重叠值,而不是在其之前,但仍然不可能出现“无趣”情况u,因为比重叠值的给定通道的第二位更高的所有位将具有与第二位相同的值。
将理解,由位模式标识逻辑82标识的相应重叠和非重叠位模式可以使用被编码以标识检测到条件p、k、g、d、u中的哪一个的多位信号来表示,或者由各自对应于条件p、k、g、d中的一个并标识是否已经检测到该条件的一系列一位指示来表示(u可以由不存在任何条件p、k、g、d来表示)。通常,位模式标识逻辑82可以包括一组用于确定上述条件(例如,使用AND和NOR门)的逻辑门。
如图14的部分D所示,对于除了最低通道之外的每个通道,进位前瞻电路84接收对该通道中的非重叠位的非重叠模式NVP[i]和下一最低通道中的重叠位的重叠模式VP[i-1]的指示,并且这被映射到通道生成信号gi,并且对于除了最低和最低通道之外的通道,被映射到通道生成信号pi,根据下表:
其中:
●在标为“G”的情况下,通道生成信号gi=1并且通道传播信号pi=0
●在标为“P”的情况下,通道生成信号gi=0并且通道传播信号pi=1
●在标为“K”的情况下,通道生成信号gi=0并且通道传播信号pi=0
通道生成和通道传播信号然后被输入到前缀逻辑86,其根据以下等式为生成每个通道的进位位C[i]:
●C[0]=0
●C[1]=g1
●C[2]=g2OR(p2AND g1)
●C[3]=g3OR(p3AND g2)OR(p3AND p2AND g1)
如果有4条以上的通道,则以此类推。
本质上,通过检查每个通道中的重叠值和非重叠值的位模式,可以确定是否存在到该通道的进位,将存在进位,并因此可以确定每个进位位C而实际上不需要顺序地执行加法。这使得部分E能够执行多个并行加法78以给出与顺序地执行加法相同的结果。
因为针对每个通道可以大部分并行地执行图14的操作,因此对于相对宽的向量,通过首先执行图13的限制冗余转换并然后执行图14的非冗余转换来执行重叠传播可以比执行图12所示的非冗余处理更快。
下面的附录B提供了该重叠传播方法的更多细节。
重叠减少操作还可以包括如图15所示的重叠累加操作。当执行一系列累加以生成将被存储在RHPA累加器寄存器90中的RHPA累加器值时,第二寄存器92还被分配用于存储重叠累加器值。如图15所示,在开始将输入操作数累加到RHPA累加器寄存器之前,重叠累加器寄存器92初始地被设置为0。
当需要重叠减少时,执行重叠累加操作94,其中,来自RHPA累加器值的每组重叠位被符号扩展并且被加到重叠累加器寄存器90的相应部分。RHPA累加器寄存器90的重叠位被清零,并且然后可以执行到RHPA累加器寄存器90的进一步累加而没有溢出风险。
如果RHPA累加器寄存器90再次到达存在通道溢出风险的点,则可以执行另一重叠累加操作94以再次将来自RHPA累加器值的符号扩展重叠位加到重叠累加器值的相应部分的先前内容。
因此,重叠累加器值高效地保持在RHPA累加器的每个通道中生成的重叠位的运行总数,其中,每当RHPA累加器开始用完重叠位时,这些位被添加到重叠累加器值中,以使得RHPA累加器的重叠位可以被清零。由于重叠累加器值使得每通道全部N位可用于跟踪重叠值(而不仅是RHPA累加器中的V个位),因此可以在存在丢失来自RHPA累加器和重叠累加器寄存器90、92的组合的信息的任何风险之前,执行非常大量的到RHPA累加器的累加。
一旦到RHPA累加器寄存器90的最终累加完成,则可以通过将如下三个向量相加以按照RHPA形式计算最终总和96:
●向量97,对应于最终RHPA累加器值的,重叠位被清除为0;
●向量98,其中最低通道为0,并且每个后续通道是来自最终RHPA累加器值中的下一最低通道的重叠位“V”的符号扩展;
●向量99,其中最低通道为0,并且每个后续通道对应于重叠累加器寄存器92中的下一最低通道的值。也就是说,重叠累加器寄存器92可被左移N位以生成向量99。向量99的每个元素表示在任何先前的重叠累加操作94中被添加到重叠累加器寄存器中的所有重叠位的总和。
如上所述,可以使用多个并行N位加法电路单元在N位块中执行最终总和96。通过使用如图7的示例中的3:2减少和进位传播加法,或者通过使用常规N位加法器执行两个连续的2输入整数加法,可以在单个运算中计算最终总和96。
重叠累加操作相对于重叠传播的优势在于,针对重叠累加操作执行的处理完全停留在通道内,并且不存在如将一个通道的重叠位传播到另一通道所需的通道之间的数据移位。利用重叠累加方法,在通道之间移位数据仅在最终总和96计算期间需要,其将针对整个累加执行一次而不是在每个重叠累加操作94处执行。
重叠累加操作的另一优势是它作为整体来实现溢出RHPA向量的求和(例如,通过相加许多大数字),但随后回到如将被正确计算的后续累加的范围(例如,通过减去较大的数)而不丢失信息(因为实际上,高阶通道获得重叠位)。
另一方面,重叠累加操作可能需要第二寄存器被分配用于存储重叠累加器值,因此如果寄存器压力意味着没有足够的寄存器来提供每累加两个寄存器,则重叠传播操作可能是优选的,其可以在通道之间传播重叠位以便将信息保存在与RHPA累加器相同的寄存器中。
因此,重叠减少可以通过重叠传播或通过重叠累加来实现。
我们将通常希望累加2V-1个以上的浮点值(其中,V是除顶部通道之外的任何通道中的最小重叠位数),在这种情况下,可能周期性地需要重叠减少操作以避免在通道之间溢出。
无论使用哪个重叠减少方法(可以执行重叠传播方法和重叠累加方法中的任何一个),处理器都可以以不同方式来确定何时执行重叠减少操作。例如,确定何时这么做的三种方式包括:
(1)对累加值的数目进行计数,并且在每k次加法或减法之后进行重叠减少(其中,如果使用重叠累加或重叠传播操作转换为非冗余形式,则k≤2V-1-1,或者如果使用重叠传播操作转换为限制冗余形式,则k≤2V-1-2)。
(2)通过检查最大正值(0b0111...)或最大负值(0b1000...)、或几乎最大正值或最大负值的重叠位来检测到我们接近通道溢出状态。当检测到这些条件时,则执行重叠减少。注意,在其中每周期多于一个值被累加到累加器寄存器的情况下,则接近溢出检测可能需要比当每周期仅一个值被累加时更早地触发重叠减少操作-例如,对于每个周期两个值被累加,可以在重叠位表示0b011...110或0b100..001时触发溢出减少(使得两个增量或减量可能导致通道溢出)。因此,通常,处理电路可以检测重叠位何时超过某个预定值并然后触发重叠减少操作。
(3)通过检查来自高阶重叠位(符号位)的转入(carry-in)和进位来检测到我们有实际通道溢出。然而,这可能需要一些额外的逻辑以便恢复到非溢出状态。
使用方法(2)和(3)相比于方法(1)的理论益处是用于(1)的计数方法必须是悲观的。特别是在累加混合符号值时,在我们有任何通道溢出危险之前,可能存在多于2V-1个的累加。另一方面,由于转换为限制冗余格式非常便宜(在一些实现方式中,可以在一个周期内完成),因此很可能(1)将是实践中性能最高的方法。
在上面的示例中,重叠减少操作与到RHPA值的累加分离地执行。然而,还可以在向RHPA累加器添加另一RHPA值的同时执行重叠传播操作。
如图16所示,当第一RHPA值R1是限制冗余形式时,可以执行重叠传播以生成与通过将输入操作数(例如,浮点值FP)转换为RHPA形式(该转换可以如上面关于图10和图11所讨论的那样执行)所生成的第一RHPA值R1和第三RHPA值R3的总和相对应的第二RHPA值R2。限制冗余RHPA值R1被映射到两个向量:其中第一RHPA值R1的所有重叠位都被设置为0的非重叠向量RNV,以及其中底部通道为0并且其他通道被设置为第一RHPA值R1的前一通道的重叠位的符号扩展的重叠向量RV。
然后并行执行多个3输入N位加法以将非重叠向量RNV的相应N位部分、重叠向量RV和第三RHPA值R3相加以生成第二个RHPA值R2的相应N位部分。这些加法可以通过使用如图7中的3:2减少和进位传播来在一个步骤中执行,或者使用标准2输入加法器来在两个步骤中执行。
第二个RHPA值R2然后可被用作第一RHPA值R1以用于与不同输入操作数的下一累加。
因此,利用该方法,不需要执行独立于累加的不同重叠传播操作。相反,每次累计另一值时,还可以执行重叠传播以将RHPA值保持为限制冗余形式。该方法因此可以消除对需要重叠减少时跟踪点的开销的需要。
图36到39解释了为什么将RHPA转换输入操作数R3加到对应于限制冗余RHPA值的非重叠位和重叠位的向量RNV、RV产生也将是限制冗余的另一RHPA值。假设我们正在将转换浮点数并将其加到限制冗余累加器。图36示出了跨3个通道布置的两个操作数。限制冗余RHPA数的顶部重叠部分中的位“s.ext”指示RHPA数没有溢出到重叠位中。转换之后的RHPA的FP数和顶部通道的“s.ext”可以是0或-1;在这两种情况下,如果“s.ext”位为-1,则非重叠位必须为非零(见图37)。
然后,我们将来自限制冗余RHPA数的重叠位左移一个通道并将重叠位重置为0(见图38)。最后,执行逐通道加法留给我们限制冗余结果,如图39所示。在通道0中,如果输入FP数为正,则重叠位最终可以为+1,并且加法导致进位。在通道1中,如果FP转换留下(符号扩展的)-1,则我们不能得到-2,因为上移重叠部分中的-1将被FP数的非重叠部分中的正位吸收。类似地,我们在通道1重叠中不能得到+2,因为如果将两个非重叠部分相加可能导致+1的进位,则从通道0上移+1不会导致第二进位,反之亦然。最后,出于相同的原因,我们在通道2的重叠部分中不能得到-2。然而,我们可以在仅当存在溢出的情况下得到+1;此外,通道2重叠中的-1现在可以指示溢出。
因此,无论FP的值和限制冗余RHPA值如何,加法的结果都将仍是限制冗余的。注意,由于用于限制冗余值的可能重叠值{+1,0,-1}可以利用仅两个重叠位来表示,所以当使用图16的方法来同时执行FP值和累加器的加法以及限制冗余重叠传播时,不需要提供每通道多于2个重叠位(因为比第二最低有效重叠位有更高的任何位将具有与第二最低有效重叠位相同的值)。因此,每通道更多位可被用作非重叠位,从而增加可以使用给定向量长度来表示的数字范围。
从RHPA表示的转换
图17到19示出了用于将RHPA值转换为浮点值的各种技术。通常,如果RHPA值尚未处于非冗余形式(图17或图19)或限制冗余形式(图18),则执行重叠减少操作以确保这是执行到浮点的转换之前的情况。
如图17所示,当RHPA处于非冗余形式并且N-V≤Fsize(其中,Fsize是将被生成的浮点格式中所存储的有效位的位数,包括隐式1位)时,每个通道的非重叠位恰好适合于一个浮点值的有效数,因此可以生成相应的浮点值向量,其中,向量的每个元素包括等同于非冗余RHPA值的相应通道的浮点值,而不会由于舍入而丢失任何信息。
因此,对于除了最高有效通道之外的非重叠位NV[i]的每个通道:
●N-V非重叠位被直接映射到非标准浮点有效数的顶部N-V位。如果Fsize>N-V,则有效数的最低有效(Fsize-(N-V))位为零。
●该通道的指数E[i]被设置等于E[i]=w[i]+N-V-1+B,其中,w[i]是该通道的锚值(指示通道的最低有效位的有效数),N是通道大小,V是重叠位的数目,以及B是正被使用的浮点表示的偏置量;
●符号位S为0(因为在非冗余RHPA值中,除顶部通道之外的所有通道中的重叠位将为零,指示其余非重叠位的正值)。
另一方面,对于最高有效通道(本例中为NV[3]):
●如果最高有效非重叠位是1(指示RHPA值整体为负),则非重叠位NV[3]被取反以形成非标准化有效数的相应位NV’[3]。如果最高有效非重叠位是0(指示正RHPA值),则非重叠位NV[3]被直接映射到非标准化有效数的相应位NV’[3]。如果Fsize>N-V,则有效数的最低有效(Fsize-(N-V))位为零。
●指数E[3]按照与其他通道相同的方式来设置,但基于顶部通道的通道锚值w[3]。
●符号位S等于顶部通道的最高有效非重叠位。
这产生了精确但未标准化的浮点值向量,因为每个通道的有效数中的顶部‘1’位可以位于除了有效数的最高有效位以外的位位置。因此,对于每个通道标准化电路100,将给定通道的有效数移位以将顶部‘1’位放置于最高有效位位置、相应地调整指数E、并然后丢弃在所存储的浮点表示中为隐式的顶部‘1’位,以生成精确的标准化浮点值。如果该值是次正规的,则指数E被设置为0。
在一些情况下,然后可以输出精确的标准化浮点向量作为转换的结果。这可能是期望的以使得即使在转换到浮点形式之后仍可以保留原始RHPA值的增加的精度。
然而,为了转换到(至少近似地)等于原始RHPA值的单个浮点值,可以将向量的浮点元素相加并舍入以生成最终浮点结果(如图17的底部所示)。
如上所述,浮点加法不是关联的并且浮点元素被相加的顺序将影响最终结果。如果最终结果仅需要近似地等于RHPA值,则按照任何顺序将值相加可以是可接收的。
然而,为了在根据RZ、RP、RM、RNA或RX舍入中的一个进行舍入时提供正确舍入的结果,可以按照从最低有效元素开始到以最高有效元素结束的顺序来相加浮点元素。例如,对于4个浮点元素,这些元素将按如下方式相加((FP0+FP1)+FP2)+FP3,其中,在给定的一组括号内所示的加法将在相加括号之外的后续项之前执行。如果FP数从高阶通道到低阶通道相加,则在每次加法之后,可能存在舍入增量以生成舍入值,并且这可能导致执行太多增量。例如,当对包括粘附位的最高阶数执行RP舍入时,该FP结果由于粘附而已经被增加,但它将在每个低阶FP数被加到它时再次被增加。在1024位实现方式中,我们可能在已经计算出正确值之后将FP值增加15倍。可以通过首先相加低阶元素FP0和FP1并然后在后续加法中连续相加下一个高位元素直到达到顶部元素FP3为止来避免此问题。
对于RNE舍入,以这种方式相加浮点元素可能不总是给出正确的舍入结果。如果仅需要近似结果,这可能不成问题。然后,如果要求正确舍入的结果,则可以替代地使用下面关于图19所描述的方法。
图18示出了与图17类似的操作,但其中,原始RHPA值首先已经被转换为限制冗余形式(或已经是限制冗余的)。在这种情况下,除了N-V非重叠位之外,最低有效重叠位还贡献于针对给定通道生成的相应浮点值的有效数,所以该方法在N-V≤Fsize-1时有效。此外,对于限制冗余RHPA值,每个通道可以具有表示+1或-1的值的重叠位,因此每个通道都被视为有符号值(类似于图17的非冗余RHPA示例中的顶部通道)。
因此,对于每个通道i:
●该通道的N-V非重叠位NV[i]和最低有效重叠位V[i]被映射到非标准化浮点有效数的顶部N-V+1位,如果该通道中的V[i]的第二最低有效重叠位是1(指示负通道加权),则应用取反。如果Fsize-1>N-V,则有效数的最低有效Fsize-1-(N-V)位为零。
●该通道的指数E[i]被设置为等于E[i]=w[i]+N-V+B,其中,w[i]是该通道的锚值(指示通道的最低有效位的有效数),N是通道大小,V是重叠位的数目,以及B是正在使用的浮点表示的偏置量。注意,该情况下的指数比图17的情况的指数高一,因为考虑了重叠部分的附加位。
●每个通道的符号位S[i]等于相应通道中的重叠位V[i]的第二最低有效位。
同样,将得到的非标准化浮点值进行标准化以生成精确标准化的浮点值的向量,然后可以按照与图17相同的方法将这些值加在一起以产生最终舍入浮点值。
图17和18所示的技术的优势在于转换主要是并行处理,其中,每个通道可被并行地转换到相应的浮点值被然后相加。图17和18的示例假设顶部通道针对对称性被视为以与其他通道类似的方式包含V个重叠位。
如果N-V>Fsize(对于图17)或N-V>Fsize-1(对于图18),则仍可以执行图17或18所示的方法,但在这种情况下,浮点向量将是不完全对应于原始RHPA值的相应元素的舍入浮点值的向量。这是因为存在其中非重叠位的数目大于一个浮点值的有效数的通道,因此将它们转换为相应浮点值将需要舍入。尽管在这种情况下FP向量不再精确地表示RHPA值,但按照与图17和18相同的方式相加相应的FP元素以生成最终舍入FP值仍可以给出除了RNE之外的所有舍入模式的正确舍入结果。
替代地,可以使用将RHPA值转换为浮点值FP的不同方法,如图19所示。如果使用RNE舍入,则这特别有用。该方法假设RHPA值已经首先转换为非冗余格式(或者已经是非冗余的)。如图19所示,非冗余RHPA值的最高有效位被直接映射到浮点值FP的符号位S。
为了生成浮点值的有效数F,如下执行一系列运算。如果非冗余RHPA向量Vi的最高有效位为1(即RHPA值为负),则在步骤170处,整个值被取反(反转并加1)以产生修改向量Vi’。对于正值,RHPA向量Vi不被取反并保持不变(Vi’=Vi)。因此,修改向量Vi’具有至少一个前导零,因此表示正值。以修改向量Vi’的最高有效通道开始,顺序地逐个元素执行有效数生成运算。用于最高有效元素的处理通道搜索该元素内的第一非符号位(即1的第一位值)。在该示例中,通道3中的上部元素不包括任何非符号位,因此处理移动到下一通道2。
针对元素2的处理标识1的非符号位,并确定表示在非符号位1之前的零的数目(不包括重叠位)的前导零计数LZC。然后根据相应数据元素Vi’[2]的k个位形成部分有效数,其中,k=min(N-V-LZC,Fsize),其中,Fsize是将被生成的FP值的有效数中的位数(包括隐式位),以及LZC是前导零计数。k位部分有效位数值连同对针对有效数仍将获取的其余位的数目的指示(Fsize-k)、保护位G和粘附位St一起被输出。如果N-V-LZC>Fsize,则保护位G等于元素Vi’[2]中针对部分有效数所取的位的右边一个位置的位,并且如果N-V-LZC<=Fsize,则G=0。类似地,如果N-V-LZC>Fsize+1,则粘附位St等于元素Vi’[2]中保护位G右边的任何位的按位OR,否则,粘附位St=0。
处理然后移动到元素Vi’[1]的下一通道,其中,生成另一部分有效值。选择元素Vi’[1]的非重叠位的较高部分作为部分有效数,其中,所取的位数对应于从前一通道输出的值Fsize-k。该通道还更新保护位和粘附位G、St的值,其中,保护位G等于元素Vi’[1]中针对部分有效数所取的最低位的右边一个位置的位,并且粘附位St对应于比保护位G更低的任何位的按位OR。用于最低有效元素Vi’[0]的处理通道从较高通道接收粘附位St,并通过将元素Vi’[0]的所有位和来自前一通道的粘附位St进行OR来对其进行更新。
针对通道2和1生成的部分有效数然后被连结以形成有效数值F。有效数使用任何期望的舍入模式基于保护位和粘附位G、S的值来进行舍入。然后从舍入有效值获取所存储的浮点值FP的有效数,忽略在浮点表示中隐式的舍入有效数的最高有效位。
同时,浮点值的偏置指数E被确定为:
E=w[j]+N-V-LZC+B,
其中,w[j]是在其中找到最高有效非符号位的数据元素Vi’[j]的最低有效位的有效数(例如,由图19所示的示例中的元素w[2]的锚点值指示的有效数),N是通道大小,V是重叠位的数目,LZC是前导零计数,以及B是正在使用的浮点表示的偏置值。
当Fsize≤N-V时,则最多仅两个相邻数据元素可以包含贡献于未舍入有效数F的位值,如图19的示例所示,并且其他通道将是仅包含符号位的高有效通道或者仅贡献于粘附位St的低有效通道。未舍入有效数还可以根据通道中第一非符号位的位置来完全根据一个通道内的位值形成。当Fsize>N-V时,未舍入有效数F可以根据从向量的三个或更多个相邻数据元素选择的位来形成。
RHPA值还可以通过简单地选择与将生成的定点或整数格式的位等同的有效数的位来映射到定点或整数值。然而,当RHPA值超出正在使用的定点或整数格式可以表示的范围时,这有时将导致溢出或下溢。因此,在RHPA和浮点之间进行转换可能更为常见。
图17到19所示的转换可以响应于专用转换指令而执行,该指令取给定RHPA值作为输入操作数并将其转换为另一格式的等同值(如果必要,则包括初始地将RHPA值转换为非冗余或者限制多余形式)。替代地,转换操作可能是另一操作的一部分。例如,算术指令(例如,加法或乘法)可以控制处理器来使用RHPA值执行一些处理操作并然后将结果转换回另一格式,例如,浮点、整数或定点。
乘法
图20示出了使用RHPA格式来加速两个相对较长整数的乘法的示例。在没有RHPA的情况下,乘法可能需要一系列部分乘积的连续加法,这对于相对较长输入可能较慢。通过使用RHPA,部分乘积可以使用对部分乘积的相应块的并行加法运算来在单个运算中相加,因为任何进位都可被容纳在重叠位内。这允许更快生成乘积(以RHPA形式)。
例如,如果整数值被映射到非冗余形式的两个RHPA值A=(a2,a1,a0)和B=(b2,b1,b0),其中,每个N位数字具有V位的重叠(例如,对于N=64和V=10,整数A和B将各自具有3*54=162位),则可以如下计算A*B:
该向量×向量乘法可以被实现为向量×元素运算的序列。指令MUL计算两个输入操作数的乘积的下半部分,并且指令MULH计算两个输入操作数的乘积的上半部分。因此,部分乘积矩阵将是:
如果原始操作数a和b在每通道N位的向量寄存器中可用(例如,向量寄存器已经利用连续加载操作或类似操作进行填充),则将需要操作来将操作数b的所选元素(b0,b1或b2)“关联(splat)”到每个乘法步骤所需的通道,并且其他通道在至少一个元素中包含‘0’。可以为该“关联”操作提供专用指令,或者这还可以利用用于选择b的适当元素的其他指令来实现,并然后与掩码进行AND以执行归零。移位可以在乘法之后(以保存“关联”)或之前(以保存通道之间的移动数据)完成。
在已经相加部分乘积并生成RHPA形式的结果之后,可以将乘积转换回整数值(首先转换为非冗余RHPA,并然后将该向量折叠回整数形式,消除重叠位)。这可以使用专用指令或一系列移位来完成。替代地,RHPA乘积值可以以RHPA形式被进一步处理,而不是被转换回整数。
通道位置信息
如上所述,可以使用多个并行加法电路单元来高效地执行RHPA值的加法。通常,用于给定实现方式的硬件可以提供支持给定总向量大小的一定数目的加法电路单元,例如,用于各自执行64位加法的八个并行加法单元,这将给出512位的硬件中的总向量大小。然而,给定RHPA值的期望范围可能大于或小于所实现的向量大小,例如,256位或1024位。当RHPA值小于所实现的向量大小时,两个或更多个单独的RHPA值可以适应一个向量,这允许通过由硬件提供的处理通道的不同子集来并行地处理两个或更多个不同的操作。
例如,如图21所示,两个256位累加器可以在512位向量硬件实现方式的相应一半内并行地累加,使用64位加法器的8个通道。类似地,为了计算比所实现的硬件向量大小更大的RHPA值,一个指令可以触发更大RHPA累加器的下半部分的处理,并且硬件的第二通道(pass)可以处理累加器的上半部分。
然而,给定RHPA值的最低有效通道和最高有效通道可能需要与中间通道不同地处理。例如,对于给定RHPA值的最高有效通道,通道溢出可被不同地处理,因为来自高阶通道的溢出是真实的溢出条件,即需要利用更大锚值或更大累加器来重新计算的错误,而来自其他通道的溢出仅指示可能需要重叠传播。另一方面,在重叠传播期间,最低有效通道与其他通道被不同地处理,因为没有低阶重叠位被加到它(例如,参见图13,其中,最低有效通道被简单地从原始RHPA值直接映射并且不需要加法),而最高有效通道也可被不同地处理,因为在该通道中可能不需要将任何重叠位清零(同样,参见图13,其中,最高有效通道不同于中间通道)。
为了使得每个处理通道能够与其他通道独立地操作而不考虑来自其他通道的信息,提供指示通道在正在生成的总体结果值内的位置的通道位置指示符可能是有用的。例如,如图21所示,可以提供通道位置向量200,其包括用于每个通道的一系列两位类型指示符,该类型指示符示出通道是低阶通道(L)、中间通道(I)还是高阶通道(H)。在该示例中,通道0和4被指示为低阶通道,通道3和7被指示为高阶通道,并且其他通道被指示为中间通道,表明最终结果将包括两个独立的结果值,每个结果值跨四个通道。每个加法电路单元38、42接收相应通道的通道位置指示符以及将由该通道处理的操作数,并且根据通道位置指示符来确定如何处理操作数。
例如,当发生通道溢出时,加法电路单元可以根据通道位置指示符是否指示正在处理的当前通道是否是相应结果值中的最高有效通道,来选择多个溢出处理响应中的一个。例如,当当前通道是高阶通道时,处理可以触发溢出异常并可以抑制溢出异常。对于除了高阶通道之外的通道,当发生溢出时,可以执行重叠传播操作。同样,通道位置指示符还可以影响如何执行重叠传播,如上所述。
图22示出了指定通道的不同配置的通道位置信息的其他示例。在示例1中,所有通道被指示为高阶通道,指示每个通道对应于独立的N位结果。将理解,这种情况也可以通过将所有通道指示为低阶通道来表示。
示例2示出了其中偶数编号的通道被指示为低阶通道并且奇数编号的通道被指示为高阶通道,以使得每对元素表示跨两个元素的结果值的情况。
示例3和4示出了其中总体RHPA结果值跨16个通道的情况,并且因此,具有在示例3中定义的通道位置信息的第一计算表示结果的下半部分(其中底部通道被指示为低阶通道并且其他通道被指示为中间通道),并且具有在实施例4中定义的通道位置信息的第二计算生成结果的上半部分(较高通道被指示为高阶通道并且其他通道被指示为中间通道)。
因此,通道类型指示符对于比该实现方式更宽的累加器也是有用的。例如,考虑必须适应256位实现方式的512位累加器。每次累加将需要两个加法。假设基础锚值为0(因此我们仅累加整数值),重叠大小为ovlp=8,并且我们指示高通道为H、中间通道为I、以及低通道为L。因此,例如,包含通道指示符、重叠和锚点值的控制通道可能看起来像I:8:168,这表示通道中间有8个重叠位以及168的锚值。对于512位累加器,低阶锚向量将具有值(I:8:168,I:8:112,I:8:56,L:8:0),并且高阶锚向量将具有值(H:8:392,I:8:336,I:8:280,I:8:224)。将FP输入累加到这两个256位向量将给出正确的512位RHPA值。
此外,如示例5所示,提供这种类型的通道位置信息使得不同大小的累加器能够在同一向量内被并行地累加。例如,在示例5中,向量包含一个四通道累加器(H:I:I:L)和两个双通道累加器(H:L),并且使用通道位置标识符来指示累加器之间的边界。因此,所有RHPA累加器不必具有相同的大小。
通道位置信息可以是可编程的以使得程序员可以设置正在计算的累加器的大小。在一些情况下,通道位置信息可以在指令的编码中被标识,然而,通常它将被保持在寄存器内。如图23所示,可以方便将每个通道的通道位置信息200保持在同一元数据寄存器22内,其提供指定该通道的有效数的通道锚信息W和标识重叠位数的重叠值V。由于用于当前浮点格式的有用锚可以容易地适应16位,因此使用用于锚的同一SIMD寄存器集合和如用于RHPA向量本身的累加器的实现方式也可以容易地保持通道类型指示符200。
当由硬件处理的向量包括两个或更多个独立值时,可能需要进行一些控制以确保正确的输入值被映射到正确的通道。在一些情况下,可以执行一个或多个指令以便在应用RHPA加法之前将相关数据放在正确的通道中。然而,在其他情况下,这可以由硬件响应于触发累加的同一指令来完成。
如上所述,可以将输入值指定为操作数的向量,每个操作数可被转换为RHPA形式并然后进行累加。简单的方法是将每个累加器加上位于SIMD向量内的同一相对位置的那些输入向量元素,以使得512位的8DP浮点值可以将四个高阶DP值累加到高阶累加器并且将四个低阶DP值积累到低阶累加器。
然而,如图24所示,更灵活的方法可以使用输入映射信息302、304来指定输入浮点向量元素中的哪个应被累加在每个通道中。因此,可以提供浮点向量300以及通道位置信息200,标识将被加到高阶累加器的浮点值的高输入映射302和标识将由低阶累加器相加的浮点值的低输入映射304。在该示例中,高阶是1111_0000,因此用于累加高阶累加器的电路310将相加对应于浮点输入FP4到FP7的RHPA值。类似地,低阶输入映射304是0000_1111,因此用于生成低阶累加器的电路312将相加对应于FP0到FP3的RHPA值。例如,用于执行这些加法的电路310、312可以对应于上面图8所示的电路。
这样的映射灵活得多,并且这可以实现其他类型的运算,例如,分别利用输入映射0101_0101和1010_1010来在一个累加器中累加浮点向量300的偶数通道,并且在另一累加器中累加奇数通道(以计算FP0+FP2+FP4+FP6和FP1+FP3+FP5+FP7)。输入映射可以允许硬件以不同的方式来组合给定向量的元素,以减少对执行其他指令以将相关数据放置在特定通道中的需要,这可以帮助提升性能。同样,关于通道位置信息200,输入映射数据还可以被放置在与锚值W和重叠位V的数目相同的元数据寄存器22中。
尽管上面讨论的示例通常假设重叠位V的数目在每个通道(除顶部通道之外)中是相同的,但这不是必需的。如图25所示,可以利用具有不同重叠位V的数目的不同通道来定义RHPA值。例如,利用图23所示类型的元数据向量寄存器22(其分别指定每个通道的重叠位V的数目),可以针对不同信道不同地设置重叠位数。
例如,在图25中,元数据向量22的每个元素具有格式{LP:V:W},其中,LP是通道位置信息,V是该通道的重叠大小,以及W是指定该通道中的最低位的有效数的锚值。在该示例中,512位RHPA值由8个64位通道形成。元数据22指定底部4个通道具有每通道12个重叠位,接下来的3个通道具有每通道2个重叠位,并且顶部通道具有0个重叠位。图25的下半部分示出了每个64位通道的相对有效数,其中,较低4个通道比顶部4个通道重叠更多位数。注意,这意味着相邻通道的通道锚W在顶部4个通道中相差62(64-2),但在底部4个通道中相差52(64-12)。
该方法例如在需要在RHPA格式中容纳给定范围的数值时可能是有用的,但实际上,大部分数值趋向于不使用全范围。在这种情况下,对于许多值,一些较高位将是符号位,因此对一系列这样的RHPA值相加或执行其他处理操作可能不会经常改变较高通道中的位。另一方面,较低通道中的位可能更频繁地改变并且更经常地导致进位。由于较低通道比较高通道的溢出风险较高,因此在较低通道中比在较高通道中提供更多重叠位可能是有用的。以这种方式,较低通道仍可以具有防止通道溢出的增加的保护,但不需要在较高通道中不必要地分配可能不需要的相同数目的重叠位,以使得替代地,较高通道的更多位可以用作非重叠位以扩展利用总体RHPA向量的给定数目的位M可以表示的范围。以这种方式,给定范围可以使用较小向量,或者可以表示较大范围的给定向量来表示。
虽然图25示出了具有两个不同重叠大小的示例,但将理解,其他示例可以提供从较低通道到较高通道逐渐减少数目的重叠位。此外,其他示例可以为每个通道分配更任意的重叠大小。在其中向量包括若干独立数据值(如通道位置信息所指示的)的示例中,还可以针对每个独立值定义不同的重叠大小。
长操作数的乘法
RHPA格式还可以用于加速诸如长整数值之类的相对较长操作数的乘法。图26示出了将两个256位整数值a、b相乘的示例,每个整数值被分成四个64位部分(a3,a2,a1,a0)、(b3,b2,b1,b0)。处理电路14包括乘法电路400、转换电路34和加法电路38。
乘法电路400包括64×64位乘法器,其通过将第一整数a的选定64位部分ay与第二整数b的选定64位部分bz相乘来生成128位部分乘积ay*bz(其中,ay是a3、a2、a1、a0中的任一个并且bz是b3、b2、b1、b0中的任一个)。
由乘法电路400生成的128位部分乘积被传递到转换电路34,转换电路34以与上述技术类似的方式将乘积转换成RHPA格式。因此,转换电路可以包括用于生成冗余部分乘积的相应通道的多个通道转换单元34-0到34-x。每个通道转换单元34-0到34-x被提供有由乘法电路400生成的部分乘积ay*bz和指示部分乘积的有效数的有效数指示信息w。例如,有效数指示信息可以指示ay*bz的给定位(例如,最高有效位或最低有效位)的有效数。每个通道转换单元34-0到34-x确定部分乘积是否具有落入相应通道的范围内的有效数的任何位,并且如果是,则将部分乘积的位映射到相应通道内的相应位。如在图10和11的示例中,较低通道的重叠位用符号位来填充。
通常,图11中所示的方法可以由每个通道转换单元34-0到34-x使用,除了:
●在图26中转换的乘积具有128位而不是如图11所示的Fsize位,因此用于将Lshift设置为0的阈值为Z≥N-V+128,而不是Z≥N-V+Fsize(更一般地,如果整数a和b分别被划分为X和Y位块,则该阈值为Z≥N-V+X+Y)。
●在表达式Z=E-B-w[i]+1中,“E-B”表示FP值的真指数,它表示有效数的最高有效位的有效数。因此,这被替换为对部分乘积的最高位的有效数的指示,其可以由有效数指示信息w明确地标识,或者可以从有效数指示信息导出(例如,如果w指示部分乘积的最低有效位的有效数,则E-B应该用w+127或更一般地w+X+Y-1来代替)。
在将部分乘积转换为RHPA格式之后,加法电路38将经转换的部分乘积加到也以RHPA格式表示的累加器值中,以生成RHPA格式的更新累加器。加法电路38包括多个并行加法电路单元38-0到38-x,用于将经转换的部分乘积的相应通道和累加器相加,以生成更新累加器的相应通道。由于使用多个较小并行加法来执行加法,因此可以快速地执行。
通过使用整数a、b的不同的部分对作为所选择的部分ay、bz来多次重复该操作以生成多个部分乘积,并且将每个部分乘积累加到累加器寄存器,累加器中寄存器中的最终结果对应于原始整数a、b的乘积。由于累加以RHPA格式执行,因此可以并行地使用多个较小(例如64位)独立加法来执行较长(例如512位)加法,并且使用重叠位来容纳进位,以使得可以比先前的技术快得多地执行总体乘法运算。
如图27所示,总体乘法运算可被流水线化,以使得用于将给定部分乘积加到累加器的加法运算可以利用用于生成后续部分乘积的乘法来并行地执行。在该示例中,符号ay*bz(w)指示部分乘积ay*bz的最低有效位具有有效数w。在图27的示例中,每个64*64位乘法需要3个周期并且加法需要1个周期,因此通过流水线化连续乘法和加法,总体操作只需要3+6个周期=19个周期。相反,使用先前的技术,计算两个256位整数的512位乘积通常需要超过60个周期。
因此,如图27所示,乘法可被视为一系列部分乘积累加运算,其中,每个部分乘积累加运算触发操作数的选定部分ay、bz的乘法以生成部分乘积、将部分乘积转换为RHPA形式的转换部分乘积、以及使用多个并行较小加法将转换部分乘积加到RHPA形式的累加器。注意,在累加第一乘积之前,累加器Acc被初始化为零。
在一些情况下,指定操作数a、b的单个乘法指令可以由解码电路20解码成单独的乘法累加微运算,各自用于控制处理电路14来执行部分乘积累加运算中的一个。例如,每个微运算都可以标识将要相乘的整数的特定部分ay、bz。在其他示例中,由解码器接收的程序指令可能已经包括对应于每个部分乘积累加运算的单独的乘法累加指令。
将理解,可以按照与图27所示顺序不同的顺序来计算部分乘积。最终结果是相同的,而不管计算部分乘积的顺序。
在周期19结束时生成的乘积仍处于RHPA冗余格式。如果乘积将被用于进一步的计算(例如,计算多个乘积的总和),则它可被保持该格式,或者可以使用上面讨论的任何转换方法来将乘积转换为非冗余格式。
可以与一些较后累加并行地开始执行用于将RHPA乘积转换为非冗余格式的重叠传播。如图12所示,非冗余重叠传播可能涉及从RHPA值的较低端向上移动到较高端的一系列连续加法。如图28所示,如果部分乘积是按照有效数的升序确定的,则超过该过程的某个点,最终RHPA乘积的一些较低通道是完整的,并且不会被随后的累加更新,因此作用于这些较低通道的重叠传播加法可以在影响较高通道的累加完成之前执行。
例如,图28示出了示例,其中,每个64位通道有8个重叠位(N=64,V=8)并因此表示512位乘积,使用了10个64位通道,其中每个通道的最低有效位分别具有有效数{504,448,392,336,280,224,168,112,56,0}。在循环5结束时,乘积的位0到127完成,因为所有后续累加都作用于有效数128或更高的位。因此,底部两个通道(对应于乘积的位0到111)完成,并且因此可以在循环6中执行重叠传播加法以将底部通道的重叠位V[0]加到下一通道的非重叠NV[1]位,并利用加法的结果更新累加器的通道1。
类似地,在循环8结束时,有效数191或更低的位将不再被更新,并且由于下一重叠传播加法NV[2]+V’[1]所需的顶部位具有有效数167,因此它可以是在循环9中执行。注意,V’[1]是从在循环6中执行的重叠传播加法产生的修改重叠位。
以类似方式,可以执行每个后续重叠传播加法,只要该加法所需的位是完整的并且不再被任何后续累加更新。在该示例中,这允许前5个重叠传播加法与影响较高通道的一些累加并行地执行,以使得完成非冗余重叠传播仅需要另外4个周期,给出总共23个周期用于整个乘法和转换为非冗余形式。因此,即使使用非冗余重叠传播,总循环次数仍相对较低,因为重叠传播的一些开销可以通过部分地与累加并行执行来避免。
将理解,可以执行每个重叠传播加法的特定时间将取决于诸如所生成的部分乘积的数目(其取决于原始整数的大小)、由每个乘法步骤生成的部分乘积的大小、用于RHPA累加器的向量通道大小N、以及为每个通道提供的重叠位V的数目之类的因素。
替代地,可以在图27所示的所有累加完成之后,通过使用图12的非冗余转换,或者通过执行如图13所示的限制冗余重叠传播操作并然后使用图14所示的进位前瞻方法转换到非冗余形式来执行重叠传播。
该相乘长整数的方法具有若干优势。首先,它需要乘法器400和如图6所示的用于执行RHPA数的加法的电路之外的非常少的附加电路。RHPA处理通道已经“知道”如何在适当位置累加数字的片段(使用通道转换单元34来基于权重值w将来自输入的数据映射到适当的通道),因此较大整数乘法也可以是比之前快得多。因此,在一个示例中,硬件包括单个X*Y位流水线化乘法器,其具有(X+Y)位乘积和单独的类指数值w,其表示最小乘积位是什么值。提供执行乘法并将部分乘积加到RHPA累加器的乘法和累加运算。
因此,可以提供乘积和累加指令,其指定较大整数的两个子部分ay、bz作为乘法的操作数、用于RHPA累加器的至少一个向量寄存器(可选地,还可以提供第二向量寄存器以指定RHPA累加器的锚)、以及隐含指数的小常量(权重w)。
注意,在上面所示的实施例中,用于每个部分乘积的权重w总是64的倍数,所以它实际上仅需要几个位。3位数字将处理256×256位乘积,其中隐含指数为0、64、128、192、256、320、384和448。注意,尽管在图27和28中未示出448,但由于每个部分乘积都是128位宽,因此可以更简单地将单独的权重值分配给部分乘积的每个64位部分,以使得它们可以由64位通道转换单元直接转换,因此可以使用448来指示a3*b3的乘积的上半部分的有效数。类似地,4位数字将处理512×512位乘积。
在一些示例中,RHPA累加器向量可以具有关联锚值,其可以使用如上所述的表示元数据的各种示例中的任何示例来定义。因此,如果仅感兴趣某个数值范围,则可以使用锚值来限制在乘法期间计算的通道数,并且如果乘积的一些位超出由锚值指示的范围,则将信令溢出或下溢。如果提供了锚值,则每个通道转换单元可以接收两个有效数指示输入-一个指示RHPA向量的相应通道的有效数(如从锚确定的),并且一个指示在当前步骤中生成的部分乘积的有效数(图26所示的权重值w)。这将类似于图11,其使用FP值的指数E和锚值w[i]作为两个有效数指示输入。
然而,如果输入操作数是整数,则它们总具有固定有效数,并且最低有效位对应于零。因此,如果RHPA向量足够大以覆盖两个整数的乘积(例如,在相乘两个64位整数的示例中至少512位),则我们不需要RHPA向量的明确锚点。因此,可能不需要为该操作分配锚向量寄存器。例如,用于底部通道的w[i]默认地可被假设为0,并且用于其他通道的w[i]可以对应于(N-V)的某个倍数,其中,N是通道大小并且V是重叠大小。在针对RHPA累加器未提供RHPA锚的情况下,重叠大小V从指令可以是隐式的(例如,上面讨论的类型的乘法累加指令可被隐式地假设总是使用某个重叠大小V(例如,8或12位))。
该技术的另一个优势是不需要将输入操作数转换为RHPA格式,如图20所示。部分可以简单地从较长整数提取并使用较小乘法器400来相乘,并且仅部分乘积被转换到RHPA,其可以在与将部分乘积累加到累加器的相同周期中完成。因此,在执行第一乘法之前,不需要在将输入转换到RHPA时产生额外的循环。
此外,该技术比现有长乘法器快得多。例如,估计计算512位乘积将需要现有硬件上的大约60个指令和甚至更多的循环,例如与图27所示的19个循环相反。
将理解,图26所示的64×64位乘法仅是示例。任何X位×Y位乘法器将是可以接受的,其中,X可以等于Y(相同大小项的乘法)或可以不同于Y(两个不同大小项的乘法)。因此,将输入操作数分成相等大小的部分不是必要的。
此外,输入操作数具有相同数目的部分不是必要的。例如,可以使用64位部分a3、a2、a1、a0和b1、b0来执行256位整数乘以128位整数的乘法。
在一些情况下,一个输入操作数可能仅具有一个部分,并且另一操作数包括多个部分。例如,由64位部分a7-a0形成的512位整数可以使用对应于a7*b、a6*b、a0*b的八个部分乘积累加来乘以64位整数b。
此外,冗余累加器的通道大小与操作数a、b被划分成的部分的大小相同不是必要的。更一般地,冗余累加器的通道大小可以是N位,这可能与用于输入操作数的部分大小X或Y不同。
因此,不管输入操作数的相对大小(或部分的数目)、输入操作数被划分成的部分的大小X、Y、以及冗余累加器所使用的通道大小N,其中至少一个操作数相对较长的给定乘法可被分解为多个较小部分乘积乘法,并且可以以冗余形式相加所生成的部分乘积以使得比使用传统整数表示更快地执行整体操作。
另外,输入操作数是整数不是必要的。例如,一个或两个输入操作数可以是FP值或RHPA值。例如,当将RHPA值乘以DP FP值时,可以将RHPA值的每个通道乘以DP FP值的有效数以生成相应的部分乘积,其中与部分乘积相关联的权重w从RHPA锚和FP指数导出,并且每个部分乘积可被转换为RHPA形式并以与图26所示的相同方式累加到RHPA寄存器。在另一示例中,可以使用一系列X*Y位乘法来将加密密钥乘以较小值。
在图26的示例中,有效数指示值w与乘积ay*bz分开地表示。然而,另一选项是将有效数指示值直接编码在乘积自身内。
例如,如图29所示,替代实施例将把输入划分成53位块,并利用适当指数对每个块进行编码,以使得输入操作数被有效地表示为浮点元素的向量。因此,被提供给乘法器的每个所选择的部分对ay、bz仅是一对DP FP值。如图30所示,然后可以使用DP FP乘法器来相乘该对DP FP值,以生成完全精度106位部分乘积以及对应于正在相乘的两个FP值ay、bz的指数的总和的E乘积。然后可以使用指数E乘积作为有效数指示值来将乘积转换到RHPA,并如上所述以RHPA形式累加。注意,利用该方法,E乘积将指示部分乘积的最高有效位而不是最低有效位。
图29和30的方法将简化指令编码,因为指数被构建在数字中(不需要隐式或显式的权重指示值w)。
为了将长整数转换为DP块,如图29所示,可以提供附加指令以控制排列单元将每个53位的块布置在向量的相应64位通道中:
在排列之后,每个通道然后将其输入转换为DP数。用于通道i的指数通过对通道i的低阶53个位中的前导零进行计数以获得LZC[i]来计算,然后将指数设置为53*(i+1)-LZC[i]。以通常方式构建有效数,丢弃前导1并将小数左对齐。
总结
上面已经讨论了一些特定示例,然而更一般地,处理电路可以处理具有使用多个N位部分来表示P位数值的冗余表示的M位数据值,其中M>P>N。处理电路可以基于锚值来标识冗余表示的每个N位部分的位的有效数。在至少两个相邻N位部分的组内,该组的较低部分的多个重叠位具有与该组的至少一个较高部分的多个最低有效位相同的有效数。处理电路具有多个运算电路单元以并行地执行多个独立的N位运算,每个N位运算包括计算具有冗余表示的至少两个M位操作数值的相应N位部分的函数,以生成具有冗余表示的M位结果值的对应N位部分。
该方法使得能够并行地执行在较小N位运算中处理的相对长操作数,同时仍允许表示宽范围的数值,而不需要提供足够宽的加法器来覆盖整个支持范围的硬件成本。通过使用锚值,可以限制将计算的有效数的边界以使得需要较少硬件,并且实际上,这对于将执行的大部分实际计算已经足够了。重叠位使得能够在较短N位块中快速处理相对长M位数据值,因为进位可被容纳在通道内,而不是针对每个加法都需要在通道之间传播。
可以对操作数值的相应N位部分执行许多不同类型的处理操作。例如,每个N位运算可以是加法、减法、乘法、逻辑运算、伽罗瓦域运算等、或者两个或更多个这种运算的组合。
然而,该技术在其中N位运算是加法或减法的情况下特别有用(通常,术语“加法”应被解释为包括减法,因为A-B相当于A+~B(其中~B是B的二进制补码)。加法在许多处理系统中是非常常见的运算,因此通过使它们能够与多个并行N位运算一起执行(进位被保留在每个通道内)来加速M位数据值的加法对于提升给定处理系统的处理性能非常有用。当N位运算是加法时,这些运算可以响应于各种类型的指令而发生,不仅包括简单的加法指令,而且还包括其他类型的指令,例如,乘法、乘加、或用于涉及加法作为运算的一部分的任何其他类型的运算的指令。
由运算电路单元执行的N位运算在以下意义上可以是“独立的”,在不同的N位运算之间不传播进位。
尽管处理电路能够基于可编程锚值来标识冗余表示的每个N位部分的位的有效数,但在N位运算本身期间,通常将不需要考虑锚值。当在冗余表示和其他格式之间进行转换时可以参考锚值,例如,在冗余表示中的值的常规处理期间不参考锚值。
通常,处理电路可以支持执行第一类型的转换操作以将输入值转换为具有冗余表示的转换M位数据值。输入值可以是一系列不同格式,例如,浮点、整数或定点。转换操作可以响应于指定将以RHPA形式转换的给定操作数的独立转换指令来执行。替代地,转换操作可以是响应于另一类型的指令而执行的更一般的处理操作的一部分。例如,累加指令可以指定在被加到累加器值之前被转换为冗余表示的输入值,或者乘法和转换指令可以触发两个操作数相乘在一起,然后乘法的乘积可被转换为冗余表示。
在转换操作中,可以根据输入值的符号来设置任何重叠位。因此,重叠位可以是有符号值,其可以指示对冗余表示的下一通道的正或负调整。在一些情况下,当输入值为正时,重叠位可被设置为零,并且当输入值为负时,重叠位可被设置为1。
更具体地,为了将浮点值转换为冗余表示,转换操作可以包括根据可编程锚值和浮点值的指数来将浮点值的有效数的位映射到M位数据值中的相应有效数的位,其中至少一个N位部分的V重叠位被设置为0;当输入值为正时,输出映射的结果作为转换M位数据值;并且当输入值为负时,取反映射的结果以生成转换M位数据值。
在其中锚值包括单独地指定每个通道的有效数的锚值向量的实现方式中,转换操作可以利用多个并行转换来执行,其基于该通道的锚值将作为输入的浮点值映射到相应通道中的位。
处理电路还可以支持对具有冗余表示的第一M位值的重叠减少操作以生成具有冗余表示的第二M位值,其中,第二M位值的至少一个N位部分中的重叠位表示比第一M位值的至少一个相应N位部分的重叠位更小的大小。通过将给定的一组重叠位减少到接近于零以使得存在更多范围来容纳后续加法期间的其他进位,减少了通道溢出的机会。重叠减少操作可以在每次运算之后执行、周期性地执行、或当满足某些条件时执行,如下所述。
重叠减少操作在一些示例中可以是重叠传播操作,以将重叠位从冗余表示中的第一M位值的一个或多个N位部分传播到第一M位值的一个或多个后续部分以生成具有冗余表示的第二M位值。第二M位值表示与第一个M位值相同的P位数值,但使用不同的重叠位模式。使用重叠传播操作来实现重叠减少具有不需要额外寄存器来保留在重叠减少中减少的重叠位的值的优势。通过将重叠位的值传播到下一通道,可以调整下一通道中的非重叠位以保留由前一通道中的重叠位表示的相同值,释放前一通道的重叠位中的空间以在对冗余表示的第二M位值执行进一步的操作时容纳更多进位。
重叠传播操作可以以各种方式执行。在一个示例中,重叠传播操作使得它将第一M位值转换为针对其所有重叠位都等于零的第二M位值。在这种情况下,重叠传播操作可以包括执行多个连续加法,包括:初始加法,将第一M位值的最低有效N位部分的重叠位加到第一M位值的后续N位部分M位值以生成修改非重叠位和修改重叠位,以及至少一个其他加法,将来自对第一M位值的下一N位部分的前一加法的修改重叠位相加以生成修改非重叠位和修改重叠位,并且处理电路可以被配置为基于在每个连续加法中生成的修改非重叠位来生成第二M位值,并且重叠位被设置为0。
另一方面,用于重叠传播的第二种方法是转换为第二M位值,其中,具有重叠位的每个N位部分具有等于00、01、11中的一个的两个最低有效重叠位,并且任何其余重叠位具有与第二最低有效重叠位相同的值。在这种情况下,每组重叠位的位模式实际上表示集合{-1,0,+1}中的一个,尽管非完全非冗余,但仍能够降低溢出的风险。
利用第二种方法,重叠传播操作可以包括多个并行加法,每个加法包括将第一M位值的给定N位部分的重叠位加到后续N位部分的非重叠位以生成第二M位值的相应部分。因此,该方法通过使得能够并行地执行加法而使得能够更快地执行重叠传播操作。对于长向量,这可能是显著的性能益处。
更具体地,每个并行加法都可以包括将较低N位部分的重叠位(即在最高有效端填充的重叠位,这些位等于最高有效重叠位)的N位符号扩展加到与其中重叠位已被设置为零的后续N位部分相对应的N位值。
在已经使用第二方法将第一M位值转换为第二(限制冗余)M位值之后,第二M位值然后可被转换为第三(非冗余)N位值,其中所有重叠位都等于零。这使得能够在并行处理多个通道时生成非冗余值。第二N位值到第三N位值的转换可以包括:生成表示第二M位值的重叠位的总数的重叠值,以及表示第二M位值的非重叠位的总数的非重叠值;根据重叠值和非重叠值的位模式生成多个进位值;以及执行多个并行加法,每个加法用于将重叠值和非重叠值的相应部分与进位值中的一个相加以生成第三M位值的相应部分。
执行重叠减少操作的另一方式是执行重叠累加操作以将第一M位值的一个或多个N位部分的重叠位加到重叠累加器值的相应N位部分,并且将第一M位值的那些一个或多个N位部分中的重叠位设置为零以生成第二M位值。尽管该方法可能需要第二寄存器来存储重叠累加器值,但它具有这样的价值,处理可以保持在通道中直到生成最终结果为止,此时重叠累加器值的N位部分可以被上移一个通道并被加到最终结果的下一通道。此外,该方法具有这样的优势,它可以允许暂时溢出但随后回到由M位值可以表示的范围内的计算被准确地计算,而不触发溢出异常。
在一些示例中,处理电路可以检测针对冗余表示中的第一M位值是否满足重叠减少条件,并且如果满足,则可以触发对第一M位值执行重叠减少操作。通常,当存在来自M位值的给定通道的实际溢出时或者存在执行另一加法可能触发这种通道溢出的风险时,可以满足重叠减少条件。
在第一示例中,当已经执行了某个阈值数目的加法以生成第一M位值时,可以满足重叠减少条件。例如,处理电路可以维持运算计数,其指示为生成第一M位值已经执行了多少运算(例如,加法),并且当运算计数指示运算的数目等于或大于预定数目时,对第一M位值执行重叠减少操作。因此,每次执行运算时(例如,到包括第一M位值的寄存器的累加),处理电路可以将运算计数增加正被运算以生成第一M位值的值的数目,并且当运算计数达到预定数目或更大时,则这可以触发执行重叠减少操作。例如,运算的预定数目可以小于或等于2V-1-1。更具体地,对于非冗余重叠减少操作,运算的预定数目可以小于或等于2V-1-1,并且对于限制冗余重叠减少操作,运算的预定数目可以小于或等于2V-1-2。在每次执行重叠减少操作时可以重置运算计数,以重新开始计数操作,直到下一次存在溢出风险为止。
在第二示例中,当第一M位值的给定N位部分的重叠位具有预定值时,可以满足重叠减少条件。例如,预定值可以被设置为针对其下一操作可以触发来自该N位部分的溢出的值(例如,使用重叠位可以表示的最大正值或最负值)
在第三示例中,当在对该值执行处理操作时从第一M位数据值的N位部分中的一个发生实际溢出时,可以满足重叠减少条件。在这种情况下,处理电路可以检测溢出并且然后恢复到第一M位值的前一值,使用重叠减少操作将其转换为第二M位值,并且然后对第二M位值重复处理操作。替代地,处理第一M位值的溢出结果可被直接映射到第二M位值(参见下面讨论的图34的示例)。
替代地,在一些示例中,可以在每次对具有冗余表示的值执行运算时执行重叠减少操作,以使得结果被有效地保持为非冗余或限制冗余形式。例如,如果在一些通道中仅存在2个重叠位,则该选项可能是优选的。
在一些情况下,可以在对第一M位数据值执行另一类型的处理操作的同时执行重叠传播操作以生成第二M位值。例如,响应于标识输入操作数的给定指令,可以执行重叠传播操作,包括多个N位加法运算,其中,每个N位加法运算包括相加第一M位数据值的相应N位部分的非重叠位、第一M位数据值的前一N位部分的重叠位、以及具有冗余表示并且对应于输入操作数的第三M位值的相应N位部分,以生成第二M位值的相应N位部分。如果第一M位数据值已经是限制冗余形式,则从该运算生成的第二M位值也将是限制冗余的。以这种方式,减少了重叠传播的开销,因为它基本上可以与加法同时执行,并且还因为M位数据值保持限制冗余形式,仅需要每通道2个重叠位,留下更多的位可以用作非重叠位以使得总体M位值可以表示更宽的范围。在一些示例中,第三M位值可能已经具有冗余表示。在其他示例中,可以以不同表示来表示输入操作数,并且可以在将其加到第一M位值的非重叠位和重叠位之前将其转换为具有冗余表示的第三M位值。
处理电路还可以执行第二类型的转换操作以将具有冗余表示的第一M位值转换为不同表示的转换值。该不同表示可以是任何格式,包括,整数、定点或浮点。在一些情况下,第二类型的转换操作可以包括执行如上所述的重叠传播操作以将初始M位值映射到第一M位值,并然后将由重叠传播生成的第一M位值操作转换为转换值。重叠传播操作可以是非冗余或限制冗余版本。替代地,如果将被转换的M位值已经是非冗余或限制冗余形式,则可能不需要执行初始重叠传播操作,并且可以简单地将第一M位值直接转换为转换值。
在一个示例中,第二类型的转换操作可以包括基于可编程锚值将第一M位值的每个N位部分映射到相应浮点值。该方法具有可以并行地处理第二M位值的每个元素的益处。在一些情况下,最终转换结果可以是其中每个元素是从第一M位值的相应N位部分映射的浮点值中的一个的向量。通过提供浮点值的向量(其总和等于初始冗余表示),这对于保持浮点形式的冗余表示的更高精度是有用的,并因此避免了由于舍入而丢失信息。替代地,处理电路可以将从第一N位值的每个N位部分映射的相应浮点值相加以生成单个浮点值作为转换值,并适当舍入。为了生成正确舍入的结果,按照以从第一M位值的最低有效N位部分映射的浮点值开始并且以从第一M位值的最高有效N位部分映射的浮点值结束来相加各个浮点值可能是有用的。
替代地,可以通过以下操作来执行第二类型的转换操作:通过对从第一M位值的至少一个N位部分的非重叠位选择的一组位进行舍入来形成浮点值的有效数,该舍入基于第一个M位值的比该组位更低的有效位。该方法更一般地适用,但可能较慢,因为它可能需要以第一个N位值的一部分开始并然后移动到下一部分的一些顺序处理。
在一些情况下,与冗余表示中的给定M位值相关联的锚值可以是针对给定硬件实现方式所静态选择的固定值。
然而,可以通过使用可编程锚值来提供更大灵活性,以使得程序员可以使用冗余表示的给定M位值来指定将表示的有效数的范围。这允许相对较窄的一组硬件单元来通过使用可编程锚点值定义将在给定运算中计算的可变有效数窗口,来处理跨宽数值范围的数值。
通常,给定通道的重叠位可以表示有符号整数值,并且因此可以表示对下一通道的正调整和负调整。
一些实现方式可以允许给定通道中的重叠位的数目大于N/2。在这种情况下,该通道的重叠部分可能与两个或更多个后续通道中的非重叠部分的有效数重叠。因此,在三个或更多个相邻N位部分的组中,最低部分的重叠位与两个或更多个另外的N位部分中的一些非重叠位可以具有等同的有效数。尽管该方法可以执行更多的运算而没有溢出风险,但它可能会使得重叠传播和转换操作复杂化,因为可能需要更多的位的跨通道组合。
更简单的方法可以是限制重叠位的数目以使得每个通道具有N/2个重叠位或更少。通过将重叠位的数目限制为一半通道大小或更小,硬件实现方式简单得多,因为每组重叠位表示对单个更高有效通道的调整,而需要较少的跨通道活动。如果针对给定实现方式期望更大数目的重叠位,则可以增加通道大小N。
在一些实现方式中,重叠位V的数目可以由硬件实现方式固定(硬连线)。即使如此,提供重叠大小值仍然有用,该重叠大小值标识由给定实现方式使用的重叠位的数目,以允许程序确定正在使用的当前重叠大小,即使同一代码使用不同的重叠大小在硬件实现方式中被执行。例如,控制寄存器可以指定重叠大小。
然而,更灵活的方法是提供可编程重叠大小值,程序员或编译器可以将其设置为适于将执行的应用的值。这使得可以选择重叠大小值。如果重要的是允许执行大量加法而不溢出,则可以减小重叠大小。如果预期需要较少加法,则减小重叠大小可以使得能够利用较少N位处理通道来执行计算,这可以通过使得能够与在硬件中提供的N位加法电路单元的不同子集并行地执行多个M位计算来提升性能。因此,程序员可以根据将执行的加法的预期数目以及针对所需应用所预期的值的数值范围来设置重叠大小值。
可以以多种方式指定重叠大小值,但在一些情况下,可以在硬件中提供的控制寄存器中指定。在一些情况下,控制寄存器可以是与用于存储可编程锚值(其设置每个通道的有效数)的寄存器相同的寄存器。
替代地,重叠大小值可以由控制处理电路来处理具有冗余表示的至少一个数据值的指令来指定。
在一些情况下,重叠位的数目对于冗余表示的每个N位部分(除了如上讨论的可能不具有任何重叠位的最高有效N位部分)可以相同。在这种情况下,单个重叠大小值可以指定将在冗余表示的除了顶部通道之外的每个通道中使用的重叠位的数目。
然而,还可以提供具有不同数目的重叠位的不同通道。例如,为较低通道提供比较高通道更多数目的重叠位可能是有用的,就好像在可表示的极限处的数字是稀少的,预期到重叠位的进位对于较低通道将比较高通道更常见。因此,在一些情况下,提供为冗余表示的N位部分中的两个或更多个单独地指定重叠位的数目的重叠大小值可能是有用的。在一些情况下,每个通道可以单独地指定其重叠大小(或者至少除了顶部通道之外的每个通道可以有单独的重叠大小值)。在其他示例中,通道的多个子集可以各自具有单独的重叠大小指示,但同一子集内的通道可以都使用同一重叠大小。
如上所述,冗余表示对于一系列运算可能是有用的,特别是如果它们包括加法。然而,它对于触发将至少一个值累加到累加器寄存器的累加指令特别有用。
由于可以相加冗余表示中的多个值而没有N位通道之间溢出的风险,因此该技术还使得特定类型的指令能够在单个运算中触发否则将是不可能的三个或更多个单独的M位数据值的加法。这允许在累加数据值时进一步提升性能。在每个N位加法电路单元中,可以使用华莱士树来组合至少三个M位值的相应N位部分以生成两个N位项,然后进位传播加法器可以将该两个N位项相加以生成M位结果的相应N位部分。将理解,存在许多实现华莱士树的方式并且可以使用任何已知技术。
在一些情况下,将被相加的两个或更多个M位数据值可以从输入向量的相应元素导出。例如,这允许单个指令指定将累加的多个输入值。在一些情况下,与输入向量的所有元素相对应的M位数据值可以被加在一起以形成相应的结果。
然而,也可能生成两个或更多个独立的结果,其中,由第一组N位加法生成的第一M位结果相加对应于输入向量的输入数据元素的第一子集的M位数据值,并且由第二组N位加法生成的第二M位结果相加对应于输入向量的输入数据元素的第二子集的M位数据值。因此,M可能小于在硬件中实现的向量宽度。对哪些输入数据元素对应于第一和第二子集的分配可以是静态的(对于给定实现方式是固定的),或者基于可编程输入映射信息是可变的。
本技术的另一应用是其中相加的M位操作数值是在两个操作数值的相乘期间生成的部分乘积。这对于使用多个较小并行N位运算来相乘比通道宽度N更长的两个值可能特别有用。
在另一示例中,处理电路可以对第一数据值执行重叠传播操作以生成第二数据值,第一和第二数据值具有使用包括多个N位部分的M位数据值来表示P位数值的冗余表示,其中M>P>N,其中,在冗余表示中,除了最高有效N位部分之外的每个N位部分包括多个重叠位,其具有与后续N位部分的多个最低有效位相同的有效数,并且处理电路被配置为通过执行加法运算来生成第二数据值的除了最低有效N位部分之外的每个N位部分,该加法运算包括将第一数据值的相应N位部分的重叠位加到第一数据值的前一N位部分的重叠位。
该方法对于减少来自在使用并行技术的冗余表示中所表示的值的溢出的机会是有用的。将理解,重叠传播操作的该特定示例可以被应用于以冗余形式表示的具有固定有效数的长整数或定点值(而不是如以上述RHPA格式来定义可变有效数的相关联可编程锚值)。针对这些值使用冗余表示仍然可以实现长操作数的快速加法,并且上面定义的重叠传播操作使得能够使用相对快的并行运算来减少通道之间溢出的机会。
重叠传播操作可以利用用于并行执行的第二数据值的N位部分中的至少两个的加法运算来执行。并行执行所有加法运算不是必要的。例如,具有足以并行执行仅一些加法的硬件的系统仍可以比仅实现到非冗余格式的顺序转换的系统更快。然而,为了更好的性能,处理电路可以针对第二数据值的除了最低有效N位部分之外的每个N位部分中并行地执行加法运算。处理电路可以具有并行加法电路单元以并行执行相应的加法运算。
在另一示例中,处理电路可以对至少一个操作数向量的相应数据元素执行多个处理通道以生成结果向量的相应结果数据元素。可以针对每个处理通道提供通道位置信息,其中,给定通道的通道位置信息标识将由该给定通道生成的相应结果数据元素在跨结果向量的一个或多个结果元素的相应结果数据值内的相对位置。每个处理通道可以根据针对该通道标识的通道位置信息来执行。该方法使得支持给定向量大小的处理硬件能够灵活地支持处理更大或更小的数据值。
这与典型地具有硬接线电路的标准单指令多数据(SIMD)技术不同,该硬接线电路接收指定将被用于向量的每个元素的给定数据元素大小的全局输入,这使得能够确定例如是否在向量的部分之间传播进位。在这样的SIMD中,数据元素大小将针对整个向量被全局指定,而不是标识结果向量的特定数据元素是在给定结果的较低端还是较高端。通过提供为每个通道独立地指定在将被生成的相应结果内的相对位置的能力,这为使用给定大小的硬件来计算不同大小的结果提供了更大的灵活性,包括允许硬件来生成比向量宽度更大的结果,并且允许在单个向量内并行地计算多个不同大小的结果,这对于标准SIMD技术是不可能的。
通常,对相应数据元素执行的处理通道可以包括应用于相应数据元素的任何类型的运算。这可能不仅包括算术或逻辑运算,而且还包括例如将元素从一个表示转换为另一表示的操作(例如,上述转换到RHPA格式或从RHPA格式转换)。
通道位置信息可以用不同的方式表示。在一些情况下,通道位置信息可以标识相应结果数据元素是否是相应结果数据值的最高有效数据元素。对于一些类型的处理操作,结果的最高有效数据元素可能与其他元素被不同地处理,并且因此仅需简单地标识每个元素是否为结果数据值的最高有效位元素(例如,使用1位指示符)。
例如,当针对给定通道检测到溢出条件时,处理电路可以基于通道位置信息是否将该通道标识为对应于结果的最高有效数据元素来选择如何处理溢出。例如,可以存在多个溢出处理响应可用,并且可以基于通道位置信息来选择其中的一个。例如,溢出处理响应可以包括:什么都不做、设置指示已发生溢出的信息、触发异常以处理溢出、或触发执行上述重叠传播操作。选择其中哪一个可以取决于溢流通道在正在生成的结果内的位置。
通道位置信息还可以标识结果数据元素是否是结果的最低有效数据元素。例如,对最低有效数据元素的处理可以不同于较高阶元素,因为不存在来自较低元素到该通道的进位,并且一些操作(例如上面讨论的重叠传播操作)可以与其他通道不同地处理低阶通道。因此,标识最低有效数据元素可能是有用的。
更一般地,通道位置信息可以将每个通道标识为生成结果数据值的最低有效元素、最高有效元素、或中间元素中的一个。例如,两位指示符可以指示该信息。这在最高有效通道和最低有效通道都需要与中间通道不同地处理时是有用的。
该类型的通道位置指示符使得给定大小的硬件如何处理值具有高度的灵活性。例如,当最高有效或最低有效处理通道的通道位置信息标识相应结果数据元素是中间数据元素时,则这可以触发处理电路来生成表示具有比结果向量自身更多的位的结果值的部分的结果向量。可以执行一系列这样的操作来计算结果数据值的每个相应部分。
替代地,当通道位置信息标识中间处理通道将产生相应结果的最低有效或最高有效数据元素时,则这将触发处理电路来生成包括两个或更多个独立结果数据值的结果向量。这使得能够通过允许并行生成两个或更多个结果来提升性能。
在一些示例中,响应于在通道位置信息标识结果向量包括至少两个独立结果数据值时标识包括多个输入数据元素的输入向量的预定类型的指令,处理电路可以对从输入向量的输入数据元素的第一子集映射的至少一个操作数向量的数据元素的第一子集执行处理通道的第一子集,以生成独立结果数据值中的第一个,并且对从输入向量的输入数据元素的第二子集映射的至少一个操作数向量的数据元素的第二子集执行处理通道的第二子集,以生成独立结果数据值中的第二个。因此,原始输入向量的一些元素可以被组合在处理通道的第一子集中,并且其他元素可以在处理通道的第二子集中处理。处理电路可以根据可编程输入映射信息来选择哪些输入数据元素在第一子集或第二子集中。这对于使得同一类型的指令能够通过设置输入映射信息的不同值来将输入向量的输入数据元素组合在不同的组合中是有用的。例如,输入映射信息可以被存储在由指令所引用的寄存器中。
通道位置信息可用于顺序地执行针对每个通道的处理的向量实现方式,以使得每个通道可以与任何其他通道独立地执行。然而,这在存在用于并行执行多个处理通道的并行电路单元时特别有用。
通道位置信息可以被编程以使得编写特定程序的程序员可以设置如何将要处理的值映射到硬件上。替代地,通道位置信息可以由对程序员所编写的源代码进行编译的编译器来设置。
在一些情况下,通道位置信息还可以由硬件确定,例如,程序员可以指定将生成的总体结果大小,然后硬件可以基于所指定的结果大小和对在电路实现方式中实现的硬件向量长度的指示来确定通道位置信息。如果程序员可能不知道在给定实现方式的硬件中实现的特定向量大小,这可能是有用的。
通道位置信息可以用各种方式来指定,例如,在指令编码、通用寄存器、或专用控制寄存器中。
然而,在同一控制寄存器中将通道位置信息定义为如上面讨论的可编程锚值和重叠值中的一个或两个可能是特别有用的。
提供了一种用于将包括多个X位部分的第一操作数和包括至少一个Y位部分的第二操作数相乘的方法,包括:
生成多个部分乘积,每个部分乘积包括第一操作数的选定X位部分和第二操作数的选定Y位部分的乘积;
对于每个部分乘积,根据指示部分乘积有效数的有效数指示信息来将部分乘积转换为冗余表示,其中,在所述冗余表示中,部分乘积使用多个N位部分来表示,其中,在冗余表示的至少两个相邻N位部分的组中,该组的较低N位部分的多个重叠位具有与该组的至少一个较高N位部分的多个最低有效位相同的有效数;以及
将以冗余表示来表示的多个部分乘积相加。
利用该方法,相对较长操作数的乘法可以比先前的技术更快地执行,因为使用冗余表示来相加部分乘积使得任何进位能够被容纳在重叠位中,以避免需要在通道之间传播进位。此外,不需要将第一和第二操作数转换为冗余表示。
可以使用多个N位加法电路单元来执行加法,以便使用以冗余表示来表示的部分乘积的相应N位部分来执行独立的N位加法。通过使用多个并行N位加法而不是对应于乘积的总宽度的较大加法,加法快得多进行,可使得能够在较短时间内相乘相对较长操作数。
在一些情况下,可以首先计算所有部分产品,并然后在后续加法步骤中将乘积加在一起。然而,如果部分乘积的数目相对较大,则可能需要大量的寄存器来存储所有部分乘积,这可能增加寄存器压力并降低需要寄存器的其他操作的性能。
因此,更高效的技术可以是将部分乘积累加到存储具有所述冗余表示的累加器值的累加器寄存器中。因此,可以生成一个或多个部分乘积并将其加到累加器值,该累加器值维持目前所计算的部分乘积的运行总数,并且一系列累加计算第一和第二操作数的最终乘积。
更具体地,第一和第二操作数的相乘可以使用多个部分乘积累加运算来实现,每个部分乘积累加运算对应于被选为所述选定X位部分和所述选定Y位部分的不同的部分对,并且包括:
将选定X位部分和选定Y位部分相乘以生成所述多个部分乘积中的一个;
根据有效数指示信息将所述多个部分乘积中的所述一个部分乘积转换为冗余表示;以及
将所述冗余表示的所述多个部分乘积中的所述一个部分乘积加到具有所述冗余表示的的累加器值以生成更新累加器值;
其中,用于一个部分乘积累加运算的更新累加器值被用作下一部分乘积累加运算的累加器值。
通过一次一个地生成部分乘积并将它们连续地累加到累加器值中,仅需要使用一个寄存器来存储累加器值,留下更多寄存器用于其他操作。
部分乘积累加运算可被流水线化以使得针对一个部分乘积累加运算的部分乘积和累加器值的相加可以与用于后续部分乘积累加运算的相乘并行地执行。乘法自身也可被流水线化以使得可以在若干阶段中执行相乘,并且用于较早部分乘积累加运算的较后相乘阶段可以与用于较后部分乘积累加运算的较早相乘阶段并行地执行。
最终结果可能仍是冗余表示。如果期望非冗余表示(例如,整数),则可以对冗余表示的多个部分乘积的相加结果执行重叠传播操作,以将结果的一个或多个N位部分的重叠位传播到结果的一个或多个后续N位部分。通过将重叠位从一个通道传播到下一通道(例如,通过将重叠位加到下一通道的非重叠位),可以获得其中每组重叠位都是零的非冗余格式。重叠传播操作可以使用上面讨论的任何技术来执行。
在其他示例中,不是等到所有累加都完成为止,至少一个重叠传播加法(将一个通道的重叠位加到下一通道的非重叠位)可以与至少一个部分乘积累加运算并行地发生。例如,如果按照在每个部分乘积累加运算中生成的部分乘积的有效数的升序来执行部分乘积累加运算,则表示输入操作数的乘积的最终累加器的一个或多个较低通道在影响累加器的较高通道的累加结束之前可能已经完成,因此对较低通道执行的重叠传播加法可以与影响较高通道的累加并行地执行。
有效数指示信息可以以各种方式来表示。通常,有效数指示信息可以取决于所述选定X位部分所述第一操作数内以及所述选定Y位部分在所述第二操作数内的相对位置。
在一些情况下,有效数指示信息可以取决于与所述选定X位部分和所述选定Y位部分中的至少一个相关联的有效数指示参数。例如,如果输入操作数是FP值(或被映射到FP值),则有效数指示信息可以取决于FP值的指数。
替代地,有效数指示信息可以取决于由用于控制处理电路来生成至少一个所述部分乘积的指令所指定的参数。
这可以是明确地标识将生成的部分乘积的有效数的指令的参数,或者指示可以从至少标识第一操作数的哪个X位部分是所述选定X部分的指令的参数暗示的信息的有效数(并且如果第二操作数具有多个Y位部分,则还可以考虑标识哪个Y位部分是选定Y位部分的参数以确定部分乘积的有效数)。
在一些示例中,第一操作数和第二操作数包括整数。替代地,第一/第二操作数可以是其他格式,例如,FP或冗余表示。此外,在一些情况下,第一操作数可能与第二操作数的格式不同。不管第一和第二输入操作数的格式,它们可被分别映射到较小X位部分和Y位部分,以允许使用多个较小乘法的输入操作数的乘法。
在一些示例中,X=Y,以使得第一和第二操作数具有相同大小的部分。替代地,X和Y可能不同。
如果X和Y都等于或小于53,则可以使用为相乘两个双精度浮点值的有效数而提供的浮点乘法电路来执行部分乘积乘法。如果X或Y小于53,则可以填充这些部分以生成53位值,以便与DP乘数相乘。因此,这使得可以使用现有乘法硬件。
类似地,如果X和Y都小于或等于24,或者小于或等于11,则乘法可以分别重新使用单精度或半精度浮点乘法器。
替代地,如果不存在支持X*Y位乘法的现有乘法电路,则可以提供定制乘法器。
在一个示例中,方法可以包括将第一操作数映射到相应的浮点值的向量的步骤,每个浮点值具有从第一操作数的相应X位部分映射的有效位以及取决于第一操作数内的该X位部分的有效数的指数,其中,用于给定部分乘积的有效数指示信息取决于对应于用于生成所述给定部分乘积的选定X位部分的浮点值的指数。通过将输入操作数映射到浮点值的向量,操作可以被简化,因为有效数指示信息可以在输入X和Y位部分以及部分乘积自身的编码中被明确地表示,而不需要其他参数。此外,这使得可以重新使用现有浮点硬件。
数据处理装置可以包括被配置为执行如上所述用于将第一和第二操作数相乘的方法的处理电路。
例如,一种数据处理装置可以包括:
乘法电路,用于将包括多个X位部分的第一操作数的选定X位部分与包括至少一个Y位部分的第二操作数的选定Y位部分相乘以生成部分乘积;
转换电路,用于根据指示部分乘积的有效数的有效数指示信息来将部分乘积转换为具有冗余表示的转换部分乘积,其中,在所述冗余表示中,部分乘积使用多个N位部分表示,其中,在冗余表示的至少两个相邻N位部分的组中,该组的较低N位部分的多个重叠位具有与该组的至少一个较高N位部分的多个最低有效位相同的有效数;以及
加法电路,用于将转换部分乘积加到具有所述冗余表示的累加器值。
加法电路可以包括多个N位加法电路单元以使用转换部分乘积的相应N位部分和累加器值来执行独立的N位加法。这使得较长值的加法可以使用冗余表示来更快地执行。
可以提供控制电路(例如,指令解码器),其响应于至少一个乘法指令来控制乘法电路和转换电路以生成冗余表示的多个转换部分乘积,这些转换部分乘积对应于被选为所述选定X位部分和所述选定Y位部分的部分的不同组合,并且控制加法电路来将所述多个部分乘积中的每一个加到累加器值。在一些情况下,指定第一和第二操作数的一个乘法指令可以控制所有部分乘积的生成。在其他示例中,可以提供单独的乘法-累加指令,每个指令指定如将相乘并被累加到累加器值的选定X位部分和选定Y位部分的部分的不同组合。
以下条款定义了其他示例布置:
1.一种装置,包括:
处理电路,用于处理具有使用多个N位部分来表示P位数值的冗余表示的M位数据值,其中M>P>N,
其中,处理电路被配置为基于锚值来标识冗余表示的每个N位部分的位的有效数,并且在至少两个相邻N位部分的组内,该组的较低N位部分的多个重叠位具有与该组的至少一个较高N位部分的多个最低有效位相同的有效数,其中,V<N;并且
处理电路包括多个运算电路单元以并行地执行多个独立的N位运算,每个N位运算包括计算具有冗余表示的至少两个M位操作数值的相应N位部分的函数,以生成具有冗余表示的M位结果值的相应N位部分。
2.根据条款1所述的装置,其中,所述多个运算电路单元包括多个加法电路单元以并行地执行多个N位加法,每个N位加法包括将所述至少两个M位操作数值的相应N位部分相加以生成所述M位结果值的所述相应N位部分。
3.根据条款1和2中的任一项所述的装置,其中,处理电路被配置为执行转换操作以将输入值转换为具有冗余表示的转换M位数据值。
4.根据条款3所述的装置,其中,转换操作包括根据输入值的符号来设置重叠位。
5.根据条款4所述的装置,其中,当输入值为正时,处理电路被配置为将重叠位设置为0,并且当输入值为负时,处理电路被配置为将重叠位设置为1。
6.根据条款4和5中的任一项所述的装置,其中,当输入值包括浮点值时,转换操作包括:
根据锚值和浮点值的指数来将浮点值的有效数的位映射到M位数据值中的相应有效数的位,其中,至少一个N位部分的重叠位被设置为0;
当输入值为正时,输出映射的结果作为转换M位数据值;并且
当输入值为负时,对映射的结果取反以生成转换M位数据值。
7.根据条款1至6中的任一项所述的装置,其中,处理电路被配置为对具有冗余表示的第一M位值执行重叠减少操作以生成具有冗余表示的第二M位值,其中,第二M位值的至少一个N位部分中的重叠位表示比第一M位值的至少一个相应N位部分的重叠位更小的大小。
8.根据条款7所述的装置,其中,重叠减少操作包括重叠传播操作以将具有冗余表示的第一M位值的一个或多个N位部分的重叠位传播到第一M位值的一个或多个后续N位部分,以生成具有使用不同的重叠位模式来表示与第一M位值相同的P位数值的冗余表示的第二M位值。
9.根据条款8所述的装置,其中,在第二M位值中,重叠位等于0。
10.根据条款8和9中的任一项所述的装置,其中,重叠传播操作包括执行多个连续加法,包括:
初始加法,用于将第一M位值的最低有效N位部分的重叠位加到M位值的后续N位部分M位值以生成修改非重叠位和修改重叠位;以及
至少一个其他加法,用于将来自对第一M位值的下一N位部分的前一加法的修改重叠位相加以生成修改非重叠位和修改重叠位;
其中,处理电路被配置为基于在每个连续加法中生成的修改非重叠位来生成第二M位值,并且重叠位被设置为0。
11.根据条款8所述的装置,其中,在第二M位值中,对于具有重叠位的每个N位部分,两个最低有效重叠位具有值00、01、11中的一个,并且任何其余重叠位具有与第二最低有效重叠位相同的值。
12.根据条款8和11中的任一项所述的装置,其中,重叠传播操作包括执行多个并行加法,
每个并行加法包括将第一M位值的给定N位部分的重叠位加到第一M位值的后续N位部分的非重叠位以生成与第一M位值的所述后续N位部分在有效数上相对应的第二M位值的N位部分。
13.根据条款11和12中的任一项所述的装置,其中,每个并行加法包括将较低N位部分的重叠位的N位符号扩展加到与其中任何重叠位都被设置为0的后续N位部分相对应的N位值。
14.根据条款11至13中的任一项所述的装置,其中,重叠传播操作包括将所述第二M位值转换为其中所有重叠位均等于0的第三M位值。
15.根据条款14所述的装置,其中,将第二M位值转换位第三M位值包括:
生成表示第二M位值的重叠位的总数的重叠值,以及表示第二M位值的非重叠位的总数的非重叠值;
根据重叠值和非重叠值的位模式生成多个进位值;以及
执行多个并行加法,每个加法用于将重叠值和非重叠值的相应部分与进位值中的一个相加以生成第三M位值的相应部分。
16.根据条款7的装置,其中,重叠减少操作包括重叠累加操作,以将第一M位值的一个或多个N位部分的重叠位加到重叠累加器值的相应N位部分,并且将第一M位值的所述一个或多个N位部分的所述重叠位设置为零以生成所述第二M位值。
17.根据条款7至16中的任一项所述的装置,其中,处理电路被配置为维持运算计数,其指示为生成第一M位值而执行的运算的数目,并且当运算计数指示运算的数目等于或大于预定数目时,执行重叠减少操作。
18.根据条款17所述的装置,其中,运算的预定数目小于或等于2V-1-1,其中,V是具有重叠位的任何N位部分所包括的重叠位的最小数目。
19.根据条款17和18中的任一项所述的装置,其中,处理电路被配置为在执行重叠减少操作时重置运算计数。
20.根据条款7至16中的任一项所述的装置,其中,处理电路被配置为响应于检测到第一M位值的N位部分中的一个的重叠位具有预定值而执行重叠减少操作。
21.根据条款7至16中的任一项所述的装置,其中,处理电路被配置为响应于在对第一M位值执行处理操作时检测到来自第一M位数据值的N位部分中的一个的溢出而执行重叠减少操作。
22.根据条款1至21中的任一项所述的装置,其中,处理电路被配置为执行转换操作以将具有冗余表示的第一M位值转换为不同表示的转换值。
23.根据条款22所述的装置,其中,转换操作包括执行重叠传播操作以将初始M位值的一个或多个N位部分的重叠位传播到初始M位值的一个或多个后续N位部分以生成具有冗余表示的所述第一M位值,并将第一M位值转换为转换值。
24.根据条款22所述的装置,其中,处理电路被配置为根据锚值来将第一M位值的每个N位部分映射到相应浮点值。
25.根据条款24所述的装置,其中,处理电路被配置为输出包括从第一M位值的每个N位部分映射的相应浮点值的向量作为转换值。
26.根据条款24所述的装置,其中,处理电路被配置为将从第一M位值的每个N位部分映射的相应浮点值相加以生成单个浮点值作为转换值。
27.根据条款26所述的装置,其中,当第一M位值包括三个或更多个N位部分时,处理电路被配置为按照以从第一M位值的最低有效N位部分映射的浮点值开始并且以从第一M位值的最高有效N位部分映射的浮点值结束的顺序来将相应的浮点值相加。
28.根据条款22所述的装置,其中,当转换值是浮点值时,处理电路被配置为通过对从第一M位值的至少一个N位部分的非重叠位选择的选定的一组位进行舍入来形成浮点值的有效数,该舍入基于所述第一M位值的比所述选定的一组位更低的有效位。
29.根据条款1至28中的任一项所述的装置,其中,锚值是可编程的。
30.根据条款1至29中的任一项所述的装置,其中,N位部分中的每一个具有N/2个重叠位或更少。
31.根据条款1至30中的任一项所述的装置,其中,重叠位表示有符号整数值。
32.根据条款1至31中的任一项所述的装置,其中,处理电路被配置为基于重叠大小值来标识冗余表示的至少一个N位部分的重叠位的数目。
33.根据条款32所述的装置,其中,重叠大小值是可编程的。
34.根据条款32和33中的任一项所述的装置,其中,重叠大小值在控制寄存器中被指定。
35.根据条款34所述的装置,其中,锚值在与重叠大小值相同的控制寄存器中被指定。
36.根据条款33所述的装置,其中,重叠大小值由用于控制处理电路来处理具有冗余表示的至少一个数据值的数据处理指令来指定。
37.根据条款32至36中的任一项所述的装置,其中,重叠大小值为冗余表示的N位部分中的两个或更多个单独地指定重叠位的数目。
38.根据条款2所述的装置,其中,响应于累加指令,所述多个加法电路单元被配置为执行所述多个N位加法,其中,所述至少两个M位数据值中的一个具有包括存储在累加器寄存器中的M位累加器值的冗余表示,并且处理电路被配置为将M位结果值写到累加器寄存器。
39.根据条款2所述的装置,其中,响应于预定类型的指令,每个N位加法包括将至少三个M位数据值的相应N位部分相加。
40.根据条款39所述的装置,其中,每个加法电路单元包括华莱士树来组合至少三个M位值的相应N位部分以生成两个N位项,并且包括进位传播加法器,用于将该两个N位项相加以生成M位结果值的相应N位部分。
41.根据条款1至40中的任一项所述的装置,其中,响应于标识包括多个输入数据元素的输入向量的预定类型的指令,处理电路被配置为利用与在输入向量的相应输入数据元素中指定的相应值相对应的所述至少两个M位数据值来执行N位运算。
42.根据条款41所述的装置,其中,响应于预定类型的指令,处理电路被配置为对与输入向量的输入数据元素的第一子集相对应的M位数据值执行第一组N位运算,并且对与输入向量的输入数据元素的第二子集相对应的M位数据值执行第二组N位加法。
43.根据条款42所述的装置,其中,处理电路被配置为根据可编程输入映射信息来选择哪些输入数据元素在第一子集或第二子集中。
44.根据条款1至43中的任一项所述的装置,其中,至少两个M位操作数值包括由处理电路响应于用于将两个操作数值相乘的至少一个乘法指令而生成的多个部分乘积。
45.一种数据处理方法,包括:
处理具有使用多个N位部分来表示P位数值的冗余表示的M位数据值,其中M>P>N,
其中,基于锚值来标识冗余表示的每个N位部分的位的有效数,并且在至少两个相邻N位部分的组内,该组的较低N位部分的多个重叠位具有与该组的至少一个较高N位部分的多个最低有效位相同的有效数;并且
处理包括并行地执行多个独立的N位运算,每个N位运算包括计算具有冗余表示的至少两个M位操作数值的相应N位部分的函数,以生成具有冗余表示的M位结果值的相应N位部分。
46.一种装置,包括:
用于处理具有使用多个N位部分来表示P位数值的冗余表示的M位数据值的装置,其中M>P>N,
其中,用于处理的装置被配置为基于锚值来标识冗余表示的每个N位部分的位的有效数,并且在至少两个相邻N位部分的组内,该组的较低N位部分的多个重叠位具有与该组的至少一个较高N位部分的多个最低有效位相同的有效数;并且
用于处理的装置包括用于并行地执行多个独立的N位运算的装置,每个N位运算包括计算具有冗余表示的至少两个M位操作数值的相应N位部分的函数,以生成具有冗余表示的M位结果值的对应N位部分。
47.一种装置,包括:
处理电路,用于对第一数据值执行重叠传播操作以生成第二数据值,第一和第二数据值具有使用包括多个N位部分的M位数据值来表示P位数值的冗余表示,其中,M>P>N,其中,在冗余表示中,除了最高有效N位部分之外的每个N位部分包括具有与后续N位部分的多个最低有效位相同的有效数的多个重叠位;
其中,处理电路被配置为通过执行加法运算来生成第二数据值的除了最低有效N位部分之外的每个N位部分,该加法运算包括将第一数据值的相应N位部分的非重叠位加到第一数据值的前一N位部分的重叠位。
48.根据条款47所述的装置,其中,在第二数据值中,对于具有重叠位的每个N位部分,两个最低有效重叠位具有值00、01、11中的一个,并且任何其余重叠位具有与第二最低有效重叠位相同的值。
49.根据条款47和48中的任一项所述的装置,其中,处理电路被配置为针对第二数据值的N位部分中的至少两个并行地执行加法运算。
50.根据条款47至49中的任一项所述的装置,其中,处理电路被配置为针对第二数据值的除了最低有效N位部分之外的所述N位部分中的每一个并行地执行加法运算。
51.根据条款47至50中的任一项所述的装置,其中,处理电路包括多个并行加法电路单元,用于针对第二数据值的N位部分中的至少两个并行地执行所述加法运算。
52.根据条款47至51中的任一项所述的装置,其中,加法运算包括将前一N位部分的重叠位的N位符号扩展加到等同于任何重叠位都被设置为0的第一数据值的相应N位部分的N位值。
53.根据条款47至52中的任一项所述的装置,其中,处理电路被配置为利用等于第一数据值的最低有效N位部分的相应非重叠位的非重叠位来生成第二数据值的最低有效N位部分,并且重叠位被设置为0。
54.根据条款47至53中的任一项所述的装置,其中,重叠传播操作还包括将第二数据值转换为具有冗余表示的第三数据值,其中,第三数据值的所有重叠位均等于0。
55.根据条款54所述的装置,其中,处理电路被配置为通过以下操作来生成第三数据值:
生成表示第二M位值的重叠位的总数的重叠值和表示第二M位值的非重叠位的总数的非重叠值;
根据重叠值和非重叠值的位模式生成多个进位值;并且
执行多个并行加法,每个加法用于将重叠值和非重叠值的相应部分和进位值中的一个相加以生成第三数据值的相应部分。
56.根据条款47至55中的任一项所述的装置,其中,响应于标识输入操作数的指令,处理电路被配置为执行重叠传播操作,其中,所述加法运算包括相加下列项:
第一数据值的所述相应N位部分的所述非重叠位;
第一数据值的所述前一N位部分的所述重叠位;以及
具有所述冗余表示并对应于所述输入操作数的第三数据值的相应N位部分。
57.根据条款56所述的装置,其中,输入操作数具有除了所述冗余表示之外的表示,并且响应于所述指令,处理电路被配置为将所述输入操作数转换为所述第三数据值。
58.根据条款47至57中的任一项所述的装置,其中,重叠位表示有符号整数值。
59.根据条款47至58中的任一项所述的装置,其中,处理电路被配置为基于重叠大小值来标识重叠位的数目。
60.根据条款59所述的装置,其中,重叠大小值是可编程的。
61.根据条款47至60中的任一项所述的装置,其中,处理电路被配置为基于锚值来标识使用冗余表示来表示的数据值的每个N位部分的位的有效数。
62.根据条款47至61中的任一项所述的装置,其中,处理电路被配置为维持运算计数,其指示为生成第一数据值而执行的运算的数目,并且当运算计数指示运算的数目等于或大于预定数目时,执行重叠传播操作。
63.根据条款62所述的装置,其中,预定数目小于或等于2V-1-2,其中,V是具有重叠位的任何N位部分所包括的重叠位的最小数目。
64.根据条款62和63中的任一项所述的装置,其中,处理电路被配置为在执行重叠传播操作时重置运算计数。
65.根据条款47至61中的任一项所述的装置,其中,处理电路被配置为响应于检测到第一数据值的N位部分中的一个的重叠位具有预定值而执行重叠传播操作。
66.根据条款47至61中的任一项所述的装置,其中,处理电路被配置为响应于在对第一数据值执行处理操作时检测到来自第一数据值的N位部分中的一个的溢出而执行重叠传播操作。
67.一种数据处理方法,包括:
接收具有使用包括多个N位部分的M位数据值来表示P位数值的冗余表示的第一数据值,其中,M>P>N,其中,在冗余表示中,除了最高有效N位部分之外的每个N位部分包括具有与后续N位部分的多个最低有效位相同的有效数的多个重叠位;以及
对第一数据值执行重叠传播操作以生成具有冗余表示的第二数据值;
其中,通过执行加法运算来生成第二数据值的除了最低有效N位部分之外的每个N位部分,该加法运算包括将第一数据值的相应N位部分的非重叠位加到第一数据值的前一N位部分的重叠位。
68.一种装置,包括:
用于对第一数据值执行重叠传播操作以生成第二数据值的装置,第一和第二数据值具有使用包括多个N位部分的M位数据值来表示P位数值的冗余表示,其中,M>P>N,其中,在冗余表示中,除了最高有效N位部分之外的每个N位部分包括具有与后续N位部分的多个最低有效位相同的有效数的多个重叠位;
其中,用于处理的装置被配置为通过执行加法运算来生成所述第二数据值的除了最低有效N位部分之外的每个N位部分,该加法运算包括将第一数据值的相应N位部分的非重叠位加到第一数据值的前一N位部分的重叠位。
69.一种装置,包括:
处理电路,用于对至少一个操作数向量的相应数据元素执行多个处理通道以生成结果向量的相应结果数据元素;
其中,处理电路被配置为标识每个处理通道的通道位置信息,给定通道的通道位置信息标识将由该给定通道生成的相应结果数据元素在跨结果向量的一个或多个结果元素的相应结果数据值内的相对位置;并且
处理电路被配置为根据针对该通道所标识的通道位置信息来执行每个处理通道。
70.根据条款69所述的装置,其中,给定通道的通道位置信息标识相应结果数据元素是否是相应结果数据值的最高有效数据元素。
71.根据条款70所述的装置,其中,响应于针对处理通道中的一个而检测到的溢出条件,处理电路被配置为根据处理通道中的所述一个处理通道的通道位置信息是否指示相应结果数据元素是相应结果数据值的最高有效数据元素,来选择多个溢出处理响应中的一个。
72.根据条款69至71中的任一项所述的装置,其中,给定通道的通道位置信息标识相应结果数据元素是否是相应结果数据值的最低有效数据元素。
73.根据条款69至72中的任一项所述的装置,其中,给定通道的通道位置信息将相应结果数据元素标识为下列项中的一项:
相应结果数据值的最低有效数据元素;
相应结果数据值的最高有效数据元素;以及
相应结果数据值的中间数据元素。
74.根据条款73所述的装置,其中,通道位置信息包括2位指示符。
75.根据条款73和74中的任一项所述的装置,其中,当最高或最低有效处理通道的通道位置信息将相应结果数据元素标识为相应结果数据值的中间数据元素时,处理电路被配置为生成表示具有比结果向量更多的位的结果数据值的部分部分的结果向量。
76.根据条款73至75中的任一项所述的装置,其中,当除了最高或最低有效处理通道之外的中间通道的通道位置信息将相应结果数据元素标识为相应结果数据值的最低有效数据元素或最高有效数据元素时,处理电路被配置为生成包括两个或更多个独立结果数据值的结果向量。
77.根据条款69至76中的任一项所述的装置,其中,响应于在通道位置信息标识结果向量包括至少两个独立结果数据值时标识包括多个输入数据元素的输入向量的预定类型的指令,处理电路被配置为执行至少下列项:
对从输入向量的输入数据元素的第一子集映射的所述至少一个操作数向量的数据元素的第一子集执行处理通道的第一子集,以生成所述独立结果数据值中的第一个;并且
对从输入向量的输入数据元素的第二子集映射的所述至少一个操作数向量的数据元素的第二子集执行处理通道的第二子集,以生成所述独立结果数据值中的第二个。
78.根据条款77所述的装置,其中,处理电路被配置为根据可编程输入映射信息来选择哪些输入数据元素在输入数据元素的第一子集或输入数据元素的第二子集中。
79.根据条款69至78中的任一项所述的装置,其中,处理电路包括多个处理电路单元以并行地执行多个处理通道。
80.根据条款69至79中的任一项所述的装置,其中,通道位置信息是可编程的。
81.根据条款69至80中的任一项所述的装置,其中,每个通道的通道位置信息在控制寄存器中被指定。
82.根据条款69至81中的任一项所述的装置,其中,处理电路被配置为基于锚值来标识至少一个操作数向量或结果向量的每个数据元素的位的有效数。
83.根据条款82所述的装置,其中,通道位置信息和可编程锚值在同一控制寄存器中被指定。
84.根据条款69至83中的任一项所述的装置,其中,相应结果值的除了最高有效结果数据元素之外的结果数据元素包括具有与后续结果数据元素的多个最低有效位相同的有效数的多个重叠位。
85.根据条款69至84中的任一项所述的装置,其中,通道位置信息和标识重叠位的数目的重叠值在同一控制寄存器中被指定。
86.一种数据处理方法,包括:
标识将对至少一个操作数向量的相应数据元素执行以生成结果向量的相应结果数据元素的多个处理通道中的每一个的通道位置信息,给定通道的通道位置信息标识将由该给定通道生成的相应结果数据元素在跨结果向量的一个或多个结果元素的相应结果数据值内的相对位置;以及
根据针对该通道所标识的通道位置信息来执行每个处理通道。
87.一种装置,包括:
用于对至少一个操作数向量的相应数据元素执行多个处理通道以生成结果向量的相应结果数据元素的装置;
其中,用于执行的装置被配置为标识每个处理通道的通道位置信息,给定通道的通道位置信息标识将由该给定通道生成的相应结果数据元素在跨结果向量的一个或多个结果元素的相应结果数据值内的相对位置;并且
用于执行的装置被配置为根据针对该通道所标识的通道位置信息来执行每个通道处理。
88.一种用于将包括多个X位部分的第一操作数和包括至少一个Y位部分的第二操作数相乘的数据处理方法,包括:
生成多个部分乘积,每个部分乘积包括第一操作数的选定X位部分和第二操作数的选定Y位部分的乘积;
对于每个部分乘积,根据指示部分乘积的有效数的有效数指示信息来将部分乘积转换为冗余表示,其中,在所述冗余表示中,部分乘积使用多个N位部分来表示,其中,在冗余表示的至少两个相邻N位部分的组中,该组的较低N位部分的多个重叠位具有与该组的至少一个较高N位部分的多个最低有效位相同的有效数;以及
将以冗余表示来表示的多个部分乘积相加。
89.根据条款88所述的方法,其中,部分乘积的相加使用用于使用在冗余表示中所表示的部分乘积的相应N位部分来执行独立的N位加法的多个N位加法电路单元来执行。
90.根据条款88和89中的任一项所述的方法,其中,部分乘积的相加包括将部分乘积累加到存储具有所述冗余表示的累加器值的累加器寄存器。
91.根据条款88至90中的任一项所述的方法,其中,相乘包括多个部分乘积累加运算,每个部分乘积累加运算对应于被选为所述选定X位部分和所述选定Y位部分的不同的部分对,并且包括:
将选定X位部分和选定Y位部分相乘以生成所述多个部分乘积中的一个;
根据有效数指示信息将所述多个部分乘积中的所述一个部分乘积转换为冗余表示;以及
将所述冗余表示的所述多个部分乘积中的所述一个部分乘积加到具有所述冗余表示的累加器值以生成更新累加器值;
其中,用于一个部分乘积累加运算的更新累加器值被用作下一部分乘积累加运算的累加器值。
92.根据条款88至91中的任一项所述的方法,包括对将冗余表示的多个部分乘积相加的结果执行重叠传播操作,重叠传播操作包括将结果的一个或多个N位部分的重叠位传播到结果的一个或多个后续N位部分。
93.根据条款91所述的方法,其中,部分乘积累加运算按照在每个部分乘积累加运算中生成的部分乘积的有效数的升序来执行;
该方法包括执行多个重叠传播加法,每个重叠传播加法包括将累加器值的给定N位部分的重叠位加到累加器值的后续N位部分的非重叠位;并且
所述多个重叠传播加法中的至少一个与所述部分乘积累加运算中的至少一个的相加步骤并行地执行。
94.根据条款88至93中的任一项所述的方法,其中,有效数指示信息取决于所述第一操作数内的所述选定X位部分和所述第二操作数内所述选定Y位部分的相对位置。
95.根据条款88至94中的任一项所述的方法,其中,有效数指示信息取决于与所述选定X位部分和所述选定Y位部分中的至少一个相关联的有效数指示参数。
96.根据条款88至95中的任一项所述的方法,其中,有效数指示信息取决于由用于控制处理电路来生成至少一个所述部分产品的指令所指定的参数。
97.根据条款88至96中的任一项所述的方法,其中,有效数指示信息取决于标识第一操作数的哪个X位部分是所述选定X位部分的指令的参数。
98.根据条款88至97中的任一项所述的方法,其中,第一操作数和第二操作数包括整数。
99.根据条款88至98中的任一项所述的方法,其中,X≤53并且Y≤53。
100.根据条款99所述的方法,其中,每个部分乘积使用用于将两个浮点值的有效数相乘的浮点乘法电路来生成。
101.根据条款88至100中的任一项所述的方法,包括将第一操作数映射到相应的浮点值向量的步骤,每个浮点值具有从第一操作数的相应X位部分映射的有效数和取决于第一操作数内的该X位部分的有效数的指数;
其中,给定部分乘积的有效数指示信息取决于与用于生成所述给定部分乘积的选定X位部分相对应的浮点值的指数。
102.根据条款88至101中的任一项所述的方法,其中,X=Y。
103.根据条款88至102中的任一项所述的方法,其中,X与Y不同。
104.一种包括处理电路的数据处理装置,该处理电路被配置为执行条款88至103中的任一项的方法。
105.一种数据处理装置,包括:
乘法电路,用于将包括多个X位部分的第一操作数的选定X位部分和包括至少一个Y位部分的第二操作数的选定Y位部分相乘以生成部分乘积;
转换电路,用于根据指示部分乘积的有效数的有效数指示信息来将部分乘积转换为具有冗余表示的转换部分乘积,其中,在所述冗余表示中,部分乘积使用多个N位部分来表示,其中,在冗余表示的至少两个相邻N位部分的组中,该组的较低N位部分的多个重叠位具有与该组的至少一个较高N位部分的多个最低有效位相同的有效数;以及
加法电路,用于将转换部分乘积加到具有所述冗余表示的累加器值。
106.根据条款105所述的数据处理装置,其中,所述加法电路包括多个N位加法电路单元,以使用转换部分乘积的相应N位部分和累加器值执行独立的N位加法。
107.根据条款105和106中的任一项所述的数据处理装置,包括控制电路,响应于至少一个乘法指令,控制乘法电路和转换电路来生成与被选择为所述选定X位部分和所述选定Y位部分的部分的不同组合相对应的冗余表示的多个转换部分乘积,并且控制加法电路来将所述多个部分乘积中的每一个加到累加器值。
108.一种数据处理装置,包括:
用于将包括多个X位部分的第一操作数的选定X位部分和包括至少一个Y位部分的第二操作数的选定Y位部分相乘以生成部分乘积的装置;
用于根据指示部分乘积的有效数的有效数指示信息来将部分乘积转换为具有冗余表示的转换部分乘积的装置,其中,在所述冗余表示中,部分乘积使用多个N位部分来表示,其中,在冗余表示的至少两个相邻N位部分的组中,该组的较低N位部分的多个重叠位具有与该组的至少一个较高N位部分的多个最低有效位相同的有效数;以及
用于将转换部分乘积加到具有所述冗余表示的累加器值的装置。
在本申请中,词语“被配置为…”用于表示装置的元件具有能够执行所定义的操作的配置。在该上下文中,“配置”表示硬件或软件的互连的布置或方式。例如,装置可以具有提供所定义的操作的专用硬件,或者可被编程为执行功能的处理器或其他处理设备。“被配置”并不意味着装置元件需要以任意方式被改变以提供所定义的操作。
尽管本文已经参考附图详细描述了本发明的说明性实施例,但将理解的是,本发明不限于这些精确的实施例,并且可以由本领域技术人员实现各种改变和修改而不脱离如所附权利要求限定的本发明的范围和精神。
附录A-冗余HPA,工作示例
(在该附录中,m.s.b.指“最高有效位”并且l.s.b.指“最低有效位”)
用于累加的高精度(HPA)格式可能需要跨通道加法,意味着跨较高通道的非常长的加/减和繁重的符号计算,因为累计值改变了符号。此外,HPA违反了SIMD向量处理的概念(其优选地允许独立地处理向量的每个元素)。因此,我们提出冗余HPA(“RHPA”),其中,通道包括一些“重叠”位,其可以将进位容纳在通道内,而不必跨通道传播进位。这允许将HPA长字长加法作为一些较小SIMD二进制补码加法来执行。
假设向量Zw[3:0]包含四个64位通道的最低有效位的权值作为64位有符号元素。在RHPA值中,这些值在通道之间将不会相差通道宽度(64),而是相差64-ovlp,其中,ovlp是用于指定在相邻通道之间存在多少重叠位的参数。在附录A的示例中,ovlp=4。因此,如果HPA的m.s.b.被设置为+140的有效数(比单精度IEEE浮点数的最大指数多几个位,意味着最终结果将需要被转换为双精度),则针对具有ovlp=4的四个通道的Zw[n]为将是{+77,+17,-43,-103}。这产生244位的有效HPA字长,而不是利用非冗余表示的4×64位通道HPA可获得的256位。
从FP转换为RHPA
传入FP数被广播到每个通道。每个通道中的逻辑将FP的指数与其本地Zw值进行比较:如果指数小于Zw[n],则在该通道中不设置位;如果指数大于或等于Zw[n],则通道将FP数左移根据Zw值、FP指数和FP精度计算的量;如果左移值超过某个阈值,则在该通道中也不设置位。
转换算法概括:
1.将FP[31:0]广播到向量通道Za[n]
2.将每个通道中的有效数左移所计算的量(或将所有位设置为零)
3.如果输入FP数为负,则独立地取每个通道的二进制补码并进行符号扩展,以便将ovlp位填充所有符号位。
示例1:将正单精度FP数转换为HPA
输入32-b FP数=+1.fffffe×239
指数(FP)-用于四个通道的Zw[n](Zw值取自上面的介绍,其中ovlp=4):
通道3:39-77=-38;负,因此全部为零
通道2:39-17=+22;正,因此左移22+1个位置
通道1:39--43=+82;正,因此左移82+1个位置
通道0:39--103=+142;正,142+1=143≥60+24,因此全部为零(注意:如果通道中的左移距离≥64-ovlp+有效字长,则通道被设置为64’b0,因为有效位数将被完全移出该通道的非重叠范围。)
图31示出了最终结果,其中,带下划线的十六进制数字是ovlp位。
四个通道的数值如下(被写成二进制补码数乘以Zw[n]):
通道3:0
通道2:64’h0000_0000_007f_ffff×217=+7f_ffff×217
通道1:64’h0800_0000_0000_0000×2-43=+1×216
通道0:0
为了检查转换是否成功,通道的总和为:
Σ通道=0+ff_fffe×216+1×216+0=ff_ffff×216=1.fffffe×239,输入FP数。
示例2:将负单精度FP数转换为HPA
以下是适用于同一FP数的转换过程,但现在被取反。
输入32-b FP数=-1.fffffe×239
指数(FP)-用于四个通道的Zw[n]与此前相同:
通道3:39-77=-38;负,因此全部为零
通道2:39-17=+22;正,因此左移22+1个位置
通道1:39--43=+82;正,因此左移82+1个位置
通道0:39--103=+142;正,142+1=143≥60+24,因此全部为零
图32示出了最终结果,其中,带下划线的十六进制数字是ovlp位。
四个通道的数值如下(被写成二进制补码数乘以Zw[n]):
通道3:0(注意:取0的二进制补码返回0!)
通道2:64’hffff_ffff_ff80_0001×217=-7f_ffff×217
通道1:64’hf800_0000_0000_0000×2-43=-0800_0000_0000_0000×2-43=-1×216
通道0:0
Σ通道=0+-ff_fffe×216+-1×216+0=-ff_ffff×216=-1.fffffe×239
RHPA中的加法
两个RHPA数通过在每个通道中独立地执行常规二进制补码加法而相加。假设相加的RHPA数中的一个将其所有ovlp位设置为低(例如,因为它是如上所述FP->RHPA转换的结果),则可以顺序地执行2ovlp-1–1个这样的加法而没有任何通道溢出的危险。这里存在通过使用冗余数表示所提供的引人注目的优势。
示例3:RHPA加法(导致“通道溢出”)
在图33的示例中,所有未指定的十六进制数字是全‘0’或全‘f’。通道2由于相加两个大正数并且返回过于正值而不能被表示为64-b二进制补码数的总和而溢出。类似地,通道0由于相加两个大负数并返回过于负值而不能被表示为64-b二进制补码数的总和而溢出。在第一种情况下,正确结果将被表示为其m.s.b.是‘0’的65-b二进制补码数;类似地,在第二种情况下,正确结果将表示为m.s.b.是‘1’的65-b二进制补码数。
可以使用标准二进制补码溢出逻辑来检测是否在任何通道中由于RHPA加法而发生溢出(即检查m.s.b处的转入和进位是否相同)。如果在任何通道中发生“通道溢出”(除了最高有效通道),则ovlp位被从溢出通道的m.s.b.转移到下一最高通道的l.s.b.、被符号扩展到通道的全宽度、并被加到驻留在那里的值。此外,溢出通道中的ovlp位被重置为0。
然而,仅纠正已经溢出的那些通道可能由于进位沿通道传播而导致其他地方的溢出。因此,用于响应一个或多个通道中的溢出情况的更好技术是将所有通道中的ovlp位上移一个通道并将其加到现有值。该过程具有更简单(因为不必与其他通道不同地处理一对通道)但不会更慢的优势,因为所有通道可以被同时更新。
示例4:从RHPA数移除通道溢出
在图34的示例中,通过ovlp位并行加法将来自示例3的溢出总和转换为非溢出(限制冗余)表示。
从RHPA转换为FP
从最高通道开始,将通道中的二进制补码数与Zw组合以形成目标格式的FP数,包括保护位和粘附位。如果最高通道的值为负,则这将需要对通道中的值执行二进制补码运算以返回符号-大小结果,如IEEE标准FP格式要求的。然后,将该初始FP结果与下一通道中的64-b值和如我们的原始HPA专利说明书中所述的Zw的下一较低值相结合。跨所有通道重复该过程在以获得最终转换结果。
替代地,如果通道中非重叠位的数目小于或等于FP格式中的有效位的数目,则每个通道可以被并行地映射到相应的浮点值,然后可以将它们相加在一起以形成最终转换结果。
RHPA中的累加器溢出
将冗余引入HPA格式允许非常广泛的加法而不需要跨整个向量传播进位;这构成了显著的性能益处,因为可以在一个循环中(舒适地)完成HPA加法。然而,与所有冗余数字系统一样,如果全宽度RHPA已经溢出向量,则很难正确地检测。也就是说,如果仅顶部通道被评估溢出的发生,则产生两种误导性情况:
(i)由于顶部通道已经溢出,则溢出可能被标记为发生,但较低通道可能包含将HPA带回范围内的相反符号值
(ii)溢出可能未被检测到,因为尽管顶部通道尚未溢出,但较低通道可能包含将HPA推出范围的相同符号值。
为了可靠地检测累加器溢出,RHPA可以被转换为非冗余格式。用于执行这样的转换的算法很简单:从底部通道开始,将ovlp位移入下一最高通道(具有符号扩展)并加到其中包含的值,将底部通道中的ovlp位重置为0。一次一个通道地重复此过程,直到下一最高通道中的ovlp位已被添加到顶部通道。RHPA值现在被表示为非冗余二进制补码数,因为所有通道中的ovlp位都是0。该方法是较早描述的“通道重叠”移除的序列化版本,并且类似于纹波进位二进制加法。
示例5:将RHPA数转换为非冗余格式
在图35的示例中,RHPA数的顶部通道已经溢出;将RHPA值转换为非冗余格式显示RHPA数在范围内。
如果仅基于顶部通道,则仍存在累加器溢出检测有多精确的问题,即将产生多个误报警?我们相信这由于通道的宽度而将“不是很多”。此外,“真”重叠条件可以与例如多个FP数的持续累加而不是在加法之间并行地检测以提升性能。在非冗余RHPA中,累加器溢出检测当然是微不足道的。
总结
我们引入了冗余高精度累加器(“RHPA”)。RHPA是向量,其通道包括具有与下一个较高64-b通道的l.s.b.相同的有效数的许多m.s.b.“重叠”位。这允许将HPA所需的非常长字长加法实现为SIMD 64-b二进制补码整数加法。
我们还示出了如何将RHPA数转换为其非冗余“规范”格式,从而将所有ovlp位设置为零。(以类似方式,我们还示出了具有通道溢出的RHPA可以如何被快速转换为“几乎规范”形式。)非冗余RHPA表示提供了准确检测累加器溢出的可靠方法。
附录B-使用进位前瞻方案将限制冗余RHPA转换为非冗余RHPA
我们可以通过首先转换为限制冗余格式来加速转换为非冗余格式的过程。它涉及进行进位前瞻,其检查所传播或生成的+1和-1值的重叠位和非重叠位。
在“转换为限制冗余形式”操作之后,非重叠位形成跨具有每通道64-ovlp位的通道的二进制补码数。此外,在每个通道的lsb处,存在来自下一最低通道的重叠位,其值被限制于{-1,0,+1}。我们想要为跨所有通道的进位前瞻网络导出生成和传播位,以快速完成从限制冗余到非冗余形式的转换。
假设非冗余RHPA表示是高基二进制补码数,我们应该以将ovlp二进制有符号数的向量转换为第二高基二进制补码数开始。然后我们可以考虑从这两个数(非ovlp&ovlp)提取进位前瞻信息来以并行SIMD方式加速它们的加法。
让我们以使用4-b非ovlp+4-b ovlp格式(如上使用的N=8,V=4)将ovlp位转换为二进制补码的一些示例开始:
示例A:通道0/1处的-1 ovlp与通道2中的+1非ovlp;通道2/3处的+1ovlp相组合
1101_1110 0001_0100 0000_0000 1111_0100
正确的非冗余形式是:
具有不同表示/布局的原始限制冗余值:
将ovlp转换为基数为16的二进制补码数:
0 +1111 +1111
相加ovlp&非ovlp位,并且进位跨通道传播:
正确!
示例B:通道0/1处的+1 ovlp与通道2/3处的-1 ovlp相结合
1101_1110 1111_1111 0000_1111 0001_0100
正确的非冗余形式是:
具有不同表示/布局的原始限制冗余值:
将ovlp转换为基数为16的二进制补码数并加到非ovlp位,并且进位跨通道传播:
正确!
示例C:通道1/2处的-1 ovlp与通道0/1处的+1 ovlp相组合,但不与通道2/3处的+1 ovlp相组合
1101_1110 0001_0000 1111_1111 0001_0100
正确的非冗余形式是:
具有不同表示/布局的原始限制冗余值:
将ovlp转换为基数为16的二进制补码数并加到非ovlp位,并且进位跨通道传播:
正确!
示例D:通道2/3处的+1 ovlp与通道1/2和0/1处的-1 ovlp相组合
1101_1110 0001_0000 1111_1111 1111_0100
正确的非冗余形式是:
具有不同表示/布局的原始限制冗余值:
将ovlp转换为基数为16的二进制补码数并加到非ovlp位,并且进位跨通道传播:
正确!
示例E:所有通道处的-1 ovlp
1101_1110 1111_0000 1111_0010 1111_0100
正确的非冗余形式是:
具有不同表示/布局的原始限制冗余值:
将ovip转换为基数为16的二进制补码数并加到非ovlp位,并且进位跨通道传播:
正确!
从这些示例我们可以看出,ovlp位转换为这样的数,其除了顶部通道之外的所有通道中的数字被限制于{0,1,24-1,24-2},其中,+ve个数字{24-1,24-2}被简单地替换为{-1,-2}。
因此,为了将ovlp位转换为基数-264-ovlp数,我们只需要2-b/通道进位传播加法器,因为在转换ovlp向量中存在仅四个可能的结果数字。
示例A
+1 0 -1=+1×42+0×4+ -1=+15
变为
结果的最高有效位(下划线)始终被负加权,因为它现在是二进制补码数而不是有符号数。
或者,(同样示例A)取-1 ovlp的二进制补码
给出了相同的结果。
示例B
-1 0 +1=-1×42+0×4++1=-15
变成(二进制补码)
示例C
+1 -1 +1=+1×42+-1×4++1=+13
变成(二进制补码)
示例D
+1 -1 -1=+1×42+-1×4+-1=+11
变成(二进制补码)
示例E
-1 -1 -1 =-1×42+-1×4+-1=-21
变成(二进制补码)
2-b数字被符号扩展为最终加法的全通道宽度。我们现在希望导出最终加法的前瞻项以防止跨通道的进位。
给定四个可能的ovlp数字,我们在非ovlp位中具有感兴趣的四个补充条件:全1(p)、全0(k)、1(g)、以及除了lsb之外全1(d)加上一个额外条件,其是其他四个条件的逻辑NOR,被表示为‘u’,表示不感兴趣(uninteresting)。我们如下表所示将这些结合起来以导出通道等级p、g和k条件。
然后使用经典前缀理论推导出每个通道的g位
G[0]=g[0]<-到通道1的进位
G[1:0]=g[1]|p[1]&g[0]
G[2:0]=g[2]|p[2]&g[1]|p[2]&p[1]&g[0]
让我们对此检查示例A...E
示例A:具有跨通道借位的+ve&-ve进位位
1101_1110 0001_0100 0000_0000 1111_0100
正确答案应该是:
具有不同表示的原始限制冗余值:
如上所述转换ovlp和非ovlp数字:
通过按位组合ovlp和非ovlp项来获得通道等级前瞻项:
g p k
导出进位前瞻位
1 0 0 -
执行SIMD加法,忽略通道之间的进位:
正确!
示例B:通道0/1处的+1 ovlp与通道2/3处的-1 ovlp相组合
1101_1110 1111_1111 0000_1111 0001_0100
正确的非冗余形式是:
具有不同表示的原始限制冗余值:
如上所述转换ovlp和非ovlp数字:
通过按位组合ovlp和非ovlp项来获得通道等级前瞻项:
p p` k
导出进位前瞻位
0 0 0 -
执行SIMD加法,忽略通道之间的进位:
正确!
示例C:通道1/2处的-1 ovlp与通道0/1处的+1 ovlp相组合,但不与通道2处的+1ovlp相组合
1101_1110 0001_0000 1111_1111 0001_0100
正确的非冗余形式是:
具有不同表示的原始限制冗余值:
如上所述转换ovlp和非ovlp数字:
通过按位组合ovlp和非ovlp项来获得通道等级前瞻项:
p g k
导出进位前瞻位
1 1 0 -
执行SIMD加法,忽略通道之间的进位:
正确!
示例D:通道2/3处的+1 ovlp与通道1/2和0/1处的-1 ovlp相组合
1101_1110 0001_0000 1111_1111 1111_0100
正确的非冗余形式是:
具有不同表示的原始限制冗余值:
如上所述转换ovlp和非ovlp数字:
通过按位组合ovlp和非ovlp项来获得通道等级前瞻项:
k g k
导出进位前瞻位
0 1 0 -
执行SIMD加法,忽略通道之间的进位:
正确!
示例E:所有通道处的-1 ovlp
1101_1110 1111_0000 1111_0010 1111_0100
正确的非冗余形式是:
具有不同表示的原始限制冗余值:
如上所述转换ovlp和非ovlp数字:
通过按位组合ovlp和非ovlp项来获得通道等级前瞻项:
k g k
导出进位前瞻位
0 1 0 -
执行SIMD加法,忽略通道之间的进位:
正确!
方法总结
1.单独地并且并行地按通道导出输入限制冗余数的ovlp和非ovlp部分的p、g、k、d和u项
可以从2/-位加法器获得ovlp项,其中,/是通道的数目
非ovlp项被容易地实现为具有与2/-位加法器相似的深度的逻辑树
2.仅使用第3页的表格来将两组p、g、k、d(和u)项转换为p、g和k项
3.使用前缀方程从在步骤2中获得的p、g、k位导出通道进位输入,并且将ovlp p、g、k、d和u项从2位到64位进行符号扩展
4.以SIMD方式相加非ovlp位、符号扩展的ovlp位和进位位以获得最终结果。这将需要具有每通道进位的64-b加法器。
第3页的表格的逻辑公式可以如下:
p=pv&kn|dv&gn|kv&pn|gv&dn
g=pv&~kn|~kv&pn|dv&(~kn|~gn)。

Claims (20)

1.一种用于将包括多个X位部分的第一操作数和包括至少一个Y位部分的第二操作数相乘的数据处理方法,包括:
生成多个部分乘积,每个部分乘积包括第一操作数的选定X位部分和第二操作数的选定Y位部分的乘积;
对于每个部分乘积,根据指示所述部分乘积的有效数的有效数指示信息来将所述部分乘积转换为冗余表示,其中,在所述冗余表示中,所述部分乘积使用多个N位部分来表示,其中,在所述冗余表示的至少两个相邻N位部分的组中,该组的较低N位部分的多个重叠位具有与该组的至少一个较高N位部分的多个最低有效位相同的有效数;以及
将以所述冗余表示来表示的所述多个部分乘积相加。
2.根据权利要求1所述的方法,其中,所述部分乘积的相加使用用于使用在所述冗余表示中所表示的所述部分乘积的相应N位部分来执行独立的N位加法的多个N位加法电路单元来执行。
3.根据权利要求1和2中的任一项所述的方法,其中,所述部分乘积的相加包括将所述部分乘积累加到存储具有所述冗余表示的累加器值的累加器寄存器。
4.根据前述权利要求中的任一项所述的方法,其中,所述相乘包括多个部分乘积累加运算,每个部分乘积累加运算对应于被选为所述选定X位部分和所述选定Y位部分的不同的部分对,并且包括:
将所述选定X位部分和所述选定Y位部分相乘以生成所述多个部分乘积中的一个;
根据所述有效数指示信息将所述多个部分乘积中的所述一个部分乘积转换为所述冗余表示;以及
将所述冗余表示的所述多个部分乘积中的所述一个部分乘积加到具有所述冗余表示的累加器值以生成更新累加器值;
其中,用于一个部分乘积累加运算的所述更新累加器值被用作下一部分乘积累加运算的所述累加器值。
5.根据前述权利要求中的任一项所述的方法,包括对将所述冗余表示的所述多个部分乘积相加的结果执行重叠传播操作,所述重叠传播操作包括将所述结果的一个或多个N位部分的所述重叠位传播到所述结果的一个或多个后续N位部分。
6.根据权利要求4所述的方法,其中,所述部分乘积累加运算按照在每个部分乘积累加运算中生成的所述部分乘积的有效数的升序来执行;
所述方法包括执行多个重叠传播加法,每个重叠传播加法包括将所述累加器值的给定N位部分的所述重叠位加到所述累加器值的后续N位部分的非重叠位;并且
所述多个重叠传播加法中的至少一个重叠传播加法与所述部分乘积累加运算中的至少一个部分乘积累加运算的相加步骤并行地执行。
7.根据前述权利要求中的任一项所述的方法,其中,所述有效数指示信息取决于所述第一操作数内的所述选定X位部分和所述第二操作数内所述选定Y位部分的相对位置。
8.根据前述权利要求中的任一项所述的方法,其中,所述有效数指示信息取决于与所述选定X位部分和所述选定Y位部分中的至少一个相关联的有效数指示参数。
9.根据前述权利要求中的任一项所述的方法,其中,所述有效数指示信息取决于由用于控制处理电路来生成至少一个所述部分产品的指令所指定的参数。
10.根据权利要求9所述的方法,其中,所述有效数指示信息取决于标识所述第一操作数的哪个X位部分是所述选定X位部分的指令的参数。
11.根据前述权利要求中的任一项所述的方法,其中,所述第一操作数和所述第二操作数包括整数。
12.根据前述权利要求中的任一项所述的方法,其中,X≤53并且Y≤53。
13.根据权利要求12所述的方法,其中,每个部分乘积使用用于将两个浮点值的有效数相乘的浮点乘法电路来生成。
14.根据前述权利要求中的任一项所述的方法,包括将所述第一操作数映射到相应的浮点值向量的步骤,每个浮点值具有从所述第一操作数的相应X位部分映射的有效数和取决于所述第一操作数内的该X位部分的有效数的指数;
其中,给定部分乘积的所述有效数指示信息取决于与用于生成所述给定部分乘积的所述选定X位部分相对应的所述浮点值的指数。
15.根据前述权利要求中的任一项所述的方法,其中,X=Y。
16.根据权利要求1到14中的任一项所述的方法,其中,X与Y不同。
17.一种包括处理电路的数据处理装置,所述处理电路被配置为执行前述权利要求中的任一项所述的方法。
18.一种数据处理装置,包括:
乘法电路,用于将包括多个X位部分的第一操作数的选定X位部分和包括至少一个Y位部分的第二操作数的选定Y位部分相乘以生成部分乘积;
转换电路,用于根据指示所述部分乘积的有效数的有效数指示信息来将所述部分乘积转换为具有冗余表示的转换部分乘积,其中,在所述冗余表示中,所述部分乘积使用多个N位部分来表示,其中,在所述冗余表示的至少两个相邻N位部分的组中,该组的较低N位部分的多个重叠位具有与该组的至少一个较高N位部分的多个最低有效位相同的有效数;以及
加法电路,用于将所述转换部分乘积加到具有所述冗余表示的累加器值。
19.根据权利要求18所述的数据处理装置,其中,所述加法电路包括多个N位加法电路单元,以使用所述转换部分乘积的相应N位部分和所述累加器值来执行独立的N位加法。
20.根据权利要求18和19中的任一项所述的数据处理装置,包括控制电路,响应于至少一个乘法指令,控制所述乘法电路和所述转换电路来生成与被选择为所述选定X位部分和所述选定Y位部分的部分的不同组合相对应的所述冗余表示中的多个转换部分乘积,并且控制所述加法电路将所述多个部分乘积中的每个部分乘积加到所述累加器值。
CN201680064809.8A 2015-11-12 2016-05-25 将使用冗余表示的第一和第二操作数相乘的方法和装置 Active CN108351761B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/939,469 US9703531B2 (en) 2015-11-12 2015-11-12 Multiplication of first and second operands using redundant representation
US14/939,469 2015-11-12
PCT/GB2016/051504 WO2017081437A1 (en) 2015-11-12 2016-05-25 Multiplication of first and second operands using redundant representation

Publications (2)

Publication Number Publication Date
CN108351761A true CN108351761A (zh) 2018-07-31
CN108351761B CN108351761B (zh) 2022-08-23

Family

ID=56116466

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680064809.8A Active CN108351761B (zh) 2015-11-12 2016-05-25 将使用冗余表示的第一和第二操作数相乘的方法和装置

Country Status (6)

Country Link
US (1) US9703531B2 (zh)
EP (1) EP3374853B1 (zh)
JP (1) JP6744916B2 (zh)
KR (1) KR102491789B1 (zh)
CN (1) CN108351761B (zh)
WO (1) WO2017081437A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110673823A (zh) * 2019-09-30 2020-01-10 上海寒武纪信息科技有限公司 乘法器、数据处理方法及芯片
WO2020220743A1 (zh) * 2019-04-28 2020-11-05 创新先进技术有限公司 一种计算机数据处理方法及装置
CN112214199A (zh) * 2020-09-11 2021-01-12 清华大学 256位乘法器

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10372415B2 (en) 2016-05-04 2019-08-06 Texas Instruments Incorporated Internally truncated multiplier
US10726514B2 (en) * 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
US11868804B1 (en) 2019-11-18 2024-01-09 Groq, Inc. Processor instruction dispatch configuration
US11114138B2 (en) 2017-09-15 2021-09-07 Groq, Inc. Data structures with multiple read ports
US11360934B1 (en) * 2017-09-15 2022-06-14 Groq, Inc. Tensor streaming processor architecture
US11243880B1 (en) 2017-09-15 2022-02-08 Groq, Inc. Processor architecture
US11170307B1 (en) 2017-09-21 2021-11-09 Groq, Inc. Predictive model compiler for generating a statically scheduled binary with known resource constraints
KR102356708B1 (ko) * 2017-09-28 2022-01-27 삼성전자주식회사 컨볼루션 연산을 수행하는 연산 장치 및 연산 방법
US10528642B2 (en) * 2018-03-05 2020-01-07 International Business Machines Corporation Multiple precision integer multiple by matrix-matrix multiplications using 16-bit floating point multiplier
US11537687B2 (en) 2018-11-19 2022-12-27 Groq, Inc. Spatial locality transform of matrices
US10936285B2 (en) 2019-02-06 2021-03-02 Arm Limited Overflow or underflow handling for anchored-data value
US10459688B1 (en) 2019-02-06 2019-10-29 Arm Limited Encoding special value in anchored-data element
US10963245B2 (en) 2019-02-06 2021-03-30 Arm Limited Anchored data element conversion
CN111814093A (zh) * 2019-04-12 2020-10-23 杭州中天微系统有限公司 一种乘累加指令的处理方法和处理装置
US11281745B2 (en) 2019-08-16 2022-03-22 International Business Machines Corporation Half-precision floating-point arrays at low overhead
CN114930351A (zh) 2019-11-26 2022-08-19 格罗克公司 使用仅单个侧从多维阵列加载操作数并输出结果
US11561795B2 (en) * 2020-03-30 2023-01-24 Arm Limited Accumulating data values and storing in first and second storage devices
US11301214B2 (en) 2020-06-09 2022-04-12 Verisilicon Microelectronics (Shanghai) Co., Ltd. Device for performing multiply/accumulate operations
CN112669396B (zh) * 2020-12-18 2023-09-12 深圳智慧林网络科技有限公司 图像无损压缩方法和装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1591318A (zh) * 2003-09-03 2005-03-09 国际商业机器公司 二进制补码和无符号量格式的数据乘法装置
CN102591615A (zh) * 2012-01-16 2012-07-18 中国人民解放军国防科学技术大学 结构化混合位宽乘法运算方法及装置
CN102866875A (zh) * 2012-10-05 2013-01-09 刘杰 通用多操作数加法器
US8667044B1 (en) * 2009-01-13 2014-03-04 Xilinx, Inc. Iterative stage as dividend operand prescaler for fixed-radix division
CN104350492A (zh) * 2012-06-29 2015-02-11 英特尔公司 在大寄存器空间中利用累加的向量乘法
CN104899004A (zh) * 2014-03-07 2015-09-09 Arm有限公司 一种用于将浮点操作数相乘的数据处理装置和方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE3144015A1 (de) 1981-11-05 1983-05-26 Ulrich Prof. Dr. 7500 Karlsruhe Kulisch "schaltungsanordnung und verfahren zur bildung von skalarprodukten und summen von gleitkommazahlen mit maximaler genauigkeit"
US4866653A (en) 1986-08-04 1989-09-12 Ulrich Kulisch Circuitry for generating sums, especially scalar products
KR100413529B1 (ko) * 2000-11-25 2003-12-31 학교법인 포항공과대학교 잉여 이진수 연산을 채택한 디지털 곱셈 장치 및 방법
US7236995B2 (en) 2002-12-27 2007-06-26 Arm Limited Data processing apparatus and method for converting a number between fixed-point and floating-point representations
CN102257473A (zh) * 2008-10-30 2011-11-23 音频专用集成电路公司 高基数字乘法器
GB2522194B (en) * 2014-01-15 2021-04-28 Advanced Risc Mach Ltd Multiply adder

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1591318A (zh) * 2003-09-03 2005-03-09 国际商业机器公司 二进制补码和无符号量格式的数据乘法装置
US8667044B1 (en) * 2009-01-13 2014-03-04 Xilinx, Inc. Iterative stage as dividend operand prescaler for fixed-radix division
CN102591615A (zh) * 2012-01-16 2012-07-18 中国人民解放军国防科学技术大学 结构化混合位宽乘法运算方法及装置
CN104350492A (zh) * 2012-06-29 2015-02-11 英特尔公司 在大寄存器空间中利用累加的向量乘法
CN102866875A (zh) * 2012-10-05 2013-01-09 刘杰 通用多操作数加法器
CN104899004A (zh) * 2014-03-07 2015-09-09 Arm有限公司 一种用于将浮点操作数相乘的数据处理装置和方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
梁政等: "基于硬件的二阶插值单精度函数近似", 《微电子学与计算机》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020220743A1 (zh) * 2019-04-28 2020-11-05 创新先进技术有限公司 一种计算机数据处理方法及装置
TWI731543B (zh) * 2019-04-28 2021-06-21 開曼群島商創新先進技術有限公司 計算機資料處理方法及裝置
CN110673823A (zh) * 2019-09-30 2020-01-10 上海寒武纪信息科技有限公司 乘法器、数据处理方法及芯片
CN112214199A (zh) * 2020-09-11 2021-01-12 清华大学 256位乘法器
CN112214199B (zh) * 2020-09-11 2022-06-21 北京草木芯科技有限公司 256位乘法器

Also Published As

Publication number Publication date
WO2017081437A1 (en) 2017-05-18
KR102491789B1 (ko) 2023-01-26
CN108351761B (zh) 2022-08-23
US9703531B2 (en) 2017-07-11
JP6744916B2 (ja) 2020-08-19
EP3374853B1 (en) 2019-10-16
KR20180081106A (ko) 2018-07-13
EP3374853A1 (en) 2018-09-19
US20170139677A1 (en) 2017-05-18
JP2019500673A (ja) 2019-01-10

Similar Documents

Publication Publication Date Title
CN108351761A (zh) 使用冗余表示的第一和第二操作数的乘法
CN108351776A (zh) 用于向量的处理的通道位置信息
CN108351762A (zh) 使用重叠位的数值的冗余表示
JP6694880B2 (ja) 有効度整合
CN108351763A (zh) 重叠传播操作
CN113454915A (zh) 在锚定数据元素中编码特殊值
US10963245B2 (en) Anchored data element conversion

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
GR01 Patent grant
GR01 Patent grant