CN112639722A - 加速矩阵乘法的装置和方法 - Google Patents
加速矩阵乘法的装置和方法 Download PDFInfo
- Publication number
- CN112639722A CN112639722A CN201880096937.XA CN201880096937A CN112639722A CN 112639722 A CN112639722 A CN 112639722A CN 201880096937 A CN201880096937 A CN 201880096937A CN 112639722 A CN112639722 A CN 112639722A
- Authority
- CN
- China
- Prior art keywords
- circuit
- point
- product
- floating
- vector
- 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
Images
Classifications
-
- 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/544—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 for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- 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/52—Multiplying; Dividing
- G06F7/523—Multiplying only
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/3808—Details concerning the type of numbers or the way they are handled
- G06F2207/3812—Devices capable of handling different types of numbers
- G06F2207/3824—Accepting both fixed-point and floating-point numbers
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
Abstract
描述了涉及执行向量乘法的方法和装置。也描述了执行向量乘法的硬件加速器。在一个实施例中,一种组合定点和浮点向量乘法电路,包括:至少一个开关,用于在第一模式和第二模式之间切换该电路,其中,在第一模式中,一组乘法器中的每个乘法器将来自第一浮点向量和第二浮点向量的相同元素位置的尾数相乘以产生对应乘积,基于由最大指数确定器确定的对应乘积的指数中的最大指数利用一组移位寄存器来移位对应乘积以产生经移位的乘积,基于来自第一浮点向量和第二浮点向量的相同元素位置的符号比特利用一组数值转换电路对经移位的乘积执行数值转换操作以产生经移位的乘积的有符号表示,利用一组加法器将经移位的乘积的有符号表示相加以产生单个乘积,并且基于最大指数利用正规化电路将单个乘积正规化为单个浮点结果,并且在第二模式中,该组乘法器中的每个乘法器将来自第一整数向量和第二整数向量的相同元素位置的值相乘以产生对应乘积,并且利用该组加法器将每个对应乘积相加以产生单个整数结果。
Description
技术领域
本公开一般地涉及电子产品,更具体地,本公开的实施例涉及执行向量乘法的硬件加速器。
背景技术
处理器或者处理器的集合执行来自指令集的指令,例如指令集体系结构(instruction set architecture,ISA)。指令集是与编程有关的计算机体系结构的一部分,并且一般包括原生数据类型、指令、寄存器体系结构、寻址模式、存储器体系结构、中断和异常处理以及外部输入和输出(I/O)。应当注意这里的术语指令可以指宏指令,例如提供到处理器以供执行的指令,或者指微指令,例如由处理器的解码器对宏指令解码而产生的指令。
附图说明
在附图中以示例而非限制方式图示了本公开,附图中相似的标记指示类似的要素并且其中:
图1根据本公开的实施例图示了具有硬件加速器的硬件处理器。
图2根据本公开的实施例图示了硬件处理器和硬件加速器。
图3根据本公开的实施例图示了定点乘法器累加器(MAC)树电路。
图4根据本公开的实施例图示了具有多个定点乘法器累加器(MAC)树电路的定点累加器电路。
图5根据本公开的实施例图示了浮点加法器电路。
图6根据本公开的实施例图示了浮点乘法器电路。
图7根据本公开的实施例图示了浮点乘法器累加器(MAC)树电路。
图8根据本公开的实施例图示了具有多个浮点乘法器累加器(MAC)树电路的浮点累加器电路。
图9根据本公开的实施例图示了浮点矩阵乘法电路。
图10根据本公开的实施例图示了具有定点累加器电路和浮点累加器电路的定点和浮点向量乘法电路。
图11根据本公开的实施例图示了具有定点累加器电路和浮点累加器电路的四乘四定点和浮点向量乘法电路。
图12根据本公开的实施例图示了具有定点累加器电路和浮点转换电路来在累加结束时将定点转换成浮点的定点和浮点向量乘法电路。
图13A-图13C根据本公开的实施例图示了被细分成多个区段的定点和浮点向量乘法电路,其中每个区段具有其自己的最大指数。
图14A-图14C根据本公开的实施例图示了被细分成多个区段的定点和浮点向量乘法电路,其中每个区段具有其自己的最大指数并且这些区段被按指数之和来排序。
图15根据本公开的实施例图示了包括具有定点累加器电路和浮点累加器电路的舍入电路的定点和浮点向量乘法电路。
图16根据本公开的实施例图示了定点和浮点矩阵乘法电路。
图17根据本公开的实施例图示了流程图。
图18A是根据本公开的实施例图示出通用向量友好指令格式及其类别A指令模板的框图。
图18B是根据本公开的实施例图示出通用向量友好指令格式及其类别B指令模板的框图。
图19A是根据本公开的实施例图示出图18A和图18B中的通用向量友好指令格式的字段的框图。
图19B是根据本公开的一个实施例图示出构成完整操作码字段的图19A中的特定向量友好指令格式的字段的框图。
图19C是根据本公开的一个实施例图示出构成寄存器索引字段的图19A中的特定向量友好指令格式的字段的框图。
图19D是根据本公开的一个实施例图示出构成增强操作字段1850的图19A中的特定向量友好指令格式的字段的框图。
图20是根据本公开的一个实施例的寄存器体系结构的框图。
图21A是根据本公开的实施例图示出示范性有序流水线和示范性寄存器重命名、乱序(out-of-order)发出/执行流水线两者的框图。
图21B是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、乱序发出/执行体系结构核心两者的框图。
图22A是根据本公开的实施例的单个处理器核心及其与片上互连网络以及与第2级(L2)缓存的其本地子集的连接的框图。
图22B是根据本公开的实施例的图22A中的处理器核心的一部分的扩展视图。
图23是根据本公开的实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器的框图。
图24是根据本公开的一个实施例的系统的框图。
图25是根据本公开的实施例的更具体示范性系统的框图。
图26示出了根据本公开的实施例的第二更具体示范性系统的框图。
图27示出了根据本公开的实施例的片上系统(SoC)的框图。
图28是根据本公开的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。
具体实施方式
在接下来的描述中,阐述了许多具体细节。然而,要理解,没有这些具体细节也可实现本公开的实施例。在其他情况下,没有详细示出公知的电路、结构和技术,以免模糊对本说明书的理解。
说明书中提及“一个实施例”、“一实施例”、“一示例实施例”等等表明描述的实施例可包括特定的特征、结构或特性,但可不一定每个实施例都包括该特定特征、结构或特性。另外,这种短语不一定指同一实施例。另外,当联系一实施例来描述特定的特征、结构或特性时,认为联系其他实施例(无论是否明确描述)来实现这种特征、结构或特性是在本领域技术人员的知识范围内的。
(例如,硬件)处理器(例如,具有一个或多个核心)可执行指令(例如,指令的线程)以在数据上操作,例如以执行算术、逻辑或者其他功能。例如,软件可请求操作并且硬件处理器(例如,其一个或多个核心)可响应于该请求而执行该操作。在一个实施例中,处理器耦合到(例如,片上或片外)加速器(例如,负载转移引擎)以执行一个或多个(例如,负载转移的)操作,例如,而不是只在该处理器上执行这些操作。在一个实施例中,处理器包括(例如,片上或片外)加速器(例如,负载转移引擎)来执行一个或多个操作,例如,而不是只在该处理器上执行这些操作。操作的两个非限制性示例是向量乘法操作和矩阵乘法操作。在一个实施例中,加速器响应于对于处理器(例如,中央处理单元(CPU))执行操作的请求而执行该操作。加速器可以是硬件加速器(例如,加速器电路)。加速器可耦合到数据存储装置(例如,与加速器一起在片上或者在片外)来存储数据,例如,输入数据和/或输出数据。在一个实施例中,加速器耦合到输入数据存储装置(例如,输入缓冲器)来从其加载输入。在一个实施例中,加速器耦合到输出数据存储装置(例如,输出缓冲器)来在其上存储输出。处理器可执行指令来将一个或多个操作(例如,指令、指令的线程或者其他工作)负载转移到加速器。操作可以是在计算系统(例如,加速器和/或处理器)中具有不同格式(例如,表示)的数值数据上执行的。在某些实施例中,数字采取定点格式或者浮点格式。整数可被表示成二进制格式。有符号整数可被表示成二进制(2进制)补码格式(例如,其中开头是零指示正整数,并且开头是一指示负整数)。(例如,实数)数字可被表示成浮点格式,以例如用固定数目的数位来表示不同数量级的数字。
数值格式的一个示例是其中数字一般被近似到固定数目的有效数位(有效数字(significand))并且被利用某个固定底数(base)(例如,2、10或16的底数)的指数(exponent)来定标。其中S表示符号比特、M表示尾数并且E表示指数的数值格式的示例如下:
x=significand x baseexponent (1)
浮点格式的示例如下:
x=(-1)sx1.Mx2E-bias (2)
根据用于二进制浮点(floating-point,FP)算术的IEEE 754标准,尾数是无符号数字(例如,二进制分数)并且正规化的浮点数在最高有效位(MSB)位置中具有单个一。在某些实施例中,这个比特(例如,在小数点左侧的这个比特)是隐含的并且因此尾数不需要存储它。在某些实施例中,指数在这里被表示为非负整数,恒定的偏置被从中减去。浮点格式的示例是浮点16(例如,binary16),浮点32(例如,binary32),浮点64(例如,binary64),浮点128(例如,binary128),以及浮点256(例如,binary256),虽然在某些实施例中可使用任何数目的符号、有效数字(例如,其尾数)或者指数比特。在一个实施例中,binary16格式对于符号比特具有一比特,对于指数具有5比特,并且对于有效数字具有11比特隐含(10比特显式存储)。在一个实施例中,binary32格式对于符号比特具有一比特,对于指数具有8比特,并且对于有效数字具有24比特隐含(23比特显式存储)。在一个实施例中,binary64格式对于符号比特具有一比特,对于指数具有11比特,并且对于有效数字具有53比特隐含(52比特显式存储)。在一个实施例中,binary128格式对于符号比特具有一比特,对于指数具有15比特,并且对于有效数字具有113比特隐含(112比特显式存储)。在一个实施例中,binary256格式对于符号比特具有一比特,对于指数具有19比特,并且对于有效数字具有237比特隐含(236比特显式存储)。
另一数字格式是拐点(Flexpoint,Flex)。拐点是基于这样的数字的:这些数字具有以二进制补码形式存储整数值的N比特尾数,和在张量的所有元素间共享的M比特指数e。这个格式被表示为FlexN+M。作为一个示例,具有16比特尾数和5比特指数的拐点格式可被称为flex16+5,与浮点(FP)格式形成对比。Flex数字表示对于给定的张量具有共享的指数。在某些实施例中,用于拐点的向量(和/或矩阵)乘法加速器是基于整数电路的(例如,流水线)(例如,而不是纯浮点流水线),因为拐点实质上是基于整数的系统。
在某些实施例中,包括向量(和/或矩阵)乘法加速器来在多于一种格式(例如,定点、拐点或浮点)的数字上执行操作。在某些实施例中,包括向量(和/或矩阵)乘法加速器来在采取定点、拐点或浮点格式的任何一者(例如,所有)的数字上执行操作。
图1根据本公开的实施例图示了具有硬件加速器104的硬件处理器100。硬件处理器100(例如,核心102)可接收执行向量乘法(或者矩阵乘法)线程(例如,操作)的请求(例如,来自软件)并且可将向量乘法(或者矩阵乘法)线程(例如,操作)(例如,其至少一部分)负载转移到硬件加速器(例如,硬件加速器104)。硬件处理器100可包括一个或多个核心(0至N)。在一个实施例中,每个核心可与硬件加速器104通信(例如,耦合到硬件加速器104)。在一个实施例中,每个核心可与多个硬件解压缩加速器之一通信(例如,耦合到多个硬件解压缩加速器之一)。(一个或多个)核心、(一个或多个)加速器、数据存储装置106和寄存器110可与彼此通信(例如,与彼此耦合)。箭头指示双向通信(例如,去到和来自组件),但可以使用单向通信。在一个实施例中,(例如,每个)核心可与数据存储装置通信(例如,耦合),例如,存储和/或输出数据流108。硬件加速器可包括本文论述的任何硬件(例如,电路或电路系统)。在一个实施例中,(例如,每个)加速器可与数据存储装置通信(例如,耦合),例如,来接收向量数据的流(例如,其元素)。
图2根据本公开的实施例图示了硬件处理器201和硬件加速器204。在一个实施例中,硬件加速器与硬件处理器一起在片上。在一个实施例中,硬件加速器在硬件处理器的片外。在一个实施例中,至少包括硬件处理器201和硬件加速器204的系统200是SoC。硬件处理器201(例如,核心202)可接收执行向量(和/或矩阵)线程(例如,操作)的请求(例如,来自软件)并且可将该线程(例如,操作)(例如,其至少一部分)负载转移到硬件加速器(例如,硬件加速器204)。硬件处理器201可包括一个或多个核心(0至N)。在一个实施例中,每个核心可与硬件解压缩加速器204通信(例如,耦合到硬件解压缩加速器204)。在一个实施例中,每个核心可与多个硬件加速器之一通信(例如,耦合到多个硬件加速器之一)。(一个或多个)核心、(一个或多个)加速器、数据存储装置206和寄存器210可与彼此通信(例如,与彼此耦合)。箭头指示双向通信(例如,去到和来自组件),但可以使用单向通信。在一个实施例中,(例如,每个)核心可与数据存储装置通信(例如,耦合),例如,存储和/或输出数据流208。硬件加速器可包括本文论述的任何硬件(例如,电路或电路系统)。在一个实施例中,(例如,每个)加速器可与数据存储装置通信(例如,耦合),例如,来接收向量数据的流(例如,其元素)。数据流208可被预先加载到数据存储装置206中,例如,由硬件压缩加速器或硬件处理器加载。
硬件加速器可包括一个或多个定点(例如,仅定点)加法器电路和/或定点(例如,仅定点)乘法器电路。硬件加速器可包括一个或多个浮点(例如,仅浮点)加法器电路和/或浮点(例如,仅浮点)乘法器电路。
图3根据本公开的实施例图示了定点乘法器累加器(multiplier andaccumulator,MAC)树电路。在一个实施例中,MAC树电路300只取入定点数字作为输入302(示为16个输入)。在一个实施例中,乘法器304的每一对输入中的左输入是第一输入向量的相应元素并且乘法器304的每一对输入中的右输入是第二输入向量的相应元素,例如,各自具有八个定点元素(例如,索引为0-7)的两个输入向量。描绘的MAC树电路300将把输入对302乘在一起,然后利用加法器306将这些乘积加在一起以生成单个结果308。
图4根据本公开的实施例图示了具有多个定点(例如,整数)乘法器累加器(MAC)树电路402的定点累加器电路400(例如,加速器)。在一个实施例中,每个MAC树电路402是来自图3的定点(例如,整数)MAC树电路300的实例。在描绘的实施例中,来自MAC树电路402的每个输出被利用加法器404加在一起以生成单个结果408,该结果408可利用累加器电路410来与先前结果累加。
图5根据本公开的实施例图示了浮点加法器电路500。浮点加法器电路500将把第一浮点值(第一输入)502和第二浮点值(第二输入)504相加以产生结果浮点值(输出)506。值可采取任何浮点格式,例如,以(一个或多个)符号字段(例如,SignA和Sign B,分别用于输入502和504)、指数字段(exp)(例如,ExpA和ExpB,分别用于输入502和504)和尾数字段(尾数)来描绘。比较器(comp)508将比较第一浮点值(第一输入)502和第二浮点值(第二输入)504的指数,并且如果第二输入值506的指数大于第一输入值504的指数则在交换寄存器510中交换第一输入值502的尾数和第二输入值504的尾数。移位寄存器512可将尾数移位以基于另一尾数的指数来为其指数对齐(例如,使得较低数字的尾数被对齐到较大数字的相同幅值)。加法器514(例如,2进制补码加法器或者定点加法器)随后将第一浮点值(第一输入)502和第二浮点值(第二输入)504的尾数值相加,并且前导零检测、正规化和舍入电路516生成结果浮点值(输出)506。在某些实施例中,要求非零数字的有效数字的最高有效位是非零的(例如,除了当相应的指数将小于最小值一时以外)。此过程一般可称为正规化。对于二进制格式(例如,其只使用数位0和1),这个非零数位必然是1。因此,其不需要被显式表示并且允许了格式具有多一比特的隐式精度。这也可被称为前导比特约定、隐式比特约定、隐藏比特约定或者假定比特约定。
图6根据本公开的实施例图示了浮点乘法器电路600。浮点乘法器电路600。浮点乘法器电路600将把第一浮点值(第一输入)602和第二浮点值(第二输入)604相乘以产生结果浮点值(输出)606。加法器电路614将把来自第一浮点值(第一输入)602和第二浮点值(第二输入)604的指数加在一起。乘法器618(例如,2进制补码乘法器或者定点乘法器)将把来自第一浮点值(第一输入)602和第二浮点值(第二输入)604的尾数乘在一起。前导零检测、正规化和舍入电路616生成结果浮点值(输出)606。
图7根据本公开的实施例图示了浮点乘法器累加器(MAC)树电路700。在一个实施例中,MAC树电路700只取入浮点数字作为输入702(示为16个输入)。在一个实施例中,乘法器704的每一对输入中的左输入是第一输入向量的相应元素并且乘法器704的每一对输入中的右输入是第二输入向量的相应元素,例如,各自具有八个浮点元素(例如,索引为0-7)的两个输入向量。注意浮点数的每个元素可包括多个字段(例如,每个元素的符号字段、指数字段和尾数字段)。描绘的MAC树电路700将把输入对702乘在一起,然后利用加法器706将这些乘积加在一起以生成单个结果708。在一个实施例中,每个乘法器704是图6的浮点乘法器电路600的实例并且/或者每个加法器706是图5的浮点加法器电路500的实例(例如,包括指数比较、移位、前导零检测和/或正规化的多次发生)。
图8根据本公开的实施例图示了具有多个浮点乘法器累加器(MAC)树电路802的浮点累加器电路800(例如,加速器)。在一个实施例中,每个MAC树电路802是来自图7的(例如,浮点)MAC树电路700的实例并且/或者每个加法器804是来自图5的浮点加法器电路500的实例。在描绘的实施例中,来自MAC树电路802的每个输出被利用加法器804加在一起以生成单个结果804,该结果804可利用累加器电路810来与先前结果累加。
图9根据本公开的实施例图示了浮点矩阵乘法电路900。浮点矩阵乘法电路900包括多个(例如,32个,索引为0-31)浮点累加器电路902并且可包括一组加法器904来允许对浮点累加器电路902的累加输出求和。在一个实施例中,每个浮点累加器电路902是图8的浮点累加器电路800的实例(例如,其中四个MAC树的每一者是图7的MAC树电路700的实例)。
在某些实施例中,电路包括指数比较、移位、前导零检测和/或正规化的多次发生(例如,对于MAC树和/或累加器电路内的每个加法)。可能希望使电路进行的指数比较、移位、前导零检测、舍入和/或正规化达到最低限度,例如,为了节省该电路的电路面积(例如,门计数)和功率(例如,能量)消耗。这里的某些实施例通过对于定点和浮点操作两者具有单个电路(例如,加速器)来节省电路面积和功率(例如,能量)消耗,例如,没有单独的定点(例如,整数)电路和单独的浮点电路。在某些实施例中,用于定点和浮点操作两者的单个电路(例如,加速器)与具有单独的定点(例如,整数)电路和单独的浮点电路相比节省了电路面积和功率消耗。利用这样的单个电路实际上转化成了每秒更高的操作,因为其增加了对于给定的面积和功率预算可以实现的整体(例如,向量和/或矩阵乘法)电路的数目。在一个实施例中,该电路是处理器(例如,计算机)的一部分并且改善了处理器(例如,计算机)本身的功能。这里的某些实施例对于定点、拐点和浮点操作的任何一者(例如,全部)具有单个电路(例如,加速器)。
参考图7的一个实施例,存在包括指数比较、移位、前导零检测、舍入和/或正规化的浮点加法的七个实例,例如,图5的浮点加法器电路500的七个实例,从而有其中的组件(例如,包括比较器508、交换寄存器510、移位寄存器512和/或前导零检测、正规化和舍入电路516)的七个实例。进一步参考图7的该实施例,存在包括指数比较、移位、前导零检测、舍入和/或正规化的浮点乘法的八个实例,例如,图6的浮点乘法器电路600的八个实例,从而有其中的组件(例如,包括前导零检测、正规化和舍入电路616)的八个实例。参考图8的实施例,其中每个MAC树电路802是来自图7的浮点MAC树电路700的实例并且每个加法器804是来自图5的浮点加法器电路500的实例,组件(例如,比较器508、交换寄存器510、移位寄存器512、前导零检测、正规化和舍入电路516和/或前导零检测、正规化和舍入电路616)的数目甚至更大。参考图9的实施例,其中每个浮点累加器电路902是图8的浮点累加器电路800的实例,组件(例如,比较器508、交换寄存器510、移位寄存器512、前导零检测、正规化和舍入电路516和/或前导零检测、正规化和舍入电路616)的数目还要更大。这里的某些实施例使例如用于执行浮点操作的重复组件(例如,指数比较、移位、前导零检测、舍入和/或正规化组件)的数目达到最低限度。
这里的某些实施例提供了一种用于浮点操作的电路,其通过对于(例如,每个)向量乘法执行单个指数比较、移位、前导零检测、舍入和/或正规化(例如,在流水线中执行一次)而使得电路(例如,加速器)为浮点操作进行的指数比较、移位、前导零检测、舍入和/或正规化达到最低限度,例如,与对于向量乘法中的每个加法执行指数比较、移位、前导零检测、舍入和/或正规化形成对照。
这里的某些实施例提供了一种(例如,定点和浮点)向量乘法电路,其通过使用最大指数来将由定点乘法器和定点加法器产生的(一个或多个)定点值量化成浮点结果,来使用定点乘法器(例如,乘法器电路)和定点加法器(例如,加法器电路)来执行浮点向量乘法。
图10根据本公开的实施例图示了具有定点累加器电路1002和浮点累加器电路1004的定点和浮点向量乘法电路1000。电路1000包括模式控制器1006(例如,电路)来在定点模式和浮点模式之间切换(例如,选择)。在一个实施例中,模式控制器1006将在定点模式、拐点模式和浮点模式(例如,其任何一者)之间切换。在一个实施例中,模式控制器发出多个控制值(例如,0至M)来控制电路组件(例如,开关)。电路1000包括乘积之和电路(例如,流水线)1001和累加器1010(例如,定点累加器电路1002和浮点累加器电路1004)。在描绘的实施例中,浮点(和/或拐点)输入(例如,输入寄存器)和定点输入被示为分开的输入。在一个实施例中,同一寄存器被用于定点数据或浮点数据(例如,或者拐点数据)。例如,第一寄存器为第一向量(例如,向量A)存储定点数据或浮点数据(例如,或者拐点数据)并且第二寄存器为第二向量(例如,向量B)存储定点数据或浮点数据(例如,或者拐点数据)。在一个实施例中,单独的寄存器被用于定点数据和浮点数据(例如,以及拐点数据)。例如,第一寄存器为第一定点向量(例如,定点向量A)存储定点数据,第二寄存器为第二定点向量(例如,定点向量B)存储定点数据,第三寄存器为第三浮点向量(例如,浮点向量A)存储浮点数据,并且第四寄存器为第四浮点向量(例如,浮点向量B)存储浮点数据。在一个实施例中,拐点数据被存储在其自己的(一个或多个)寄存器中。在一个实施例中,输入1012对于定点向量的每个元素包括一输入(例如,对于第一(例如,整数)向量A的第一元素[0]包括输入1020(例如,其中整数向量A与浮点向量A是分开的或者有区别的)和/或对于第二(例如,整数)向量B的第一元素[0]包括输入1022(例如,其中整数向量B与浮点向量B是分开的或者有区别的),并且输入1012对于浮点向量的每个元素(例如,每个元素的符号比特(sign)、指数(exp)和尾数)包括一输入(例如,对于第一向量A的第一元素[0]的符号比特包括输入1026,对于第一向量A的第一元素[0]的指数比特包括输入1014,并且对于第一向量A的第一元素[0]的尾数比特包括输入1008,和/或对于第二向量B的第一元素[0]的符号比特包括输入1026,对于第二向量B的第一元素[0]的指数比特包括输入1014,并且对于第二向量B的第一元素[0]的尾数比特包括输入1008)。在某些实施例中,输入1012对于拐点向量的每个元素(例如,每个元素的指数和尾数)包括一输入(例如,对于第一向量A的第一元素[0]的指数比特包括输入1014并且对于第一向量A的第一元素[0]的尾数比特包括输入1008,和/或对于第二向量B的第一元素[0]的指数比特包括输入1014,并且对于第二向量B的第一元素[0]的尾数比特包括输入1008)。在一个实施例中,要被组合(例如,单个)定点和浮点向量乘法电路1000操作的向量(例如,A[N+1]和B[N+1])具有等于N+1的相同的元素数目。N在某些实施例中可以是任何正整数。
在此图中没有绘出其他输入(例如,对于元素1至N)的标号以免模糊数据流/线。另外,没有绘出控制输入/线(例如,对于开关、移位器、数值转换电路(例如,2进制补码电路))以免模糊数据流/线。到组件的控制输入/线可从模式控制器延伸。
在某些实施例中,要处理的向量的每个元素位置(例如,0至N)包括相应的乘法器、移位寄存器和数值转换电路(例如,无符号到有符号转换电路)来处理该元素位置中的尾数,包括异或逻辑门,和/或包括加法器来处理该元素位置中的指数(例如,加在一起)。这些组件集合可被称为元素块(例如,在图10中有N+1个元素块)。
第一模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第一(例如,浮点)模式中以对浮点输入数据执行操作。
作为一个示例,在第一(例如,浮点)模式中,这些浮点数字的每一者被划分成其符号比特、指数比特和尾数比特。在这个初始划分时,取决于指数可以是1或0的前导隐藏比特被串接到尾数上。随后在每个向量的相应尾数之间执行按对乘法,将指数加在一起,并且对相应的符号比特进行逻辑异或。在乘法级(stage)的输出处,尾数可被截断或者扩展成期望的内部比特长度(例如,字长度)以将资源利用率与解决方案准确性进行折衷。并行地,在具有log2 n个级的树中比较所有指数。最高指数成为参考并且所有尾数被对齐到此参考。在这个对齐之后,尾数被转换成定点(例如,2进制补码)数表示。在下一级的一个实施例中,对尾数执行总和化简,并且在这个化简树的每个级别,将比特长度(例如,字长度)增加一比特以防止溢出。在这个求和之后,定点数被重转换成符号和幅值,对齐以去掉前导的一,并且指数被校正。从这些值,遵从标准的浮点数被生成并且在此示例中被输出。在一个实施例中,该标准是IEEE浮点算术标准(例如,754-2008–2008年8月29日发布的IEEE计算机学会的浮点算术标准)。
作为另一示例,在第一模式中,输入源发开关(例如,复用器,例如复用器1030和1032)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对尾数(例如,将浮点向量A和B的具有索引0的两个元素的尾数作为一对源发,将浮点向量A和B的具有索引1的两个元素的尾数作为第二对源发,将浮点向量A和B的具有索引2的两个元素的尾数作为第三对源发,等等)。在此示例中,每一对尾数被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有索引0的元素的尾数A[0]1008和来自向量B的具有索引0的元素的尾数B[0]1024被(例如,定点)乘法器1034相乘以产生乘积。描绘的实施例中的来自每个乘法器的乘积被输出到移位寄存器(例如,移位器)以基于它的所确定指数(例如,乘积的指数)和最大指数(例如,乘积的最大指数)来移位(例如,移动)每个乘积。在此示例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对指数(例如,将浮点向量A和B的具有索引0的两个元素的指数作为一对源发,将浮点向量A和B的具有索引1的两个元素的指数作为第二对源发,将浮点向量A和B的具有索引2的两个元素的指数作为第三对源发,等等)被相应的(例如,定点)(例如,整数)加法器加在一起以产生指数之和(例如,来自向量A和向量B的一对元素的乘积的指数)。在此示例中,指数之和(例如,此图中的n+1个和)的每一者被输入到最大指数确定器1040(例如,比较器电路)中。例如,来自向量A的具有索引0的元素的指数A[0]1014和来自向量B的具有索引0的元素的指数B[0]1016被(例如,定点)(例如,整数)加法器1038加在一起以产生指数A[0]1014和指数B[0]1016的总和。最大指数确定器1040(例如,电路)随后将指数之和与彼此相比较以确定指数之和的最大者(例如,最大值),例如,尾数的相应乘积的指数中的最大指数。在一个实施例中,指数之和的最大者是尾数乘积的最大指数。描绘的实施例中的最大指数随后被用于相应地移位其他尾数乘积,例如,为了将其他尾数乘积对齐到最大指数。在一个实施例中,最大指数是4(例如,各自具有值2的两个指数之和),并且另一指数是3,因此其他指数的尾数乘积被移一位(例如,一个元素)(例如,向左移)以将尾数乘积对齐来与最大指数具有相同的指数。在描绘的实施例中,最大指数(例如,指示最大指数的值)沿着路径1041被输出到一组移位寄存器(例如,包括移位寄存器1036)(例如,示为从移位寄存器1036起的在每个移位寄存器之间延伸的水平线)和正规化电路1050。在此示例中,每个移位的尾数乘积被输出到相应的数值转换电路(例如,2进制补码电路)(例如,无符号到有符号转换电路)。例如,数值转换电路1042(例如,2进制补码电路)接收从移位寄存器1036输出的无符号(例如,并且移位的)尾数乘积。每个相应的数值转换电路(例如,2进制补码电路)随后将(例如,移位的)尾数乘积从无符号格式(例如,值)转换成有符号格式(例如,值)。在一个实施例中,这个转换是基于来自每个相应的异或逻辑门的输出(例如,该输出指示正尾数乘积或负尾数乘积)在(例如,移位的)尾数乘积上执行的2进制补码操作(例如,从无符号(例如,二进制)格式转换成2进制补码格式)。
在一个实施例中,移位寄存器让值通过,而没有移位,例如,当最大指数(例如,两个指数之和)与该索引位置的指数相同时,例如,其中数值转换电路1042和移位寄存器1036被用于输入向量的索引位置0。
在描绘的实施例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对符号比特的每个符号比特(例如,将浮点向量A和B的具有索引0的两个元素的符号比特作为一对源发,将浮点向量A和B的具有索引1的两个元素的符号比特作为第二对源发,将浮点向量A和B的具有索引2的两个元素的符号比特作为第三对源发,等等)被相应的(例如,定点)逻辑门在逻辑上异或(XOR)在一起,该逻辑门实现XOR来产生指示出尾数乘积是负还是正的值,例如,该值对于正为0,对于负则为1。在描绘的实施例中,异或逻辑门1044对于第一向量A的第一元素[0]从输入1026接收符号比特并且对于第二向量B的第一元素[0]从输入1028接收符号比特并且在输入1026、1028中只有一个是1时输出第一值(例如,1指示出乘积是负的)以指示假(例如,负),否则输出第二值(例如,0指示出乘积是正的)。
每一对元素(例如,在相同元素位置)的经转换的(例如,有符号)值随后被利用一组(例如,定点)(例如,整数)加法器1046全都加在一起成为单个乘积。正规化电路1050随后在此第一模式中被用来将该单个乘积转换成基于最大指数的浮点表示。在一个实施例中,电路1050还执行舍入或其他操作来将该单个乘积的(例如,整数)格式转换成浮点格式以创建乘积之和电路1001的结果。在一个实施例中,正规化电路1050移动非零数字的有效数字(例如,单个乘积)的最高有效位以成为非零(例如,并且根据单个乘积的移动来相应地移动最大指数值)。
第二模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第二(例如,定点)模式中以对定点输入数据执行操作。
作为一个示例,在第二(例如,定点)模式中,乘积之和电路将把来自输入向量的同一元素位置(例如,0至N)的每一对定点(例如,整数)值相乘为乘积,并且对这些乘积求和以产生单个定点结果。
作为另一示例,在第二(例如,定点)模式中,输入源发复用器(例如,复用器1030和1032)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对值(例如,将定点向量A和B的具有索引0的两个元素的值作为一对源发,将定点向量A和B的具有索引1的两个元素的值作为第二对源发,将定点向量A和B的具有索引2的两个元素的值作为第三对源发,等等)。在此示例中,每一对值被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有索引0的元素的值A[0]1020和来自向量B的具有索引0的元素的值B[0]1022被(例如,定点)乘法器1034相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到相应的移位寄存器(例如,移位器),但在第二模式中乘积通过移位寄存器而不被改变,例如,乘积不被移位(例如,移动)。在此示例中,从每个移位寄存器输出的每个未移位的乘积被输入到相应的数值转换电路(例如,2进制补码电路)中,但在第二模式中,乘积通过数值转换电路,而不被改变,例如,乘积已经处于2进制补码表示,因此它们不被进一步转换。每一对元素(例如,在相同元素位置)的(例如,有符号)乘积随后被利用一组(例如,定点)(例如,整数)加法器1046全都加在一起成为单个定点结果。在一个实施例中,该单个定点结果通过正规化电路1050,而没有对该单个定点结果的任何修改。
第三模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第三(例如,拐点)模式中以对拐点输入数据执行操作。
作为一个示例,在第三(例如,拐点)模式中,这些拐点数字的每一者被划分成指数比特,以及整数(2进制补码)尾数比特,例如,而不是像浮点格式中那样的二进制尾数比特。随后在每个向量的对应尾数之间执行按对乘法,并且将指数加在一起。在乘法级的输出处,尾数可被截断或者扩展成期望的内部比特长度(例如,字长度)以将资源利用率与解决方案准确性进行折衷。并行地,在具有log2 n个级的树中比较所有指数。最高指数成为参考并且所有尾数被对齐到此参考。在第三模式的一个实施例中的这个对齐之后,尾数不被转换成定点(例如,2进制补码)数表示,因为它们已经处于该格式了。在下一级的一个实施例中,对尾数执行总和化简,并且在这个化简树的每个级别,将比特长度(例如,字长度)增加一比特以防止溢出。在这个求和之后,在一个实施例中,结果(例如,尾数和指数)被移位到期望的幅值(例如,采取上述的FlexN+M格式)。
作为另一示例,在第三模式中,输入源发复用器(例如,复用器1030和1032)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对拐点(2进制补码)(例如,将拐点向量A和B的具有索引0的两个元素的尾数作为一对源发,将拐点向量A和B的具有索引1的两个元素的尾数作为第二对源发,将拐点向量A和B的具有索引2的两个元素的尾数作为第三对源发,等等)。在此示例中,每一对尾数被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有索引0的元素的尾数A[0]1008和来自向量B的具有索引0的元素的尾数B[0]1024被(例如,定点)乘法器1034相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到移位寄存器(例如,移位器)以基于它的所确定指数(例如,乘积的指数)和最大指数(例如,乘积的最大指数)来移位(例如,移动)每个乘积。在此示例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对指数(例如,将拐点向量A和B的具有索引0的两个元素的指数作为一对源发,将拐点向量A和B的具有索引1的两个元素的指数作为第二对源发,将拐点向量A和B的具有索引2的两个元素的指数作为第三对源发,等等)被相应的(例如,定点)(例如,整数)加法器加在一起以产生指数之和(例如,来自向量A和向量B的一对元素的乘积的指数)。在此示例中,指数之和(例如,此图中的n+1个和)的每一者被输入到最大指数确定器1040(例如,比较器电路)中。例如,来自向量A的具有索引0的元素的指数A[0]1014和来自向量B的具有索引0的元素的指数B[0]1016被(例如,定点)(例如,整数)加法器1038加在一起以产生指数A[0]1014和指数B[0]1016的总和。最大指数确定器1040(例如,电路)随后将指数之和与彼此相比较以确定指数之和的最大者(例如,最大值),例如,尾数的相应乘积的指数中的最大指数。在一个实施例中,指数之和的最大者是尾数乘积的最大指数。描绘的实施例中的最大指数随后被用于相应地移位其他尾数乘积,例如,为了将其他尾数乘积对齐到最大指数。在一个实施例中,最大指数是6(例如,各自具有值3的两个指数之和),并且另一指数是4,因此其他指数的尾数乘积被移两位(例如,两个元素)(例如,向左移)以将尾数乘积对齐来与最大指数具有相同的指数。在描绘的实施例中,最大指数(例如,指示最大指数的值)沿着路径1041被输出到一组移位寄存器(例如,包括移位寄存器1036)和正规化电路1050。在此示例中,每个移位的尾数乘积被输出到相应的数值转换电路(例如,2进制补码电路)中,但在第三模式中,乘积通过数值转换电路,而不被改变,例如,乘积已经处于2进制补码表示,因此它们不被进一步转换。
在一个实施例中,移位寄存器让值通过,而没有移位,例如,当最大指数(例如,两个指数之和)与该索引位置的指数相同时,例如,其中数值转换电路1042和移位寄存器1036被用于输入向量的索引位置0。
在描绘的实施例中,每一对元素(例如,在相同元素位置)的经移位的尾数乘积随后被利用一组(例如,定点)(例如,整数)加法器1046全都加在一起成为单个乘积。正规化电路1050随后在此第三模式中可被用来将该单个乘积转换成基于最大指数的拐点表示。在一个实施例中,取代此模式中的完全正规化操作,电路1050将执行舍入以将来自加法器1046的总和的比特宽度减小到拐点格式的期望比特宽度以创建乘积之和电路1001的结果(例如,其中指数对于此减小没有影响并且符号已经被考虑到,因为定点表示是2进制补码)。在一个实施例中,电路1050移动非零数字的有效数字(例如,单个乘积)的最高有效位以成为非零(例如,并且根据单个乘积的移动来相应地移动最大指数值)。
累加器
可选地,电路1000包括累加器1010来累加来自乘积之和电路1001的结果。在一个实施例中,在累加器1010中使用单独的定点累加器电路1002和浮点累加器电路1004。在某些实施例中,处于第一模式中的模式控制器1006使得来自乘积之和电路1001的结果被(例如,仅)利用浮点累加器电路1004累加并且/或者处于第二模式中的模式控制器1006使得来自乘积之和电路1001的结果被(例如,仅)利用定点累加器电路1002累加。描绘的定点累加器电路1002包括(例如,定点)(例如,整数)加法器1056和定点累加器存储1058。描绘的浮点累加器电路1004包括浮点加法器1052和浮点累加器存储1054。在一个实施例中,浮点加法器1052是来自图5的浮点加法器电路500的实例。
在某些实施例中,电路1000接收(例如,从向电路1000的加速器实施例转移负载的核心接收)指示乘积之和电路1001要执行的迭代的值,例如,以将要被电路1000处理的向量(例如,具有大于N+1的元素数目)的宽度与乘积之和电路1001的硬件宽度(例如,具有最多N+1个元素的向量)解除耦合。在一个实施例中,电路1000将通过执行通知动作(例如,提出标志,使得适当的累加器存储1054或累加器存储1058被请求方实体读取)来将完成通知给请求方实体(例如,核心)。在一个实施例中,浮点累加器(例如,加法器)或定点累加器(例如,加法器)被用于累加来自电路1001的拐点结果,例如,在浮点累加器(例如,加法器)中不使用符号字段。
图11根据本公开的实施例图示了具有定点累加器电路1102和浮点累加器电路1104的四乘四定点和浮点向量乘法电路1100。在此实施例中,每个输入向量具有最多4个元素(例如,每一者具有元素的相同比特宽度)。
在图11中,要被处理的向量的四个元素位置(例如,0、1、2和3,其中N=3)的每一者包括相应的乘法器(1134A、1134B、1134C、1134D)、移位寄存器(1136A、1136B、1136C、1136D)和数值转换电路(1142A、1142B、1142C、1142D)来处理该元素位置中的尾数,包括异或逻辑门(1144A、1144B、1144C、1144D),和/或包括加法器(1138A、1138B、1138C、1138D)来处理该元素位置中的指数(例如,加在一起)。这些组件集合可被称为元素块(例如,在图11中有四个元素块)。加法器1146包括三个加法器(1146A、1146B和1146C),每个加法器具有两个输入。在另一实施例中,加法器1146是具有N+1个输入的单个加法器(例如,在图11中有四个输入)。
电路1100包括模式控制器1106(例如,电路)来在定点模式和浮点模式之间切换(例如,选择)。在一个实施例中,模式控制器1106将在定点模式、拐点模式和浮点模式(例如,其任何一者)之间切换。电路1100包括乘积之和电路(例如,流水线)1101和累加器1110(例如,定点累加器电路1102和浮点累加器电路1104)。在描绘的实施例中,浮点(和/或拐点)输入(例如,输入寄存器)和定点输入被示为分开的输入。在一个实施例中,同一寄存器被用于定点数据或浮点数据(例如,或者拐点数据)。例如,第一寄存器为第一向量(例如,向量A)存储定点数据或浮点数据(例如,或者拐点数据)并且第二寄存器为第二向量(例如,向量B)存储定点数据或浮点数据(例如,或者拐点数据)。在一个实施例中,单独的寄存器被用于定点数据和浮点数据(例如,以及拐点数据)。例如,第一寄存器为第一定点向量(例如,定点向量A)存储定点数据,第二寄存器为第二定点向量(例如,定点向量B)存储定点数据,第三寄存器为第三浮点向量(例如,浮点向量A)存储浮点数据,并且第四寄存器为第四浮点向量(例如,浮点向量B)存储浮点数据。在一个实施例中,拐点数据被存储在其自己的(一个或多个)寄存器中。在一个实施例中,输入1112对于定点向量的每个元素包括一输入(例如,对于第一向量A的第一元素[0]包括输入1120和/或对于第二向量B的第一元素[0]包括输入1122)并且对于浮点向量的每个元素(例如,每个元素的符号比特1112(sign)、指数1112(exp)和尾数)包括一输入(例如,对于第一向量A的第一元素[0]的符号比特包括输入1126,对于第一向量A的第一元素[0]的指数比特包括输入1114,并且对于第一向量A的第一元素[0]的尾数比特包括输入1108,和/或对于第二向量B的第一元素[0]的符号比特包括输入1126,对于第二向量B的第一元素[0]的指数比特包括输入1114,并且对于第二向量B的第一元素[0]的尾数比特包括输入1108)。在某些实施例中,输入1112对于拐点向量的每个元素(例如,对于每个元素的指数1112(exp)和尾数)包括一输入(例如,对于第一向量A的第一元素[0]的指数比特包括输入1114并且对于第一向量A的第一元素[0]的尾数比特包括输入1108,和/或对于第二向量B的第一元素[0]的指数比特包括输入1114,并且对于第二向量B的第一元素[0]的尾数比特包括输入1108)。在一个实施例中,要被定点和浮点向量乘法电路1100操作的向量(例如,A[N+1]和B[N+1])具有等于N+1(例如,在图11中是四)的相同的元素数目。N在某些实施例中可以是任何正整数。
在此图中没有绘出其他输入(例如,对于元素1至3)的标号以免模糊数据流/线。另外,没有绘出控制输入/线(例如,对于开关、移位器、数值转换电路(例如,2进制补码电路))以免模糊数据流/线。到组件的控制输入/线可从模式控制器延伸。
在某些实施例中,要处理的向量的每个元素位置(例如,0至3)包括相应的乘法器、移位寄存器和数值转换电路来处理该元素位置中的尾数,并且包括加法器来处理该元素位置中的指数(例如,加在一起)。这些组件集合可被称为元素块(例如,在图11中有四个元素块)。
第一模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第一(例如,浮点)模式中以对浮点输入数据执行操作。
作为一个示例,在第一(例如,浮点)模式中,这些浮点数字的每一者被划分成其符号比特、指数比特和尾数比特。在这个初始划分时,取决于指数可以是1或0的前导隐藏比特被串接到尾数上。随后在每个向量的对应尾数之间执行按对乘法,将指数加在一起,并且对相应的符号比特进行逻辑异或。在乘法级的输出处,尾数可被截断或者扩展成期望的内部比特长度(例如,字长度)以将资源利用率与解决方案准确性进行折衷。并行地,在具有log2n个级的树中比较所有指数。最高指数成为参考并且所有尾数被对齐到此参考。在这个对齐之后,尾数被转换成定点(例如,2进制补码)数表示。在下一级的一个实施例中,对尾数执行总和化简,并且在这个化简树的每个级别,将比特长度(例如,字长度)增加一比特以防止溢出。在这个求和之后,定点数被重转换成符号和幅值,对齐以去掉前导的一,并且指数被校正。从这些值,遵从标准的浮点数被生成并且在此示例中被输出。在一个实施例中,该标准是IEEE浮点算术标准(例如,754-2008–2008年8月29日发布的IEEE计算机学会的浮点算术标准)。
作为另一示例,在第一模式中,输入源发复用器(例如,复用器1130和1132)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对尾数(例如,将浮点向量A和B的具有索引0的两个元素的尾数作为一对源发,将浮点向量A和B的具有索引1的两个元素的尾数作为第二对源发,将浮点向量A和B的具有索引2的两个元素的尾数作为第三对源发,等等)。在此示例中,每一对尾数被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有索引0的元素的尾数A[0]1108和来自向量B的具有索引0的元素的尾数B[0]1124被(例如,定点)乘法器1134A相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到移位寄存器(例如,移位器)以基于它的所确定指数(例如,乘积的指数)和最大指数(例如,乘积的最大指数)来移位(例如,移动)每个乘积。在此示例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对指数(例如,将浮点向量A和B的具有索引0的两个元素的指数作为一对源发,将浮点向量A和B的具有索引1的两个元素的指数作为第二对源发,将浮点向量A和B的具有索引2的两个元素的指数作为第三对源发,等等)被相应的(例如,定点)(例如,整数)加法器加在一起以产生指数之和(例如,来自向量A和向量B的一对元素的乘积的指数)。在此示例中,指数之和(例如,此图中的n+1个和)的每一者被输入到最大指数确定器1140(例如,比较器电路)中。例如,来自向量A的具有索引0的元素的指数A[0]1114和来自向量B的具有索引0的元素的指数B[0]1116被(例如,定点)(例如,整数)加法器1338A加在一起以产生指数A[0]1114和指数B[0]1116的总和。最大指数确定器1140(例如,电路)随后将指数之和与彼此相比较以确定指数之和的最大者(例如,最大值),例如,尾数的相应乘积的指数中的最大指数。在一个实施例中,指数之和的最大者是尾数乘积的最大指数。描绘的实施例中的最大指数随后被用于相应地移位其他尾数乘积,例如,为了将其他尾数乘积对齐到最大指数。在一个实施例中,最大指数是4(例如,各自具有值2的两个指数之和),并且另一指数是3,因此其他指数的尾数乘积被移一位(例如,向左移)以将尾数乘积对齐来与最大指数具有相同的指数。在描绘的实施例中,最大指数(例如,指示最大指数的值)沿着路径1141被输出到一组移位寄存器(例如,包括移位寄存器1136A)并且输出到正规化电路1150。在此示例中,每个移位的尾数乘积被输出到相应的数值转换电路(例如,2进制补码电路)。例如,数值转换电路1142A(例如,2进制补码电路)接收从移位寄存器1136A输出的无符号(例如,并且移位的)尾数乘积。每个相应的数值转换电路(例如,2进制补码电路)随后将(例如,移位的)尾数乘积从无符号格式(例如,值)转换成有符号格式(例如,值)。在一个实施例中,这个转换是基于来自每个相应的异或逻辑门的输出在(例如,移位的)尾数乘积上执行的2进制补码操作(例如,从无符号(例如,二进制)格式转换成2进制补码格式)。
在一个实施例中,移位寄存器让值通过,而没有移位,例如,当最大指数(例如,两个指数之和)与该索引位置的指数相同时,例如,其中数值转换电路1142A和移位寄存器1136A被用于输入向量的索引位置0。
在描绘的实施例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对符号比特的每个符号比特(例如,将浮点向量A和B的具有索引0的两个元素的符号比特作为一对源发,将浮点向量A和B的具有索引1的两个元素的符号比特作为第二对源发,将浮点向量A和B的具有索引2的两个元素的符号比特作为第三对源发,等等)被相应的(例如,定点)逻辑门在逻辑上异或(XOR)在一起,该逻辑门实现XOR来产生指示出尾数乘积是负还是正的值,例如,该值对于正为0,对于负则为1。在描绘的实施例中,异或逻辑门1144A对于第一向量A的第一元素[0]从输入1126接收符号比特并且对于第二向量B的第一元素[0]从输入1128接收符号比特并且在输入1126、1128中只有一个是1时输出第一值(例如,1指示出乘积是负的)以指示假(例如,负),否则输出第二值(例如,0指示出乘积是正的)。
每一对元素(例如,在相同元素位置)的经转换的(例如,有符号)值随后被利用一组(例如,定点)(例如,整数)加法器1146全都加在一起成为单个乘积。正规化电路1150随后在此第一模式中被用来将该单个乘积转换成基于最大指数的浮点表示。在一个实施例中,电路1150还执行舍入或其他操作来将该单个乘积的(例如,整数)格式转换成浮点格式以创建乘积之和电路1101的结果。在一个实施例中,正规化电路1150移动非零数字的有效数字(例如,单个乘积)的最高有效位以成为非零(例如,并且根据单个乘积的移动来相应地移动最大指数值)。
第二模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第二(例如,定点)模式中以对定点输入数据执行操作。
作为一个示例,在第二(例如,定点)模式中,乘积之和电路将把来自输入向量的同一元素位置(例如,0至3)的每一对定点(例如,整数)值相乘为乘积,并且对这些乘积求和以产生单个定点结果。
作为另一示例,在第二(例如,定点)模式中,输入源发复用器(例如,复用器1130和1132)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对值(例如,将定点向量A和B的具有索引0的两个元素的值作为一对源发,将定点向量A和B的具有索引1的两个元素的值作为第二对源发,将定点向量A和B的具有索引2的两个元素的值作为第三对源发,等等)。在此示例中,每一对值被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有索引0的元素的值A[0]1120和来自向量B的具有索引0的元素的值B[0]1122被(例如,定点)乘法器1134A相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到相应的移位寄存器(例如,移位器),但在第二模式中乘积通过移位寄存器而不被改变,例如,乘积不被移位(例如,移动)。在此示例中,从每个移位寄存器输出的每个未移位的乘积被输入到相应的数值转换电路(例如,2进制补码电路)中,但在第二模式中,乘积通过数值转换电路,而不被改变,例如,乘积已经处于2进制补码表示,因此它们不被进一步转换。每一对元素(例如,在相同元素位置)的(例如,有符号)乘积随后被利用一组(例如,定点)(例如,整数)加法器1146全都加在一起成为单个定点结果。在一个实施例中,该单个定点结果通过正规化电路1150,而没有对该单个定点结果的任何修改。
第三模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第三(例如,拐点)模式中以对拐点输入数据执行操作。
作为一个示例,在第三(例如,拐点)模式中,这些拐点数字的每一者被划分成指数比特,以及整数(2进制补码)尾数比特,例如,而不是像浮点格式中那样的二进制尾数比特。随后在每个向量的对应尾数之间执行按对乘法,并且将指数加在一起。在乘法级的输出处,尾数可被截断或者扩展成期望的内部比特长度(例如,字长度)以将资源利用率与解决方案准确性进行折衷。并行地,在具有log2 n个级的树中比较所有指数。最高指数成为参考并且所有尾数被对齐到此参考。在第三模式的一个实施例中的这个对齐之后,尾数不被转换成定点(例如,2进制补码)数表示,因为它们已经处于该格式了。在下一级的一个实施例中,对尾数执行总和化简,并且在这个化简树的每个级别,将比特长度(例如,字长度)增加一比特以防止溢出。在这个求和之后,在一个实施例中,结果(例如,尾数和指数)被移位到期望的幅值(例如,采取上述的FlexN+M格式)。
作为另一示例,在第三模式中,输入源发复用器(例如,复用器1130和1132)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对拐点(2进制补码)(例如,将拐点向量A和B的具有索引0的两个元素的尾数作为一对源发,将拐点向量A和B的具有索引1的两个元素的尾数作为第二对源发,将拐点向量A和B的具有索引2的两个元素的尾数作为第三对源发,等等)。在此示例中,每一对尾数被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有索引0的元素的尾数A[0]1108和来自向量B的具有索引0的元素的尾数B[0]1124被(例如,定点)乘法器1134A相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到移位寄存器(例如,移位器)以基于它的所确定指数(例如,乘积的指数)和最大指数(例如,乘积的最大指数)来移位(例如,移动)每个乘积。在此示例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对指数(例如,将拐点向量A和B的具有索引0的两个元素的指数作为一对源发,将拐点向量A和B的具有索引1的两个元素的指数作为第二对源发,将拐点向量A和B的具有索引2的两个元素的指数作为第三对源发,等等)被相应的(例如,定点)(例如,整数)加法器加在一起以产生指数之和(例如,来自向量A和向量B的一对元素的乘积的指数)。在此示例中,指数之和(例如,此图中的n+1个和)的每一者被输入到最大指数确定器1140(例如,比较器电路)中。例如,来自向量A的具有索引0的元素的指数A[0]1114和来自向量B的具有索引0的元素的指数B[0]1116被(例如,定点)(例如,整数)加法器1138加在一起以产生指数A[0]1114和指数B[0]1116的总和。最大指数确定器1140(例如,电路)随后将指数之和与彼此相比较以确定指数之和的最大者(例如,最大值),例如,尾数的相应乘积的指数中的最大指数。在一个实施例中,指数之和的最大者是尾数乘积的最大指数。描绘的实施例中的最大指数随后被用于相应地移位其他尾数乘积,例如,为了将其他尾数乘积对齐到最大指数。在一个实施例中,最大指数是4(例如,各自具有值2的两个指数之和),并且另一指数是3,因此其他指数的尾数乘积被移一位(例如,向左移)以将尾数乘积对齐来与最大指数具有相同的指数。在描绘的实施例中,最大指数(例如,指示最大指数的值)沿着路径1141被输出到一组移位寄存器(例如,包括移位寄存器1136A)和正规化电路1150。在此示例中,每个移位的尾数乘积被输出到相应的数值转换电路(例如,2进制补码电路)中,但在第三模式中,乘积通过数值转换电路,而不被改变,例如,乘积已经处于2进制补码表示,因此它们不被进一步转换。
在一个实施例中,移位寄存器让值通过,而没有移位,例如,当最大指数(例如,两个指数之和)与该索引位置的指数相同时,例如,其中数值转换电路1142A和移位寄存器1136A被用于输入向量的索引位置0。
在描绘的实施例中,每一对元素(例如,在相同元素位置)的经移位的尾数乘积随后被利用一组(例如,定点)(例如,整数)加法器1146全都加在一起成为单个乘积。正规化电路1150随后在此第三模式中可被用来将该单个乘积转换成基于最大指数的拐点表示。在一个实施例中,取代此模式中的完全正规化操作,电路1150将执行舍入以将来自加法器1146的总和的比特宽度减小到拐点格式的期望比特宽度以创建乘积之和电路1101的结果(例如,其中指数对于此减小没有影响并且符号已经被考虑到,因为定点表示是2进制补码)。在一个实施例中,电路1150移动非零数字的有效数字(例如,单个乘积)的最高有效位以成为非零(例如,并且根据单个乘积的移动来相应地移动最大指数值)。
累加器
可选地,电路1100包括累加器1110来累加来自乘积之和电路1101的结果。在一个实施例中,在累加器1100中使用单独的定点累加器电路1102和浮点累加器电路1104。在某些实施例中,处于第一模式中的模式控制器1106使得来自乘积之和电路1101的结果被(例如,仅)利用浮点累加器电路1104累加并且/或者处于第二模式中的模式控制器1106使得来自乘积之和电路1101的结果被(例如,仅)利用定点累加器电路1102累加。描绘的定点累加器电路1102包括(例如,定点)(例如,整数)加法器1156和定点累加器存储1158。描绘的浮点累加器电路1104包括浮点加法器1152和浮点累加器存储1154。在一个实施例中,浮点加法器1152是来自图5的浮点加法器电路500的实例。
在某些实施例中,电路1100接收(例如,从向电路1100的加速器实施例转移负载的核心接收)指示乘积之和电路1101要执行的迭代的值,例如,以将要被电路1100处理的向量(例如,具有大于四的元素数目)的宽度与乘积之和电路1101的硬件宽度(例如,具有最多四个元素的向量)解除耦合。在一个实施例中,电路1100将通过执行通知动作(例如,提出标志,使得适当的累加器存储1154或累加器存储1158被请求方实体读取)来将完成通知给请求方实体(例如,核心)。在一个实施例中,浮点累加器(例如,加法器)或定点累加器(例如,加法器)被用于累加来自电路1101的拐点结果,例如,在浮点累加器(例如,加法器)中不使用符号字段。
图12根据本公开的实施例图示了具有定点累加器电路1210和浮点转换电路1270来在累加结束时将定点转换成浮点的定点和浮点向量乘法电路1200。
在一个实施例中,在浮点格式值上执行对于浮点输入的累加(例如,对于来自乘积之和电路的每个结果执行)并且每个结果被执行定点(例如,整数)到浮点转换。然而,在某些实施例中,乘积之和电路(例如,流水线)的整数长度大于浮点累加器的尾数比特的数目,从而由于这个转换丢失了一些准确性。在图12的一个实施例中,采用定点(例如,整数)累加器1210并且仅在整体计算结束时(例如,当最后的累加完成时)进行从定点格式到浮点格式的转换。
电路1200包括模式控制器1206(例如,电路)来在定点模式和浮点模式之间切换(例如,选择)。在一个实施例中,模式控制器1206将在定点模式、拐点模式和浮点模式(例如,其任何一者)之间切换。电路1200包括乘积之和电路(例如,流水线)1210和定点累加器1210。在描绘的实施例中,浮点(和/或拐点)输入(例如,输入寄存器)和定点输入被示为分开的输入。在一个实施例中,同一寄存器被用于定点数据或浮点数据(例如,或者拐点数据)。例如,第一寄存器为第一向量(例如,向量A)存储定点数据或浮点数据(例如,或者拐点数据)并且第二寄存器为第二向量(例如,向量B)存储定点数据或浮点数据(例如,或者拐点数据)。在一个实施例中,单独的寄存器被用于定点数据和浮点数据(例如,以及拐点数据)。例如,第一寄存器为第一定点向量(例如,定点向量A)存储定点数据,第二寄存器为第二定点向量(例如,定点向量B)存储定点数据,第三寄存器为第三浮点向量(例如,浮点向量A)存储浮点数据,并且第四寄存器为第四浮点向量(例如,浮点向量B)存储浮点数据。在一个实施例中,拐点数据被存储在其自己的(一个或多个)寄存器中。在一个实施例中,输入1212对于定点向量的每个元素包括一输入(例如,对于第一向量A的第一元素[0]包括输入1220和/或对于第二向量B的第一元素[0]包括输入1222)并且对于浮点向量的每个元素(例如,每个元素的符号比特1212(sign)、指数1212(exp)和尾数)包括一输入(例如,对于第一向量A的第一元素[0]的符号比特包括输入1226,对于第一向量A的第一元素[0]的指数比特包括输入1214,并且对于第一向量A的第一元素[0]的尾数比特包括输入1208,和/或对于第二向量B的第一元素[0]的符号比特包括输入1226,对于第二向量B的第一元素[0]的指数比特包括输入1214,并且对于第二向量B的第一元素[0]的尾数比特包括输入1208)。在某些实施例中,输入1212对于拐点向量的每个元素(例如,每个元素的指数1212(exp)和尾数)包括一输入(例如,对于第一向量A的第一元素[0]的指数比特包括输入1214并且对于第一向量A的第一元素[0]的尾数比特包括输入1208,和/或对于第二向量B的第一元素[0]的指数比特包括输入1214,并且对于第二向量B的第一元素[0]的尾数比特包括输入1208)。在一个实施例中,要被定点和浮点向量乘法电路1200操作的向量(例如,A[N+1]和B[N+1])具有等于N+1的相同的元素数目。N在某些实施例中可以是任何正整数。
在此图中没有绘出其他输入(例如,对于元素1至N)的标号以免模糊数据流/线。另外,没有绘出控制输入/线(例如,对于开关、移位器、数值转换电路(例如,2进制补码电路))以免模糊数据流/线。到组件的控制输入/线可从模式控制器延伸。
在某些实施例中,要处理的向量的每个元素位置(例如,0至N)包括相应的乘法器、移位寄存器和数值转换电路来处理该元素位置中的尾数,包括异或逻辑门,和/或包括加法器来处理该元素位置中的指数(例如,加在一起)。这些组件集合可被称为元素块(例如,在图12中有N+1个元素块)。
第一模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第一(例如,浮点)模式中以对浮点输入数据执行操作。
作为一个示例,在第一(例如,浮点)模式中,这些浮点数字的每一者被划分成其符号比特、指数比特和尾数比特。在这个初始划分时,取决于指数可以是1或0的前导隐藏比特被串接到尾数上。随后在每个向量的对应尾数之间执行按对乘法,将指数加在一起,并且对相应的符号比特进行逻辑异或。在乘法级的输出处,尾数可被截断或者扩展成期望的内部比特长度(例如,字长度)以将资源利用率与解决方案准确性进行折衷。并行地,在具有log2n个级的树中比较所有指数。最高指数成为参考并且所有尾数被对齐到此参考。在这个对齐之后,尾数被转换成定点(例如,2进制补码)数表示。在下一级的一个实施例中,对尾数执行总和化简,并且在这个化简树的每个级别,将比特长度(例如,字长度)增加一比特以防止溢出。在这个求和之后,定点数被重转换成符号和幅值,对齐以去掉前导的一,并且指数被校正。从这些值,遵从标准的浮点数被生成并且在此示例中被输出。在一个实施例中,该标准是IEEE浮点算术标准(例如,754-2008–2008年8月29日发布的IEEE计算机学会的浮点算术标准)。
作为另一示例,在第一模式中,输入源发复用器(例如,复用器1230和1232)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对尾数(例如,将浮点向量A和B的具有索引0的两个元素的尾数作为一对源发,将浮点向量A和B的具有索引1的两个元素的尾数作为第二对源发,将浮点向量A和B的具有索引2的两个元素的尾数作为第三对源发,等等)。在此示例中,每一对尾数被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有索引0的元素的尾数A[0]1208和来自向量B的具有索引0的元素的尾数B[0]1224被(例如,定点)乘法器1234相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到移位寄存器(例如,移位器)以基于它的所确定指数(例如,乘积的指数)和最大指数(例如,乘积的最大指数)来移位(例如,移动)每个乘积。在此示例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对指数(例如,将浮点向量A和B的具有索引0的两个元素的指数作为一对源发,将浮点向量A和B的具有索引1的两个元素的指数作为第二对源发,将浮点向量A和B的具有索引2的两个元素的指数作为第三对源发,等等)被相应的(例如,定点)(例如,整数)加法器加在一起以产生指数之和(例如,来自向量A和向量B的一对元素的乘积的指数)。在此示例中,指数之和(例如,此图中的n+1个和)的每一者被输入到最大指数确定器1240(例如,比较器电路)中。例如,来自向量A的具有索引0的元素的指数A[0]1214和来自向量B的具有索引0的元素的指数B[0]1216被(例如,定点)(例如,整数)加法器1238加在一起以产生指数A[0]1214和指数B[0]1216的总和。最大指数确定器1240(例如,电路)随后将指数之和与彼此相比较以确定指数之和的最大者(例如,最大值),例如,尾数的相应乘积的指数中的最大指数。在一个实施例中,指数之和的最大者是尾数乘积的最大指数。描绘的实施例中的最大指数随后被用于相应地移位其他尾数乘积,例如,为了将其他尾数乘积对齐到最大指数。在一个实施例中,最大指数是4(例如,各自具有值2的两个指数之和),并且另一指数是3,因此其他指数的尾数乘积被移一位(例如,向左移)以将尾数乘积对齐来与最大指数具有相同的指数。在描绘的实施例中,最大指数(例如,指示最大指数的值)沿着路径1241被输出到一组移位寄存器(例如,包括移位寄存器1236)和第二最大指数确定器电路1264。在此示例中,每个移位的尾数乘积被输出到相应的数值转换电路(例如,2进制补码电路)。例如,数值转换电路1242(例如,2进制补码电路)接收从移位寄存器1236输出的无符号(例如,并且移位的)尾数乘积。每个相应的数值转换电路(例如,2进制补码电路)随后将(例如,移位的)尾数乘积从无符号格式(例如,值)转换成有符号格式(例如,值)。在一个实施例中,这个转换是基于来自每个相应的异或逻辑门的输出在(例如,移位的)尾数乘积上执行的2进制补码操作(例如,从无符号(例如,二进制)格式转换成2进制补码格式)。
在一个实施例中,移位寄存器让值通过,而没有移位,例如,当最大指数(例如,两个指数之和)与该索引位置的指数相同时,例如,其中数值转换电路1242和移位寄存器1236被用于输入向量的索引位置0。
在描绘的实施例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对符号比特的每个符号比特(例如,将浮点向量A和B的具有索引0的两个元素的符号比特作为一对源发,将浮点向量A和B的具有索引1的两个元素的符号比特作为第二对源发,将浮点向量A和B的具有索引2的两个元素的符号比特作为第三对源发,等等)被相应的(例如,定点)逻辑门在逻辑上异或(XOR)在一起,该逻辑门实现XOR来产生指示出尾数乘积是负还是正的值,例如,该值对于正为0,对于负则为1。在描绘的实施例中,异或逻辑门1244对于第一向量A的第一元素[0]从输入1226接收符号比特并且对于第二向量B的第一元素[0]从输入1228接收符号比特并且在输入1226、1228中只有一个是1时输出第一值(例如,1指示出乘积是负的)以指示假(例如,负),否则输出第二值(例如,0指示出乘积是正的)。
每一对元素(例如,在相同元素位置)的经转换的(例如,有符号)值随后被利用一组(例如,定点)(例如,整数)加法器1246全都加在一起成为单个乘积。在一个实施例中,单个乘积被从输出1247发送到累加器1210,例如,如下所述。
第二模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第二(例如,定点)模式中以对定点输入数据执行操作。
作为一个示例,在第二(例如,定点)模式中,乘积之和电路将把来自输入向量的同一元素位置(例如,0至N)的每一对定点(例如,整数)值相乘为乘积,并且对这些乘积求和以产生单个定点结果。
作为另一示例,在第二(例如,定点)模式中,输入源发复用器(例如,复用器1230和1232)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对值(例如,将定点向量A和B的具有索引0的两个元素的值作为一对源发,将定点向量A和B的具有索引1的两个元素的值作为第二对源发,将定点向量A和B的具有索引2的两个元素的值作为第三对源发,等等)。在此示例中,每一对值被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有索引0的元素的值A[0]1220和来自向量B的具有索引0的元素的值B[0]1222被(例如,定点)乘法器1234相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到相应的移位寄存器(例如,移位器),但在第二模式中乘积通过移位寄存器而不被改变,例如,乘积不被移位(例如,移动)。在此示例中,从每个移位寄存器输出的每个未移位的乘积被输入到相应的数值转换电路(例如,2进制补码电路)中,但在第二模式中,乘积通过数值转换电路,而不被改变,例如,乘积已经处于2进制补码表示,因此它们不被进一步转换。每一对元素(例如,在相同元素位置)的(例如,有符号)乘积随后被利用一组(例如,定点)(例如,整数)加法器1246全都加在一起成为单个定点结果。在一个实施例中,单个定点结果(例如,乘积)被从输出1247发送到累加器1210,例如,如下所述。
第三模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第三(例如,拐点)模式中以对拐点输入数据执行操作。
作为一个示例,在第三(例如,拐点)模式中,这些拐点数字的每一者被划分成指数比特,以及整数(2进制补码)尾数比特,例如,而不是像浮点格式中那样的二进制尾数比特。随后在每个向量的对应尾数之间执行按对乘法,并且将指数加在一起。在乘法级的输出处,尾数可被截断或者扩展成期望的内部比特长度(例如,字长度)以将资源利用率与解决方案准确性进行折衷。并行地,在具有log2 n个级的树中比较所有指数。最高指数成为参考并且所有尾数被对齐到此参考。在第三模式的一个实施例中的这个对齐之后,尾数不被转换成定点(例如,2进制补码)数表示,因为它们已经处于该格式了。在下一级的一个实施例中,对尾数执行总和化简,并且在这个化简树的每个级别,将比特长度(例如,字长度)增加一比特以防止溢出。在这个求和之后,在一个实施例中,结果(例如,尾数和指数)被移位到期望的幅值(例如,采取上述的FlexN+M格式)。
作为另一示例,在第三模式中,输入源发复用器(例如,复用器1230和1232)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对拐点(2进制补码)(例如,将拐点向量A和B的具有索引0的两个元素的尾数作为一对源发,将拐点向量A和B的具有索引1的两个元素的尾数作为第二对源发,将拐点向量A和B的具有索引2的两个元素的尾数作为第三对源发,等等)。在此示例中,每一对尾数被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有索引0的元素的尾数A[0]1208和来自向量B的具有索引0的元素的尾数B[0]1224被(例如,定点)乘法器1234相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到移位寄存器(例如,移位器)以基于它的所确定指数(例如,乘积的指数)和最大指数(例如,乘积的最大指数)来移位(例如,移动)每个乘积。在此示例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对指数(例如,将拐点向量A和B的具有索引0的两个元素的指数作为一对源发,将拐点向量A和B的具有索引1的两个元素的指数作为第二对源发,将拐点向量A和B的具有索引2的两个元素的指数作为第三对源发,等等)被相应的(例如,定点)(例如,整数)加法器加在一起以产生指数之和(例如,来自向量A和向量B的一对元素的乘积的指数)。在此示例中,指数之和(例如,此图中的n+1个和)的每一者被输入到最大指数确定器1240(例如,比较器电路)中。例如,来自向量A的具有索引0的元素的指数A[0]1214和来自向量B的具有索引0的元素的指数B[0]1216被(例如,定点)(例如,整数)加法器1238加在一起以产生指数A[0]1214和指数B[0]1216的总和。最大指数确定器1240(例如,电路)随后将指数之和与彼此相比较以确定指数之和的最大者(例如,最大值),例如,尾数的相应乘积的指数中的最大指数。在一个实施例中,指数之和的最大者是尾数乘积的最大指数。描绘的实施例中的最大指数随后被用于相应地移位其他尾数乘积,例如,为了将其他尾数乘积对齐到最大指数。在一个实施例中,最大指数是4(例如,各自具有值2的两个指数之和),并且另一指数是3,因此其他指数的尾数乘积被移一位(例如,向左移)以将尾数乘积对齐来与最大指数具有相同的指数。在描绘的实施例中,最大指数(例如,指示最大指数的值)沿着路径1241被输出到一组移位寄存器(例如,包括移位寄存器1236)和正规化电路1250。在此示例中,每个移位的尾数乘积被输出到相应的数值转换电路(例如,2进制补码电路)中,但在第三模式中,乘积通过数值转换电路,而不被改变,例如,乘积已经处于2进制补码表示,因此它们不被进一步转换。
在一个实施例中,移位寄存器让值通过,而没有移位,例如,当最大指数(例如,两个指数之和)与该索引位置的指数相同时,例如,其中数值转换电路1242和移位寄存器1236被用于输入向量的索引位置0。
在描绘的实施例中,每一对元素(例如,在相同元素位置)的经移位的尾数乘积随后被利用一组(例如,定点)(例如,整数)加法器1246全都加在一起成为单个乘积。在一个实施例中,单个乘积被从输出1247发送到累加器1210,例如,如下所述。
累加器
可选地,电路1200包括累加器1210来累加来自乘积之和电路1201的结果。在一个实施例中,累加器1210包括定点(例如,整数)加法器1256,例如,并且不包括(一个或多个)浮点加法器。
在某些实施例中,处于第二模式中的模式控制器1206使得从乘积之和电路1201的输出1247发送的结果被利用累加器电路1210来累加(例如,被定点加法器1256加到来自(例如,定点)累加器存储1258的先前累加的结果)。在一个实施例中,其他电路(例如,移位寄存器1266、移位寄存器1268和定点到浮点转换电路1270)在此模式中允许通过,而不修改数据(例如,结果)。
在某些实施例中,处于第一模式中的模式控制器1206使得从乘积之和电路1201的输出1247发送的结果被(例如,仅)通过使用来自路径1241的为当前结果确定的最大指数来累加。在一个实施例中,处于第一模式中的模式控制器1206使得当前结果(例如,尾数对的乘积之和)被从乘积之和电路1201的输出1247发送到第一移位寄存器1266并且任何累加的结果(例如,来自累加器存储1258)被发送到第二移位寄存器1268,使得移位寄存器1266和/或移位寄存器1268分别基于来自第二最大指数确定器电路1264的在指数累加器存储1262中对于累加操作(例如,对于已在一段时间中从输出1247累加的多个浮点结果)存储的最大指数和来自路径1241的为当前结果确定的当前最大指数来移位(例如,对齐)当前结果和/或累加的结果。在结果被移位(例如,对齐)之后,在一个实施例中它们被(例如,定点)(例如,整数)加法器1256加在一起并且那个更新后的结果(以及其指数)随后可被发送到正规化电路1250,例如,以移动非零数字的有效数字(例如,单个乘积)的最高有效位以成为非零(例如,并且根据单个乘积的移动来相应地移动最大指数值)。在某些实施例中,累加的尾数乘积之和的(例如,无符号)版本被存储在累加器存储1258中。累加的尾数乘积之和的当前指数随后可被调整累加器指数电路1260与累加器存储1262中的累加的尾数乘积之和的先前指数相比较,例如,并且如果当前指数大于先前指数,则该值被更新。在某些实施例中,在累加结束时,来自累加器存储1258的累加的尾数乘积之和以及来自累加器存储1262的累加的尾数乘积之和的指数被发送到定点到浮点转换电路1270(例如,包括2进制补码电路)以将累加的和及其指数转换成浮点格式。
在某些实施例中,电路1200接收(例如,从向电路1200的加速器实施例转移负载的核心接收)指示乘积之和电路1201要执行的迭代的值,例如,以将要被电路1200处理的向量(例如,具有大于N+1的元素数目)的宽度与乘积之和电路1201的硬件宽度(例如,具有最多N+1个元素的向量)解除耦合。在一个实施例中,电路1200将通过执行通知动作(例如,提出标志,使得适当的输出数据被请求方实体读取)来将完成通知给请求方实体(例如,核心)。
图13A-图13C根据本公开的实施例图示了被细分成多个区段1301A-1301Z的定点和浮点向量乘法电路1300,其中每个区段具有其自己的最大指数。1301Z中的Z可以是指示电路区段的实例的期望数目的任何数字或字母。例如,两个电路区段可被称为1301A和1301B,从而分别找到两个最大指数。在某些实施例中,统计上来说误差是基于总向量硬件(例如,流水线)大小的(例如,图10-图12中的N+1),例如,大小越大,误差的概率越高。这里的某些实施例通过将乘积之和电路(例如,流水线)分成大小为R+1的更小区块来减小误差,例如,通过采用(N+1)/(R+1)个这样的乘积之和电路(例如,流水线)来创建N+1的总大小。例如,32元素[0-31元素位置]向量操作可包括四个乘积之和电路,其中每个乘积之和电路处理32元素向量的真子集,例如,输入到第一电路区段(例如,电路1301A)的元素位置0-7,输入到第二电路区段(例如,根据这个命名约定的电路1301B)的元素位置8-15,输入到第三电路区段(例如,根据这个命名约定的电路1301C)的元素位置16-23,以及输入到第四电路区段(例如,根据这个命名约定的电路1301D)的元素位置24-31。
然而,在某些实施例中,当在这些乘积之和电路(例如,流水线)之间合并时,前导零检测、重调整累加器和/或每个最终加法器输出(例如,来自作为示例的图12中的输出1247)的移位将被重做。这里的某些实施例重调整来自每个最终加法器输出(例如,来自作为示例的图12中的输出1247)的指数,例如,利用重对齐电路1303来重调整,其方式是通过检测前导零,然后在乘积之和电路(例如,“桶”)间计算最大指数。每个加法器输出随后可基于乘积之和电路1301A-1301Z间的新的最大指数而被相加。在某些实施例中,此方案提供了统计上更不易出错的结果,例如,并且与仅浮点的向量乘法电路相比具有更低的门计数和面积。
在一个实施例中,输入的指数值(例如,浮点数字的指数值)只被允许只取某些值,例如,新的指数只能是4的倍数。在一个实施例中,利用的移位寄存器可不是完全桶形移位器,而是提供移位的有限组合。在某些实施例中,这也简化了前导零检测(leading zerodetection,LZD)电路,因为可以按两个或更多个的群组检测零,而不是按比特检测。
电路1300包括模式控制器1306(例如,电路)来在定点模式和浮点模式之间切换(例如,选择)。在一个实施例中,模式控制器1306将在定点模式、拐点模式和浮点模式(例如,其任何一者)之间切换。电路1300包括多个(例如,2个或更多个)乘积之和电路(例如,流水线)1301A(在图3A中)-1301Z(在图3B中),重对齐电路1303(在图3C中),以及定点累加器1310(在图3C中)。在一个实施例中,使用图10中的累加器,而不是累加器1310。在描绘的实施例中,浮点(和/或拐点)输入(例如,输入寄存器)和定点输入被示为分开的输入。在一个实施例中,同一寄存器被用于定点数据或浮点数据(例如,或者拐点数据)。例如,第一寄存器为第一向量(例如,向量A)存储定点数据或浮点数据(例如,或者拐点数据)并且第二寄存器为第二向量(例如,向量B)存储定点数据或浮点数据(例如,或者拐点数据)。在一个实施例中,单独的寄存器被用于定点数据和浮点数据(例如,以及拐点数据)。例如,第一寄存器为第一定点向量(例如,定点向量A)存储定点数据,第二寄存器为第二定点向量(例如,定点向量B)存储定点数据,第三寄存器为第三浮点向量(例如,浮点向量A)存储浮点数据,并且第四寄存器为第四浮点向量(例如,浮点向量B)存储浮点数据。在一个实施例中,拐点数据被存储在其自己的(一个或多个)寄存器中。在一个实施例中,输入1312对于定点向量的每个元素包括一输入(例如,对于第一向量A的第一元素[0]包括输入1320和/或对于第二向量B的第一元素[0]包括输入1322)并且对于浮点向量的每个元素(例如,每个元素的符号比特1312(sign)、指数1312(exp)和尾数)包括一输入(例如,对于第一向量A的第一元素[0]的符号比特包括输入1326,对于第一向量A的第一元素[0]的指数比特包括输入1314,并且对于第一向量A的第一元素[0]的尾数比特包括输入1308,和/或对于第二向量B的第一元素[0]的符号比特包括输入1326,对于第二向量B的第一元素[0]的指数比特包括输入1314,并且对于第二向量B的第一元素[0]的尾数比特包括输入1308)。在某些实施例中,输入1312对于拐点向量的每个元素(例如,每个元素的指数1312(exp)和尾数)包括一输入(例如,对于第一向量A的第一元素[0]的指数比特包括输入1314并且对于第一向量A的第一元素[0]的尾数比特包括输入1308,和/或对于第二向量B的第一元素[0]的指数比特包括输入1314,并且对于第二向量B的第一元素[0]的尾数比特包括输入1308)。在一个实施例中,要被定点和浮点向量乘法电路1300操作的向量(例如,A[N+1]和B[N+1])具有等于N+1的相同的元素数目。N在某些实施例中可以是任何正整数。
在此图中没有绘出其他输入(例如,对于元素1至N)的标号以免模糊数据流/线。另外,没有绘出控制输入/线(例如,对于开关、移位器、数值转换电路(例如,2进制补码电路))以免模糊数据流/线。到组件的控制输入/线可从模式控制器延伸。
在某些实施例中,要处理的向量的每个元素位置(例如,0至N)包括相应的乘法器、移位寄存器和数值转换电路来处理该元素位置中的尾数,包括异或逻辑门,和/或包括加法器来处理该元素位置中的指数(例如,加在一起)。这些组件集合可被称为元素块(例如,在图13C中在(N+1)/(R+1)个乘积之和电路区段中有总共N+1个元素块)。接下来的描述参考乘积之和电路区段1301A,但也适用于其他乘积之和电路区段,例如,所有乘积之和电路区段1301A-1301Z是相同的(例如,并且被单个模式控制器1306控制)。
第一模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第一(例如,浮点)模式中以对浮点输入数据执行操作。
作为一个示例,在第一(例如,浮点)模式中,这些浮点数字的每一者被划分成其符号比特、指数比特和尾数比特。在这个初始划分时,取决于指数可以是1或0的前导隐藏比特被串接到尾数上。随后在每个向量的对应尾数之间执行按对乘法,将指数加在一起,并且对相应的符号比特进行逻辑异或。在乘法级的输出处,尾数可被截断或者扩展成期望的内部比特长度(例如,字长度)以将资源利用率与解决方案准确性进行折衷。并行地,在具有log2n个级的树中比较所有指数。最高指数成为参考并且所有尾数被对齐到此参考。在这个对齐之后,尾数被转换成定点(例如,2进制补码)数表示。在下一级的一个实施例中,对尾数执行总和化简,并且在这个化简树的每个级别,将比特长度(例如,字长度)增加一比特以防止溢出。在这个求和之后,定点数被重转换成符号和幅值,对齐以去掉前导的一,并且指数被校正。从这些值,遵从标准的浮点数被生成并且在此示例中被输出。在一个实施例中,该标准是IEEE浮点算术标准(例如,754-2008–2008年8月29日发布的IEEE计算机学会的浮点算术标准)。
作为另一示例,在第一模式中,输入源发复用器(例如,复用器1330和1332)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对尾数(例如,将浮点向量A和B的具有索引0的两个元素的尾数作为一对源发,将浮点向量A和B的具有索引1的两个元素的尾数作为第二对源发,将浮点向量A和B的具有索引2的两个元素的尾数作为第三对源发,等等)。在此示例中,每一对尾数被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有索引0的元素的尾数A[0]1308和来自向量B的具有索引0的元素的尾数B[0]1324被(例如,定点)乘法器1334相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到移位寄存器(例如,移位器)以基于它的所确定指数(例如,乘积的指数)和最大指数(例如,乘积的最大指数)来移位(例如,移动)每个乘积。在此示例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对指数(例如,将浮点向量A和B的具有索引0的两个元素的指数作为一对源发,将浮点向量A和B的具有索引1的两个元素的指数作为第二对源发,将浮点向量A和B的具有索引2的两个元素的指数作为第三对源发,等等)被相应的(例如,定点)(例如,整数)加法器加在一起以产生指数之和(例如,来自向量A和向量B的一对元素的乘积的指数)。在此示例中,指数之和(例如,此图中的n+1个和)的每一者被输入到最大指数确定器1340(例如,比较器电路)中。例如,来自向量A的具有索引0的元素的指数A[0]1314和来自向量B的具有索引0的元素的指数B[0]1316被(例如,定点)(例如,整数)加法器1338加在一起以产生指数A[0]1314和指数B[0]1316的总和。最大指数确定器1340(例如,电路)随后将指数之和与彼此相比较以确定指数之和的最大者(例如,最大值),例如,尾数的相应乘积的指数中的最大指数。在一个实施例中,指数之和的最大者是尾数乘积的最大指数。描绘的实施例中的最大指数随后被用于相应地移位其他尾数乘积,例如,为了将其他尾数乘积对齐到最大指数。在一个实施例中,最大指数是4(例如,各自具有值2的两个指数之和),并且另一指数是3,因此其他指数的尾数乘积被移一位(例如,向左移)以将尾数乘积对齐来与最大指数具有相同的指数。在描绘的实施例中,最大指数(例如,指示最大指数的值)沿着路径1341被输出到一组移位寄存器(例如,包括移位寄存器1336)和第二最大指数确定器电路1364。在此示例中,每个移位的尾数乘积被输出到相应的数值转换电路(例如,2进制补码电路)。例如,数值转换电路1342(例如,2进制补码电路)接收从移位寄存器1336输出的无符号(例如,并且移位的)尾数乘积。每个相应的数值转换电路(例如,2进制补码电路)随后将(例如,移位的)尾数乘积从无符号格式(例如,值)转换成有符号格式(例如,值)。在一个实施例中,这个转换是基于来自每个相应的异或逻辑门的输出在(例如,移位的)尾数乘积上执行的2进制补码操作(例如,从无符号(例如,二进制)格式转换成2进制补码格式)。
在一个实施例中,移位寄存器让值通过,而没有移位,例如,当最大指数(例如,两个指数之和)与该索引位置的指数相同时,例如,其中数值转换电路1342和移位寄存器1336被用于输入向量的索引位置0。
在描绘的实施例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对符号比特的每个符号比特(例如,将浮点向量A和B的具有索引0的两个元素的符号比特作为一对源发,将浮点向量A和B的具有索引1的两个元素的符号比特作为第二对源发,将浮点向量A和B的具有索引2的两个元素的符号比特作为第三对源发,等等)被相应的(例如,定点)逻辑门在逻辑上异或(XOR)在一起,该逻辑门实现XOR来产生指示出尾数乘积是负还是正的值,例如,该值对于正为0,对于负则为1。在描绘的实施例中,异或逻辑门1344对于第一向量A的第一元素[0]从输入1326接收符号比特并且对于第二向量B的第一元素[0]从输入1328接收符号比特并且在输入1326、1328中只有一个是1时输出第一值(例如,1指示出乘积是负的)以指示假(例如,负),否则输出第二值(例如,0指示出乘积是正的)。
在描绘的实施例中,包括前导零检测(LDZ)电路(例如,对于乘积之和电路1301A是电路1351)来检测输出(例如,对于乘积之和电路1301A是输出1347A并且对于乘积之和电路1301Z是输出1347Z)的任何前导零,并且重对齐电路1303将把最大指数(例如,对于乘积之和电路1301A来自具有经调整最大指数电路1353的路径1341)调整成反映要被相应移位寄存器1355A-1355Z(例如,对于乘积之和电路1301A是1355A并且对于乘积之和电路1301Z是1355Z)去除的前导零的数目的经调整最大指数(例如,对于乘积之和电路1301A是经调整最大指数1349A和对于乘积之和电路1301Z是经调整最大指数1349Z)以对齐对于来自乘积之和电路1301A-1301Z的每个最大指数确定(例如,对于乘积之和电路130A由1340确定)的最大指数。来自输出(例如,对于乘积之和电路1301A是输出1347A并且对于乘积之和电路1301Z是输出1347Z)的经移位(例如,对齐)的单个结果随后被第二组加法器1357加在一起以在输出1359处产生单个结果。在一个实施例中,对于该组乘积之和电路(例如,对于乘积之和电路1301A的输出1347A以及对于乘积之和电路1301Z的输出1347Z)的每个输出(例如,来自输出1361的单个经调整最大指数的,以及与该单个经调整最大指数相对应的来自输出1359的单个乘积),经调整最大指数(例如,来自重对齐电路1303的另一最大指数电路1363的输出1361)和/或单个乘积(例如,对于重对齐电路1303的输出1359)被发送到累加器1310,例如,如下所述。
第二模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第二(例如,定点)模式中以对定点输入数据执行操作。
作为一个示例,在第二(例如,定点)模式中,乘积之和电路将把来自输入向量的同一元素位置(例如,0至N)的每一对定点(例如,整数)值相乘为乘积,并且对这些乘积求和以产生输出1359处的单个定点结果。
作为另一示例,在第二(例如,定点)模式中,对于乘积之和电路1301A-1301Z的每一者,输入源发复用器(例如,复用器1330和1332)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对值(例如,将定点向量A和B的具有索引0的两个元素的值作为一对源发,将定点向量A和B的具有索引1的两个元素的值作为第二对源发,将定点向量A和B的具有索引2的两个元素的值作为第三对源发,等等)。在此示例中,每一对值被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有索引0的元素的值A[0]1320和来自向量B的具有索引0的元素的值B[0]1322被(例如,定点)乘法器1334相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到相应的移位寄存器(例如,移位器),但在第二模式中乘积通过移位寄存器而不被改变,例如,乘积不被移位(例如,移动)。在此示例中,从每个移位寄存器输出的每个未移位的乘积被输入到相应的数值转换电路(例如,2进制补码电路)中,但在第二模式中,乘积通过数值转换电路,而不被改变,例如,乘积已经处于2进制补码表示,因此它们不被进一步转换。单个乘积之和电路的每一对元素(例如,在相同元素位置)的(例如,有符号)乘积随后被利用一组(例如,定点)(例如,整数)加法器(例如,对于乘积之和电路1301A是加法器1346)全都加在一起成为单个定点结果。来自每个乘积之和电路1301A-1301Z的这些单个结果随后被一组(例如,定点)(例如,整数)加法器1357加在一起成为单个定点结果(例如,没有由移位寄存器1355A或移位寄存器1355Z进行的任何移位)。在一个实施例中,单个定点结果(例如,乘积)被从输出1359发送到累加器1310,例如,如下所述。
第三模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第三(例如,拐点)模式中以对拐点输入数据执行操作。
作为一个示例,在第三(例如,拐点)模式中,这些拐点数字的每一者被划分成指数比特,以及整数(2进制补码)尾数比特,例如,而不是像浮点格式中那样的二进制尾数比特。随后在每个向量的对应尾数之间执行按对乘法,并且将指数加在一起。在乘法级的输出处,尾数可被截断或者扩展成期望的内部比特长度(例如,字长度)以将资源利用率与解决方案准确性进行折衷。并行地,在具有log2 n个级的树中比较所有指数。最高指数成为参考并且所有尾数被对齐到此参考。在第三模式的一个实施例中的这个对齐之后,尾数不被转换成定点(例如,2进制补码)数表示,因为它们已经处于该格式了。在下一级的一个实施例中,对尾数执行总和化简,并且在这个化简树的每个级别,将比特长度(例如,字长度)增加一比特以防止溢出。在这个求和之后,在一个实施例中,结果(例如,尾数和指数)被移位到期望的幅值(例如,采取上述的FlexN+M格式)。
作为另一示例,在第三模式中,输入源发复用器(例如,复用器1330和1332)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对拐点(2进制补码)(例如,将拐点向量A和B的具有索引0的两个元素的尾数作为一对源发,将拐点向量A和B的具有索引1的两个元素的尾数作为第二对源发,将拐点向量A和B的具有索引2的两个元素的尾数作为第三对源发,等等)。在此示例中,每一对尾数被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有索引0的元素的尾数A[0]1308和来自向量B的具有索引0的元素的尾数B[0]1324被(例如,定点)乘法器1334相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到移位寄存器(例如,移位器)以基于它的所确定指数(例如,乘积的指数)和最大指数(例如,乘积的最大指数)来移位(例如,移动)每个乘积。在此示例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对指数(例如,将拐点向量A和B的具有索引0的两个元素的指数作为一对源发,将拐点向量A和B的具有索引1的两个元素的指数作为第二对源发,将拐点向量A和B的具有索引2的两个元素的指数作为第三对源发,等等)被相应的(例如,定点)(例如,整数)加法器加在一起以产生指数之和(例如,来自向量A和向量B的一对元素的乘积的指数)。在此示例中,指数之和(例如,此图中的n+1个和)的每一者被输入到最大指数确定器1340(例如,比较器电路)中。例如,来自向量A的具有索引0的元素的指数A[0]1314和来自向量B的具有索引0的元素的指数B[0]1316被(例如,定点)(例如,整数)加法器1338加在一起以产生指数A[0]1314和指数B[0]1316的总和。最大指数确定器1340(例如,电路)随后将指数之和与彼此相比较以确定指数之和的最大者(例如,最大值),例如,尾数的相应乘积的指数中的最大指数。在一个实施例中,指数之和的最大者是尾数乘积的最大指数。描绘的实施例中的最大指数随后被用于相应地移位其他尾数乘积,例如,为了将其他尾数乘积对齐到最大指数。在一个实施例中,最大指数是4(例如,各自具有值2的两个指数之和),并且另一指数是3,因此其他指数的尾数乘积被移一位(例如,向左移)以将尾数乘积对齐来与最大指数具有相同的指数。在描绘的实施例中,最大指数(例如,指示最大指数的值)沿着路径1341被输出到一组移位寄存器(例如,包括移位寄存器1336)。在此示例中,每个移位的尾数乘积被输出到相应的数值转换电路(例如,2进制补码电路)中,但在第三模式中,乘积通过数值转换电路,而不被改变,例如,乘积已经处于2进制补码表示,因此它们不被进一步转换。
在一个实施例中,移位寄存器让值通过,而没有移位,例如,当最大指数(例如,两个指数之和)与该索引位置的指数相同时,例如,其中数值转换电路1342和移位寄存器1336被用于输入向量的索引位置0。
在描绘的实施例中,对于每个乘积之和电路1301A-1301Z,每一对元素(例如,在相同元素位置)的经移位的尾数乘积随后被利用一组(例如,定点)(例如,整数)加法器(例如,对于乘积之和电路1301A是加法器1346)全都加在一起成为单个乘积(例如,对于乘积之和电路1301A是来自输出1347A的单个乘积并且对于乘积之和电路1301Z是来自输出1347Z的单个乘积)。在描绘的实施例中,前导零检测(LDZ)电路(例如,对于乘积之和电路1301A是电路1351)被包括来检测输出(例如,对于乘积之和电路1301A是输出1347A)的任何前导零,并且将把最大指数(例如,对于乘积之和电路1301A来自路径1341)调整成反映要被重对齐电路1303的相应移位寄存器1355A-1355Z(例如,对于乘积之和电路1301A是1355A并且对于乘积之和电路1301Z是1355Z)去除的前导零的数目的经调整最大指数(例如,对于乘积之和电路1301A是经调整最大指数1349A并且对于乘积之和电路1301Z是经调整最大指数1349Z)以对齐对于来自乘积之和电路1301A-1301Z的每个最大指数确定(例如,对于乘积之和电路130A由1340确定)的最大指数。来自输出(例如,对于乘积之和电路1301A是输出1347A并且对于乘积之和电路1301Z是输出1347Z)的经移位(例如,对齐)的单个结果随后被第二组加法器1357加在一起以在输出1359处产生单个结果。在一个实施例中,对于该组乘积之和电路(例如,对于乘积之和电路1301A的输出1347A以及对于乘积之和电路1301Z的输出1347Z)的每个输出(例如,来自输出1361的单个经调整最大指数的,以及与该单个经调整最大指数相对应的来自输出1359的单个乘积),经调整最大指数(例如,来自重对齐电路1303的另一最大指数电路1363的输出1361)和/或单个乘积(例如,对于重对齐电路1303的输出1359)被发送到累加器1310,例如,如下所述。
累加器
可选地,电路1300包括累加器1310来累加来自乘积之和电路1301A-1301Z的结果。在一个实施例中,累加器1310包括定点(例如,整数)加法器1356,例如,并且不包括(一个或多个)浮点加法器。
在某些实施例中,处于第二模式中的模式控制器1306使得从乘积之和电路1301A-1301Z的输出1359发送的结果被利用累加器电路1310来累加(例如,被定点加法器1356加到来自(例如,定点)累加器存储1358的先前累加的结果)。在一个实施例中,其他电路(例如,移位寄存器1366、移位寄存器1368和定点到浮点转换电路1370)在此模式中允许通过,而不修改数据(例如,结果)。
在某些实施例中,处于第一模式中的模式控制器1306使得从乘积之和电路1301A-1301Z的输出1359发送的结果被(例如,仅)通过使用来自输出1361的为当前结果确定的最大指数来累加。在一个实施例中,处于第一模式中的模式控制器1306使得当前结果(例如,尾数对的乘积之和)被从乘积之和电路1301A-1301Z的重对齐电路1303的输出1359发送到第一移位寄存器1366并且任何累加的结果(例如,来自累加器存储1358)被发送到第二移位寄存器1368,使得移位寄存器1366和/或移位寄存器1368分别基于来自第二最大指数确定器电路1364的在指数累加器存储1362中对于累加操作(例如,对于已在一段时间中从输出1359累加的多个浮点结果)存储的最大指数和来自路径1341的为当前结果确定的当前最大指数来移位(例如,对齐)当前结果和/或累加的结果。在结果被移位(例如,对齐)之后,在一个实施例中它们被(例如,定点)(例如,整数)加法器1356加在一起并且那个更新后的结果(以及其指数)随后可被发送到正规化电路1350,例如,以移动非零数字的有效数字(例如,单个乘积)的最高有效位以成为非零(例如,并且根据单个乘积的移动来相应地移动最大指数值)。在某些实施例中,累加的尾数乘积之和的(例如,无符号)版本被存储在累加器存储1358中。累加的尾数乘积之和的当前指数随后可被调整累加器指数电路1360与累加器存储1362中的累加的尾数乘积之和的先前指数相比较,例如,并且如果当前指数大于先前指数,则该值被更新。在某些实施例中,在累加结束时,来自累加器存储1358的累加的尾数乘积之和以及来自累加器存储1362的累加的尾数乘积之和的指数被发送到定点到浮点转换电路1370(例如,包括2进制补码电路)以将累加的和及其指数转换成浮点格式。
在某些实施例中,电路1300接收(例如,从向电路1300的加速器实施例转移负载的核心接收)指示乘积之和电路1301A-1301Z要执行的迭代的值,例如,以将要被电路1300处理的向量(例如,具有大于N+1的元素数目)的宽度与乘积之和电路1301A-1301Z的硬件宽度(例如,具有最多N+1个元素的向量)解除耦合。在一个实施例中,电路1300将通过执行通知动作(例如,提出标志,使得适当的输出数据被请求方实体读取)来将完成通知给请求方实体(例如,核心)。
图14A-图14C根据本公开的实施例图示了被细分成多个区段1401A-1401Z的定点和浮点向量乘法电路1400,其中每个区段具有其自己的最大指数并且这些区段被按指数之和来排序。
1401Z中的Z可以是指示电路区段的实例的期望数目的任何数字或字母。例如,两个电路区段可被称为1401A和1401B,从而分别找到两个最大指数。这里的某些实施例重调整来自每个最终加法器输出(例如,来自作为示例的图12中的输出1247)的指数,例如,利用重对齐电路1403来重调整,其方式是通过检测前导零,然后在乘积之和电路(例如,“桶”)间计算最大指数。在一个实施例中,每个加法器输出随后可基于乘积之和电路1401A-1401Z间的新的最大指数而被相加。在某些实施例中,此方案提供了统计上更不易出错的结果,例如,并且与仅浮点的向量乘法电路相比具有更低的门计数和面积。与图13A-13C中的一个实施例相比,图14A-14C中描绘的实施例包括排序器电路1480(例如,在乘积之和电路1401A-1401Z的每一者之间共享)。在一个实施例中,排序器电路1480按指数之和(例如,来自向量A和向量B的一对元素的乘积的指数)来排序输入元素(例如,按升序或降序)。在一个实施例中,该排序确实改变输入寄存器中的物理排序。在一个实施例中,该排序不改变输入寄存器中的物理排序,但改变各个乘积之和电路1401A-1401Z中的(例如,开关)连接。在一个实施例中,按指数之和的排序使得相应的尾数(或者来自每个乘法器的尾数乘积)被按该同一顺序来排序,例如,排序的指数的关联值(例如,来自每个乘法器的对应尾数乘积和异或逻辑门输出(例如,输入符号比特))被排序到乘积之和电路1401A-1401Z中。在某些实施例中,被相应的乘积之和电路1401A-1401Z操作的向量的每组元素的幅值将比未排序实施例中的幅值更接近,从而提供统计上更不易出错的结果。虽然排序器电路被示为在某些组件之间,但应当理解其可被放置在其他位置(例如,在复用器(例如,1430)和乘法器(例如,1434)之间。在一个实施例中,排序器电路1480只被用在单个模式中(例如,第一模式)。
电路1400包括模式控制器1406(例如,电路)来在定点模式和浮点模式之间切换(例如,选择)。在一个实施例中,模式控制器1406将在定点模式、拐点模式和浮点模式(例如,其任何一者)之间切换。电路1400包括多个(例如,2个或更多个)乘积之和电路(例如,流水线)1401A(在图4A中)-1401Z(在图4B中),重对齐电路1403(在图4C中),以及定点累加器1410(在图4C中)。在一个实施例中,使用图10中的累加器,而不是累加器1410。在描绘的实施例中,浮点(和/或拐点)输入(例如,输入寄存器)和定点输入被示为分开的输入。在一个实施例中,同一寄存器被用于定点数据或浮点数据(例如,或者拐点数据)。例如,第一寄存器为第一向量(例如,向量A)存储定点数据或浮点数据(例如,或者拐点数据)并且第二寄存器为第二向量(例如,向量B)存储定点数据或浮点数据(例如,或者拐点数据)。在一个实施例中,单独的寄存器被用于定点数据和浮点数据(例如,以及拐点数据)。例如,第一寄存器为第一定点向量(例如,定点向量A)存储定点数据,第二寄存器为第二定点向量(例如,定点向量B)存储定点数据,第三寄存器为第三浮点向量(例如,浮点向量A)存储浮点数据,并且第四寄存器为第四浮点向量(例如,浮点向量B)存储浮点数据。在一个实施例中,拐点数据被存储在其自己的(一个或多个)寄存器中。在一个实施例中,输入1412对于定点向量的每个元素包括一输入(例如,对于第一向量A的第一元素[0]包括输入1420和/或对于第二向量B的第一元素[0]包括输入1422)并且对于浮点向量的每个元素(例如,每个元素的符号比特1412(sign)、指数1412(exp)和尾数)包括一输入(例如,对于第一向量A的第一元素[0]的符号比特包括输入1426,对于第一向量A的第一元素[0]的指数比特包括输入1414,并且对于第一向量A的第一元素[0]的尾数比特包括输入1408,和/或对于第二向量B的第一元素[0]的符号比特包括输入1426,对于第二向量B的第一元素[0]的指数比特包括输入1414,并且对于第二向量B的第一元素[0]的尾数比特包括输入1408)。在某些实施例中,输入1412对于拐点向量的每个元素(例如,每个元素的指数1412(exp)和尾数)包括一输入(例如,对于第一向量A的第一元素[0]的指数比特包括输入1414并且对于第一向量A的第一元素[0]的尾数比特包括输入1408,和/或对于第二向量B的第一元素[0]的指数比特包括输入1414,并且对于第二向量B的第一元素[0]的尾数比特包括输入1408)。在一个实施例中,要被定点和浮点向量乘法电路1400操作的向量(例如,A[N+1]和B[N+1])具有等于N+1的相同的元素数目。N在某些实施例中可以是任何正整数。
在此图中没有绘出其他输入(例如,对于元素1至N)的标号以免模糊数据流/线。另外,没有绘出控制输入/线(例如,对于开关、移位器、数值转换电路(例如,2进制补码电路))以免模糊数据流/线。到组件的控制输入/线可从模式控制器延伸。
在某些实施例中,要处理的向量的每个元素位置(例如,0至N)包括相应的乘法器、移位寄存器和数值转换电路来处理该元素位置中的尾数,包括异或逻辑门,和/或包括加法器来处理该元素位置中的指数(例如,加在一起)。这些组件集合可被称为元素块(例如,在图14中在(N+1)/(R+1)个乘积之和电路区段中有总共N+1个元素块)。接下来的描述参考乘积之和电路区段1401A,但也适用于其他乘积之和电路区段,例如,其中所有的乘积之和电路区段1401A-1401Z是相同的(例如,并且被同一模式控制器1406控制)。注意下面的具有某些索引(例如,索引0)的元素可以指采取其被排序格式(例如,被排序器电路1480排序)的索引而不是在该元素被输入到各乘积之和电路1401A-1401Z中时它的索引。
第一模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第一(例如,浮点)模式中以对浮点输入数据执行操作。
作为一个示例,在第一(例如,浮点)模式中,这些浮点数字的每一者被划分成其符号比特、指数比特和尾数比特。在这个初始划分时,取决于指数可以是1或0的前导隐藏比特被串接到尾数上。随后在每个向量的对应尾数之间执行按对乘法,将指数加在一起,并且对相应的符号比特进行逻辑异或。在乘法级的输出处,尾数可被截断或者扩展成期望的内部比特长度(例如,字长度)以将资源利用率与解决方案准确性进行折衷。并行地,在具有log2n个级的树中比较所有指数。最高指数成为参考并且所有尾数被对齐到此参考。在这个对齐之后,尾数被转换成定点(例如,2进制补码)数表示。在下一级的一个实施例中,对尾数执行总和化简,并且在这个化简树的每个级别,将比特长度(例如,字长度)增加一比特以防止溢出。在这个求和之后,定点数被重转换成符号和幅值,对齐以去掉前导的一,并且指数被校正。从这些值,遵从标准的浮点数被生成并且在此示例中被输出。在一个实施例中,该标准是IEEE浮点算术标准(例如,754-2008–2008年8月29日发布的IEEE计算机学会的浮点算术标准)。
在一个实施例中,排序电路1480将排序输入数据(例如,尾数及其对应的指数),例如,以基于一对指数的和的值来排序成真子集。
作为另一示例,在第一模式中,输入源发复用器(例如,复用器1430和1432)被发送控制值(例如,从排序电路1480发送)以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对尾数(例如,将浮点向量A和B的具有索引0的两个元素的尾数作为一对源发,将浮点向量A和B的具有索引1的两个元素的尾数作为第二对源发,将浮点向量A和B的具有索引2的两个元素的尾数作为第三对源发,等等)。在此示例中,每一对尾数被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有索引0的元素的尾数A[0]1408和来自向量B的具有索引0的元素的尾数B[0]1424被(例如,定点)乘法器1434相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到移位寄存器(例如,移位器)以基于它的所确定指数(例如,乘积的指数)和最大指数(例如,乘积的最大指数)来移位(例如,移动)每个乘积。在此示例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对指数(例如,将浮点向量A和B的具有索引0的两个元素的指数作为一对源发,将浮点向量A和B的具有索引1的两个元素的指数作为第二对源发,将浮点向量A和B的具有索引2的两个元素的指数作为第三对源发,等等)被相应的(例如,定点)(例如,整数)加法器加在一起以产生指数之和(例如,来自向量A和向量B的一对元素的乘积的指数)。在此示例中,指数之和(例如,此图中的n+1个和)的每一者被输入到最大指数确定器1440(例如,比较器电路)中。例如,来自向量A的具有索引0的元素的指数A[0]1414和来自向量B的具有索引0的元素的指数B[0]1416被(例如,定点)(例如,整数)加法器1438加在一起以产生指数A[0]1414和指数B[0]1416的总和。最大指数确定器1440(例如,电路)随后将指数之和与彼此相比较以确定指数之和的最大者(例如,最大值),例如,尾数的相应乘积的指数中的最大指数。在一个实施例中,指数之和的最大者是尾数乘积的最大指数。描绘的实施例中的最大指数随后被用于相应地移位其他尾数乘积,例如,为了将其他尾数乘积对齐到最大指数。在一个实施例中,最大指数是4(例如,各自具有值2的两个指数之和),并且另一指数是3,因此其他指数的尾数乘积被移一位(例如,向左移)以将尾数乘积对齐来与最大指数具有相同的指数。在描绘的实施例中,最大指数(例如,指示最大指数的值)沿着路径1441被输出到一组移位寄存器(例如,包括移位寄存器1436)和第二最大指数确定器电路1464。在此示例中,每个移位的尾数乘积被输出到相应的数值转换电路(例如,2进制补码电路)。例如,数值转换电路1442(例如,2进制补码电路)接收从移位寄存器1436输出的无符号(例如,并且移位的)尾数乘积。每个相应的数值转换电路(例如,2进制补码电路)随后将(例如,移位的)尾数乘积从无符号格式(例如,值)转换成有符号格式(例如,值)。在一个实施例中,这个转换是基于来自每个相应的异或逻辑门的输出在(例如,移位的)尾数乘积上执行的2进制补码操作(例如,从无符号(例如,二进制)格式转换成2进制补码格式)。
在一个实施例中,移位寄存器让值通过,而没有移位,例如,当最大指数(例如,两个指数之和)与该索引位置的指数相同时,例如,其中数值转换电路1442和移位寄存器1436被用于输入向量的索引位置0。
在描绘的实施例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对符号比特的每个符号比特(例如,将浮点向量A和B的具有索引0的两个元素的符号比特作为一对源发,将浮点向量A和B的具有索引1的两个元素的符号比特作为第二对源发,将浮点向量A和B的具有索引2的两个元素的符号比特作为第三对源发,等等)被相应的(例如,定点)逻辑门在逻辑上异或(XOR)在一起,该逻辑门实现XOR来产生指示出尾数乘积是负还是正的值,例如,该值对于正为0,对于负则为1。在描绘的实施例中,异或逻辑门1444对于第一向量A的第一元素[0]从输入1426接收符号比特并且对于第二向量B的第一元素[0]从输入1428接收符号比特并且在输入1426、1428中只有一个是1时输出第一值(例如,1指示出乘积是负的)以指示假(例如,负),否则输出第二值(例如,0指示出乘积是正的)。
在描绘的实施例中,包括前导零检测(LDZ)电路(例如,对于乘积之和电路1401A是电路1451)来检测输出(例如,对于乘积之和电路1401A是输出1447A并且对于乘积之和电路1401Z是输出1447Z)的任何前导零,并且重对齐电路1403将把最大指数(例如,对于乘积之和电路1401A来自路径1441)调整成反映要被相应移位寄存器1455A-1455Z(例如,对于乘积之和电路1401A是1455A并且对于乘积之和电路1401Z是1455Z)去除的前导零的数目的经调整最大指数(例如,对于乘积之和电路1401A是经调整最大指数1449A并且对于乘积之和电路1401Z是经调整最大指数1449Z)以对齐对于来自乘积之和电路1401A-1401Z的每个最大指数确定(例如,对于乘积之和电路1401A由1440确定)的最大指数。来自输出(例如,对于乘积之和电路1401A是输出1447A并且对于乘积之和电路1401Z是输出1447Z)的经移位(例如,对齐)的单个结果随后被第二组加法器1457加在一起以在输出1459处产生单个结果。在一个实施例中,对于该组乘积之和电路(例如,对于乘积之和电路1401A的输出1447A以及对于乘积之和电路1401Z的输出1447Z)的每个输出(例如,来自输出1461的单个经调整最大指数的,以及与该单个经调整最大指数相对应的来自输出1459的单个乘积),经调整最大指数(例如,来自重对齐电路1403的另一最大指数电路1463的输出1461)和/或单个乘积(例如,对于重对齐电路1403的输出1459)被发送到累加器1410,例如,如下所述。
第二模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第二(例如,定点)模式中以对定点输入数据执行操作。
作为一个示例,在第二(例如,定点)模式中,乘积之和电路将把来自输入向量的同一元素位置(例如,0至N)的每一对定点(例如,整数)值相乘为乘积,并且对这些乘积求和以产生输出1459处的单个定点结果。
作为另一示例,在第二(例如,定点)模式中,对于乘积之和电路1401A-1401Z的每一者,输入源发复用器(例如,复用器1430和1432)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对值(例如,将定点向量A和B的具有索引0的两个元素的值作为一对源发,将定点向量A和B的具有索引1的两个元素的值作为第二对源发,将定点向量A和B的具有索引2的两个元素的值作为第三对源发,等等)。在此示例中,每一对值被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有索引0的元素的值A[0]1420和来自向量B的具有索引0的元素的值B[0]1422被(例如,定点)乘法器1434相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到相应的移位寄存器(例如,移位器),但在第二模式中乘积通过移位寄存器而不被改变,例如,乘积不被移位(例如,移动)。在此示例中,从每个移位寄存器输出的每个未移位的乘积被输入到相应的数值转换电路(例如,2进制补码电路)中,但在第二模式中,乘积通过数值转换电路,而不被改变,例如,乘积已经处于2进制补码表示,因此它们不被进一步转换。单个乘积之和电路的每一对元素(例如,在相同元素位置)的(例如,有符号)乘积随后被利用一组(例如,定点)(例如,整数)加法器(例如,对于乘积之和电路1401A是加法器1446)全都加在一起成为单个定点结果(例如,没有由移位寄存器1355A或移位寄存器1355Z进行的任何移位)。来自每个乘积之和电路1401A-1401Z的这些单个结果随后被一组(例如,定点)(例如,整数)加法器1457加在一起成为单个定点结果。在一个实施例中,单个定点结果(例如,乘积)被从输出1459发送到累加器1410,例如,如下所述。
第三模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第三(例如,拐点)模式中以对拐点输入数据执行操作。
作为一个示例,在第三(例如,拐点)模式中,这些拐点数字的每一者被划分成指数比特,以及整数(2进制补码)尾数比特,例如,而不是像浮点格式中那样的二进制尾数比特。随后在每个向量的对应尾数之间执行按对乘法,并且将指数加在一起。在乘法级的输出处,尾数可被截断或者扩展成期望的内部比特长度(例如,字长度)以将资源利用率与解决方案准确性进行折衷。并行地,在具有log2 n个级的树中比较所有指数。最高指数成为参考并且所有尾数被对齐到此参考。在第三模式的一个实施例中的这个对齐之后,尾数不被转换成定点(例如,2进制补码)数表示,因为它们已经处于该格式了。在下一级的一个实施例中,对尾数执行总和化简,并且在这个化简树的每个级别,将比特长度(例如,字长度)增加一比特以防止溢出。在这个求和之后,在一个实施例中,结果(例如,尾数和指数)被移位到期望的幅值(例如,采取上述的FlexN+M格式)。
作为另一示例,在第三模式中,输入源发复用器(例如,复用器1430和1432)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对拐点(2进制补码)(例如,将拐点向量A和B的具有索引0的两个元素的尾数作为一对源发,将拐点向量A和B的具有索引1的两个元素的尾数作为第二对源发,将拐点向量A和B的具有索引2的两个元素的尾数作为第三对源发,等等)。在此示例中,每一对尾数被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有索引0的元素的尾数A[0]1408和来自向量B的具有索引0的元素的尾数B[0]1424被(例如,定点)乘法器1434相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到移位寄存器(例如,移位器)以基于它的所确定指数(例如,乘积的指数)和最大指数(例如,乘积的最大指数)来移位(例如,移动)每个乘积。在此示例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对指数(例如,将拐点向量A和B的具有索引0的两个元素的指数作为一对源发,将拐点向量A和B的具有索引1的两个元素的指数作为第二对源发,将拐点向量A和B的具有索引2的两个元素的指数作为第三对源发,等等)被相应的(例如,定点)(例如,整数)加法器加在一起以产生指数之和(例如,来自向量A和向量B的一对元素的乘积的指数)。在此示例中,指数之和(例如,此图中的n+1个和)的每一者被输入到最大指数确定器1440(例如,比较器电路)中。例如,来自向量A的具有索引0的元素的指数A[0]1414和来自向量B的具有索引0的元素的指数B[0]1416被(例如,定点)(例如,整数)加法器1438加在一起以产生指数A[0]1414和指数B[0]1416的总和。最大指数确定器1440(例如,电路)随后将指数之和与彼此相比较以确定指数之和的最大者(例如,最大值),例如,尾数的相应乘积的指数中的最大指数。在一个实施例中,指数之和的最大者是尾数乘积的最大指数。描绘的实施例中的最大指数随后被用于相应地移位其他尾数乘积,例如,为了将其他尾数乘积对齐到最大指数。在一个实施例中,最大指数是4(例如,各自具有值2的两个指数之和),并且另一指数是3,因此其他指数的尾数乘积被移一位(例如,向左移)以将尾数乘积对齐来与最大指数具有相同的指数。在描绘的实施例中,最大指数(例如,指示最大指数的值)沿着路径1441被输出到一组移位寄存器(例如,包括移位寄存器1436)和正规化电路1450。在此示例中,每个移位的尾数乘积被输出到相应的数值转换电路(例如,2进制补码电路)中,但在第三模式中,乘积通过数值转换电路,而不被改变,例如,乘积已经处于2进制补码表示,因此它们不被进一步转换。
在一个实施例中,移位寄存器让值通过,而没有移位,例如,当最大指数(例如,两个指数之和)与该索引位置的指数相同时,例如,其中数值转换电路1442和移位寄存器1436被用于输入向量的索引位置0。
在描绘的实施例中,对于每个乘积之和电路1401A-1401Z,每一对元素(例如,在相同元素位置)的经移位的尾数乘积随后被利用一组(例如,定点)(例如,整数)加法器(例如,对于乘积之和电路1401A是加法器1446)全都加在一起成为单个乘积(例如,对于乘积之和电路1401A是来自输出1447A的单个乘积并且对于乘积之和电路1401Z是来自输出1447Z的单个乘积)。在描绘的实施例中,前导零检测(LDZ)电路(例如,对于乘积之和电路1401A是电路1451)被包括来检测输出(例如,对于乘积之和电路1401A是输出1447A)的任何前导零,并且将把最大指数(例如,对于乘积之和电路1401A来自路径1441)调整成反映要被重对齐电路1403的相应移位寄存器1455A-1455Z(例如,对于乘积之和电路1401A是1455A并且对于乘积之和电路1401Z是1455Z)去除的前导零的数目的经调整最大指数(例如,对于乘积之和电路1401A是经调整最大指数1455A并且对于乘积之和电路1401Z是经调整最大指数1449Z)以对齐对于来自乘积之和电路1401A-1401Z的每个最大指数确定(例如,对于乘积之和电路1401A由1440确定)的最大指数。来自输出(例如,对于乘积之和电路1401A是输出1447A并且对于乘积之和电路1401Z是输出1447Z)的经移位(例如,对齐)的单个结果随后被第二组加法器1457加在一起以在输出1459处产生单个结果。在一个实施例中,对于该组乘积之和电路(例如,对于乘积之和电路1401A的输出1447A以及对于乘积之和电路1401Z的输出1447Z)的每个输出(例如,来自输出1461的单个经调整最大指数的,以及与该单个经调整最大指数相对应的来自输出1459的单个乘积),经调整最大指数(例如,来自重对齐电路1403的另一最大指数电路1463的输出1461)和/或单个乘积(例如,对于重对齐电路1403的输出1459)被发送到累加器1410,例如,如下所述。
累加器
可选地,电路1400包括累加器1410来累加来自乘积之和电路1401A-1401Z的结果。在一个实施例中,累加器1410包括定点(例如,整数)加法器1456,例如,并且不包括(一个或多个)浮点加法器。
在某些实施例中,处于第二模式中的模式控制器1406使得从乘积之和电路1401A-1401Z的输出1459发送的结果被利用累加器电路1410来累加(例如,被定点加法器1456加到来自(例如,定点)累加器存储1458的先前累加的结果)。在一个实施例中,其他电路(例如,移位寄存器1466、移位寄存器1468和定点到浮点转换电路1470)在此模式中允许通过,而不修改数据(例如,结果)。
在某些实施例中,处于第一模式中的模式控制器1406使得从乘积之和电路1401A-1401Z的输出1459发送的结果被(例如,仅)通过使用来自输出1461的为当前结果确定的最大指数来累加。在一个实施例中,处于第一模式中的模式控制器1406使得当前结果(例如,尾数对的乘积之和)被从乘积之和电路1401A-1401Z的重对齐电路1403的输出1459发送到第一移位寄存器1466并且任何累加的结果(例如,来自累加器存储1458)被发送到第二移位寄存器1468,使得移位寄存器1466和/或移位寄存器1468分别基于来自第二最大指数确定器电路1464的在指数累加器存储1462中对于累加操作(例如,对于已在一段时间中从输出1459累加的多个浮点结果)存储的最大指数和来自路径1441的为当前结果确定的当前最大指数来移位(例如,对齐)当前结果和/或累加的结果。在结果被移位(例如,对齐)之后,在一个实施例中它们被(例如,定点)(例如,整数)加法器1456加在一起并且那个更新后的结果(以及其指数)随后可被发送到正规化电路1450,例如,以移动非零数字的有效数字(例如,单个乘积)的最高有效位以成为非零(例如,并且根据单个乘积的移动来相应地移动最大指数值)。在某些实施例中,累加的尾数乘积之和的(例如,无符号)版本被存储在累加器存储1458中。累加的尾数乘积之和的当前指数随后可被调整累加器指数电路1460与累加器存储1462中的累加的尾数乘积之和的先前指数相比较,例如,并且如果当前指数大于先前指数,则该值被更新。在某些实施例中,在累加结束时,来自累加器存储1458的累加的尾数乘积之和以及来自累加器存储1462的累加的尾数乘积之和的指数被发送到定点到浮点转换电路1470(例如,包括2进制补码电路)以将累加的和及其指数转换成浮点格式。
在某些实施例中,电路1400接收(例如,从向电路1400的加速器实施例转移负载的核心接收)指示乘积之和电路1401A-1401Z要执行的迭代的值,例如,以将要被电路1400处理的向量(例如,具有大于N+1的元素数目)的宽度与乘积之和电路1401A-1401Z的硬件宽度(例如,具有最多N+1个元素的向量)解除耦合。在一个实施例中,电路1400将通过执行通知动作(例如,提出标志,使得适当的输出数据被请求方实体读取)来将完成通知给请求方实体(例如,核心)。
图15根据本公开的实施例图示了包括具有定点累加器电路1002和浮点累加器电路1004的舍入电路(例如,舍入电路1537)的定点和浮点向量乘法电路1500。
与图10中的一个实施例相比较,图15中的描绘的实施例包括舍入电路。在一个实施例中,每个舍入电路(例如,舍入电路1537)将对来自移位寄存器(例如,移位寄存器1036)的输出进行舍入(例如,向上舍入、向下舍入、朝零舍入或者舍入到最近,例如舍入到最近整数)。
电路1500包括模式控制器1506(例如,电路)来在定点模式和浮点模式之间切换(例如,选择)。在一个实施例中,模式控制器1506将在定点模式、拐点模式和浮点模式(例如,其任何一者)之间切换。电路1500包括乘积之和电路(例如,流水线)1501和累加器1510(例如,定点累加器电路1502和浮点累加器电路1504)。在描绘的实施例中,浮点(和/或拐点)输入(例如,输入寄存器)和定点输入被示为分开的输入。在一个实施例中,同一寄存器被用于定点数据或浮点数据(例如,或者拐点数据)。例如,第一寄存器为第一向量(例如,向量A)存储定点数据或浮点数据(例如,或者拐点数据)并且第二寄存器为第二向量(例如,向量B)存储定点数据或浮点数据(例如,或者拐点数据)。在一个实施例中,单独的寄存器被用于定点数据和浮点数据(例如,以及拐点数据)。例如,第一寄存器为第一定点向量(例如,定点向量A)存储定点数据,第二寄存器为第二定点向量(例如,定点向量B)存储定点数据,第三寄存器为第三浮点向量(例如,浮点向量A)存储浮点数据,并且第四寄存器为第四浮点向量(例如,浮点向量B)存储浮点数据。在一个实施例中,拐点数据被存储在其自己的(一个或多个)寄存器中。在一个实施例中,输入1512对于定点向量的每个元素包括一输入(例如,对于第一向量A的第一元素[0]包括输入1520和/或对于第二向量B的第一元素[0]包括输入1522)并且对于浮点向量的每个元素(例如,每个元素的符号比特1512(sign)、指数1512(exp)和尾数)包括一输入(例如,对于第一向量A的第一元素[0]的符号比特包括输入1526,对于第一向量A的第一元素[0]的指数比特包括输入1514,并且对于第一向量A的第一元素[0]的尾数比特包括输入1508,和/或对于第二向量B的第一元素[0]的符号比特包括输入1526,对于第二向量B的第一元素[0]的指数比特包括输入1514,并且对于第二向量B的第一元素[0]的尾数比特包括输入1508)。在某些实施例中,输入1512对于拐点向量的每个元素(例如,每个元素的指数1512(exp)和尾数)包括一输入(例如,对于第一向量A的第一元素[0]的指数比特包括输入1514并且对于第一向量A的第一元素[0]的尾数比特包括输入1508,和/或对于第二向量B的第一元素[0]的指数比特包括输入1514,并且对于第二向量B的第一元素[0]的尾数比特包括输入1508)。在一个实施例中,要被定点和浮点向量乘法电路1500操作的向量(例如,A[N+1]和B[N+1])具有等于N+1的相同的元素数目。N在某些实施例中可以是任何正整数。
在此图中没有绘出其他输入(例如,对于元素1至N)的标号以免模糊数据流/线。另外,没有绘出控制输入/线(例如,对于开关、移位器、舍入电路、数值转换电路(例如,2进制补码电路))以免模糊数据流/线。到组件的控制输入/线可从模式控制器延伸。
在某些实施例中,要处理的向量的每个元素位置(例如,0至N)包括相应的乘法器、移位寄存器、舍入电路和数值转换电路来处理该元素位置中的尾数,包括异或逻辑门,和/或包括加法器来处理该元素位置中的指数(例如,加在一起)。这些组件集合可被称为元素块(例如,在图15中有N+1个元素块)。
第一模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第一(例如,浮点)模式中以对浮点输入数据执行操作。
作为一个示例,在第一(例如,浮点)模式中,这些浮点数字的每一者被划分成其符号比特、指数比特和尾数比特。在这个初始划分时,取决于指数可以是1或0的前导隐藏比特被串接到尾数上。随后在每个向量的对应尾数之间执行按对乘法,将指数加在一起,并且对相应的符号比特进行逻辑异或。在乘法级的输出处,尾数可被截断或者扩展成期望的内部比特长度(例如,字长度)以将资源利用率与解决方案准确性进行折衷。并行地,在具有log2n个级的树中比较所有指数。最高指数成为参考并且所有尾数被对齐到此参考。在这个对齐之后,尾数被转换成定点(例如,2进制补码)数表示。在下一级的一个实施例中,对尾数执行总和化简,并且在这个化简树的每个级别,将比特长度(例如,字长度)增加一比特以防止溢出。在这个求和之后,定点数被重转换成符号和幅值,对齐以去掉前导的一,并且指数被校正。从这些值,遵从标准的浮点数被生成并且在此示例中被输出。在一个实施例中,该标准是IEEE浮点算术标准(例如,754-2008–2008年8月29日发布的IEEE计算机学会的浮点算术标准)。
作为另一示例,在第一模式中,输入源发复用器(例如,复用器1530和1532)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对尾数(例如,将浮点向量A和B的具有(经排序的)索引0的两个元素的尾数作为一对源发,将浮点向量A和B的具有(经排序的)索引1的两个元素的尾数作为第二对源发,将浮点向量A和B的具有(经排序的)索引2的两个元素的尾数作为第三对源发,等等)。在此示例中,每一对尾数被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有(经排序的)索引0的元素的尾数A[0]1508和来自向量B的具有(经排序的)索引0的元素的尾数B[0]1524被(例如,定点)乘法器1534A相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到移位寄存器(例如,移位器)以基于它的所确定指数(例如,乘积的指数)和最大指数(例如,乘积的最大指数)来移位(例如,移动)每个乘积。在此示例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对指数(例如,将浮点向量A和B的具有(经排序的)索引0的两个元素的指数作为一对源发,将浮点向量A和B的具有(经排序的)索引1的两个元素的指数作为第二对源发,将浮点向量A和B的具有(经排序的)索引2的两个元素的指数作为第三对源发,等等)被相应的(例如,定点)(例如,整数)加法器加在一起以产生指数之和(例如,来自向量A和向量B的一对元素的乘积的指数)。在此示例中,指数之和(例如,此图中的n+1个和)的每一者被输入到最大指数确定器1540(例如,比较器电路)中。例如,来自向量A的具有(经排序的)索引0的元素的指数A[0]1514和来自向量B的具有(经排序的)索引0的元素的指数B[0]1516被(例如,定点)(例如,整数)加法器1538加在一起以产生指数A[0]1514和指数B[0]1516的总和。最大指数确定器1540(例如,电路)随后将指数之和与彼此相比较以确定指数之和的最大者(例如,最大值),例如,尾数的相应乘积的指数中的最大指数。在一个实施例中,指数之和的最大者是尾数乘积的最大指数。描绘的实施例中的最大指数随后被用于相应地移位其他尾数乘积,例如,为了将其他尾数乘积对齐到最大指数。在一个实施例中,最大指数是4(例如,各自具有值2的两个指数之和),并且另一指数是3,因此其他指数的尾数乘积被移一位(例如,向左移)以将尾数乘积对齐来与最大指数具有相同的指数。在描绘的实施例中,最大指数(例如,指示最大指数的值)沿着路径1541被输出到一组移位寄存器(例如,包括移位寄存器1536A-D)和正规化电路1550。在此示例中,每个移位的尾数乘积被输出到相应的舍入电路,并且经舍入的输出被发送到数值转换电路(例如,2进制补码电路)。例如,数值转换电路1542(例如,2进制补码电路)接收从舍入电路1537输出的无符号并且经舍入的(例如,并且经移位的)尾数乘积。每个相应的数值转换电路(例如,2进制补码电路)随后将(例如,经移位的)舍入尾数乘积从无符号格式(例如,值)转换成有符号格式(例如,值)。在一个实施例中,这个转换是基于来自每个相应的异或逻辑门的输出在(例如,经移位的)舍入尾数乘积上执行的2进制补码操作(例如,从无符号(例如,二进制)格式转换成2进制补码格式)。
在一个实施例中,移位寄存器让值通过,而没有移位,例如,当最大指数(例如,两个指数之和)与(经排序的)索引位置的指数相同时,例如,其中数值转换电路1542、舍入电路1537和移位寄存器1536被用于输入向量的(经排序的)索引位置0。
在描绘的实施例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对符号比特的每个符号比特(例如,将浮点向量A和B的具有(经排序的)索引0的两个元素的符号比特作为一对源发,将浮点向量A和B的具有(经排序的)索引1的两个元素的符号比特作为第二对源发,将浮点向量A和B的具有(经排序的)索引2的两个元素的符号比特作为第三对源发,等等)被相应的(例如,定点)逻辑门在逻辑上异或(XOR)在一起,该逻辑门实现XOR来产生指示出尾数乘积是负还是正的值,例如,该值对于正为0,对于负则为1。在描绘的实施例中,异或逻辑门1544A对于第一向量A的第一元素[0]从输入1526接收符号比特并且对于第二向量B的第一元素[0]从输入1528接收符号比特并且在输入1526、1528中只有一个是1时输出第一值(例如,1指示出乘积是负的)以指示假(例如,负),否则输出第二值(例如,0指示出乘积是正的)。
每一对元素(例如,在相同元素位置)的经转换的(例如,有符号)值随后被利用一组(例如,定点)(例如,整数)加法器1546全都加在一起成为单个乘积。正规化电路1550随后在此第一模式中被用来将该单个乘积转换成基于最大指数的浮点表示。在一个实施例中,电路1550还执行舍入或其他操作来将该单个乘积的(例如,整数)格式转换成浮点格式以创建乘积之和电路1501的结果。在一个实施例中,正规化电路1550移动非零数字的有效数字(例如,单个乘积)的最高有效位以成为非零(例如,并且根据单个乘积的移动来相应地移动最大指数值)。
第二模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第二(例如,定点)模式中以对定点输入数据执行操作。
作为一个示例,在第二(例如,定点)模式中,乘积之和电路将把来自输入向量的同一元素位置(例如,0至N)的每一对定点(例如,整数)值相乘为乘积,并且对这些乘积求和以产生单个定点结果。
作为另一示例,在第二(例如,定点)模式中,输入源发复用器(例如,复用器1530和1532)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对值(例如,将定点向量A和B的具有(经排序的)索引0的两个元素的值作为一对源发,将定点向量A和B的具有(经排序的)索引1的两个元素的值作为第二对源发,将定点向量A和B的具有(经排序的)索引2的两个元素的值作为第三对源发,等等)。在此示例中,每一对值被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有(经排序的)索引0的元素的值A[0]1520和来自向量B的具有(经排序的)索引0的元素的值B[0]1522被(例如,定点)乘法器1534相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到相应的移位寄存器(例如,移位器),但在第二模式中乘积通过移位寄存器而不被改变,例如,乘积不被移位(例如,移动)。在此示例中,从每个移位寄存器输出的每个未移位的乘积被输入到舍入电路中,并且来自舍入电路的输出被输入到相应的数值转换电路(例如,2进制补码电路)中,但在第二模式中,乘积通过舍入电路和/或数值转换电路,而不被改变,例如,乘积已经处于2进制补码表示,因此它们不被进一步转换和/或舍入。每一对元素(例如,在相同元素位置)的(例如,有符号)乘积随后被利用一组(例如,定点)(例如,整数)加法器1546全都加在一起成为单个定点结果。在一个实施例中,该单个定点结果通过正规化电路1550,而没有对该单个定点结果的任何修改。
第三模式
在一个实施例中,模式控制器(例如,经由执行乘积之和操作的请求)处于第三(例如,拐点)模式中以对拐点输入数据执行操作。
作为一个示例,在第三(例如,拐点)模式中,这些拐点数字的每一者被划分成指数比特,以及整数(2进制补码)尾数比特,例如,而不是像浮点格式中那样的二进制尾数比特。随后在每个向量的对应尾数之间执行按对乘法,并且将指数加在一起。在乘法级的输出处,尾数可被截断或者扩展成期望的内部比特长度(例如,字长度)以将资源利用率与解决方案准确性进行折衷。并行地,在具有log2 n个级的树中比较所有指数。最高指数成为参考并且所有尾数被对齐到此参考。在第三模式的一个实施例中的这个对齐之后,尾数不被转换成定点(例如,2进制补码)数表示,因为它们已经处于该格式了。在下一级的一个实施例中,对尾数执行总和化简,并且在这个化简树的每个级别,将比特长度(例如,字长度)增加一比特以防止溢出。在这个求和之后,在一个实施例中,结果(例如,尾数和指数)被移位到期望的幅值(例如,采取上述的FlexN+M格式)。
作为另一示例,在第三模式中,输入源发复用器(例如,复用器1530和1532)被发送控制值以从输入向量的对应(例如,在向量中具有相同元素位置的)元素源发一对拐点(2进制补码)(例如,将拐点向量A和B的具有(经排序的)索引0的两个元素的尾数作为一对源发,将拐点向量A和B的具有(经排序的)索引1的两个元素的尾数作为第二对源发,将拐点向量A和B的具有(经排序的)索引2的两个元素的尾数作为第三对源发,等等)。在此示例中,每一对尾数被乘法器乘在一起以产生相应的乘积(例如,此图中的n+1个对应乘积),例如,来自向量A的具有(经排序的)索引0的元素的尾数A[0]1508和来自向量B的具有(经排序的)索引0的元素的尾数B[0]1524被(例如,定点)乘法器1534相乘以产生乘积。在描绘的实施例中来自每个乘法器的乘积被输出到移位寄存器(例如,移位器)以基于它的所确定指数(例如,乘积的指数)和最大指数(例如,乘积的最大指数)来移位(例如,移动)每个乘积。在此示例中,来自输入向量的对应(例如,在向量中具有相同元素位置的)元素的一对指数(例如,将拐点向量A和B的具有(经排序的)索引0的两个元素的指数作为一对源发,将拐点向量A和B的具有(经排序的)索引1的两个元素的指数作为第二对源发,将拐点向量A和B的具有(经排序的)索引2的两个元素的指数作为第三对源发,等等)被相应的(例如,定点)(例如,整数)加法器加在一起以产生指数之和(例如,来自向量A和向量B的一对元素的乘积的指数)。在此示例中,指数之和(例如,此图中的n+1个和)的每一者被输入到最大指数确定器1540(例如,比较器电路)中。例如,来自向量A的具有(经排序的)索引0的元素的指数A[0]1514和来自向量B的具有(经排序的)索引0的元素的指数B[0]1516被(例如,定点)(例如,整数)加法器1538A加在一起以产生指数A[0]1514和指数B[0]1516的总和。最大指数确定器1540(例如,电路)随后将指数之和与彼此相比较以确定指数之和的最大者(例如,最大值),例如,尾数的相应乘积的指数中的最大指数。在一个实施例中,指数之和的最大者是尾数乘积的最大指数。描绘的实施例中的最大指数随后被用于相应地移位其他尾数乘积,例如,为了将其他尾数乘积对齐到最大指数。在一个实施例中,最大指数是4(例如,各自具有值2的两个指数之和),并且另一指数是3,因此其他指数的尾数乘积被移一位(例如,向左移)以将尾数乘积对齐来与最大指数具有相同的指数。在描绘的实施例中,最大指数(例如,指示最大指数的值)沿着路径1541被输出到一组移位寄存器(例如,包括移位寄存器1536)和正规化电路1550。在此示例中,每个经移位的尾数乘积被输出到相应的舍入电路中,并且经舍入的尾数乘积被输出到相应的数值转换电路(例如,2进制补码电路)中,但在第三模式中,乘积通过数值转换电路,而不被改变,例如,乘积已经处于2进制补码表示,因此它们不被进一步转换。
在一个实施例中,移位寄存器让值通过,而没有移位,例如,当最大指数(例如,两个指数之和)与(经排序的)索引位置的指数相同时,例如,其中数值转换电路1542、舍入电路1537和移位寄存器1536被用于输入向量的(经排序的)索引位置0。
在描绘的实施例中,每一对元素(例如,在相同元素位置)的经移位的尾数乘积随后被利用一组(例如,定点)(例如,整数)加法器1546全都加在一起成为单个乘积。正规化电路1550随后在此第三模式中可被用来将该单个乘积转换成基于最大指数的拐点表示。在一个实施例中,取代此模式中的完全正规化操作,电路1550将执行舍入以将来自加法器1546的总和的比特宽度减小到拐点格式的期望比特宽度以创建乘积之和电路1501的结果(例如,其中指数对于此减小没有影响并且符号已经被考虑到,因为定点表示是2进制补码)。在一个实施例中,电路1550移动非零数字的有效数字(例如,单个乘积)的最高有效位以成为非零(例如,并且根据单个乘积的移动来相应地移动最大指数值)。
累加器
可选地,电路1500包括累加器1510来累加来自乘积之和电路1501的结果。在一个实施例中,在累加器1510中使用单独的定点累加器电路1502和浮点累加器电路1504。在某些实施例中,处于第一模式中的模式控制器1506使得来自乘积之和电路1501的结果被(例如,仅)利用浮点累加器电路1504累加并且/或者处于第二模式中的模式控制器1506使得来自乘积之和电路1501的结果被(例如,仅)利用定点累加器电路1502累加。描绘的定点累加器电路1502包括(例如,定点)(例如,整数)加法器1556和定点累加器存储1558。描绘的浮点累加器电路1504包括浮点加法器1552和浮点累加器存储1554。在一个实施例中,浮点加法器1552是来自图5的浮点加法器电路500的实例。
在某些实施例中,电路1500接收(例如,从向电路1500的加速器实施例转移负载的核心接收)指示乘积之和电路1501要执行的迭代的值,例如,以将要被电路1500处理的向量(例如,具有大于N+1的元素数目)的宽度与乘积之和电路1501的硬件宽度(例如,具有最多N+1个元素的向量)解除耦合。在一个实施例中,电路1500将通过执行通知动作(例如,提出标志,使得适当的累加器存储1554或累加器存储1558被请求方实体读取)来将完成通知给请求方实体(例如,核心)。在一个实施例中,浮点累加器(例如,加法器)或定点累加器(例如,加法器)被用于累加来自电路1501的拐点结果,例如,在浮点累加器(例如,加法器)中不使用符号字段。
图16根据本公开的实施例图示了定点和浮点矩阵乘法电路1600。电路1600包括多个(例如,32个,索引为0-31)定点和浮点向量乘法电路1602并且可包括一组(例如,定点)加法器1604来允许对定点和浮点向量乘法电路的累加输出的求和。在一个实施例中,每个定点和浮点向量乘法电路是图10的定点和浮点向量乘法电路1000、图11的定点和浮点向量乘法1100、图12的定点和浮点向量乘法1200、图13A-13C的定点和浮点向量乘法1300、图14A-14C的定点和浮点向量乘法1400或者图15的定点和浮点向量乘法1500的实例。在一个实施例中,利用电路1600来进行矩阵的乘法,例如,通过广播矩阵数据的列并且单播矩阵数据的行来进行。
图17根据本公开的实施例图示了流程图1700。描绘的流程1700包括:在1702,利用至少一个开关来使电路在第一模式和第二模式之间改变,该电路包括一组乘法器并包括最大指数确定器,所述一组乘法器耦合到一组移位寄存器,所述一组移位寄存器耦合到一组数值转换电路,所述一组数值转换电路耦合到一组加法器,所述最大指数确定器耦合到所述一组移位寄存器和正规化电路;在1704,在所述第一模式中,所述一组乘法器中的每个乘法器将来自第一浮点向量和第二浮点向量的相同元素位置的尾数相乘以产生对应乘积,基于由所述最大指数确定器确定的对应乘积的指数中的最大指数利用所述一组移位寄存器来移位对应乘积以产生经移位的乘积,基于来自所述第一浮点向量和所述第二浮点向量的相同元素位置的符号比特利用所述一组数值转换电路对所述经移位的乘积执行数值转换操作以产生所述经移位的乘积的有符号表示,利用所述一组加法器将所述经移位的乘积的有符号表示相加以产生单个乘积,并且基于所述最大指数利用所述正规化电路将所述单个乘积正规化成单个浮点结果;并且在1706,在所述第二模式中,所述一组乘法器中的每个乘法器将来自第一定点向量和第二定点向量的相同元素位置的值相乘以产生对应乘积,并且利用所述一组加法器将每个对应乘积相加以产生单个定点结果。
这里的某些实施例允许了对深度学习操作的使用,其中由固定硬件宽度赋予的任何小误差不会影响深度学习操作。这里的某些实施例将操作的输入向量宽度与硬件宽度解除耦合,例如,通过包括(一个或多个)累加器,使得被迭代经过组合定点和浮点向量乘法电路的整个向量(例如,大于32个元素)不限于具有该定点和浮点向量乘法电路的最大宽度。在某些实施例中,累加器对于整个向量的最终累加将每个迭代的指数对照该操作的每个先前迭代的最大指数来进行检查。这里的某些实施例利用累加器电路中的非浮点加法器(例如,整数加法器)来将每个迭代的非浮点格式的数字相加,然后执行该数字之和到浮点格式的一次转换,例如,而不是对于每个迭代将多个浮点数字加到一起。
在一个实施例中,一种装置(例如,加速器)包括一电路,该电路包括一组乘法器并包括最大指数确定器以用于产生结果,所述一组乘法器耦合到一组移位寄存器,所述一组移位寄存器耦合到一组数值转换电路,所述一组数值转换电路耦合到一组加法器,并且所述最大指数确定器耦合到所述一组移位寄存器和正规化电路;以及至少一个开关,用于使所述电路在第一模式和第二模式之间改变,其中:在所述第一模式中,所述一组乘法器中的每个乘法器将来自第一浮点向量和第二浮点向量的相同元素位置的尾数相乘以产生对应乘积,基于由所述最大指数确定器确定的所述对应乘积的指数中的最大指数利用所述一组移位寄存器来移位所述对应乘积以产生经移位的乘积,基于来自所述第一浮点向量和所述第二浮点向量的相同元素位置的符号比特利用所述一组数值转换电路对所述经移位的乘积执行数值转换操作以产生所述经移位的乘积的有符号表示,利用所述一组加法器将所述经移位的乘积的有符号表示相加以产生单个乘积,并且基于所述最大指数利用所述正规化电路将所述单个乘积正规化为单个浮点结果,并且在所述第二模式中,所述一组乘法器中的每个乘法器将来自第一定点向量和第二定点向量的相同元素位置的值相乘以产生对应乘积,并且利用所述一组加法器将每个对应乘积相加以产生单个定点结果。所述装置可包括累加器电路,该累加器电路包括:浮点加法器电路,该浮点加法器电路在所述电路处于所述第一模式中时将所述单个浮点结果加到先前生成的单个浮点结果;以及定点加法器电路,该定点加法器电路在所述电路处于所述第二模式中时将所述单个定点结果加到先前生成的单个定点结果。所述正规化电路可包括舍入电路,用于舍入所述单个乘积。所述装置可包括累加器电路,该累加器电路包括定点加法器电路,用于:当所述电路处于所述第一模式中时,将来自所述一组加法器的单个乘积加到来自所述一组加法器的先前生成的单个乘积以产生累加乘积,并且基于所述最大指数利用所述正规化电路将所述累加乘积正规化为所述单个浮点结果。所述装置可包括所述电路的第二实例,并且所述电路是所述电路的第一实例,其中当所述电路处于所述第一模式中时所述电路的第一实例在具有第一最大指数的所述第一浮点向量的第一真子集上操作并且所述电路的第二实例在具有第二最大指数的所述第二浮点向量的第二真子集上操作。所述第一最大指数和所述第二最大指数可以都是大于三的整数的倍数。所述装置可包括排序器电路,用于在利用所述一组移位寄存器移位每个对应乘积之前排序来自所述一组乘法器中的每个乘法器的对应乘积。所述装置可包括在所述一组移位寄存器和所述一组数值转换电路之间的一组舍入电路,用于舍入所述经移位的乘积。
在另一实施例中,一种方法包括利用至少一个开关来在第一模式和第二模式之间切换一电路,该电路包括一组乘法器并包括最大指数确定器,所述一组乘法器耦合到一组移位寄存器,所述一组移位寄存器耦合到一组数值转换电路,所述一组数值转换电路耦合到一组加法器,并且所述最大指数确定器耦合到所述一组移位寄存器和正规化电路;在所述第一模式中,所述一组乘法器中的每个乘法器将来自第一浮点向量和第二浮点向量的相同元素位置的尾数相乘以产生对应乘积,基于由所述最大指数确定器确定的所述对应乘积的指数中的最大指数利用所述一组移位寄存器来移位所述对应乘积以产生经移位的乘积,基于来自所述第一浮点向量和所述第二浮点向量的相同元素位置的符号比特利用所述一组数值转换电路对所述经移位的乘积执行数值转换操作以产生所述经移位的乘积的有符号表示,利用所述一组加法器将所述经移位的乘积的有符号表示相加以产生单个乘积,并且基于所述最大指数利用所述正规化电路将所述单个乘积正规化为单个浮点结果;并且在所述第二模式中,所述一组乘法器中的每个乘法器将来自第一定点向量和第二定点向量的相同元素位置的值相乘以产生对应乘积,并且利用所述一组加法器将每个对应乘积相加以产生单个定点结果。所述方法可包括:在所述电路处于所述第一模式中时利用浮点加法器电路将所述单个浮点结果加到先前生成的单个浮点结果;并且在所述电路处于所述第二模式中时利用定点加法器电路将所述单个定点结果加到先前生成的单个定点结果。所述方法可包括:利用舍入电路来舍入所述单个乘积。所述方法可包括:当所述电路处于所述第一模式中时,利用定点加法器电路将来自所述一组加法器的单个乘积加到来自所述一组加法器的先前生成的单个乘积以产生累加乘积,并且基于所述最大指数利用所述正规化电路将所述累加乘积正规化为所述单个浮点结果。该方法可包括:当所述电路处于所述第一模式中时,利用所述电路在具有第一最大指数的所述第一浮点向量的第一真子集上操作,并且利用所述电路的第二实例在具有第二最大指数的所述第二浮点向量的第二真子集上操作。所述方法可包括其中所述第一最大指数和所述第二最大指数都是大于三的整数的倍数。所述方法可包括在利用所述一组移位寄存器移位每个对应乘积之前利用排序器电路排序来自所述一组乘法器中的每个乘法器的对应乘积。所述方法可包括利用所述一组移位寄存器和所述一组数值转换电路之间的一组舍入电路来舍入所述经移位的乘积。
在另外一个实施例中,一种存储有代码的非暂态机器可读介质,所述代码当被机器执行时使得所述机器执行一种方法,该方法包括利用至少一个开关来在第一模式和第二模式之间切换一电路,该电路包括一组乘法器并包括最大指数确定器,所述一组乘法器耦合到一组移位寄存器,所述一组移位寄存器耦合到一组数值转换电路,所述一组数值转换电路耦合到一组加法器,并且所述最大指数确定器耦合到所述一组移位寄存器和正规化电路;在所述第一模式中,所述一组乘法器中的每个乘法器将来自第一浮点向量和第二浮点向量的相同元素位置的尾数相乘以产生对应乘积,基于由所述最大指数确定器确定的所述对应乘积的指数中的最大指数利用所述一组移位寄存器来移位所述对应乘积以产生经移位的乘积,基于来自所述第一浮点向量和所述第二浮点向量的相同元素位置的符号比特利用所述一组数值转换电路对所述经移位的乘积执行数值转换操作以产生所述经移位的乘积的有符号表示,利用所述一组加法器将所述经移位的乘积的有符号表示相加以产生单个乘积,并且基于所述最大指数利用所述正规化电路将所述单个乘积正规化为单个浮点结果;并且在所述第二模式中,所述一组乘法器中的每个乘法器将来自第一定点向量和第二定点向量的相同元素位置的值相乘以产生对应乘积,并且利用所述一组加法器将每个对应乘积相加以产生单个定点结果。所述方法可包括:在所述电路处于所述第一模式中时利用浮点加法器电路将所述单个浮点结果加到先前生成的单个浮点结果;并且在所述电路处于所述第二模式中时利用定点加法器电路将所述单个定点结果加到先前生成的单个定点结果。所述方法可包括:利用舍入电路来舍入所述单个乘积。所述方法可包括:当所述电路处于所述第一模式中时,利用定点加法器电路将来自所述一组加法器的单个乘积加到来自所述一组加法器的先前生成的单个乘积以产生累加乘积,并且基于所述最大指数利用所述正规化电路将所述累加乘积正规化为所述单个浮点结果。该方法可包括:当所述电路处于所述第一模式中时,利用所述电路在具有第一最大指数的所述第一浮点向量的第一真子集上操作,并且利用所述电路的第二实例在具有第二最大指数的所述第二浮点向量的第二真子集上操作。所述方法可包括其中所述第一最大指数和所述第二最大指数都是大于三的整数的倍数。所述方法可包括:在利用所述一组移位寄存器移位每个对应乘积之前利用排序器电路排序来自所述一组乘法器中的每个乘法器的对应乘积。所述方法可包括:利用所述一组移位寄存器和所述一组数值转换电路之间的一组舍入电路来舍入所述经移位的乘积。
在另一实施例中,一种装置(例如,加速器)包括一电路,该电路包括一组乘法器并包括最大指数确定器以用于产生结果,所述一组乘法器耦合到一组移位寄存器,所述一组移位寄存器耦合到一组数值转换电路,所述一组数值转换电路耦合到一组加法器,并且所述最大指数确定器耦合到所述一组移位寄存器和一正规化电路;以及用于使所述电路在第一模式和第二模式之间改变的装置,其中:在所述第一模式中,所述一组乘法器中的每个乘法器将来自第一浮点向量和第二浮点向量的相同元素位置的尾数相乘以产生对应乘积,基于由所述最大指数确定器确定的所述对应乘积的指数中的最大指数利用所述一组移位寄存器来移位所述对应乘积以产生经移位的乘积,基于来自所述第一浮点向量和所述第二浮点向量的相同元素位置的符号比特利用所述一组数值转换电路对所述经移位的乘积执行数值转换操作以产生所述经移位的乘积的有符号表示,利用所述一组加法器将所述经移位的乘积的有符号表示相加以产生单个乘积,并且基于所述最大指数利用所述正规化电路将所述单个乘积正规化为单个浮点结果,并且在所述第二模式中,所述一组乘法器中的每个乘法器将来自第一定点向量和第二定点向量的相同元素位置的值相乘以产生对应乘积,并且利用所述一组加法器将每个对应乘积相加以产生单个定点结果。
在另外一个实施例中,一种装置包括存储有代码的数据存储装置,所述代码当被硬件处理器执行时使得所述硬件处理器执行本文公开的任何方法。一种装置可如详细描述中所描述。一种方法可如详细描述中所描述。
指令集可包括一个或多个指令格式。给定的指令格式可定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要在其上执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义为具有该指令格式的字段的不同子集(包括的字段通常是按相同顺序的,但至少一些具有不同的比特位置,因为包括的字段更少)和/或被定义为不同地解读给定的字段。从而,ISA的每个指令被利用给定的指令格式来表达(并且如果定义了的话,被以该指令格式的指令模板中的给定一个来表达)并且包括用于指定操作和操作对象的字段。例如,示范性ADD指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码并且包括操作对象字段来选择操作对象(源1/目标和源2);并且此ADD指令在指令流中的出现在选择特定操作对象的操作对象字段中将具有特定内容。被称为高级向量扩展(Advanced VectorExtensions,AVX)(AVX1和AVX2)并且使用向量扩展(Vector Extensions,VEX)编码方案的一组SIMD扩展已被发布和/或发表(例如,参见2018年5月发布的64和IA-32体系结构软件开发者指南以及参见2018年5月发布的体系结构指令集扩展编程参考)。
示范性指令格式
本文描述的(一个或多个)指令的实施例可按不同的格式实现。此外,下文详述了示范性系统、体系结构和流水线。(一个或多个)指令的实施例可被在这种系统、体系结构和流水线上执行,但不限于详述的那些。
通用向量友好指令格式
向量友好指令格式是适合于向量指令的指令格式(例如,有某些特定于向量操作的字段)。虽然描述了其中通过向量友好指令格式支持向量和标量操作两者的实施例,但替换实施例只使用向量友好指令格式的向量操作。
图18A-图18B是根据本公开的实施例图示出通用向量友好指令格式及其指令模板的框图。图18A是根据本公开的实施例图示出通用向量友好指令格式及其类别A指令模板的框图;而图18B是根据本公开的实施例图示出通用向量友好指令格式及其类别B指令模板的框图。具体而言,对于通用向量友好指令格式1800定义了类别A和类别B指令模板,这两个指令模板都包括无存储器访问1805指令模板和存储器访问1820指令模板。向量友好指令格式的上下文中的术语“通用”指的是该指令格式不被绑定到任何特定的指令集。
虽然将描述其中向量友好指令格式支持以下所列项的本公开的实施例:64字节向量操作对象长度(或大小),具有32比特(4字节)或64比特(8字节)数据元素宽度(或大小)(从而,64字节向量由16个双字大小元素或者8个四字大小元素构成);64字节向量操作对象长度(或大小),具有16比特(2字节)或8比特(1字节)数据元素宽度(或大小);32字节向量操作对象长度(或大小),具有32比特(4字节)、64比特(8字节)、16比特(2字节)或者8比特(1字节)数据元素宽度(或大小);以及16字节向量操作对象长度(或大小),具有32比特(4字节)、64比特(8字节)、16比特(2字节)或者8比特(1字节)数据元素宽度(或大小);但替换实施例可支持具有更多、更少或不同的数据元素宽度(例如,128比特(16字节)数据元素宽度)的更多、更少和/或不同的向量操作对象大小(例如,256字节向量操作对象)。
图18A中的类别A指令模板包括:1)在无存储器访问1805指令模板内,示出了无存储器访问、完全舍入控制型操作1810指令模板和无存储器访问、数据变换型操作1815指令模板;并且2)在存储器访问1820指令模板内,示出了存储器访问、暂态1825指令模板和存储器访问、非暂态1830指令模板。图18B中的类别B指令模板包括:1)在无存储器访问1805指令模板内,示出了无存储器访问、写入掩码控制、部分舍入控制型操作1812指令模板和无存储器访问、写入掩码控制、vsize型操作1817指令模板;并且2)在存储器访问1820指令模板内,示出了存储器访问、写入掩码控制1827指令模板。
通用向量友好指令格式1800包括下面按图18A-图18B中所示的顺序列出的以下字段。
格式字段1840–此字段中的特定值(指令格式识别符值)唯一地识别向量友好指令格式,从而识别采取向量友好指令格式的指令在指令流中的出现。这样,此字段是可选的,因为它对于只具有通用向量友好指令格式的指令集是不需要的。
基本操作字段1842–其内容区分不同的基本操作。
寄存器索引字段1844–其内容直接地或者通过地址生成指定源和目标操作对象的位置,无论它们在寄存器中还是在存储器中。这些包括充分数目的比特来从PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器文件中选择N个寄存器。虽然在一个实施例中N可以是最多达三个源和一个目标寄存器,但替换实施例可支持更多或更少的源和目标寄存器(例如,可支持最多达两个源,其中这些源之一也充当目标,可支持最多达三个源,其中这些源之一也充当目标,可支持最多达两个源和一个目标)。
修饰字段1846–其内容区分通用向量指令格式中的指定存储器访问的指令与那些不指定存储器访问的指令的出现;也就是说,区分无存储器访问1805指令模板和存储器访问1820指令模板。存储器访问操作读取和/或写入到存储器层次体系(在一些情况下利用寄存器中的值指定源和/或目标地址),而非存储器访问操作不读取和/或写入存储器层次体系(例如,源和目标是寄存器)。虽然在一个实施例中这个字段也在三个不同方式之间选择来执行存储器地址计算,但替换实施例可支持更多、更少或不同的方式来执行存储器地址计算。
增强操作字段1850–其内容区分除了基本操作以外还要执行多种不同操作中的哪一种。此字段是依情境而定的。在本公开的一个实施例中,此字段被划分成类别字段1868、阿尔法字段1852和贝塔字段1854。增强操作字段1850允许了在单个指令而不是2、3或4个指令中执行共同操作群组。
缩放比例字段1860–其内容允许了缩放索引字段的内容以进行存储器地址生成(例如,对于使用2缩放比例*索引+基址的地址生成)。
位移字段1862A–其内容被用作存储器地址生成的一部分(例如,对于使用2缩放比例*索引+基址+位移的地址生成)。
位移因子字段1862B(注意将位移字段1862A并列在位移因子字段1862B的正上方表明一者或另一者被使用)-其内容被用作地址生成的一部分;其指定要被存储器访问的大小(N)缩放的位移因子–其中N是存储器访问中的字节的数目(例如,对于使用2缩放比例*索引+基址+缩放的位移的地址生成)。冗余低阶比特被忽略,并且因此,位移因子字段的内容被乘以存储器操作对象总大小(N)以便生成要被用于计算有效地址的最终位移。N的值由处理器硬件在运行时基于完整操作码字段1874(本文中稍后描述)和数据操纵字段1854C来确定。位移字段1862A和位移因子字段1862B是可选的,因为它们不被用于无存储器访问1805指令模板,和/或不同的实施例可只实现两者中的一者或者两者都不实现。
数据元素宽度字段1864–其内容区分若干个数据元素宽度中的哪一个将被使用(在一些实施例中是对于所有指令;在其他实施例中只对于指令中的一些)。此字段是可选的,因为如果只支持一个数据元素宽度和/或利用操作码的某个方面来支持数据元素宽度则不需要它。
写入掩码字段1870–其内容基于每个数据元素位置控制目标向量操作对象中的该数据元素位置是否反映基本操作和增强操作的结果。类别A指令模板支持合并-写入掩蔽,而类别B指令模板支持合并-写入掩蔽和归零-写入掩蔽两者。当合并时,向量掩码允许了目标中的任何元素集合被保护免于任何操作(由基本操作和增强操作指定)的执行期间的更新;在其他的一个实施例中,保留目标的相应的掩码比特具有0的每个元素的旧值。与之不同,归零向量掩码允许了目标中的任何元素集合在任何操作(由基本操作和增强操作指定)的执行期间被归零;在一个实施例中,目标的元素在相应的掩码比特具有0值时被设置到0。此功能的子集是控制被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不是必须要连续。从而,写入掩码字段1870允许了部分向量操作,包括加载、存储、算术、逻辑等等。虽然描述了其中写入掩码字段1870的内容选择若干个写入掩码寄存器中包含要使用的写入掩码的那一个(并且从而写入掩码字段1870的内容间接识别要执行的该掩蔽)的本公开实施例,但替换实施例作为替代或附加允许掩码写入字段1870的内容直接指定要执行的掩蔽。
即时字段1872–其内容允许对即时(immediate)的指定。此字段是可选的,因为在不支持即时的通用向量友好格式的实现方式中其不存在并且在不使用即时的指令中其不存在。
类别字段1868–其内容区分指令的不同类别。参考图18A-图18B,此字段的内容在类别A和类别B指令之间进行选择。在图18A-图18B中,圆角方形用于指示特定的值存在于一字段中(例如,图18A-图18B中分别用于类别字段1868的类别A 1868A和类别B 1868B)。
类别A的指令模板
在类别A的非存储器访问1805指令模板的情况下,阿尔法字段1852被解读为RS字段1852A,其内容区分不同的增强操作类型中的哪一个要被执行(例如,对于无存储器访问舍入型操作1810和无存储器访问数据变换型操作1815指令模板分别指定舍入1852A.1和数据变换1852A.2),而贝塔字段1854区分指定类型的操作中的哪一个要被执行。在无存储器访问1805指令模板中,缩放比例字段1860、位移字段1862A和位移缩放比例字段1862B不存在。
无存储器访问指令模板–完全舍入控制型操作
在无存储器访问完全舍入控制型操作1810指令模板中,贝塔字段1854被解读为舍入控制字段1854A,其(一个或多个)内容提供静态舍入。虽然在本公开的描述实施例中舍入控制字段1854A包括抑制所有浮点异常(suppress all floating point exceptions,SAE)字段1856和舍入操作控制字段1858,但替换实施例可支持可将这两个概念都编码到同一字段中或者可只具有这些概念/字段中的一者或另一者(例如,可只具有舍入操作控制字段1858)。
SAE字段1856–其内容区分是否禁用异常事件报告;当SAE字段1856的内容指示抑制被使能时,给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序。
舍入操作控制字段1858–其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零舍入或者朝最近舍入)。从而,舍入操作控制字段1858允许了基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段1850的内容推翻该寄存器值。
无存储器访问指令模板–数据变换型操作
在无存储器访问数据变换型操作1815指令模板中,贝塔字段1854被解读为数据变换字段1854B,其内容区分若干个数据变换中的哪一个要被执行(例如,无数据变换、调配(swizzle)、广播)。
在类别A的存储器访问1820指令模板的情况下,阿尔法字段1852被解读为逐出提示字段1852B,其内容区分要使用逐出提示中的哪一个(在图18A中,对于存储器访问暂态1825指令模板和存储器访问非暂态1830指令模板分别指定暂态1852B.1和非暂态1852B.2),而贝塔字段1854被解读为数据操纵字段1854C,其内容区分若干个数据操纵操作(也称为基元)中的哪一个要被执行(例如,无操纵;广播;源的向上转换;以及目标的向下转换)。存储器访问1820指令模板包括缩放比例字段1860,并且可选地包括位移字段1862A或者位移缩放比例字段1862B。
向量存储器指令执行从存储器的向量加载和向存储器的向量存储,带有转换支持。与常规向量指令一样,向量存储器指令以按数据元素的方式从/向存储器传送数据,其中被实际传送的元素由被选择为写入掩码的向量掩码的内容来规定。
存储器访问指令模板–暂态
暂态数据是可能很快就被再使用、快到足以受益于缓存的数据。然而,这是一个提示,并且不同的处理器可按不同的方式实现它,包括完全忽略该提示。
存储器访问指令模板–非暂态
非暂态数据是这样的数据:该数据不太可能快到足以受益于第1级缓存中的缓存地被再使用,并且应当被赋予逐出优先级。然而,这是一个提示,并且不同的处理器可按不同的方式实现它,包括完全忽略该提示。
类别B的指令模板
在类别B的指令模板的情况下,阿尔法字段1852被解读为写入掩码控制(Z)字段1852C,其内容区分由写入掩码字段1870控制的写入掩蔽应当是合并还是归零。
在类别B的非存储器访问1805指令模板的情况下,贝塔字段1854的一部分被解读为RL字段1857A,其内容区分不同的增强操作类型中的哪一个要被执行(例如,对于无存储器访问、写入掩码控制、部分舍入控制型操作1812指令模板和无存储器访问、写入掩码控制、VSIZE型操作1817指令模板分别指定舍入1857A.1和向量长度(VSIZE)1857A.2),而贝塔字段1854的其余部分区分指定类型的操作中的哪一个要被执行。在无存储器访问1805指令模板中,缩放比例字段1860、位移字段1862A和位移缩放比例字段1862B不存在。
在无存储器访问、写入掩码控制、部分舍入控制型操作1810指令模板中,贝塔字段1854的其余部分被解读为舍入操作字段1859A并且异常事件报告被禁用(给定的指令不报告任何种类的浮点异常标志并且不引发任何浮点异常处理程序)。
舍入操作控制字段1859A–正如舍入操作控制字段1858一样,其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入、向下舍入、朝零舍入或者朝最近舍入)。从而,舍入操作控制字段1859A允许了基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的本公开的一个实施例中,舍入操作控制字段1850的内容推翻该寄存器值。
在无存储器访问、写入掩码控制、VSIZE型操作1817指令模板中,贝塔字段1854的其余部分被解读为向量长度字段1859B,其内容区分要在若干个数据向量长度中的哪一个上执行(例如,128、256或512字节)。
在类别B的存储器访问1820指令模板的情况下,贝塔字段1854的一部分被解读为广播字段1857B,其内容区分是否要执行广播型数据操纵操作,而贝塔字段1854的其余部分被解读为向量长度字段1859B。存储器访问1820指令模板包括缩放比例字段1860,并且可选地包括位移字段1862A或者位移缩放比例字段1862B。
对于通用向量友好指令格式1800,完整操作码字段1874被示为包括格式字段1840、基本操作字段1842和数据元素宽度字段1864。虽然示出了其中完整操作码字段1874包括所有这些字段的一个实施例,但完整操作码字段1874在不支持所有这些字段的实施例中只包括这些字段中的一些。完整操作码字段1874提供操作代码(操作码)。
增强操作字段1850、数据元素宽度字段1864和写入掩码字段1870允许了在通用向量友好指令格式中基于每个指令来指定这些特征。
写入掩码字段和数据元素宽度字段的组合创建了类型化指令,因为它们允许基于不同的数据元素宽度来应用掩码。
在类别A和类别B内找到的各种指令模板在不同的情形中是有益的。在本公开的一些实施例中,不同的处理器或处理器内的不同核心可只支持类别A、只支持类别B或者支持两个类别。例如,打算用于通用计算的高性能通用乱序核心可只支持类别B,打算主要用于图形和/或科学(吞吐量)计算的核心可只支持类别A,并且打算用于两者的核心可支持这两者(当然,具有来自两个类别的模板和指令的某种混合、但不具有来自两个类别的所有模板和指令的核心是在本公开的范围内的)。另外,单个处理器可包括多个核心,所有这些核心都支持相同类别或者其中不同的核心支持不同的类别。例如,在具有分开的图形和通用核心的处理器中,打算主要用于图形和/或科学计算的图形核心之一可只支持类别A,而通用核心中的一个或多个可以是只支持类别B的打算用于通用计算的具有乱序执行和寄存器重命名的高性能通用核心。不具有单独的图形核心的另一处理器可包括支持类别A和类别B两者的一个或多个通用有序或乱序核心。当然,在本公开的不同实施例中,来自一个类别的特征也可被实现在另一类别中。以高级别语言编写的程序将被置于(例如,被即时编译或静态编译到)多种不同的可执行形式中,包括:1)只具有由目标处理器支持的(一个或多个)类别的指令以便执行的形式;或者2)具有利用所有类别的指令的不同组合编写的替换例程并且具有基于当前执行代码的处理器所支持的指令来选择要执行的例程的控制流程代码的形式。
示范性特定向量友好指令格式
图19是根据本公开的实施例图示出示范性特定向量友好指令格式的框图。图19示出了在如下意义上特定的特定向量友好指令格式1900:其指定字段的位置、大小、解读和顺序,以及这些字段中的一些的值。特定向量友好指令格式1900可被用于扩展x86指令集,从而字段中的一些与现有的x86指令集及其扩展(例如,AVX)中使用的那些相似或相同。此格式与带有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、MOD R/M字段、SIB字段、位移字段和即时字段保持一致。图示出了来自图19的字段所映射到的来自图18的字段。
应当理解,虽然出于说明目的在通用向量友好指令格式1800的情境中参考特定向量友好指令格式1900描述了本公开的实施例,但除非有声明,否则本公开不限于特定向量友好指令格式1900。例如,通用向量友好指令格式1800对于各种字段设想了多种可能的大小,而特定向量友好指令格式1900被示为具有特定大小的字段。作为具体示例,虽然数据元素宽度字段1864在特定向量友好指令格式1900中被示为一比特字段,但本公开不限于此(也就是说,通用向量友好指令格式1800设想了数据元素宽度字段1864的其他大小)。
通用向量友好指令格式1800包括按图19A中所示的顺序的下面列出的以下字段。
EVEX前缀(字节0-3)1902–被编码为四字节形式。
格式字段1840(EVEX字节0,比特[7:0])-第一字节(EVEX字节0)是格式字段1840并且其包含0x62(在本公开的一个实施例中用于区分向量友好指令格式的唯一值)。
第二—第四字节(EVEX字节1-3)包括提供特定能力的若干个比特字段。
REX字段1905(EVEX字节1,比特[7-5])-由EVEX.R比特字段(EVEX字节1,比特[7]–R)、EVEX.X比特字段(EVEX字节1,比特[6]–X)和1857BEX字节1,比特[5]–B)构成。EVEX.R、EVEX.X和EVEX.B比特字段提供与相应的VEX比特字段相同的功能,并且被利用反码形式来编码,即ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其他字段如本领域中已知的那样对寄存器索引的较低三个比特编码(rrr、xxx和bbb),从而Rrrr、Xxxx和Bbbb可通过添加EVEX.R、EVEX.X和EVEX.B来形成。
REX’字段1810–这是REX’字段1810的第一部分并且是用于对扩展32寄存器集合的高16或低16编码的EVEX.R’比特字段(EVEX字节1,比特[4]-R’)。在本公开的一个实施例中,此比特以及如下所示的其他比特被以比特反转格式来存储以与BOUND指令相区分(在公知的x86 32比特模式中),BOUND指令的真实操作码字节是62,但不在MOD R/M字段(下文描述)中接受MOD字段中的11的值;本公开的替换实施例不以反转格式存储这个比特和下面指示的其他比特。值1被用于对低16寄存器编码。换言之,R’Rrrr是通过组合EVEX.R’、EVEX.R和来自其他字段的其他RRR形成的。
操作码映射字段1915(EVEX字节1,比特[3:0]–mmmm)–其内容编码了暗示的主导操作码字节(0F、0F 38或0F 3)。
数据元素宽度字段1864(EVEX字节2,比特[7]–W)-由符号EVEX.W表示。EVEX.W被用于定义数据类型的粒度(大小)(32比特数据元素或64比特数据元素)。
EVEX.vvvv 1920(EVEX字节2,比特[6:3]-vvvv)-EVEX.vvvv的作用可包括以下的:1)EVEX.vvvv编码了以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)EVEX.vvvv编码了对于某些向量移位以反码形式指定的目标寄存器操作对象;或者3)EVEX.vvvv不编码任何操作对象,该字段被预留并且应当包含1111b。从而,EVEX.vvvv字段1920编码了以反转(反码)形式存储的第一源寄存器指定符的4个低阶比特。取决于指令,一额外的不同EVEX比特字段被用于将指定符大小扩展到32寄存器。
EVEX.U 1868类别字段(EVEX字节2,比特[2]-U)–如果EVEX.U=0,则其指示类别A或EVEX.U0;如果EVEX.U=1,则其指示类别B或者EVEX.U1。
前缀编码字段1925(EVEX字节2,比特[1:0]-pp)–为基本操作字段提供额外比特。除了对于采取EVEX前缀格式的传统SSE指令提供支持以外,这还具有使SIMD前缀紧缩的益处(EVEX前缀只要求2个比特,而不是要求一字节来表达SIMD前缀)。在一个实施例中,为了支持采取传统格式和采取EVEX前缀格式两者的使用SIMD前缀(66H、F2H、F3H)的传统SSE指令,这些传统SIMD前缀被编码到SIMD前缀编码字段中;并且在运行时被扩展成传统SIMD前缀,然后才被提供到解码器的PLA(因此PLA可执行这些传统指令的传统和EVEX格式两者,而无需修改)。虽然更新的指令可直接使用EVEX前缀编码字段的内容作为操作码扩展,但某些实施例为了一致性以类似的方式扩展,但允许这些传统SIMD前缀指定不同的含义。替换实施例可重设计PLA来支持2比特SIMD前缀编码,从而不要求扩展。
阿尔法字段1852(EVEX字节3,比特[7]–EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.写入掩码控制以及EVEX.N;也用α来图示)–如前所述,此字段是依情境而定的。
贝塔字段1854(EVEX字节3,比特[6:4]–SSS;也称为EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;也用βββ来图示)–如前所述,此字段是依情境而定的。
REX’字段1810–这是REX’字段的剩余部分并且是可用于对扩展32寄存器集合的高16或低16编码的EVEX.V’比特字段(EVEX字节3,比特[3]-V’)。此比特被以比特反转格式来存储。值1被用于对低16寄存器编码。换言之,V’VVVV是通过组合EVEX.V’、EVEX.vvvv形成的。
写入掩码字段1870(EVEX字节3,比特[2:0]-kkk)-其内容指定如前所述的写入掩码寄存器中的寄存器的索引。在本公开的一个实施例中,特定值EVEX.kkk=000具有暗示对于特定指令没有使用写入掩码的特殊行为(这可通过多种方式来实现,包括使用被硬连线到全一的写入掩码或者绕过掩蔽硬件的硬件)。
真实操作码字段1930(字节4)也被称为操作码字节。操作码的一部分在此字段中指定。
MOD R/M字段1940(字节5)包括MOD字段1942、Reg字段1944和R/M字段1946。如前所述,MOD字段1942的内容区分存储器访问和非存储器访问操作。Reg字段1944的作用可被总结成两个情形:编码目标寄存器操作对象或者源寄存器操作对象,或者被作为操作码扩展来对待并且不被用于编码任何指令操作对象。R/M字段1946的作用可包括以下的:编码引用存储器地址的指令操作对象,或者编码目标寄存器操作对象或源寄存器操作对象。
缩放比例、索引、基数(Scale,Index,Base,SIB)字节(字节6)-如前所述,缩放比例字段1850的内容被用于存储器地址生成。SIB.xxx1954和SIB.bbb 1956–先前已对于寄存器索引Xxxx和Bbbb提及了这些字段的内容。
位移字段1862A(字节7-10)-当MOD字段1942包含10时,字节7-10是位移字段1862A,并且其工作方式与传统32比特位移(disp32)相同并且在字节粒度上工作。
位移因子字段1862B(字节7)-当MOD字段1942包含01时,字节7是位移因子字段1862B。此字段的位置与传统x86指令集8比特位移(disp8)的相同,其在字节粒度上工作。由于disp8被符号扩展,所以其只能在-128和127字节偏移量之间寻址;就64字节缓存线而言,disp8使用8个比特,这8个比特可被设置到仅四个真正有用的值-128、-64、0和64;由于经常需要更大的范围,所以使用disp32;然而,disp32要求4个字节。与disp8和disp32不同,位移因子字段1862B是对disp8的重解读;当使用位移因子字段1862B时,实际位移由位移因子字段的内容乘以存储器操作对象访问的大小(N)来确定。这种类型的位移被称为disp8*N。这减小了平均指令长度(单个字节被用于位移,但具有大得多的范围)。这种压缩的位移是基于如下假设的:有效位移是存储器访问的粒度的倍数,并且因此,地址偏移量的冗余低阶比特不需要被编码。换言之,位移因子字段1862B代替了传统x86指令集8比特位移。从而,位移因子字段1862B被按与x86指令集8比特位移相同的方式编码(因此在ModRM/SIB编码规则中没有变化),唯一例外是disp8被超载到disp8*N。换言之,在编码规则或编码长度中没有变化,而只在硬件对位移值的解读中有变化(硬件需要按存储器操作对象的大小来缩放位移以获得按字节地址偏移量)。即时字段1872如前所述那样操作。
完整操作码字段
图19B是根据本公开的一个实施例图示出构成完整操作码字段1874的特定向量友好指令格式1900的字段的框图。具体而言,完整操作码字段1874包括格式字段1840、基本操作字段1842和数据元素宽度(W)字段1864。基本操作字段1842包括前缀编码字段1925、操作码映射字段1915和真实操作码字段1930。
寄存器索引字段
图19C是根据本公开的一个实施例图示出构成寄存器索引字段1844的特定向量友好指令格式1900的字段的框图。具体而言,寄存器索引字段1844包括REX字段1905、REX’字段1910、MODR/M.reg字段1944、MODR/M.r/m字段1946、VVVV字段1920、xxx字段1954和bbb字段1956。
增强操作字段
图19D是根据本公开的一个实施例图示出构成增强操作字段1900的特定向量友好指令格式1850的字段的框图。当类别(U)字段1868包含0时,其表示EVEX.U0(类别A 1868A);当其包含1时,其表示EVEX.U1(类别B 1868B)。当U=0并且MOD字段1942包含11时(表示无存储器访问操作),阿尔法字段1852(EVEX字节3,比特[7]–EH)被解读为rs字段1852A。当rs字段1852A包含1时(舍入1852A.1),贝塔字段1854(EVEX字节3,比特[6:4]-SSS)被解读为舍入控制字段1854A。舍入控制字段1854A包括一比特SAE字段1856和两比特舍入操作字段1858。当rs字段1852A包含0时(数据变换1852A.2),贝塔字段1854(EVEX字节3,比特[6:4]-SSS)被解读为三比特数据变换字段1854B。当U=0并且MOD字段1942包含00、01或10时(表示存储器访问操作),阿尔法字段1852(EVEX字节3,比特[7]–EH)被解读为逐出提示(eviction hint,EH)字段1852B并且贝塔字段1854(EVEX字节3,比特[6:4]-SSS)被解读为三比特数据操纵字段1854C。
当U=1时,阿尔法字段1852(EVEX字节3,比特[7]–EH)被解读为写入掩码控制(Z)字段1852C。当U=1并且MOD字段1942包含11时(表示无存储器访问操作),贝塔字段1854的一部分(EVEX字节3,比特[4]–S0)被解读为RL字段1857A;当其包含1(舍入1857A.1)时,贝塔字段1854的其余部分(EVEX字节3,比特[6-5]-S2-1)被解读为舍入操作字段1859A,而当RL字段1857A包含0(VSIZE 1857.A2)时,贝塔字段1854的其余部分(EVEX字节3,比特[6-5]-S2-1)被解读为向量长度字段1859B(EVEX字节3,比特[6-5]-L1-0)。当U=1并且MOD字段1942包含00、01或10时(表示存储器访问操作),贝塔字段1854(EVEX字节3,比特[6:4]-SSS)被解读为向量长度字段1859B(EVEX字节3,比特[6-5]-L1-0)和广播字段1857B(EVEX字节3,比特[4]-B)。
示范性寄存器体系结构
图20是根据本公开的一个实施例的寄存器体系结构2000的框图。在图示的实施例中,存在32个512比特宽的向量寄存器2010;这些寄存器被称为zmm0至zmm31。低16zmm寄存器的低阶256比特被覆盖在寄存器ymm0-16上。低16zmm寄存器的低阶128比特(ymm寄存器的低阶128比特)被覆盖在寄存器xmm0-15上。特定向量友好指令格式1900如以下表格中所示在这些覆盖的寄存器文件上操作。
换言之,向量长度字段1859B在最大长度和一个或多个其他更短长度之间做出选择,其中每个这种更短长度是前一长度的一半;并且没有向量长度字段1859B的指令模板在最大向量长度上操作。另外,在一个实施例中,特定向量友好指令格式1900的类别B指令模板在紧缩或标量单/双精度浮点数据和紧缩或标量整数数据上操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;更高阶数据元素位置或者被保持与其在该指令之前相同,或者被归零,这取决于实施例。
写入掩码寄存器2015–在图示的实施例中,有8个写入掩码寄存器(k0至k7),每个的大小是64比特。在替换实施例中,写入掩码寄存器2015的大小是16比特。如前所述,在本公开的一个实施例中,向量掩码寄存器k0可被用作写入掩码;当通常将会指示k0的编码被用于写入掩码时,其选择硬连线的写入掩码0xFFFF,实际上对于该指令禁用了写入掩蔽。
通用寄存器2025–在图示的实施例中,有十六个64比特通用寄存器,它们与现有的x86寻址模式一起被用于寻址存储器操作对象。这些寄存器被用名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8至R15来引用。
标量浮点堆栈寄存器文件(x87堆栈)2045,其上化名了MMX紧缩整数平坦寄存器文件2050–在图示的实施例中,x87堆栈是用于利用x87指令集扩展在32/64/80比特浮点数据上执行标量浮点操作的八元素堆栈;而MMX寄存器被用于在64比特紧缩整数数据上执行操作,以及为在MMX和XMM寄存器之间执行的一些操作保持操作对象。
本公开的替换实施例可使用更宽或更窄的寄存器。此外,本公开的替换实施例可使用更多、更少或不同的寄存器文件和寄存器。
示范性核心体系结构、处理器和计算机体系结构
处理器核心可按不同的方式、为了不同的目的、在不同的处理器中实现。例如,这种核心的实现方式可包括:1)打算用于通用计算的通用有序核心;2)打算用于通用计算的高性能通用乱序核心;3)主要打算用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可包括:1)包括打算用于通用计算的一个或多个通用有序核心和/或打算用于通用计算的一个或多个通用乱序核心的CPU;以及2)包括主要打算用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器导致不同的计算机系统体系结构,这些体系结构可包括:1)协处理器在与CPU分开的芯片上;2)协处理器在与CPU相同的封装中、分开的晶粒上;3)协处理器与CPU在同一晶粒上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可在同一晶粒上包括描述的CPU(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)、上述的协处理器以及额外的功能。接下来描述示范性核心体系结构,然后是对示范性处理器和计算机体系结构的描述。
示范性核心体系结构
有序和乱序核心框图
图21A是根据本公开的实施例图示出示范性有序流水线和示范性寄存器重命名、乱序发出/执行流水线两者的框图。图21B是根据本公开的实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例和示范性寄存器重命名、乱序发出/执行体系结构核心两者的框图。图21A-21B中的实线框图示了有序流水线和有序核心,而虚线框的可选添加图示了寄存器重命名、乱序发出/执行流水线和核心。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图21A中,处理器流水线2100包括取得级2102、长度解码级2104、解码级2106、分配级2108、重命名级2110、调度(也称为调遣或发出)级2112、寄存器读取/存储器读取级2114、执行级2116、写回/存储器写入级2118、异常处理级2122和提交级2124。
图21B示出了处理器核心2190包括耦合到执行引擎单元2150的前端单元2130,并且两者都耦合到存储器单元2170。核心2190可以是精简指令集计算(reduced instructionset computing,RISC)核心、复杂指令集计算(complex instruction set computing,CISC)核心、超长指令字(very long instruction word,VLIW)核心或者混合或替换核心类型。作为另外一个选项,核心2190可以是专用核心,例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purpose computing graphics processingunit,GPGPU)核心、图形核心,等等。
前端单元2130包括分支预测单元2132,其耦合到指令缓存单元2134,指令缓存单元2134耦合到指令转化后备缓冲器(translation lookaside buffer,TLB)2136,该TLB2136耦合到指令取得单元2138,该指令取得单元2138耦合到解码单元2140。解码单元2140(或者解码器或解码器单元)可对指令(例如,宏指令)解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。解码单元2140可利用各种不同的机制来实现。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(programmable logic array,PLA)、微代码只读存储器(read only memory,ROM),等等。在一个实施例中,核心2190包括微代码ROM或其他介质,其为某些宏指令存储微代码(例如,在解码单元2140中或者以其他方式在前端单元2130内)。解码单元2140耦合到执行引擎单元2150中的重命名/分配器单元2152。
执行引擎单元2150包括耦合到引退单元2152和一组一个或多个调度器单元2154的重命名/分配器单元2156。(一个或多个)调度器单元2156表示任何数目的不同调度器,包括预留站、中央指令窗口等等。(一个或多个)调度器单元2156耦合到(一个或多个)物理寄存器文件单元2158。物理寄存器文件单元2158的每一者表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针),等等。在一个实施例中,物理寄存器文件单元2158包括向量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可提供体系结构式向量寄存器、向量掩码寄存器和通用寄存器。(一个或多个)物理寄存器文件单元2158与引退单元2154重叠以例示出可用来实现寄存器重命名和乱序执行的各种方式(例如,利用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器文件;利用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器文件;利用寄存器映射和寄存器的池;等等)。引退单元2154和(一个或多个)物理寄存器文件单元2158耦合到(一个或多个)执行集群2160。(一个或多个)执行集群2160包括一组一个或多个执行单元2162和一组一个或多个存储器访问单元2164。执行单元2162可在各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)上执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可包括专用于特定功能或功能集合的若干个执行单元,但其他实施例可只包括一个执行单元或者全都执行所有功能的多个执行单元。(一个或多个)调度器单元2156、(一个或多个)物理寄存器文件单元2158和(一个或多个)执行集群2160被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线和/或存储器访问流水线,它们各自具有其自己的调度器单元、物理寄存器文件单元和/或执行集群–并且在单独的存储器访问流水线的情况下,实现了某些实施例,其中只有此流水线的执行集群具有(一个或多个)存储器访问单元2164)。还应当理解,在使用分开流水线的情况下,这些流水线中的一个或多个可以是乱序发出/执行,其余的是有序的。
存储器访问单元2164的集合耦合到存储器单元2170,存储器单元2170包括数据TLB单元2172,数据TLB单元2172耦合到数据缓存单元2174,数据缓存单元2174耦合到第2级(L2)缓存单元2176。在一个示范性实施例中,存储器访问单元2164可包括加载单元、存储地址单元和存储数据单元,其中每一者耦合到存储器单元2170中的数据TLB单元2172。指令缓存单元2134进一步耦合到存储器单元2170中的第2级(L2)缓存单元2176。L2缓存单元2176耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。
作为示例,示范性寄存器重命名、乱序发出/执行核心体系结构可实现流水线2100如下:1)指令取得2138执行取得和长度解码级2102和2104;2)解码单元2140执行解码级2106;3)重命名/分配器单元2152执行分配级2108和重命名级2110;4)(一个或多个)调度器单元2156执行调度级2112;5)(一个或多个)物理寄存器文件单元2158和存储器单元2170执行寄存器读取/存储器读取级2114;执行集群2160执行执行级2116;6)存储器单元2170和(一个或多个)物理寄存器文件单元2158执行写回/存储器写入级2118;7)在异常处理级2122中可涉及各种单元;并且8)引退单元2154和(一个或多个)物理寄存器文件单元2158执行提交级2124。
核心2190可支持一个或多个指令集(例如,x86指令集(带有已随着更新版本添加的一些扩展);加州森尼维耳市的MIPS技术公司的MIPS指令集;加州森尼维耳市的ARM控股公司的ARM指令集(带有可选的额外扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核心2190包括逻辑来支持紧缩数据指令集扩展(例如,AVX1、AVX2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。
应当理解,核心可支持多线程处理(执行操作或线程的两个或更多个并行集合),并且可按多种方式来支持多线程处理,包括时间切片式多线程处理、同时多线程处理(其中单个物理核心为该物理核心在同时进行多线程处理的每个线程提供逻辑核心),或者这些的组合(例如,时间切片式取得和解码,然后是同时多线程处理,例如像Hyper-threading技术中那样)。
虽然寄存器重命名是在乱序执行的情境中描述的,但应当理解寄存器重命名可用于有序体系结构中。虽然处理器的图示实施例还包括分开的指令和数据缓存单元2134/2174和共享的L2缓存单元2176,但替换实施例可对于指令和数据两者具有单个内部缓存,例如第1级(L1)内部缓存,或者多级别的内部缓存。在一些实施例中,系统可包括内部缓存和在核心和/或处理器外部的外部缓存的组合。或者,所有缓存都可在核心和/或处理器外部。
具体示范性有序核心体系结构
图22A-图22B图示出更具体的示范性有序核心体系结构的框图,该核心将是芯片中的若干个逻辑块(包括相同类型和/或不同类型的其他核心)之一。逻辑块通过高带宽互连网络(例如,环状网络)与某些固定功能逻辑、存储器I/O接口和其他必要I/O逻辑通信,这取决于应用。
图22A是根据本公开的实施例的单个处理器核心及其与片上互连网络2202以及与第2级(L2)缓存2204的其本地子集的连接的框图。在一个实施例中,指令解码单元2200支持具有紧缩数据指令集扩展的x86指令集。L1缓存2206允许低时延访问以将存储器缓存到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元2208和向量单元2210使用分开的寄存器集合(分别是标量寄存器2212和向量寄存器2214)并且在它们之间传送的数据被写入到存储器,然后被从第1级(L1)缓存2206读回,但本公开的替换实施例可使用不同的方案(例如,使用单个寄存器集合或者包括允许数据在两个寄存器文件之间传送而不被写入和读回的通信路径)。
L2缓存的本地子集2204是全局L2缓存的一部分,全局L2缓存被划分成单独的本地子集,每个处理器核心有一个。每个处理器核心具有到其自己的L2缓存的本地子集2204的直接访问路径。处理器核心读取的数据被存储在其L2缓存子集2204中并且可被迅速访问,与其他处理器核心访问其自己的本地L2缓存子集并行。处理器核心写入的数据被存储在其自己的L2缓存子集2204中并且在必要时被从其他子集冲刷出。环状网络确保了共享数据的一致性。环状网络是双向的,以允许诸如处理器核心、L2缓存和其他逻辑块之类的代理在芯片内与彼此通信。每个环状数据路径在每个方向上是1012比特宽的。
图22B是根据本公开的实施例的图22A中的处理器核心的一部分的扩展视图。图22B包括L1缓存2204的L1数据缓存2206A部分,以及关于向量单元2210和向量寄存器2214的更多细节。具体而言,向量单元2210是16宽向量处理单元(vector processing unit,VPU)(参见16宽ALU2228),其执行整数、单精度浮点和双精度浮点指令中的一个或多个。VPU支持利用调配单元2220调配寄存器输入,利用数值转换单元2222A-B进行的数值转换,以及利用复制单元2224对存储器输入的复制。写入掩码寄存器2226允许断言结果向量写入。
图23是根据本公开的实施例的可具有多于一个核心、可具有集成的存储器控制器并且可具有集成的图形的处理器2300的框图。图23中的实线框图示了具有单个核心2302A、系统代理2310和一组一个或多个总线控制器单元2316的处理器2300,而虚线框的可选添加图示了具有多个核心2302A-N、系统代理单元2310中的一组一个或多个集成存储器控制单元2314和专用逻辑2308的替换处理器2300。
从而,处理器2300的不同实现方式可包括:1)其中专用逻辑2308是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心)并且核心2302A-N是一个或多个通用核心(例如,通用有序核心、通用乱序核心或者两者的组合)的CPU;2)其中核心2302A-N是主要打算用于图形和/或科学(吞吐量)的大量的专用核心的协处理器;以及3)其中核心2302A-N是大量的通用有序核心的协处理器。从而,处理器2300可以是通用处理器、协处理器或专用处理器,例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核(many integrated core,MIC)协处理器(包括30或更多个核心)、嵌入式处理器,等等。处理器可实现在一个或多个芯片上。处理器2300可以是一个或多个基片的一部分和/或可利用若干个工艺技术中的任何一者实现在一个或多个基片上,这些技术例如是BiCMOS、CMOS或NMOS。
存储器层次体系可包括核心内的一级或多级缓存、一组或一个或多个共享缓存单元2306以及耦合到该组集成存储器控制器单元2314的外部存储器(未示出)。该组共享缓存单元2306可包括一个或多个中间级别缓存,例如第2级(L2)、第3级(L3)、第4级(4)或其他级别的缓存,最后一级缓存(last level cache,LLC),和/或这些的组合。虽然在一个实施例中基于环的互连单元2312互连集成图形逻辑2308、该组共享缓存单元2306和系统代理单元2310/(一个或多个)集成存储器控制器单元2314,但替换实施例也可使用任何数目的公知技术来互连这种单元。在一个实施例中,在一个或多个缓存单元2306和核心2302A-N之间维持一致性。
在一些实施例中,核心2302A-N中的一个或多个能够进行多线程处理。系统代理2310包括协调和操作核心2302A-N的那些组件。系统代理单元2310可包括例如功率控制单元(power control unit,PCU)和显示单元。PCU可以是或者可以包括调控核心2302A-N和集成图形逻辑2308的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核心2302A-N就体系结构指令集而言可以是同构的或者异构的;也就是说,核心2302A-N中的两个或更多个可能够执行同一指令集,而其他的可只能够执行该指令集的子集或者不同的指令集。
示范性计算机体系结构
图24-图27是示范性计算机体系结构的框图。本领域中已知的用于膝上型计算机、桌面型计算机、手持PC、个人数字助理、工程工作站、服务器、网络装置、网络集线器、交换机、嵌入式处理器、数字信号处理器(digital signal processor,DSP)、图形装置、视频游戏装置、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持装置和各种其他电子装置的其他系统设计和配置也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的许多种系统或电子装置一般是适当的。
现在参考图24,其中示出了根据本公开的一个实施例的系统2400的框图。系统2400可包括一个或多个处理器2410、2415,它们耦合到控制器中枢2420。在一个实施例中,控制器中枢2420包括图形存储器控制器中枢(graphics memory controller hub,GMCH)2490和输入/输出中枢(Input/Output Hub,IOH)2450(它们可在分开的芯片上);GMCH 2490包括与存储器2440和协处理器2445耦合的存储器和图形控制器;IOH2450将输入/输出(I/O)装置2460耦合到GMCH 2490。或者,存储器和图形控制器的一者或两者被集成在处理器内(如本文所述),存储器2440和协处理器2445直接耦合到处理器2410,并且控制器中枢2420与IOH2450在单个芯片中。存储器2440例如可包括加速模块2440A,以存储代码,该代码当被执行时使得一个或多个执行本公开的任何方法。
额外的处理器2415的可选性在图24中用虚线表示。每个处理器2410、2415可包括本文描述的处理核心中的一个或多个并且可以是处理器2300的某个版本。
存储器2440可例如是动态随机访问存储器(dynamic random access memory,DRAM)、相变存储器(phase change memory,PCM)或者两者的组合。对于至少一个实施例,控制器中枢2420经由多点分支总线(例如前端总线(frontside bus,FSB))、点到点接口(例如Quickpath Interconnect(QPI))或者类似的连接2495与(一个或多个)处理器2410、2415通信。
在一个实施例中,协处理器2445是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个实施例中,控制器中枢2420可包括集成的图形加速器。
在物理资源2410、2415之间,就包括体系结构特性、微体系结构特性、热特性、功率消耗特性等等在内的价值度量的范围而言可以有多种差异。
在一个实施例中,处理器2410执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器2410将这些协处理器指令识别为应当由附接的协处理器2445执行的类型。因此,处理器2410在协处理器总线或其他互连上向协处理器2445发出这些协处理器指令(或者表示协处理器指令的控制信号)。(一个或多个)协处理器2445接受和执行接收到的协处理器指令。
现在参考图25,其中示出了根据本公开的实施例的第一更具体示范性系统2500的框图。如图25中所示,多处理器系统2500是点到点互连系统,并且包括经由点到点互连2550耦合的第一处理器2570和第二处理器2580。处理器2570和2580的每一者可以是处理器2300的某个版本。在本公开的一个实施例中,处理器2570和2580分别是处理器2410和2415,而协处理器2538是协处理器2445。在另一实施例中,处理器2570和2580分别是处理器2410和协处理器2445。
处理器2570和2580被示为分别包括集成存储器控制器(integrated memorycontroller,IMC)单元2572和2582。处理器2570还包括点到点(P-P)接口2576和2578作为其总线控制器单元的一部分;类似地,第二处理器2580包括P-P接口2586和2588。处理器2570、2580可利用P-P接口电路2578、2588经由点到点(P-P)接口2550交换信息。如图25中所示,IMC 2572和2582将处理器耦合到各自的存储器,即存储器2532和存储器2534,存储器2532和存储器2534可以是在本地附接到各个处理器的主存储器的一部分。
处理器2570、2580可各自利用点到点接口电路2576、2594、2586、2598经由个体P-P接口2552、2554与芯片集2590交换信息。芯片集2590可以可选地经由高性能接口2539与协处理器2538交换信息。在一个实施例中,协处理器2538是专用处理器,例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享缓存(未示出)可被包括在任一处理器中,或者在两个处理器之外,但经由P-P互连与处理器连接,从而使得任一个或两个处理器的本地缓存信息在处理器被置于低功率模式中的情况下可被存储在该共享缓存中。
芯片集2590可经由接口2596耦合到第一总线2516。在一个实施例中,第一总线2516可以是外围组件互连(Peripheral Component Interconnect,PCI)总线,或者诸如快速PCI总线或另一种第三代I/O互连总线之类的总线,虽然本公开的范围不限于此。
如图25中所示,各种I/O装置2514可耦合到第一总线2516,以及将第一总线2516耦合到第二总线2520的总线桥2518。在一个实施例中,一个或多个额外的处理器2515,例如协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或者任何其他处理器,耦合到第一总线2516。在一个实施例中,第二总线2520可以是低引脚数(low pin count,LPC)总线。各种装置可耦合到第二总线2520,例如包括键盘和/或鼠标2522、通信装置2527和存储单元2528,例如盘驱动器或者其他大容量存储装置,它们在一个实施例中可包括指令/代码和数据2530。另外,音频I/O 2524可耦合到第二总线2520。注意其他体系结构是可能的。例如,取代图25的点到点体系结构,系统可实现多点分支总线或者其他这种体系结构。
现在参考图26,其中示出了根据本公开的实施例的第二更具体示范性系统2600的框图。图25和图26中的相似元素带有相似的标号,并且图25的某些方面被从图26中省略以避免模糊图26的其他方面。
图26图示出处理器2570、2580可分别包括集成存储器和I/O控制逻辑(“CL”)2572和2582。从而,CL 2572、2582包括集成存储器控制器单元并且包括I/O控制逻辑。图26图示出不仅存储器2532、2534耦合到CL 2572、2582,而且I/O装置2614也耦合到控制逻辑2572、2582。传统I/O装置2615耦合到芯片集2590。
现在参考图27,其中示出了根据本公开的实施例的SoC 2700的框图。图23中的相似元素带有相似的标号。另外,虚线框是更先进SoC上的可选特征。在图27中,(一个或多个)互连单元2702耦合到:应用处理器2710,其包括一组一个或多个核心202A-N,和(一个或多个)共享缓存单元2306;系统代理单元2310;(一个或多个)总线控制器单元2316;(一个或多个)集成存储器控制器单元2314;一组或一个或多个协处理器2720,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机访问存储器(static random accessmemory,SRAM)单元2730;直接存储器访问(direct memory access,DMA)单元2732;以及显示单元2740,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器2720包括专用处理器,例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器,等等。
本文公开的(例如,机制的)实施例可以用硬件、软件、固件或者这种实现方案的组合来实现。本公开的实施例可实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置的可编程系统上执行的计算机程序或程序代码。
程序代码,例如图25中所示的代码2530,可被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可按已知的方式被应用到一个或多个输出装置。对于本申请而言,处理系统包括任何具有处理器的系统,例如;数字信号处理器(digital signalprocessor,DSP)、微控制器、专用集成电路(application specific integrated circuit,ASIC)或者微处理器。
程序代码可以用高级过程式或面向对象的编程语言实现来与处理系统通信。如果希望,程序代码也可以用汇编或机器语言来实现。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是经编译或者解译的语言。
至少一个实施例的一个或多个方面可由存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令实现,这些代表性指令当被机器读取时使得该机器制作逻辑来执行本文描述的技术。这种被称为“IP核心”的表示可被存储在有形机器可读介质上并且被提供到各种客户或制造设施以加载到实际制作该逻辑或处理器的制作机器中。
这种机器可读存储介质可包括但不限于由机器或装置制造或形成的物品的非暂态有形布置,包括存储介质,例如硬盘,任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(compact disk read-only memory,CD-ROM)、可改写致密盘(compact diskrewritable,CD-RW)和磁光盘,半导体装置,例如只读存储器(read-only memory,ROM),随机访问存储器(random access memory,RAM),例如动态随机访问存储器(dynamic randomaccess memory,DRAM),静态随机访问存储器(static random access memory,SRAM),可擦除可编程只读存储器(erasable programmable read-only memory,EEPROM),闪速存储器,电可擦除可编程只读存储器(electrically erasable programmable read-only memory,EEPROM),相变存储器(phase change memory,PCM),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。
因此,本公开的实施例还包括非暂态有形机器可读介质,其包含指令或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计数据,例如硬件描述语言(Hardware Description Language,HDL)。这种实施例也可被称为程序产品。
仿真(包括二进制转化、代码变形等等)
在一些情况下,指令转换器可用于将指令从源指令集转换到目标指令集。例如,指令转换器可将指令转化(例如,利用静态二进制转化、包括动态编译的动态二进制转化)、变形、仿真或以其他方式转换到要被核心处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或者其组合来实现。指令转换器可以在处理器上、在处理器外或者一部分在处理器上一部分在处理器外。
图28是根据本公开的实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。在图示的实施例中,指令转换器是软件指令转换器,虽然可替换地,指令转换器可以用软件、固件、硬件或者其各种组合来实现。图28示出了高级别语言2802的程序可被利用x86编译器2804来编译以生成x86二进制代码2806,x86二进制代码2806可由具有至少一个x86指令集核心2816的处理器原生执行。具有至少一个x86指令集核心2816的处理器表示任何这样的处理器:这种处理器可通过兼容地执行或以其他方式处理(1)x86指令集核心的指令集的实质部分或者(2)针对在具有至少一个x86指令集核心的处理器上运行的应用或其他软件的目标代码版本来执行与具有至少一个x86指令集核心的处理器基本上相同的功能,以便实现与具有至少一个x86指令集核心的处理器基本上相同的结果。x86编译器2804表示可操作来生成x86二进制代码2806(例如,目标代码)的编译器,x86二进制代码2806在带有或不带有额外的链接处理的情况下可被在具有至少一个x86指令集核心的处理器2816上执行。类似地,图28示出了高级别语言2802的程序可被利用替换指令集编译器2808来编译以生成替换指令集二进制代码2810,替换指令集二进制代码2810可由没有至少一个x86指令集核心的处理器2814(例如,具有执行加州森尼维耳市的MIPS技术公司的MIPS指令集和/或执行加州森尼维耳市的ARM控股公司的ARM指令集的核心的处理器)原生执行。指令转换器2812用于将x86二进制代码2806转换成可由没有x86指令集核心的处理器2814原生执行的代码。这个转换后的代码不太可能与替换指令集二进制代码2810相同,因为能够做到这一点的指令转换器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替换指令集的指令构成。从而,指令转换器2812表示通过仿真、模拟或任何其他过程允许不具有x86指令集处理器或核心的处理器或其他电子装置执行x86二进制代码2806的软件、固件、硬件或者其组合。
Claims (25)
1.一种装置,包括:
电路,该电路包括一组乘法器并包括最大指数确定器以用于产生结果,所述一组乘法器耦合到一组移位寄存器,所述一组移位寄存器耦合到一组数值转换电路,所述一组数值转换电路耦合到一组加法器,并且所述最大指数确定器耦合到所述一组移位寄存器和正规化电路;以及
至少一个开关,用于使所述电路在第一模式和第二模式之间改变,其中:
在所述第一模式中,所述一组乘法器中的每个乘法器将来自第一浮点向量和第二浮点向量的相同元素位置的尾数相乘以产生对应乘积,基于由所述最大指数确定器确定的所述对应乘积的指数中的最大指数利用所述一组移位寄存器来移位所述对应乘积以产生经移位的乘积,基于来自所述第一浮点向量和所述第二浮点向量的相同元素位置的符号比特利用所述一组数值转换电路对所述经移位的乘积执行数值转换操作以产生所述经移位的乘积的有符号表示,利用所述一组加法器将所述经移位的乘积的有符号表示相加以产生单个乘积,并且基于所述最大指数利用所述正规化电路将所述单个乘积正规化为单个浮点结果,并且
在所述第二模式中,所述一组乘法器中的每个乘法器将来自第一整数向量和第二整数向量的相同元素位置的值相乘以产生对应乘积,并且利用所述一组加法器将每个对应乘积相加以产生单个整数结果。
2.如权利要求1所述的装置,还包括累加器电路,该累加器电路包括:
浮点加法器电路,该浮点加法器电路在所述电路处于所述第一模式中时将所述单个浮点结果加到先前生成的单个浮点结果;以及
定点加法器电路,该定点加法器电路在所述电路处于所述第二模式中时将所述单个整数结果加到先前生成的单个整数结果。
3.如权利要求1所述的装置,其中,所述正规化电路包括舍入电路,用于舍入所述单个乘积。
4.如权利要求1所述的装置,还包括累加器电路,该累加器电路包括定点加法器电路,用于:当所述电路处于所述第一模式中时,将来自所述一组加法器的单个乘积加到来自所述一组加法器的先前生成的单个乘积以产生累加乘积,并且基于所述最大指数利用所述正规化电路将所述累加乘积正规化为所述单个浮点结果。
5.如权利要求1所述的装置,还包括所述电路的第二实例,并且所述电路是所述电路的第一实例,其中,当所述电路处于所述第一模式中时,所述电路的第一实例在具有第一最大指数的所述第一浮点向量的第一真子集上操作,并且所述电路的第二实例在具有第二最大指数的所述第二浮点向量的第二真子集上操作。
6.如权利要求5所述的装置,其中,所述第一最大指数和所述第二最大指数都是大于三的整数的倍数。
7.如权利要求5所述的装置,还包括排序器电路,用于在利用所述一组移位寄存器移位每个对应乘积之前,排序来自所述一组乘法器中的每个乘法器的对应乘积。
8.如权利要求1所述的装置,还包括在所述一组移位寄存器和所述一组数值转换电路之间的一组舍入电路,用于舍入所述经移位的乘积。
9.一种方法,包括:
利用至少一个开关来将电路从第一模式切换到第二模式,该电路包括一组乘法器并包括最大指数确定器,所述一组乘法器耦合到一组移位寄存器,所述一组移位寄存器耦合到一组数值转换电路,所述一组数值转换电路耦合到一组加法器,并且所述最大指数确定器耦合到所述一组移位寄存器和正规化电路;
在所述第一模式中,所述一组乘法器中的每个乘法器将来自第一浮点向量和第二浮点向量的相同元素位置的尾数相乘以产生对应乘积,基于由所述最大指数确定器确定的所述对应乘积的指数中的最大指数利用所述一组移位寄存器来移位所述对应乘积以产生经移位的乘积,基于来自所述第一浮点向量和所述第二浮点向量的相同元素位置的符号比特利用所述一组数值转换电路对所述经移位的乘积执行数值转换操作以产生所述经移位的乘积的有符号表示,利用所述一组加法器将所述经移位的乘积的有符号表示相加以产生单个乘积,并且基于所述最大指数利用所述正规化电路将所述单个乘积正规化为单个浮点结果;并且
在所述第二模式中,所述一组乘法器中的每个乘法器将来自第一整数向量和第二整数向量的相同元素位置的值相乘以产生对应乘积,并且利用所述一组加法器将每个对应乘积相加以产生单个整数结果。
10.如权利要求9所述的方法,还包括:
在所述电路处于所述第一模式中时,利用浮点加法器电路将所述单个浮点结果加到先前生成的单个浮点结果;并且
在所述电路处于所述第二模式中时,利用定点加法器电路将所述单个整数结果加到先前生成的单个整数结果。
11.如权利要求9所述的方法,还包括:利用舍入电路来舍入所述单个乘积。
12.如权利要求9所述的方法,还包括:当所述电路处于所述第一模式中时,利用定点加法器电路将来自所述一组加法器的单个乘积加到来自所述一组加法器的先前生成的单个乘积以产生累加乘积,并且基于所述最大指数利用所述正规化电路将所述累加乘积正规化为所述单个浮点结果。
13.如权利要求9所述的方法,包括:当所述电路处于所述第一模式中时,利用所述电路在具有第一最大指数的所述第一浮点向量的第一真子集上操作,并且利用所述电路的第二实例在具有第二最大指数的所述第二浮点向量的第二真子集上操作。
14.如权利要求13所述的方法,其中,所述第一最大指数和所述第二最大指数都是大于三的整数的倍数。
15.如权利要求13所述的方法,还包括:在利用所述一组移位寄存器移位每个对应乘积之前,利用排序器电路排序来自所述一组乘法器中的每个乘法器的对应乘积。
16.如权利要求9所述的方法,还包括:利用所述一组移位寄存器和所述一组数值转换电路之间的一组舍入电路来舍入所述经移位的乘积。
17.一种存储有代码的非暂态机器可读介质,所述代码当被机器执行时使得所述机器执行一种方法,该方法包括:
利用至少一个开关来将电路从第一模式切换到第二模式,该电路包括一组乘法器并包括最大指数确定器,所述一组乘法器耦合到一组移位寄存器,所述一组移位寄存器耦合到一组数值转换电路,所述一组数值转换电路耦合到一组加法器,并且所述最大指数确定器耦合到所述一组移位寄存器和正规化电路;
在所述第一模式中,所述一组乘法器中的每个乘法器将来自第一浮点向量和第二浮点向量的相同元素位置的尾数相乘以产生对应乘积,基于由所述最大指数确定器确定的所述对应乘积的指数中的最大指数利用所述一组移位寄存器来移位所述对应乘积以产生经移位的乘积,基于来自所述第一浮点向量和所述第二浮点向量的相同元素位置的符号比特利用所述一组数值转换电路对所述经移位的乘积执行数值转换操作以产生所述经移位的乘积的有符号表示,利用所述一组加法器将所述经移位的乘积的有符号表示相加以产生单个乘积,并且基于所述最大指数利用所述正规化电路将所述单个乘积正规化为单个浮点结果;并且
在所述第二模式中,所述一组乘法器中的每个乘法器将来自第一整数向量和第二整数向量的相同元素位置的值相乘以产生对应乘积,并且利用所述一组加法器将每个对应乘积相加以产生单个整数结果。
18.如权利要求17所述的非暂态机器可读介质,还包括:
在所述电路处于所述第一模式中时,利用浮点加法器电路将所述单个浮点结果加到先前生成的单个浮点结果;并且
在所述电路处于所述第二模式中时,利用定点加法器电路将所述单个整数结果加到先前生成的单个整数结果。
19.如权利要求17所述的非暂态机器可读介质,还包括:利用舍入电路来舍入所述单个乘积。
20.如权利要求17所述的非暂态机器可读介质,还包括:当所述电路处于所述第一模式中时,利用定点加法器电路将来自所述一组加法器的单个乘积加到来自所述一组加法器的先前生成的单个乘积以产生累加乘积,并且基于所述最大指数利用所述正规化电路将所述累加乘积正规化为所述单个浮点结果。
21.如权利要求17所述的非暂态机器可读介质,包括:当所述电路处于所述第一模式中时,利用所述电路在具有第一最大指数的所述第一浮点向量的第一真子集上操作,并且利用所述电路的第二实例在具有第二最大指数的所述第二浮点向量的第二真子集上操作。
22.如权利要求21所述的非暂态机器可读介质,其中,所述第一最大指数和所述第二最大指数都是大于三的整数的倍数。
23.如权利要求21所述的非暂态机器可读介质,还包括:在利用所述一组移位寄存器移位每个对应乘积之前,利用排序器电路排序来自所述一组乘法器中的每个乘法器的对应乘积。
24.如权利要求17所述的非暂态机器可读介质,还包括:利用所述一组移位寄存器和所述一组数值转换电路之间的一组舍入电路来舍入所述经移位的乘积。
25.一种装置,包括:
电路,该电路包括一组乘法器并包括最大指数确定器以用于产生结果,所述一组乘法器耦合到一组移位寄存器,所述一组移位寄存器耦合到一组数值转换电路,所述一组数值转换电路耦合到一组加法器,并且所述最大指数确定器耦合到所述一组移位寄存器和正规化电路;以及
用于使所述电路在第一模式和第二模式之间改变的装置,其中:
在所述第一模式中,所述一组乘法器中的每个乘法器将来自第一浮点向量和第二浮点向量的相同元素位置的尾数相乘以产生对应乘积,基于由所述最大指数确定器确定的所述对应乘积的指数中的最大指数利用所述一组移位寄存器来移位所述对应乘积以产生经移位的乘积,基于来自所述第一浮点向量和所述第二浮点向量的相同元素位置的符号比特利用所述一组数值转换电路对所述经移位的乘积执行数值转换操作以产生所述经移位的乘积的有符号表示,利用所述一组加法器将所述经移位的乘积的有符号表示相加以产生单个乘积,并且基于所述最大指数利用所述正规化电路将所述单个乘积正规化为单个浮点结果,并且
在所述第二模式中,所述一组乘法器中的每个乘法器将来自第一整数向量和第二整数向量的相同元素位置的值相乘以产生对应乘积,并且利用所述一组加法器将每个对应乘积相加以产生单个整数结果。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/PL2018/000091 WO2020067908A1 (en) | 2018-09-27 | 2018-09-27 | Apparatuses and methods to accelerate matrix multiplication |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112639722A true CN112639722A (zh) | 2021-04-09 |
Family
ID=64051649
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880096937.XA Pending CN112639722A (zh) | 2018-09-27 | 2018-09-27 | 加速矩阵乘法的装置和方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20210263993A1 (zh) |
EP (1) | EP3857353B1 (zh) |
CN (1) | CN112639722A (zh) |
WO (1) | WO2020067908A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI825935B (zh) * | 2021-10-28 | 2023-12-11 | 台灣積體電路製造股份有限公司 | 用於記憶體中計算的系統、電腦實施過程以及解碼器 |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109739555B (zh) * | 2019-01-04 | 2023-06-16 | 腾讯科技(深圳)有限公司 | 包括乘累加模块的芯片、终端及控制方法 |
US10790830B1 (en) | 2019-05-20 | 2020-09-29 | Achronix Semiconductor Corporation | Fused memory and arithmetic circuit |
FR3097993B1 (fr) * | 2019-06-25 | 2021-10-22 | Kalray | Opérateur de produit scalaire de nombres à virgule flottante réalisant un arrondi correct |
US11256476B2 (en) | 2019-08-08 | 2022-02-22 | Achronix Semiconductor Corporation | Multiple mode arithmetic circuit |
US12015428B2 (en) * | 2019-11-05 | 2024-06-18 | Flex Logix Technologies, Inc. | MAC processing pipeline using filter weights having enhanced dynamic range, and methods of operating same |
US11520584B2 (en) * | 2019-12-13 | 2022-12-06 | Intel Corporation | FPGA specialist processing block for machine learning |
US20220229633A1 (en) * | 2020-01-07 | 2022-07-21 | SK Hynix Inc. | Multiplication and accumulation(mac) operator and processing-in-memory (pim) device including the mac operator |
US11663000B2 (en) | 2020-01-07 | 2023-05-30 | SK Hynix Inc. | Multiplication and accumulation(MAC) operator and processing-in-memory (PIM) device including the MAC operator |
TW202141290A (zh) | 2020-01-07 | 2021-11-01 | 韓商愛思開海力士有限公司 | 記憶體中處理(pim)系統和pim系統的操作方法 |
US12079591B2 (en) * | 2020-04-07 | 2024-09-03 | Samsung Electronics Co., Ltd. | Neural network device, method of operating the neural network device, and application processor including the neural network device |
US20210311703A1 (en) * | 2020-04-07 | 2021-10-07 | Samsung Electronics Co., Ltd. | Neural network device for neural network operation, operating method of the neural network device, and application processor including the same |
CN113553026A (zh) * | 2020-04-07 | 2021-10-26 | 三星电子株式会社 | 神经网络装置及其操作方法、应用处理器 |
US20210319079A1 (en) * | 2020-04-10 | 2021-10-14 | Samsung Electronics Co., Ltd. | Supporting floating point 16 (fp16) in dot product architecture |
US20210241025A1 (en) * | 2020-10-28 | 2021-08-05 | Beijing More Health Technology Group Co. Ltd. | Object recognition method and apparatus, and storage medium |
US20220222319A1 (en) * | 2021-01-14 | 2022-07-14 | Microsoft Technology Licensing, Llc | Compressed matrix with sparsity metadata |
US11893360B2 (en) * | 2021-02-21 | 2024-02-06 | Ceremorphic, Inc. | Process for a floating point dot product multiplier-accumulator |
US11983237B2 (en) * | 2021-02-21 | 2024-05-14 | Ceremorphic, Inc. | Floating point dot product multiplier-accumulator |
US20220405052A1 (en) * | 2021-06-21 | 2022-12-22 | Redpine Signals, Inc. | Process for Performing Floating Point Multiply-Accumulate Operations with Precision Based on Exponent Differences for Saving Power |
US20220405054A1 (en) * | 2021-06-21 | 2022-12-22 | Redpine Signals, Inc. | Process for Dual Mode Floating Point Multiplier-Accumulator with High Precision Mode for Near Zero Accumulation Results |
US12106069B2 (en) * | 2021-06-21 | 2024-10-01 | Ceremorphic, Inc. | Power saving floating point multiplier-accumulator with precision-aware accumulation |
CN114896994A (zh) * | 2022-05-20 | 2022-08-12 | 昆仑芯(北京)科技有限公司 | 运算方法、装置、芯片、电子设备及存储介质 |
US20240036826A1 (en) * | 2022-07-28 | 2024-02-01 | Avago Technologies International Sales Pte. Limited | Convolution hardware accelerator |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5953241A (en) * | 1995-08-16 | 1999-09-14 | Microunity Engeering Systems, Inc. | Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction |
US6282634B1 (en) * | 1998-05-27 | 2001-08-28 | Arm Limited | Apparatus and method for processing data having a mixed vector/scalar register file |
US6480872B1 (en) * | 1999-01-21 | 2002-11-12 | Sandcraft, Inc. | Floating-point and integer multiply-add and multiply-accumulate |
US6205462B1 (en) * | 1999-10-06 | 2001-03-20 | Cradle Technologies | Digital multiply-accumulate circuit that can operate on both integer and floating point numbers simultaneously |
US9092213B2 (en) * | 2010-09-24 | 2015-07-28 | Intel Corporation | Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation |
US8930433B2 (en) * | 2012-04-24 | 2015-01-06 | Futurewei Technologies, Inc. | Systems and methods for a floating-point multiplication and accumulation unit using a partial-product multiplier in digital signal processors |
US9405728B2 (en) * | 2013-09-05 | 2016-08-02 | Altera Corporation | Floating-point adder circuitry |
US10216479B2 (en) * | 2016-12-06 | 2019-02-26 | Arm Limited | Apparatus and method for performing arithmetic operations to accumulate floating-point numbers |
US10338919B2 (en) * | 2017-05-08 | 2019-07-02 | Nvidia Corporation | Generalized acceleration of matrix multiply accumulate operations |
US10579334B2 (en) * | 2018-05-08 | 2020-03-03 | Microsoft Technology Licensing, Llc | Block floating point computations using shared exponents |
-
2018
- 2018-09-27 EP EP18796143.8A patent/EP3857353B1/en active Active
- 2018-09-27 WO PCT/PL2018/000091 patent/WO2020067908A1/en unknown
- 2018-09-27 US US17/256,195 patent/US20210263993A1/en active Pending
- 2018-09-27 CN CN201880096937.XA patent/CN112639722A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI825935B (zh) * | 2021-10-28 | 2023-12-11 | 台灣積體電路製造股份有限公司 | 用於記憶體中計算的系統、電腦實施過程以及解碼器 |
Also Published As
Publication number | Publication date |
---|---|
US20210263993A1 (en) | 2021-08-26 |
EP3857353A1 (en) | 2021-08-04 |
EP3857353B1 (en) | 2023-09-20 |
WO2020067908A1 (en) | 2020-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3857353B1 (en) | Apparatuses and methods to accelerate matrix multiplication | |
EP3620910B1 (en) | Fp16-s7e8 mixed-precision for deep learning and other algorithms | |
US10514912B2 (en) | Vector multiplication with accumulation in large register space | |
US11068263B2 (en) | Systems and methods for performing instructions to convert to 16-bit floating-point format | |
CN112711443B (zh) | 用于执行16位浮点向量点积指令的系统和方法 | |
US10073695B2 (en) | Floating point round-off amount determination processors, methods, systems, and instructions | |
US10209986B2 (en) | Floating point rounding processors, methods, systems, and instructions | |
EP3835947A1 (en) | Apparatuses, methods, and systems for instructions to multiply floating-point values of about one | |
US10528322B2 (en) | Unified multifunction circuitry | |
US12131154B2 (en) | Systems and methods for performing instructions to convert to 16-bit floating-point format | |
EP3835948A1 (en) | Apparatuses, methods, and systems for instructions to multiply values of zero | |
US20210182068A1 (en) | Apparatuses, methods, and systems for instructions to multiply floating-point values of about zero |
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 |