CN107665126A - 用于外积累加操作的处理器和方法 - Google Patents
用于外积累加操作的处理器和方法 Download PDFInfo
- Publication number
- CN107665126A CN107665126A CN201710623655.8A CN201710623655A CN107665126A CN 107665126 A CN107665126 A CN 107665126A CN 201710623655 A CN201710623655 A CN 201710623655A CN 107665126 A CN107665126 A CN 107665126A
- Authority
- CN
- China
- Prior art keywords
- multiplier
- accumulator
- array
- operand
- data
- 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
- 238000000034 method Methods 0.000 title claims abstract description 35
- 238000009825 accumulation Methods 0.000 title claims abstract description 15
- 230000001186 cumulative effect Effects 0.000 claims abstract description 15
- 238000012545 processing Methods 0.000 claims description 19
- 238000000605 extraction Methods 0.000 claims description 11
- 230000008878 coupling Effects 0.000 claims 5
- 238000010168 coupling process Methods 0.000 claims 5
- 238000005859 coupling reaction Methods 0.000 claims 5
- 230000005611 electricity Effects 0.000 claims 1
- 239000004744 fabric Substances 0.000 claims 1
- 239000013598 vector Substances 0.000 abstract description 14
- 238000003491 array Methods 0.000 description 11
- 239000011159 matrix material Substances 0.000 description 11
- 230000006399 behavior Effects 0.000 description 10
- 238000013461 design Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 8
- 230000017105 transposition Effects 0.000 description 8
- 238000006073 displacement reaction Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 230000002829 reductive effect Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 235000013399 edible fruits Nutrition 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000003362 replicative effect Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000007935 neutral effect Effects 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000003321 amplification Effects 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 239000011324 bead Substances 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 239000013078 crystal Substances 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000011068 loading method Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000003199 nucleic acid amplification method Methods 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000011282 treatment Methods 0.000 description 1
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/52—Multiplying; Dividing
- G06F7/523—Multiplying only
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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
- 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/50—Adding; Subtracting
- G06F7/504—Adding; Subtracting in bit-serial fashion, i.e. having a single digit-handling circuit treating all denominations after each other
- G06F7/5045—Adding; Subtracting in bit-serial fashion, i.e. having a single digit-handling circuit treating all denominations after each other for multiple operands
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- 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/3828—Multigauge devices, i.e. capable of handling packed numbers without unpacking them
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Optimization (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Complex Calculations (AREA)
Abstract
公开了一种用于对需要大量乘法和累加的向量操作数执行外积和外积累加操作的处理器和方法。
Description
技术领域
本发明涉及计算机技术,并且涉及用于执行外积和外积累加操作的处理器和方法。
背景技术
通信产品需要增加的计算性能来实时处理软件中的数字信号。二十年来性能的提高已经是晶体管技术和处理器设计的改进。根据摩尔定律,晶体管计数每两年增加一倍,每个芯片从几百万至几十亿个晶体管增加一千倍。处理器设计通过架构创新提高了每个指令的峰值性能,从而在过去大约二十年中,大约每四年可以有效地将数据路径宽度从32位(例如,英特尔的奔腾)增加到1024位(例如,高通的骁龙HVX)。
数字通信通常依赖于以32位或更少的精度乘和加数据的线性算法。事实上,数字视频和无线电处理通常在16位或甚至8位数据上运行。由于数据路径宽度已经远远超出了这些数据宽度,所以通过使用各种方法对操作数和数据路径进行分区来维持基本上的峰值使用,例如在我们共同转让的美国专利5,742,840;5,794,060;5,794,061;5,809,321;以及5,822,603中广泛地处理。
这些专利描述了通过添加指令类来增强处理器利用率的系统和方法。这些指令类使用寄存器作为数据路径源,将操作数分区成指定大小的符号,并行执行操作,链接结果并将链接的结果放入寄存器中。这些专利以及其他共同转让的专利描述了使用显著并行性处理和传输数据流的优化处理器。
在早先的美国专利5,953,241中,描述了组乘法和加法操作(其中第4列),四个乘数操作数a、b、c和d中的每一个乘以四个被乘数操作数e、f、g和h中的相应一个,以产生乘积a*e、b*f、c*g、和d*h。参见例如其中的图1和图3。还描述了乘法和加法操作,其中操作数i、j、k和l与乘法的乘积相加以产生结果a*e+i、b*f+j、c*g+k和d*h+l。参见例如图2和图4。这些操作针对定点和浮点操作数进行了描述。
其他人开发了一种处理器,其中执行向量标量乘法归约。参见例如具有SIMD扩展的高通HVX架构。所述处理器允许一组四个向量操作数乘以一个标量操作数,并对四个结果进行求和。参见例如图11,取自http://www.hotchips.org/wp-content/uploads/hc_ archives/hc27/HC27.24-Monday-Epub/HC27.24.20-Multimedia-Epub/HC27.24.211- Hexagon680-Codrescu-Qualcomm.pdf。
然而,诸如5G通信、虚拟现实和神经网络的新兴应用对数字处理的需求比这些技术快好几个数量级且功率效率更高。当门宽度低于10nm时,摩尔定律正在减慢,跨越小于200个硅晶格间距。处理器设计的进步对于适应这些应用的功率性能需求变得越来越重要。
现有的处理器数据路径通常消耗总处理器功率和面积的一小部分,因此,将处理器的宽度加倍使峰值性能加倍,比将处理器核的数量加倍更有效。然而,对于寄存器宽度加倍的数量有实际的限制。寄存器复合体通常包括以高时钟速率工作的处理器的中央业务互换。这些寄存器具有许多输入和输出端口,通过旁路网络紧密耦合到多个执行单元。更广泛的执行单元必须避免瓶颈,并在目标应用上保持大部分峰值性能。这些处理器设计和方法必须能够为诸如5G通信、虚拟现实和神经网络的新兴应用所需的算法提供大部分峰值性能,同时在面积和功率方面也是高效的。
因此,需要能够使峰值性能的数量级提高,而不会使寄存器复杂度复杂化的处理器设计和方法。特别是用于此类处理器的许多实际应用,例如,机器学习和图像处理将受益于能够执行外积的处理器。在外积中,一个向量的每个元素乘以另一个向量的每个元素。例如,给定的向量U和V:
向量U和V的外积是:
发明内容
我们的发明提供了一种用于计算外积并连续累积每个产品的处理器和方法。在本发明的方法的优选实施方案中,处理器包括具有r位位宽度的寄存器文件和以行和列排列的乘法器阵列。每个乘法器都有一个与阵列相关联的累加器。为了执行向量乘法器操作数和向量被乘数操作数的外积,处理器将乘法器操作数和被乘数操作数加载到每个乘法器中,导致阵列接收乘法器操作数i中的位置[i,j]的乘法器和被乘数操作数j在每个乘法器处,执行乘法器操作数i与被乘数操作数j的第一乘法,以产生比r位宽的第一乘法结果i*j。然后将第一乘法结果提供给与该乘法器相关联的累加器,其中它被加到存储在累加器中的任何先前乘法结果。其结果是矢量乘法器操作数的每个元素与向量被乘数操作数的每个元素的乘法。当所有所需的乘法和累加完成时,结果将从数组中复制出来。
在优选实施方案中,本发明的处理器包括具有r位位宽度的寄存器文件。多个n个乘法器操作数中的每一个具有b位的位宽度,提供r位的累加宽度,其中r=n*b,并且多个n个被乘数操作数中的每一个具有b位的位宽度,还提供r位集合宽度,其中r=n*b。乘法器阵列以行和列排列,每列被耦合以接收一个乘法器操作数,并且每行被耦合以接收一个被乘数的操作数。因此,每个乘法器接收乘法器操作数和被乘数操作数。处理器中的乘法器将操作数乘以提供具有大于r位的总位宽度的多个n2个乘法结果。处理器还包括布置成行和列的相应的累加器阵列,每个累加器耦合到对应的乘法器。处理器使用累加器从每个乘法器添加顺序乘法。当所需的操作完成时,来自每个累加器的结果从阵列中移出。
本发明还包括用于阵列中的每个乘法器和累加器“分块”的实现电路,以及用于将数据加载到阵列中并将数据移出阵列的技术和电路。
附图说明
图1是具有用于计算外积的相关联的累加器的乘法器阵列的图;
图2是外积指令的图;
图3更详细地示出图1中的乘法器-累加器的一个级;
图4示出将数据传入和传出阵列;
图5示出超级分块;
图6a至图6c示出用于克服阵列中的RC延迟的技术;
图7a至图7d示出转置电路;
图8a和图8b示出输出电路;
图9示出使用阵列的卷积操作;
图10示出使用阵列的矩阵乘法操作;并且
图11示出现有技术的向量SIMD乘法操作。
具体实施方式
当执行单元结果的大小被约束时,它可以限制响应于单个指令而合理地执行的计算量。因此,算法在一系列单个指令步骤中实现,其中所有中间结果可以在约束内表示。然而,通过消除所述限制,可以开发指令集,其中算法的较大部分被实现为单个指令。如果在完成算法的较大组成部分后不需要保留这些中间结果中的至少一些,则处理器将通过不存储和检索来自通用寄存器文件的中间结果来提供改进的性能和降低的功耗。当中间结果不保留在通用寄存器文件中时,处理器指令集和实现的算法也不受通用寄存器文件大小的限制。
本发明特别涉及乘法和加法操作。例如,在图像处理和深度学习应用中,通常需要大量的乘法和加法。对于常规的处理器,这些操作不合要求地非常慢,从而限制了特定应用的有用性。这里描述的本发明能够有效地执行被称为外积累加的特定的乘法和加法模式。将外积操作应用于乘数和被乘数的结果为,每一对一维向量都是二维矩阵。外积相对于这里描述的本发明具有两个重要的性质。首先,乘数与被乘数操作数之间的所有可能的乘法在外积内执行。其次,这些结果都不是加在一起的。因此,可以按照完全并行的方式执行外积的计算。将外积结果各自连续累加以计算积和。这些积和形成了结果,即外积的累加。此时,可以进一步处理这个最终结果,例如,当将它们从外积累加阵列中读出时,对这些结果进行舍入、移位、截断或执行一元操作。
阵列结构
图1示出用于计算外积的处理器的优选实现方式。如图所示,装置10包括乘法器16的任意大的阵列15。每个乘法器16被耦合以从相关联的寄存器11和12接收乘数操作数和被乘数操作数。这些寄存器先前已经加载了来自高速缓冲存储器、外部系统存储器或其他源的向量操作数。这些寄存器被例示为分成字节宽(或其他宽度)段11a、11b……11n和12a、12b……12n(其中n是任意大的数)。每个乘法器16将接收到的操作数相乘并提供结果。例如,位置19处的乘法器将接收操作数x[i]和y[j]并将它们相乘在一起。本文将阵列中包括乘法器的每个分块称为“分块”。如下面将要描述的,每个分块有各种实施方案,以致根据处理器的具体应用来选择部分。
在还如图1所示的优选实施方案中,每个乘法器16与累加器18相关联。累加器18存储来自乘法器16的顺序乘法结果的累计和。每个累加器18因此将最终存储由其相关联的乘法器16计算的各个乘法的和。更一般地,乘法器-累加器19将操作数x[i]和y[j]相乘在一起,然后将所述结果与累加器中的先前内容相加。借助乘法和累计和,存储在累加器中的结果将明显地大于输入操作数的宽度。这将在下面进一步讨论,并且更详细地描述具有周围电路的乘法器-累加器接口。乘法器和累加器的详细电路设计是众所周知的,并且本文不进一步描述。
通常,在将操作数存储在寄存器11和12中之前,将对操作数执行数据处理操作。此外,如通过控制处理器的指令所指定的,可以对乘法-累加的结果执行进一步的操作。本文描述了典型情况,其中利用相同数量的乘法器和被乘数来计算外积,从而得到方阵列15。然而,使用本文描述的技术,也可以实现其他形状的阵列,例如矩形。
外积结果的大小大于输入操作数x[i]和y[j]。当乘以寄存器11和12中的大小为B位的两个二进制值(表示范围-2(B-1)……2(B-1)-1的有符号值或范围0……2(B-1)的无符号值)时,2B位通常需要表示积的值的范围。在方阵列中,使用N个乘数n[0]……n[N-1]和N个被乘数y[0]……y[N-1],产生具有N2个结果的外积x[i]*y[j],其中i为0……N-1,j为0……N-1。
如果B为16位,并且N为8,则乘数和被乘数为各自128位(B*N),外积将为2048位(2B*N2)。虽然乘数和被乘数可能适于支持128位操作数的寄存器文件,但外积太大而无法适应典型的寄存器文件。即使寄存器文件的大小扩展至例如1024位,其中B=16位,N可以是64,则外积可执行4096(N2)次乘法。然而,此举得到131072位的结果(2B*N2)。为了将此结果合并到1024位寄存器文件中,将需要128个寄存器,数字大于通用处理器中通常采用的最大寄存器文件。
然而,外积结果可以存储在与处理器相关联的系统存储器中-而不是与处理器相关联的寄存器。使用这种方法,本文称为“外积”的单个指令可以指定用于所述指令的操作代码以及用于乘数和被乘数操作数的寄存器文件(或系统存储器)地址。所得到的外积然后可以被存储回系统存储器中。在系统存储器中,外积可通过存储器地址和/或从寄存器文件中的寄存器指定的大小进行访问。
在替代实施方案中,向量寄存器文件和通用寄存器文件可以一起组合成单个寄存器文件。此外,B和N的值的规范可以是隐式的,因为设计可以根据乘法器的精度和寄存器文件的大小来固定这些值,或如由指令中的字段指定的可变,或由指令指定的寄存器的内容(或寄存器的内容的子字段)指定。此外,B和N的值可以被指定为操作数说明符的一部分。另外地,操作数说明符可以对结果的地址和结果的大小进行编码,或者可以根据B和N的值计算或推断出一个值。
在替代实施方案中,乘法器电路的仅单独依赖于乘数或被乘数的任何部分可以被放置在乘法器阵列的外围,以将阵列中的所述部分的副本数量从N2减少到N。
例如,为了减少将要加在一起的部分积的数量,乘法器可以使用布斯或其他编码对乘法器操作数进行编码。在这种实施方案中,操作数的单个布斯编码电路可能就足够了,因为布斯编码值可以被呈现给传输线和/或电路以到达乘法器,从而将阵列中的布斯编码电路的副本数量从N2减少到N。
虽然基数-4布斯编码组合可被计算为原始操作数的移位和补码的被乘数的倍数(-2x、-x、0、x、2x),但是替代实施方案中的一些乘法器电路可能需要计算被乘数的小倍数,如例如基数-8布斯编码,其需要计算3倍的倍数。由于外积中的N个被乘数中的每一个被传输给N个乘数,所以每个被乘数的小倍数的计算可以在每个被乘数的单个电路中完成,并且将结果传输给N个乘数,从而将阵列中的小倍数电路的副本数量从N2减少到N。
图2示出优选实施方案中的外积指令的格式。指令中的第一字段21指定将要执行的操作的操作码,例如,OuterProduct、OuterProductAdd、OuterProductExtract等,如下面进一步讨论的。字段22指定第一向量(例如,乘数)的位置,字段23指定第二向量(例如,被乘数)的位置。字段24指定用于存储结果的位置。字段25存储与其他字段结合可能需要的其他信息,例如,如本文讨论的B、F、H、K、L、M和N。注意,指令字段可以是存储器中的位置的地址、寄存器识别信息、到存储器的指针等,并且以上其他信息可以被指定为指令的一部分、源操作数的一部分或结果操作数的一部分。
通过允许单个指令的N的可接受值大于物理硬件H中的乘法器-累加器阵列15所启用的值来提供处理器的实现方式的进一步的灵活性。在这种情况下,可以在乘数和被乘数值的H-H大小部分上通过物理硬件的连续操作来执行外积操作。在这种实施方案中,提取或处理的结果可以从阵列内迅速复制到存储器系统或其高速缓存中,使得阵列内的结果的物理存储被限制为单个或少量的累加、提取或处理的结果的H-H大小部分。
在另一个实现方式中,用于外积乘法操作的源操作数被指定为指定指令操作码和两个寄存器大小的操作数的单个指令在这种情况下,来自R位寄存器文件的一个寄存器包含N个乘数,并且R位寄存器文件中的另一个寄存器包含N个被乘数,每个乘数或被乘数使用B位,其中各个值链接在一起以填充寄存器。
可替代地,可以通过较大的操作数来指定乘数和被乘数值,以填充寄存器,R=N*B。B的值可以由寄存器或指令所指定的寄存器的位字段或由操作数的一部分所指定的说明符块的位字段指定为指令部分。在本发明的其他实施方案中,指令包含将乘数和被乘数操作数格式指定为例如有符号整数、无符号整数或浮点值的位字段。可替代地,格式可以通过位字段、寄存器中的位值或通过引用存储器中的位置来指定。
对于图1所示的乘法器的布置,其中乘法器mm[i][j]19接收被乘数x[i]和乘数y[j],从而产生外积p[i][j],用于实现操作的代码的实例为:
Foreach i:=[0..N-1],j:=[0..N-1]
p[i][j]:=x[i]*y[j];
应当理解,在以上记法中,优选实施方案具有足够的资源以一次性执行所有指示的乘法;独立且并行地执行对i和j的所有值以及依赖于i和j的值的计算。可替代地,并行性可以反映物理硬件阵列大小,如上面的H-H阵列所描述的。
如上所述,对于寄存器文件来说,乘法结果通常太大。通过将外积结果存储到存储器中,积被保留为存储器映射状态。因此,处理器的正常操作是通过中断或上下文切换来更改的,外积被保留,而无需进一步的指令来复制所述值。
在诸如图像处理的应用中,期望计算外积值的和。在开始第一OuterProduct指令之后,可以使用不同的乘数和/或被乘数值来开始第二指令,然后将所述结果与先前的外积结果相加,从而产生外积值的和。我们将此指令称为“OuterProductAdd”。所述指令类似于OuterProduct,以相同的方式指定输入,并指定将结果用作加法操作的输入值。因此,所述指令计算两个外积值的和。OuterProductAdd的进一步使用可以对任意数量的外积值求和,本文将求和深度指定为D。因为两个值的和可以分别大于所述值,并且D个外积值的和可以大于每个积所需的2B位或总计2B*N2位,所以每个积和可能需要额外的log2D位,或总计log2D*N2位。为了避免溢出外积结果,可以将此类值扩展一定量,即E位,所述量也可以由OuterProduct和OuterProductAdd指令含蓄地指定(例如,将每个结果的大小加倍,从而使结果大小为4B*N2),或在指令的子字段25中、或在指令的操作数中、或在操作数之一的子字段中通过实现方式明确地确定的某些其他数量。可替代地,外积结果可能在范围内受到限制,以处理当E<log2D时溢出的可能性。
用于实现OuterProductAdd操作的代码的实例,其中将每次乘法的结果与外积a[i][j]的先前和相加,从而产生新的a[i][j]值:
Foreach i:=[0..N-1],j:=[0..N-1]
p[i][j]:=x[i]*y[j];
a[i][j]:=a[i][j]+p[i][j];
因为这些和是由连续外积形成的,所以可以在不需要地理上分开的乘法器之间的互连布线的情况下计算和。
在用于计算累计和的OuterProductAdd操作的使用之间,可以利用执行a[i][j]:=0的操作或者执行a[i][j]=x[i]*[j]作为结果的OuterProduct操作来清除累加器a[i][j]。
图3更详细地示出图1所示阵列的一个分块30。存储在寄存器11i和12j中的乘数操作数和被乘数操作数(各自长度为B位)通过总线提供给乘法器16。乘法器16将接收到的操作数相乘,并将2B位长度积提供给累加器18。如果正在执行OuterProductAdd指令,则加法器33将乘法结果与存储在累加器18中的现有和相加,并通过总线37接收到加法器33。乘法和加法产生具有2B+E位的结果。一旦所有操作完成,将最终结果“Result”提供给输出寄存器35,在所述输出寄存器35中被传送到互连阵列的总线。(多路复用器38用于从分块阵列加载和卸载数据。所述操作在下面进一步描述。)
诸如图1、图2和图3所示的OuterProduct或OuterProductAdd操作可以与结果的不同地址进行交织,从而允许外积的多个和的计算或以重叠的方式计算的其他函数。在这种实施方案中,指定的结果位置中的每一个可以映射到乘法器阵列中的一个或多个(K)不同累加器存储位置a[i][j][k],其中k是范围0……K-1中的值,从而允许这些操作以交织方式进行,而不将累加器值复制到存储器系统中或从其复制出来。类似地,跟踪外积和的多个操作数容许在处理器中的K个或更少的多个同时或交织的执行线程用于访问外积乘法器和累加器,而不需要复制累加器状态的内容。
可以跟踪操作数的K个地址,并且当OuterProduct指令(与OuterProductAdd不同)指令被执行到先前未被跟踪的操作数地址时,K个累加器位置之一被分配给所述操作数地址,例如,先前没有使用过或最近最少使用的累加器位置。此外,当对累加器中不存在的操作数执行OuterProductAdd指令时,可以分配K组中的一组累加器。在其他替代实施方案中,累加器,即K值的选择可以通过指令的子字段25中的指令、寄存器中的子字段、存储器中的指令等来指定。在本发明的另一个实施方案中,指令可以指定至少两个相关联的操作码,一个指定产生外积的操作码,第二个指定将外积与先前的结果相加,从而形成外积和的累加。在本发明的另一个实施方案中,累加器可以通过单独的OuterProductClear指令或将所述操作与其他操作(诸如下面详细描述的OuterProductExtract)组合的指令来清除,以便单独重复使用OuterProductAdd指令来计算外积和的累加。
外积的累积和的附加精度对于计算精确和是必要的,而不考虑溢出或过早舍入。然而,一旦计算了外积和,使用那些结果的许多算法就只需要结果的一部分,舍入或截断到较低的精度。在此类情况下,可以执行附加指令OuterProductExtract来提取结果的所需部分,或以比原始累加和更低的精度产生结果。可以使用如图3所示的可选附加电路39来实现此类操作。作为图3中的实例的标记为“提取”的这种电路使得分块能够执行附加处理,例如,从累加器18提取结果的一部分、对那些结果进行舍入、或如下描述的其他处理。注意,通过将其他电路放置在多路复用器之后,还可以进一步处理来自通过切换电路38提供的附近分块的结果。如果期望仅处理来自其所在的单独分块的结果,则可以将这样的其它电路39放置在累加器18与切换电路38之间。此外,这个其他电路可以沿着阵列的边缘放置而不是放置在阵列中的每个分块处。通过将电路39放置在阵列的边缘处,当数据被移出阵列时,来自累加器的数据可以被舍入、提取或以其他方式处理。这使得能够使用较少的电路39的副本并且降低阵列内的电路复杂度。
结果的特定部分的选择或通常用于提取的方法将被指定为OuterProductExtract指令中的字段,例如,字段25。由OuterProductExtract指令调用的操作也可以包括一元操作,例如反正切或双曲正切函数,或者它可以将负值映射到零值(如在ReLU-整流线性单位函数中)或其他固定值,和/或将结果转换为较低精度浮点值。
通常在使用OuterProductAdd指令计算外积和之后执行OuterProductExtract指令。在一个实施方案中,对阵列中的累加器中的每个值执行OuterProductExtract指令,并将结果放置在与输入相同的位置中,从而盖写所述输入。在替代实施方案中,OuterProductExtract指令指定用于操作的输入和输出的不同位置,其中结果的大小小于累加的外积和。在另一个实现方式中,外积和的必要状态可以被分成两部分,一个部分足够大以包含最终提取结果,另一个部分组成必要大小的剩余部分。OuterProductExtract、OuterProduct和OuterProductAdd指令然后可以指定操作数的两个部分以便访问外积和,其中结果是包含最终提取结果的操作数。如果最终提取结果是每个操作数F位(结果总计F*N2),则附加部分将至少为(2B+E-F)*N2位。在替代实施方案中,附加部分在执行OuterProductExtract指令时从存储器分配中释放,从而消除不必要地将其复制到存储器系统。如上所述,在替代实施方案中,OuterProductExtract操作可以在提取时清除累加器值,使得可以使用后续的OuterProductAdd指令来计算后续的外积和。
在本发明的其他实施方案中,乘数操作数的连续值一起被链接到更大的操作数中,并且类似地,被乘数操作数的连续值一起被链接到另一个更大的操作数中。这些链接的操作数通常将被存储在存储器系统中。当这样布置时,单个指令根据需要可以指定操作数乘数、操作数被乘数和外积结果,以及其他参数,例如B、N、F等。如上所述,指令还可以执行外积和的提取或进一步处理,从而将结果指定为经提取或经处理的外积和。经提取或经处理的外积和可能小于累加的外积和。当这样指定时,单个指令可以在多个时钟周期内运行以执行整个操作。可替代地,所述操作可以与处理器的其他操作或指令并行地执行,并且可以与利用或复制所述操作的宽操作数结果的操作同步。
在一些应用中,期望通过一个指令将外积与先前累加的外积和结果相加,其中单独指令清除外积和结果,或者将它们设置为固定值。B位乘数和B位被乘数在定点算法中单次乘法的结果需要2B位来表示,并且在外积中存在N2值。因为外积结果因此需要2B*N2位,所以这些指令不能立即将结果返回给寄存器文件中的寄存器,也不能返回给寄存器文件中的一系列寄存器。为了克服这一限制,结果可以作为附加程序状态例如通过存储在由指令指定的存储器中来维持在指令之间。之后,可以将结果复制到外积计算和累积电路附近的专用存储位置以及从其复制。
如果乘数和被乘数值超过了R位通用寄存器的大小,则寄存器的内容可以链接在一起。然后,可以执行一系列外积乘法,每次使用一系列R位被乘数值之一和一系列R位乘数值之一。如由指令指定的提取、限制、舍入、截断、归一化等可以减小结果的大小。因此,单个指令可以指定存储器内的被乘数和乘数操作数,并返回经处理的外积和结果。
在替代实施方案中,外积指令可以在指令的位字段中单独地指定这些操作数,或可以指定并入这些操作数的其他操作数,以及诸如操作数的大小和格式的其他信息。可替代地,乘数和/或被乘数值的连续或非连续部分可以选择连续的乘数和/或被乘数值。例如,乘法器的字段的选择可以在顺序的外积乘法中执行卷积操作。
对于以上几个操作,操作数可以按照交织形式呈现给阵列,也就是说,可以使用来自N个向量或矩阵值的单个元素来形成作为乘数或被乘数呈现的N元素向量。对于这些操作,将存在呈现给外积阵列的交错操作数。图4所示的转置电路可以提供这种交错。在所述电路中,N2值沿着一个维度以N路并行性例如从寄存器12时钟输入到存储阵列中,并且然后沿着正交维度以N路并行性从阵列读出到寄存器11,现在呈交错形式。所述电路的输出提供与输入呈正交维度的N个操作数。因此,它可以与外积阵列一起使用,这需要乘数和被乘数以正交维度的方式同时呈现给阵列。数据可以在被提供给阵列之前被转置,或转置电路可以嵌入在乘法器阵列内。如果被嵌入在阵列内,则乘数和被乘数值可以沿单个维度呈现,操作数之一在进入组合电路时被交织或转置。因为所述交织电路施加了延迟,所以优选地将更早地输入将要转置的操作数,从而使得乘数和被乘数操作数能够同时在乘法器电路处得到满足。
图4示出阵列15的一部分,用于例示转置输入数据,以及转出并行乘法和累加的结果。在所示阵列的部分中,阵列分块40通过数据总线耦合到周围分块41、42和43,在附图中如箭头所表示。将要在乘法中使用的数据最终将被加载到阵列中的每个分块中的乘法器中。这可以通过将数据并行地时钟输入到每行中,使得所有行中的所有分块都被数据填充来执行,或通过一次一行顺序地加载数据来执行。无论使用哪种方法,最终都将两个操作数加载到阵列中的每个分块中。
为了转置输入数据或转出结果,阵列中的每个分块(例如,分块42)优选地包括多路复用器38(参见图3),或更一般地说包括切换电路38,以便能够在连至所述分块的两条输入总线上的数据之间进行选择。在分块42的情况下,多路复用器38响应于控制信号,在接收总线44和总线45上的数据之间进行选择。当所述行中的分块正在加载数据时,多路复用器38将用于选择总线44上的数据。当期望使数据向上移位时,例如,为了将结果传送到存储器11,多路复用器38将用于选择总线45上的数据。显然,通过使用阵列的每个垂直列中的分块之间的多路复用器和垂直总线,来自阵列中的计算的所有数据最终可以被加载到存储器11中。一旦顶行(具有分块42)被填充,则所述行中的所有数据可被时钟输出到存储器11,优选并行操作,因此所述行中的所有分块中的数据被同时转出。在替代实施方案中,可以在每行的末端处提供额外的存储,例如,相对的存储器12,以允许将结果数据从阵列移出到相对侧。
物理布局考虑事项
通常,如图1所示,实现为集成电路的阵列的布局优选地具有在正交方向上分布的乘数和被乘数值,其中乘法器电路布置在单独乘数值和单独被乘数值的交叉相交处或附近。累加器电路优选地将被布置在对应的乘法器电路附近以最小化互连长度。乘法器结果可以采用进位保存加法器并以冗余形式产生积,并且累加器可以使用所述积并且也使用进位保存加法器将其以先前值相加。这种方法允许在进位保存算法中执行整个累加,从而避免长进位的传播,直到产生整个结果。如果需要,进位传播加法器可以位于累加器电路的输出端处,并且与电路组合以对结果进行舍入。例如,通过在合适的位位置处向结果添加舍入位来舍入,并且然后截断结果的低阶部分,可以使用较少的位来传递结果。在替代实施方案中,结果的低阶部分被简单地截断,而不具有舍入的益处。进位的完全传播提供了使用二进制表示的最少位来传递结果。根据应用,还可以采用电路来限制输出的最大值,以避免溢出到输出字段中。此外,如果适用于预期的应用,则可以在每个累加器处包括电路,以便以对N2并行性对结果的每个操作数执行一元操作,例如反正切函数或整流线性单位(ReLU)函数。
在适当的应用中,舍入或其他电路被提供在阵列的边缘处,例如,并入在图1中的块11和12内,其中一次从N2阵列读取N个值。以这种方式,只需要N个舍入或其他电路的副本。如果所有此类电路被移动到边缘,则累加结果(呈冗余形式)可能需要每个操作数的2*(E+2*B)位被传递到阵列的边缘,从而总共需要传递N*2*(E+B)位,正如单独接线或不同对的接线一样。根据第一种方法中的此类附加接线所需的功率和面积,可能有利的是使用进位传播加法器、舍入、限制和一元函数电路以及N2乘法器-累加器阵列中的任何者或所有的N2或N个副本。此外,可以减少接线数,在需要多于一个周期的代价下返回一组N个操作数。例如,如果仅存在N*B条接线以返回结果,则N2值仍然可以被传递,但是每组N个操作数需要B个周期,其中E<=B,并且这些值以冗余形式从累加器提供。在下面描述的卷积计算的情况下,只要6N<=FX*FY,就不会降低结果产生速率。
可替代地,可以在乘法器的输出端和/或累加器的输出端处执行部分进位传播。例如,进位可以在字节内传播,从而产生每字节产生8+e位输出,其中e是由两个或更多个字节相加在一起而产生的进位的附加位。将进位的一个字节(向左移位一位)与和的一个字节(不移位)相加可能需要2个附加位来表示和。即使如此,这10位都小于完全冗余结果所需的16位。如果结果的每个字节的接线数为8+e,则对于传递到阵列边缘的N个值,然后可以将每组N个操作数的周期次数返回到3个周期,这或多或少取决于接线数和进位传播的程度。从这个替代实施方案可以看出,不要求这些中间值以每位结果的整数接线数进行携带,并且传递一组N个操作数所需的周期数可以是很好地利用可用的接线的任何有用的数字。
当乘数和被乘数操作数与处理器的通用寄存器的大小相比较大时,例如,如果操作数在处理器中为1024位,而通用寄存器大小为128位,则本发明可以考虑在乘法器阵列中传输这些操作数所涉及的延迟。虽然上面的图示名义上假设乘数和被乘数在单个时钟周期内跨整个阵列移位,但光速传播延迟和电阻电容(RC)延迟可能会限制时钟速度。每行分块可以被认为是由RC网络组成,其中每个分块电阻地连接到相邻分块,并且每个分块在连接分块的总线上施加电容性负载。在一行中有大量分块的情况下,RC加载将对离最先供应数据的位置最远的那些分块造成不利影响。
对此一种解决方案是提供分块的子组,或对于每个分块,提供对分块组之间的信号的放大、锁存或其他处理。在图5中例示这种方法。图5示出被划分成一组N×M“超级分块”50的阵列10。每个超级分块50被分成如上所述的一组n×m个分块30。(注意,在仅包括单个分块30的超级分块50的情况下,n×m将为1。)与每个超级分块50相关联的是适当的多组锁存器、转换器、放大器、信号处理器等58,其实例在下面描述。这些电路58在将信号提供给超级分块50内的一组分块30之前,根据需要处理行和列总线上的那些信号。根据需要也可以将这种处理提供给来自每个超级分块的结果信号。
图6a、图6b和图6c示出可以被包括在图5所示的电路58内的典型信号处理。在图6a中,放大电路51设置在行总线44与超级分块50之间。可替代地,可以去除一个或多个延迟周期,以允许一些乘法器电路比其他电路更早开始运行。当到达读出累加器的结果的时间时,在从累加器到输出端的路径中增加附加管线级可补偿这些周期。可替代地,可以通过更早地读出阵列的部分来减少整个阵列的有效等待时间。如上所述,如果采用时序电路来读取具有N级并行性的阵列输出,则这有效地减少了结果的等待时间,因为阵列的剩余部分可以按照先前的结果以连续的流程读取。
图6b所示的另一种信号处理方法是为每个超级分块50提供一个寄存器53,以便在数据到达时保持数据,然后响应于稍后的时钟信号将所述数据传送到分块。图6c示出第三种方法。在那里,为了纠正等待时间并克服RC负载,寄存器被插入数据路径中以均衡到达每个超级分块处的信号的延迟。例如,超级分块50a通过三个寄存器-寄存器54、57和58来与阵列的输入侧分开。三个延迟寄存器-寄存器56和58也将输入端与超级分块50b分开。类似地,行中的第一超级分块50c与输入端之间存在三个延迟寄存器55。
可以使用解决这个问题的替代方法,其中假定在单个时钟周期中,N个值中只有G个值可以在单个周期中传输。通过这种替代设计中只有单个接收器加载传输线的事实可以增强所述距离G。为了解决这个问题,可以针对否则将在对应值之前到达的值插入附加时钟延迟。所述分配网络在到达乘法器电路时使乘数和被乘数值延迟相等量。使用上述技术的选择将取决于阵列的大小、其预期用途以及RC问题的程度。
替代分块
图7a至图7d示出在分块内提供转置电路的替代方法。乘法器和累加器(MAC)在这些图中未示出,但是对应于图3所示的乘法器和累加器。在图7a中,触发器71用于将数据定时输入和输出分块30,其中多路复用器72用于在输入数据路径与来自MAC的输出端之间进行选择。在图7b中,再次使用两个触发器71,但是其具有不同的时钟信号C1和C2以及用于选择数据路径的由信号OE控制的输出使能电路73。图7c类似于图7b,但是输入数据被提供给具有旁路总线74的下一个分块。图7d类似于图7a,但也采用旁路总线74。
图8a和图8b示出分块30的替代输出电路。在图8a中,触发器71存储来自累加器81的结果并将其提供给输出端。在图8b中,在触发器71与输出端子之间提供输出使能电路73。
卷积操作
这里描述的处理器也可以执行卷积操作。图1所示的乘法器阵列10可以在表示输入值的D维阵列与表示滤波器值的N D维阵列之间执行N次卷积,从而产生表示输入值与滤波器值的卷积的N D维阵列。可替代地,表示输入值的N D维阵列之间的N次卷积可以与表示滤波器值的D维阵列进行卷积,从而产生表示输入值与滤波器值的卷积的N D维阵列。以下参照图9讨论这些操作的实例。卷积操作的对称性进一步容许仅利用一些记号差异来交换输入值和滤波器值。如果D为2,则这些操作对应于可以表示图像的2维值。为了本说明书的目的,N滤波器值的维度由FX-FY表示,并且输入值的维度为IX-IY。如果在不扩展或限制输入阵列中的值的情况下计算完整卷积集,则结果的维度R将为如RX-RY所描述的2维阵列,其中RX=IX-FX和RY=IY-FY。可以看到需要长度为FX*FY的和,并且乘法的总量为RX*RY*FX*FY*N,它们将用N2次乘法并行计算,从而因此在RX*RY*FX*FY/N个周期中执行卷积,加上一些附加周期来从累加器复制结果。
实现所述操作的代码的实例如下:
Foreach k:=[0..RX-1],l:=[0..RY-1],m:=[0..N-1],i:=[0..FX-1],j:=[0..FY-1]
R[k,l,m]:=R[k,l,m]:=sum[I[k+i,l+j]*F[i,j,m]]
操作的内部循环(单个输入值和N个滤波器值)呈现作为从输入值的可变移位对象中选择的乘数的单个一维向量,以及从N个滤波器值中选择的被乘数操作数处的一组N个值。通过在顺序周期中在每个滤波器值上进行迭代,使用FX*FY周期来计算表示整个卷积的一部分的N2个和。具体地,在单次计算中,N2个和包括R[k,l,m],其中k的范围为k……k+N-1,(假设N<=RX),l是[0……RY-1]中的特定值,并且m范围为0……N-1:在每个周期上选择来自I阵列的N个值,并将其作为乘数X呈现给外积和阵列。假设N<IX,这些值可以是y坐标中具有为l+j的公共值的连续值,以及x坐标中的k+i……k+i+N-1的值,以便匹配i和j的特定值的滤波器值F[i,j,m],其中m范围为[0……N-1],这些滤波器值作为被乘数Y呈现给外积和阵列。
实现所述操作的代码的实例如下:
Foreach k:=[0..RX-1,by N],l:=[0..RY-1]
Foreach i:=[0..FX-1],j:=[0..FY-1]
X[n]:=I[k+i+n,l+j],n:=[0..N-1]
Y[m]:=F[I,j,m]m:=[0..N-1]
a[n,m]:=a[n,m]+X[n]*y[m],n:=[0..N-1],m:=[0..N-1]
R[k+n,l,m]:=Extract[a[n,m]],n:=[0..N-1],m:=[0..N-1]
因为在累加器中计算表示卷积的完整和,所以它们可以使用并行和顺序传送的组合从阵列中复制出来。例如,如果宽度为B*N的数据路径可用,则在每个周期上,来自N个累加器的B位可以从阵列中复制出来。正如前面已经描述的,在提取(例如通过舍入、限制和/或移位)累加和之后计算的包括E+2B位或子字段的整个和可以是从阵列中复制出来的结果。当复制整个值时,如果E<B,则3个周期将足以从阵列中复制N个值,并且对于包括整个阵列的整组N2个来说需要3N个周期。用于将结果从阵列中复制出来的电路可以与连续一组外积和的计算同时运行,并且不需要附加周期,只要3N<=FX*FY。在替代实施方案中,如果经提取的结果仅需要1个周期从阵列中复制N个值,则不需要附加周期,只要N<=FX*FY。
正如已经表明的,对于并行的N D维滤波器阵列,利用N2次乘法并行地执行卷积操作,应当明白的是,这个机制可以扩展到超过N个滤波器阵列,简单地通过选择用于第一次计算的N滤波器阵列,以及用于第二次计算的另一个N滤波器阵列等。因此,这种技术可以扩展到比N更大数量的滤波器阵列。类似地,所述技术可以扩展到除2之外的维度的阵列,诸如通过在l和j上进行迭代扩展到一维阵列,或者通过在R和F中的三维或更多个维度上进一步顺序地迭代扩展到3或更多维度。
即使RX<N,对代码的小的更改也可以使用完整阵列。因为R[k,l,m]值的计算是独立的,所以仅需要X操作数选择针对n值选择k+i+n和l+j下标的适当修改,其中k+i+n>IX,并且针对k+n>RX的值,R值输出修改k+n和l下标。
图9示出卷积操作的一个实例,其中四个不同的6点滤波器F、G、H和I跨一维时间序列运行。为了说明,仅示出了4×4外积阵列,但是阵列可以根据需要而变大。垂直平面91、92、93、94、95和96表示外积阵列的连续周期。操作数的交点(图中的小球)各自表示乘法累加操作。因此,在第一操作期间将滤波器值F5和输入值x0相乘。在后续操作期间,将滤波器值F4和值x1相乘,然后将滤波器值F3和输入值x2相乘等。延伸穿过平面61、62……66的线fy0、fy1、fy2和fy3表示对滤波器F求和。
并行地执行其他列的求和,也就是说,同时执行G滤波器的下一列gy0、gy1、gy2和gy3的求和。G、H和I滤波器的这些求和没有标记,以防止数字变得不可读。在初始加载起始4个值之后,每个周期沿X输入列只需要单个新输入。根据任何边缘处理器的存在,可以添加沿所述维度的可选移位寄存器。此外,如果需要,内部乘法器可以使用任何相邻元素移位结构来发送值。这样做只需要单个元素沿底部广播。
矩阵乘法操作
乘法器阵列可以执行N2次乘法作为矩阵到矩阵乘法的部分,其中两个输入操作数各自至少为二维阵列,并且两个操作数的至少一个维度一对一匹配。所述操作将第一操作数(D1维度阵列)与第二操作数(与DC维度相同的D2维度阵列)相乘。结果将是具有DR维度的阵列,使得DR=D1+D2-DC。对于这种操作,如果第一操作数不相同(D1-DC)的维度的积至少为N,并且第二操作数不相同(D2-DC)的维度至少为N,则阵列的利用率将为100%。这种操作通过在等于所有相同DC维度的大小的多个周期内针对结果的每个N-N子集呈现第一操作数和第二操作数的对应的全部N个值来进行,从而产生N2个积和。为了说明的目的,示出了维度为IX-IY的第一2维阵列乘以维度为FX-FY的第二2维阵列的实例,其中由IY和FX表示的单个公共维度被组合以形成外积、被描述为RX-RY的2维阵列R,其中RX=IX和RY=FY。
实现所述操作的代码的实例如下:
Foreach k:=[0..RX-1,by N],l:=[0..RY-1,by N]
Foreach i:=[0..IY-1]
X[n]:=I[k+n,i],n:=[0..N-1]
Y[m]:=F[i,l+m]m:=[0..N-1]
a[n,m]:=a[n,m]+X[n]*y[m],n:=[0..N-1],m:=[0..N-1]
R[k+n,l+m]:=Extract[a[n,m]],n:=[0..N-1],m:=[0..N-1]
操作的内部循环呈现从第一输入矩阵I中选择的作为乘数的单个一维向量,以及从第二输入矩阵F中选择的作为被乘数的一组N值。在选择向量子集时,通过在公共维度(或一般情况下的维度)上进行迭代,使用IY周期来计算表示输出矩阵R的一部分的N2个积和。
图10是示出用于矩阵乘法的阵列的用途实例的图。在所述实例中,为了简单起见,将两个4×4矩阵相乘,但是阵列的大小可以根据需要而变大。每个垂直平面101、102、103和104表示乘法器阵列的一个用途。四个这样的堆叠平面101、102、103和104是在时间上一个接一个地连续四次使用所述单元。沿着图的左侧显示从a[0][3]至a[3][3]范围内的输入被乘数操作数a[i][j],而在图的后面显示从b[0][0]至b[3][3]范围内的被乘数操作数b[i][j]。这些输入操作数是矩阵,并且图示出使用4×4乘法器阵列的4个周期的4×4矩阵乘法。
a[i][j]操作数和b[i][j]操作数的每次相交表示所述位置处的一次乘法累加操作。垂直线105表示与图7下部所示的从r[0][0]至r[3][3]范围内的结果r[i][j]的求和方向。
注意,在图10中,时间在求和中流动,因此只需输入一行输入。阵列中存在存储器,但是所述存储器可以以携带从一个周期至下一个周期的累加器结果的锁存器的形式提供。在涉及非常长的积和的神经网络处理中,有利的是逐行馈送较大的操作数,并且随着时间的推移较少数量的累加器需要存储器。
本发明的描述是为了说明和描述而呈现的。不应认为上述描述是排他性的或将本发明限制于所描述的明确形式,并且根据以上的教义进行许多修改和改变。选择和描述实施方案以解释本发明的原理及其实际应用。所述描述将使得本领域的技术人员能够在各种实施方案中以及适用于特定用途的各种修改的情况下最佳地利用和实践本发明。本发明的范围由所附权利要求书限定。
Claims (23)
1.一种用于将多个n个乘数操作数中的每一个与多个n个被乘数操作数中的每一个相乘的处理器,每个乘数操作数具有b位的位宽度,并且具有r位的总宽度,其中r=n*b,每个被乘数操作数具有b位的位宽度,并且具有r位的总宽度,其中r=n*b,所述处理器包括:
寄存器文件,其具有r位的位宽度;
以行和列布置的乘法器阵列,每列被耦合以接收一个乘数操作数,每行被耦合以接收一个被乘数操作数,由此每个乘法器接收乘数操作数和被乘数操作数并将它们相乘以提供具有大于r位的总位宽度的多个n2个乘法结果;
以行和列布置的加法器阵列,每个加法器耦合到对应的乘法器;
以行和列布置的累加器阵列,每个累加器耦合到对应的加法器;并且
其中将来自每个乘法器的乘法结果与存储在所述累加器中的任何先前的乘法结果相加,并提供给所述对应的累加器,从而提供累加结果。
2.如权利要求1所述的处理器,其中单个指令致使所述处理器执行所述操作数的乘法和所述乘法的累加。
3.如权利要求1所述的处理器,其中所述累加器保留呈冗余形式的值。
4.如权利要求1所述的处理器,其还包括输出级阵列,每个输出级耦合到所述对应的累加器,以便在从所述处理器传送所述累加结果之前存储所述累加结果。
5.如权利要求4所述的处理器,其还包括切换电路阵列,所述切换电路阵列耦合在每个累加器与其对应的输出级之间,用于控制提供给所述输出级的数据。
6.如权利要求5所述的处理器,其中所述切换电路使得来自所述阵列中的另一个累加器的数据能够被提供给所述输出级。
7.如权利要求4所述的处理器,其还包括以行和列布置的附加数据处理电路阵列,所述附加数据处理电路耦合在每个累加器与对应的输出级之间,所述附加数据处理电路用于对所述累加器中的数据执行进一步的操作。
8.如权利要求7所述的处理器,其中所述附加数据处理电路提供以下各项中的至少一项:所述累加器中的所述数据的一部分的提取、所述累加器中的所述数据的舍入、或所述累加器中的所述数据的函数应用。
9.如权利要求4所述的处理器,其还包括耦合到所述阵列的至少一个数据处理电路,当将所述数据从所述累加器转出所述阵列时,所述至少一个数据处理电路提供以下各项中的至少一项:所述累加器中的所述数据的一部分的提取、所述累加器中的所述数据的舍入、或所述累加器中的所述数据的函数应用。
10.如权利要求9所述的处理器,其中所述至少一个数据处理电路包括多个数据处理电路,每个数据处理电路耦合到所述阵列中的少于所有累加器的子集。
11.在一种用于将多个n个乘数操作数中的每一个与多个n个被乘数操作数中的每一个相乘的处理器中,每个乘数操作数具有b位的位宽度,并且具有r位的总宽度,其中r=n*b,每个被乘数操作数具有b位的位宽度,并且具有r位的总宽度,其中r=n*b,所述处理器的分块包括:
乘法器,其被耦合以接收多个n个乘数操作数之一以及多个n个被乘数操作数之一,并且将它们相乘以提供具有大于r位的位宽度的乘法结果;
加法器,其耦合到所述乘法器;以及
累加器,其耦合到所述加法器;以及
其中来自所述乘法器的所述乘法结果被提供给所述加法器,并且与存储在所述累加器中的任何先前的乘法结果相加,从而提供累加结果。
12.如权利要求11所述的分块,其还包括输出级,所述输出级耦合到所述累加器以存储所述累加结果。
13.如权利要求12所述的分块,其还包括切换电路,所述切换电路耦合在所述累加器与所述输出级之间,用于选择将要提供给所述输出级的数据。
14.如权利要求13所述的分块,其中所述切换电路使得来自另一个分块的数据能够被提供给所述输出级。
15.在具有以行和列布置的乘法器阵列、以行和列布置的累加器阵列以及以行和列布置的加法器阵列的处理器中,每个乘法器具有相关联的加法器和相关联的累加器,所述处理器包括具有r位位宽度的寄存器文件,一种执行向量乘数操作数和向量被乘数操作数的外积的方法包括:
将第一乘数操作数和第一被乘数操作数加载到所述乘法器中的每一个中,位于所述阵列中的位置[i,j]处的所述乘法器接收第一乘数操作数i和第一被乘数操作数j;
在每个乘法器处执行所述第一乘数操作数i和所述第一被乘数操作数j的相乘,以产生比r位宽的第一乘法结果i*j;以及
将所述第一乘法结果提供给所述相关联的加法器;
将所述第一乘法结果与任何先前的乘法结果相加,以将累加的乘法结果提供给所述相关联的累加器。
16.如权利要求15所述的方法,其还包括:
将第二乘数操作数和第二被乘数操作数加载到所述乘法器中的每一个中,位于所述阵列中的位置[i,j]处的所述乘法器接收第二乘数操作数i和第二被乘数操作数j;
在每个乘法器处执行所述第二乘数操作数i和所述第二被乘数操作数j的相乘,以产生比r位宽的第二乘法结果i*j;
在每个乘法器处将所述第二乘法结果提供给所述相关联的加法器;
在每个乘法器处将所述第一乘法结果从所述相关联的累加器提供给所述相关联的加法器;
将所述第二乘法结果与所述第一乘法结果相加以提供新的累加结果;以及
将所述新的累加结果存储在所述相关联的累加器中。
17.如权利要求16所述的方法,其中单个指令致使所述处理器执行所述操作数的乘法和所述乘法的累加。
18.如权利要求16所述的方法,其中所述处理器还包括输出级阵列,每个输出级耦合到相关联的累加器,并且所述方法还包括将所述新的累加结果存储在所述输出级中。
19.如权利要求16所述的方法,其还包括切换电路阵列,所述切换电路阵列耦合在每个累加器与其相关联的输出级之间,用于控制提供给所述输出级的数据。
20.如权利要求19所述的方法,其中所述切换电路使得来自所述阵列中的另一个累加器的数据能够被提供给与不同累加器相关联的所述输出级。
21.如权利要求18所述的方法,其还包括以下步骤中的至少一个:(i)所述累加器中的一部分数据的提取,(ii)所述累加器中的数据的舍入,或(iii)所述累加器中的数据的函数应用。
22.如权利要求18所述的方法,其还包括以行和列布置的附加数据处理电路阵列,所述附加数据处理电路耦合在每个累加器与每个输出级之间,所述附加数据处理电路用于对所述累加器中的数据执行进一步的操作。
23.如权利要求22所述的方法,其中所述附加数据处理电路执行以下各项中的至少一项:所述累加器中的数据的一部分的提取、所述累加器中的数据的舍入、或所述累加器中的数据的函数应用。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/224,176 | 2016-07-29 | ||
US15/224,176 US10120649B2 (en) | 2016-07-29 | 2016-07-29 | Processor and method for outer product accumulate operations |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107665126A true CN107665126A (zh) | 2018-02-06 |
Family
ID=59399358
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710623655.8A Pending CN107665126A (zh) | 2016-07-29 | 2017-07-27 | 用于外积累加操作的处理器和方法 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10120649B2 (zh) |
EP (1) | EP3276486A1 (zh) |
JP (1) | JP2018055677A (zh) |
CN (1) | CN107665126A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022143432A1 (zh) * | 2020-12-30 | 2022-07-07 | 华为技术有限公司 | 一种矩阵计算装置、方法、系统、电路、芯片及设备 |
TWI810613B (zh) * | 2018-03-14 | 2023-08-01 | 美商超捷公司 | 用於程式化深度學習人工類神經網路中的類比神經記憶體之設備 |
CN116820387A (zh) * | 2023-08-28 | 2023-09-29 | 深圳比特微电子科技有限公司 | 乘法器、乘累加电路和卷积运算单元 |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10120649B2 (en) | 2016-07-29 | 2018-11-06 | Microunity Systems Engineering, Inc. | Processor and method for outer product accumulate operations |
US10891538B2 (en) | 2016-08-11 | 2021-01-12 | Nvidia Corporation | Sparse convolutional neural network accelerator |
US10997496B2 (en) * | 2016-08-11 | 2021-05-04 | Nvidia Corporation | Sparse convolutional neural network accelerator |
KR20180034853A (ko) * | 2016-09-28 | 2018-04-05 | 에스케이하이닉스 주식회사 | 합성곱 신경망의 연산 장치 및 방법 |
US10346163B2 (en) | 2017-11-01 | 2019-07-09 | Apple Inc. | Matrix computation engine |
US10474430B2 (en) * | 2017-12-29 | 2019-11-12 | Facebook, Inc. | Mixed-precision processing elements, systems, and methods for computational models |
US11409525B2 (en) * | 2018-01-24 | 2022-08-09 | Intel Corporation | Apparatus and method for vector multiply and accumulate of packed words |
US10459876B2 (en) * | 2018-01-31 | 2019-10-29 | Amazon Technologies, Inc. | Performing concurrent operations in a processing element |
US10642620B2 (en) | 2018-04-05 | 2020-05-05 | Apple Inc. | Computation engine with strided dot product |
US10970078B2 (en) | 2018-04-05 | 2021-04-06 | Apple Inc. | Computation engine with upsize/interleave and downsize/deinterleave options |
US11216732B2 (en) * | 2018-05-31 | 2022-01-04 | Neuralmagic Inc. | Systems and methods for generation of sparse code for convolutional neural networks |
US11704543B2 (en) * | 2018-06-12 | 2023-07-18 | Samsung Electronics Co., Ltd. | Neural network hardware acceleration with stochastic adaptive resource allocation |
US10754649B2 (en) | 2018-07-24 | 2020-08-25 | Apple Inc. | Computation engine that operates in matrix and vector modes |
US10831488B1 (en) | 2018-08-20 | 2020-11-10 | Apple Inc. | Computation engine with extract instructions to minimize memory access |
US10846091B2 (en) | 2019-02-26 | 2020-11-24 | Apple Inc. | Coprocessor with distributed register |
US11429555B2 (en) | 2019-02-26 | 2022-08-30 | Apple Inc. | Coprocessors with bypass optimization, variable grid architecture, and fused vector operations |
JP7408289B2 (ja) * | 2019-03-28 | 2024-01-05 | 株式会社エヌエスアイテクス | 畳込み演算装置 |
JP7245954B2 (ja) * | 2019-07-30 | 2023-03-24 | ファルコンリー インコーポレイテッド | 大量の時系列データの滑らか且つ解像度が扱いやすいビュー |
US11281745B2 (en) | 2019-08-16 | 2022-03-22 | International Business Machines Corporation | Half-precision floating-point arrays at low overhead |
US11182458B2 (en) | 2019-12-12 | 2021-11-23 | International Business Machines Corporation | Three-dimensional lane predication for matrix operations |
JP2021152703A (ja) * | 2020-03-24 | 2021-09-30 | 株式会社東芝 | ニューラルネットワーク装置およびニューラルネットワークシステム |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4697247A (en) | 1983-06-10 | 1987-09-29 | Hughes Aircraft Company | Method of performing matrix by matrix multiplication |
US5185715A (en) | 1990-03-30 | 1993-02-09 | Hughes Aircraft Company | Data processing systems and methods for linear programming |
US5742840A (en) | 1995-08-16 | 1998-04-21 | Microunity Systems Engineering, Inc. | General purpose, multiple precision parallel operation, programmable media processor |
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 |
US7395298B2 (en) * | 1995-08-31 | 2008-07-01 | Intel Corporation | Method and apparatus for performing multiply-add operations on packed data |
US5983253A (en) | 1995-09-05 | 1999-11-09 | Intel Corporation | Computer system for performing complex digital filters |
US6571268B1 (en) * | 1998-10-06 | 2003-05-27 | Texas Instruments Incorporated | Multiplier accumulator circuits |
US7181484B2 (en) * | 2001-02-21 | 2007-02-20 | Mips Technologies, Inc. | Extended-precision accumulation of multiplier output |
US20060004902A1 (en) * | 2004-06-30 | 2006-01-05 | Siva Simanapalli | Reconfigurable circuit with programmable split adder |
US7519646B2 (en) | 2006-10-26 | 2009-04-14 | Intel Corporation | Reconfigurable SIMD vector processing system |
US8307023B1 (en) * | 2008-10-10 | 2012-11-06 | Altera Corporation | DSP block for implementing large multiplier on a programmable integrated circuit device |
US9600281B2 (en) | 2010-07-12 | 2017-03-21 | International Business Machines Corporation | Matrix multiplication operations using pair-wise load and splat operations |
US10120649B2 (en) | 2016-07-29 | 2018-11-06 | Microunity Systems Engineering, Inc. | Processor and method for outer product accumulate operations |
-
2016
- 2016-07-29 US US15/224,176 patent/US10120649B2/en not_active Expired - Fee Related
-
2017
- 2017-07-25 EP EP17183101.9A patent/EP3276486A1/en not_active Withdrawn
- 2017-07-27 JP JP2017145803A patent/JP2018055677A/ja active Pending
- 2017-07-27 CN CN201710623655.8A patent/CN107665126A/zh active Pending
-
2018
- 2018-10-02 US US16/150,224 patent/US20190065149A1/en not_active Abandoned
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI810613B (zh) * | 2018-03-14 | 2023-08-01 | 美商超捷公司 | 用於程式化深度學習人工類神經網路中的類比神經記憶體之設備 |
WO2022143432A1 (zh) * | 2020-12-30 | 2022-07-07 | 华为技术有限公司 | 一种矩阵计算装置、方法、系统、电路、芯片及设备 |
CN116820387A (zh) * | 2023-08-28 | 2023-09-29 | 深圳比特微电子科技有限公司 | 乘法器、乘累加电路和卷积运算单元 |
CN116820387B (zh) * | 2023-08-28 | 2023-12-01 | 深圳比特微电子科技有限公司 | 乘法器、乘累加电路和卷积运算单元 |
Also Published As
Publication number | Publication date |
---|---|
US20180032312A1 (en) | 2018-02-01 |
EP3276486A1 (en) | 2018-01-31 |
US10120649B2 (en) | 2018-11-06 |
US20190065149A1 (en) | 2019-02-28 |
JP2018055677A (ja) | 2018-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107665126A (zh) | 用于外积累加操作的处理器和方法 | |
CN111465924B (zh) | 用于将矩阵输入转换为矩阵处理器的向量化输入的系统和方法 | |
CN103455304B (zh) | 用于处理指令集的处理器 | |
CN111095241A (zh) | 加速数学引擎 | |
CN115271049A (zh) | 硬件中转置神经网络矩阵 | |
CN113326916A (zh) | 将卷积映射到分区通道卷积引擎 | |
JPH0863353A (ja) | 掛け算累算命令を使用したデータ処理 | |
EP3937085A1 (en) | Mapping convolution to a channel convolution engine | |
EP3798927A1 (en) | Memory organization for matrix processing | |
EP3968237A1 (en) | Grouped convolution using point-to-point connected channel convolution engines | |
US20230056304A1 (en) | Using a low-bit-width dot product engine to sum high-bit-width numbers | |
CN110244932A (zh) | 用于关联存储器中的长加法和长乘法的系统和方法 | |
Tai et al. | Accelerating matrix operations with improved deeply pipelined vector reduction | |
US6513054B1 (en) | Asynchronous parallel arithmetic processor utilizing coefficient polynomial arithmetic (CPA) | |
EP3783478B1 (en) | Mapping convolution to a matrix processor unit | |
Ipsen | Singular value decomposition with systolic arrays | |
Johnsson | Highly concurrent algorithms for solving linear systems of equations | |
CN113536216A (zh) | 用分布流水线可分离卷积运算将卷积映射到相连处理元件 | |
JP2007500388A (ja) | 長整数乗算器 | |
US11829441B2 (en) | Device and method for flexibly summing matrix values | |
WO2017095652A1 (en) | Method and system for efficient quantum ternary arithmetic | |
EP1936492A1 (en) | SIMD processor with reduction unit | |
CN115600062B (zh) | 卷积处理方法、电路、电子设备及计算机可读存储介质 | |
JP2001084242A (ja) | 可変演算プロセッサ | |
CN117786285A (zh) | 数据处理方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20180206 |
|
WD01 | Invention patent application deemed withdrawn after publication |