CN115469825A - 包括跳过电路块的计算器件和系统以及方法 - Google Patents
包括跳过电路块的计算器件和系统以及方法 Download PDFInfo
- Publication number
- CN115469825A CN115469825A CN202210829419.2A CN202210829419A CN115469825A CN 115469825 A CN115469825 A CN 115469825A CN 202210829419 A CN202210829419 A CN 202210829419A CN 115469825 A CN115469825 A CN 115469825A
- Authority
- CN
- China
- Prior art keywords
- sum
- input
- skip
- value
- product
- 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 36
- 239000013598 vector Substances 0.000 claims abstract description 192
- 238000009825 accumulation Methods 0.000 claims abstract description 31
- 238000004364 calculation method Methods 0.000 claims abstract description 13
- 230000004913 activation Effects 0.000 claims description 48
- 230000035508 accumulation Effects 0.000 claims description 30
- 238000012545 processing Methods 0.000 claims description 27
- 230000008569 process Effects 0.000 claims description 20
- 230000001186 cumulative effect Effects 0.000 claims description 9
- 230000006870 function Effects 0.000 description 51
- 241001442055 Vipera berus Species 0.000 description 22
- 238000010586 diagram Methods 0.000 description 15
- 230000001960 triggered effect Effects 0.000 description 10
- XDDAORKBJWWYJS-UHFFFAOYSA-N glyphosate Chemical compound OC(=O)CNCP(O)(O)=O XDDAORKBJWWYJS-UHFFFAOYSA-N 0.000 description 8
- 230000000295 complement effect Effects 0.000 description 4
- 230000003213 activating effect Effects 0.000 description 3
- 238000011156 evaluation Methods 0.000 description 3
- 238000010801 machine learning Methods 0.000 description 3
- 101150090997 DLAT gene Proteins 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000007423 decrease Effects 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 230000007613 environmental effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 239000002041 carbon nanotube Substances 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000001816 cooling Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 238000004020 luminiscence type Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008092 positive effect Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000002040 relaxant effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- 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/52—Multiplying; Dividing
- G06F7/523—Multiplying only
-
- 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/50—Adding; Subtracting
-
- 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/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- 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/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30069—Instruction skipping instructions, e.g. SKIP
-
- 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/30094—Condition code generation, e.g. Carry, Zero flag
-
- 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)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Databases & Information Systems (AREA)
- Algebra (AREA)
- Neurology (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Complex Calculations (AREA)
- Hardware Redundancy (AREA)
- Communication Control (AREA)
Abstract
一种包括跳过电路块的计算器件和系统以及方法,用于以按字输入和按位加权的方式对输入向量和权重向量的乘积执行部分和累加,以得到部分累加的乘积和。在每个权重位之后将部分累加的乘积和与阈值条件进行比较,当部分累加的乘积和满足阈值条件时,断言跳过指示符以指示跳过和累加的剩余计算。
Description
技术领域
本发明的实施例涉及一种包括跳过电路块的计算器件和系统以及方法。
背景技术
乘法累加器可用于以逐字逐位方式将输入数据与相应的权重数据相乘。这种操作的输出可以在人工智能网络中使用以形成节点之间的连接。在这种情况下,可以将乘法累加的输出提供给激活函数。一种这样的激活函数(activation function)是整流线性单元或ReLU激活函数。如果函数的输入小于0,则返回0,否则返回值。
发明内容
根据本发明的实施例的一个方面,提供了一种用于乘积和累加的方法,包括:以按字输入和按位加权的方式对输入向量和权重向量的乘积执行部分和累加,以得到部分累加的乘积和;将部分累加的乘积和与阈值条件进行比较;以及当部分累加的乘积和满足阈值条件时,断言跳过指示符以指示跳过和累加的剩余计算。
根据本发明的实施例的另一个方面,提供了一种包括跳过电路块的计算器件,包括:乘法累加电路块,被配置为分别将M个输入向量的组乘以M个权重向量的组的第一权重位以计算第一组M个乘积,将第一组M个乘积相加在一起以计算第一乘积和,并且在乘积和输出引脚组上提供第一乘积和;累加器电路块,包括耦合到乘积和输出引脚组的累加器输入引脚组,累加器电路块被配置为通过在累加器输入引脚组上接收第一值并将第一值加到累加器电路块中的累加值中以替换替换累加值来累加第一值,并且在累加值输出引脚组上提供累加值;跳过电路块,包括耦合到累加值输出引脚组的累积值输入引脚组,跳过电路块被配置为将累加值与阈值进行比较,并且当满足阈值时,在跳过引脚上断言跳过信号,以及控制电路块,被配置为检查跳过引脚是否有跳过信号,并且当跳过信号未被断言时:使乘法累加电路块处理M个权重向量的组的下一个权重位,并且当跳过信号被断言时:终止处理M个权重向量的组的剩余部分、断言输出就绪信号以及将累加值提供给激活电路。
根据本发明的实施例的又一个方面,提供了一种包括跳过模块的计算系统,包括:乘法累加器件,被配置为以按位加权的方式分别计算输入节点与输入中的权重向量的乘积,并对乘积中的每个求和以计算每个位的乘积和,根据每个位的位值位置对乘积和进行加权,并且将乘积和累加为累加的乘积和;跳过模块,被配置为将乘积和与阈值进行比较,并且当满足阈值时断言跳过信号;控制逻辑器件,被配置为当跳过信号未被断言时使乘法累加器件处理权重向量的下一位,并且当跳过信号被断言时使乘法累加器件中止处理权重向量的剩余部分;以及激活器件,激活器件基于累加的乘积和的值确定输入节点的卷积值。
附图说明
当结合附图进行阅读时,从以下详细描述可最佳理解本发明的各个方面。应该强调,根据工业中的标准实践,各个部件未按比例绘制并且仅用于说明的目的。实际上,为了清楚的讨论,各个部件的尺寸可以任意地增大或减小。
图1图示了根据一些实施例的通常用于处理机器学习中的图像数据的3x3卷积的示例。
图2图示了根据一些实施例的以更一般方式的图1中所示的概念。
图3图示了根据一些实施例的ReLU激活函数。
图4图示了根据一些实施例的在硬件中算法实现MAC的输入数据、权重向量和MAC的二进制表示。
图5图示了根据一些实施例的以按位方式处理输入值和权重向量的数学公式。
图6图示了根据一些实施例的输入I和权重向量W的示例运算。
图7至图12图示了根据一些实施例的跳过评估和激活部件。
图13图示了根据一些实施例的跳过评估和激活部件的过程流程图100。
图14至图17图示了根据一些实施例的MAC跳过电路的电路框图的各种视图。
图18至图22图示了根据一些实施例的MAC跳过电路的操作的各种视图。
图23A和图23B图示了根据一些实施例的向跳过模块提供阈值的流程图。
图24A、图24B和图25图示了根据一些实施例的状态机模型和信号值。
图26图示了根据一些实施例的包括MAC跳过电路的系统图。
图27图示了根据一些实施例的利用MAC跳过电路来降低能量消耗的测试数据的结果。
具体实施方式
以下公开内容提供了许多用于实现本发明的不同特征不同的实施例或实例。下面描述了组件和布置的具体实施例或实例以简化本发明。当然,这些仅是实例而不旨在限制。例如,在以下描述中,在第二部件上方或者上形成第一部件可以包括第一部件和第二部件直接接触形成的实施例,并且也可以包括在第一部件和第二部件之间可以形成附加的部件,从而使得第一部件和第二部件可以不直接接触的实施例。此外,本发明可以在各个示例中重复参考数字和/或字母。该重复是为了简单和清楚的目的,并且其本身不指示讨论的各个实施例和/或配置之间的关系。应当理解,信号可以被断言为高1或低0,并且除非上下文或约定另有说明,否则本文使用的“1”被理解为表示“断言”,并且除非上下文或约定另有说明,否则本文使用的“0”被理解为表示“未断言”。取决于器件和设计,本领域技术人员可以根据需要容易地反转这些信号。
在人工神经网络领域,机器学习获取输入数据,对输入数据进行一些运算,然后应用激活函数来处理数据。激活函数的输出本质上是输入数据的一些简化表示。输入数据可以是节点的层中的数据的节点。图1图示了通常用于处理机器学习中的图像数据的3x3卷积的示例。图像10由单独的像素11组成。可以在颜色空间中表示图像,诸如RGB(红-绿-蓝)或HSL(色调-饱和度-发光),其中为每个像素分配每个颜色空间变量的一个值。图像的节点12是3x3个块的像素,节点12中的每个像素11具有节点12的像素11的每个颜色空间变量的输入值I1-9。3x3卷积中一种可能的计算使用乘积和运算,其中每个输入值I1-9分别乘以加权矩阵14的权重值W1-9。随着每次乘法进行,可以保持运行每个乘积的总和。这种乘积和运算可以称为乘法累加计算/运算(MAC)16。MAC 16的输出被提供给激活函数18。在3x3卷积中,使用的激活函数通常是整流线性激活函数(整流线性单元或ReLU)。ReLU是输出y=max(0,x)的分段函数,其中x是MAC 16的结果。因此,所有负值都设置为0,并且非零值是输入的线性一致。
图2图示了以更一般方式(即,对于任何长度的输入节点)的图1中所示的概念。输入I0–IN-1中的每个分别乘以权重向量W0–WN-1。然后在乘积和计算(MAC)中对这些值求和,并经受ReLU激活函数。输出O是ReLU激活函数的输出。
图3图示了ReLU激活函数的图表和ReLU激活函数的分段函数表示。如图3中的图表所示,对于x≤0的所有值,y的值=0,对于x>0的所有值,y的值=x。值得注意的是,在这种情况下,如果x的值等于0,则无论使用函数的哪个段,输出是“0”(因此,如果函数被定义为y={x,x≥0|0,x<0}则输出是相等的)。可以对ReLU激活函数进行一些修改。
到目前为止,这些计算已经在一般意义上进行了讨论。例如,可以编写在一般处理器上执行的计算机程序,包括对INPUT(输入)数组和WEIGHT(权重)数组执行MAC的简易的for循环,然后传递MAC的输出给ReLU,诸如以以下逻辑:
Initialize a counter integer to 0(将计数器整数初始化为0)。
Initialize a storing variable(e.g.,MAC)to 0(初始化储存变量(例如MAC)为0)。
Provide an INPUT array having the length n with input values(提供长度为n具有输入值的输入数组)。
Provide a WEIGHT array having the length n with signed weight values.
(提供长度为n具有有符号权重值的权重数组)。
For counter=0,counter<n,counter++{
MAC=MAC+(INPUT[counter]*WEIGHT[counter])
}
Output=the maximum value of(0,MAC)(输出=(0,MAC)的最大值)。
Provide Output value(提供输出值)。
对于大型数据组,在一般处理器上执行效率低下。为了提高效率,该算法可以在专用硬件中实现,例如,在专用集成电路(ASIC)或现场可编程门阵列(FPGA)中。然而,在专用硬件(例如专用集成电路(ASIC))中实现该逻辑涉及在数字逻辑块中使用二进制运算过程。将在硬件中实现MAC(和ReLU)的背景中提供描述。在硬件中实现涉及计算MAC以及以二进制格式实现ReLU。
图4图示了在硬件中通过算法实现MAC的输入数据、权重向量和MAC的二进制表示。下面结合跳过模块更详细地讨论硬件实现。对于节点中的数据点,输入数据显示为无符号值(例如数量级)的节点。输入数据的长度为N位。例如,N可以是4位、8位、16位等。例如,如果N是8,则输入值中的每个在0和255之间。权重向量是2的补码格式的有符号权重值。因此,负数将在最高有效位(MSB)中以1开头。权重向量中的每个的长度为K位。N可以等于K或者可以是不同的值。例如,如果K为8位,则权重值中的每个可以在-128和127之间。在表示中,对于输入值,第i个输入对应于节点中的输入数据点的输入索引。权重中的每个将具有相应的权重向量的第i个权重索引。换言之,第i个输入和第i个权重向量之间存在一对一的相关性。相反,每个输入或每个权重向量的第j位是从左到右的,使得MSB是第0位,并且最低有效位(LSB)是输入的第(N-1)位和权重向量的第(K-1)位。因为N和K可能是不同的值,所以输入数据中的总数量的第j个位置可能与权重向量的第j个位置不同。作为表示的示例,其中i=2和j=5的Ii,j位对应于第三输入数据的第六位。类似地,i=3和j=4的Wi,j位对应于第四权重向量的第五位。如图4所示,由MAC产生的位的总数量等于N加上K加上M的对数(以2为底),四舍五入到最接近的整数(Roundup)。例如,如果节点中的输入的数量为9(例如,对应于9点卷积)并且N和K各为8,则MAC的输出中的位的数量为8+8+Roundup(log29)=20。这个值同样可以表示为Roundup(N+K+log2M)。
图5图示了以按位方式处理输入值和权重向量的数学公式。具体来说,输入值中的每个都与权重向量中的每个位相乘,并在每次迭代之后求和。等式的左侧是求和i个输入和相应i个权重向量的乘积的一般公式。由于将要执行的数学运算是二进制数学运算,因此可以将其分解为等式的右侧,等式的右侧包括用于处理权重向量的符号位的第一项和用于处理剩余位的第二项。
第一项表示求和N位无符号输入与有符号K位权重向量中的每个的符号位的乘积。如图4所示,权重向量的MSB保存符号位,并且表示为权重向量的第0位,在位j=0时。第一项将输入乘以权重向量的第0位(表示符号位)并将结果乘以等于2K-1的第0位的位置值。然后将该结果记录为负值。本质上,输入和符号位之间的乘积确定了权重向量的最大负性。例如,如果权重向量为8位且为负数,则符号位表示27位置值中的“1”。这相当于取输入的2s补码并将其左移7次。这是针对每个输入Ii迭代完成的,并且第一项表示所有这些乘积的求和结果。当对应的权重向量不为负时,则添加零。
第二项包括两个嵌套求和操作。内部求和表示权重向量Wi中剩余j位中的每个乘以输入Ii、乘以权重向量Wi中相应第j位的位置值的总和。外部求和对每个输入Ii和权重向量Wi重复内部求和,并将所有这些求和加在一起。
图6图示了输入I和权重向量W的示例运算,其中M=1、N=8和K=8。I0=77(01001101)并且W0=-116(1000 1100)。在求和 中,第一项可以调节为-1·(0100 1101)·(1·27)=1011 0011·27=1101 1001 1000 0000(应注意,符号位已用附加的前导'1'填充)。第二项可以调节为77·(0·26)+77·(0·25)+77·(0·24)+77·(1·23)+77·(1·22)+77·(0·21)+77·(0·20)=77·23+77·22=616(0010 0110 1000)+308(0001 0011 0100)=924(0011 1001 1100)。第一项加上第二项得到和-8932(1101 1101 0001 1100)。
从这个示例中可以看出,当权重向量为负时,按位数学运算将权重向量设置为输入的-128倍,并且然后随后的位将正的部分加回到负的数字(使其没那么负)直到达到最终结果。
当权重向量为正时,第一项结果将是“0”,并且第二项将是权重向量剩余位的按位求和,类似于关于负权重向量所示的。
关于图7至图12,讨论了跳过评估和激活部件(也称为跳过模块),当与兼容的激活函数(例如ReLU激活函数)一起使用时,跳过评估和激活部件可以简化输入节点的MAC求和乘积累加器和相应的权重向量的计算复杂度。如上所述,例如,ReLU激活函数提供MAX(0,input)的输出,其中输入等于MAC乘积和。MAC乘积和是通过一系列的部分累加来确定的,因为权重向量的位被迭代处理。因此,如果在特定迭代之后的部分累加的乘积和在任何时候不会变为正数(或永远不会满足激活函数的条件),则可以确定可以跳过剩余的计算。
在逐位迭代处理的权重向量W情况下,在每次迭代之后,可以将部分乘积和累加的输出与为权重向量W的每个剩余位假设的“最坏情况”情况进行比较。“最坏情况”是将会产生最多计算周期的情况,即不产生跳过条件。这里,最坏情况是其中权重向量W的所有剩余位被假设为等于1。这意味着,例如8位权重向量Wi,如果Wi为负(即,开始于Wi,0=1),则小于0的最小负数是-1(所有二进制1)。如果Wi为正(即,开始于Wi,0=0),则最大数为127(其中其余位为二进制1)。
图7图示了求和公式30,它解释了任何给定迭代n的权重向量的“未知”部分。图7的公式图示了与图5中的公式类似的公式。它包括一般乘积和累加公式31,公式31被分解为符号位求和项32和权重向量的剩余位的嵌套求和。剩余位的嵌套求和被分解为用于权重向量的前n位(n>0)的第一嵌套求和项34和用于剩余K-1位的第二嵌套求和项36。对于迭代n,第一嵌套求和项34是处理第n位之后对权重向量的已知n位的乘积求和,第二嵌套求和项36包含从n+1位到剩余K-1位的来自权重向量W剩余位。如上所述,在一些实施例中,未知权重向量位可以被假设为所有位都等于1的“最坏情况”。随着权重向量从MSB到LSB被逐位处理,更多的实际权重向量的位是已知的,并且未知的假设的权重向量的位有效值随着每次迭代而降低。
图8至图12示出了根据一些实施例的跳过模块的应用。具体地,图8至图12展示了如何根据图13的流程图(下面讨论)实现图7的求和公式。图8至图12中的每个图示了一组M=9输入向量Ii,各自具有N=8位,以及M=9个权重向量Wi,各自具有K=8位。出于示范目的,输入向量中的每个的值都是随机生成的并且为77、138、179、76、175、159、153、212、128。出于示范目的,权重向量中的每个的值是随机生成的并且为-116、76、90、-83、33、8、-60、-98、-22。图8至图12还图示了这些数字中的每个的二进制表示。
图8和图9图示了求和公式30的计算,其中迭代n=0。在迭代n=0时,求和公式在第一个权重位j=0处进行调节。图8图示了输入向量中的每个乘以相应的权重向量的符号位,并且还乘以符号位的位置值(27)。如果权重向量为正,则符号位的位值为“0”并且将增加“0”。如果权重向量为负,则符号位的位值为“1”,并且增加值将等于负的输入向量乘以27。对这些乘积求和。如图8所示,这些乘积的和为-103,040。该值是可能的最负累加值。如果权重向量的所有其他位均为“0”,则输出值将为-103,040。如果权重向量的任何剩余位为“1”,则该值将导致累加值变得不那么负。因此,每个其他操作要么对累加值没有影响,要么只有正影响。
图9图示了剩余两项的处理。第一嵌套求和项34(见图7)将不具有累加到它的操作,因为求和从j=1开始。在这种情况下,n=1,j=0,因此第一项不会产生任何值。假设第二嵌套求和项36是“最坏情况”,如上所述,这是会导致最多计算周期的情况。这里,如果最终的累加和大于0,则会产生最多的计算周期。因此,可以采用最坏情况,其中假设剩余权重向量的每个位都为“1”。这个值是十进制的127,并且因此输入值中的每个乘以每个相应假设的权重向量的值127,然后加在一起得到数字164,719。如果将此最坏情况和与累加值-103,040进行比较,可以看到最终值可能高达-103,040+164,719=61,679。由于这个值是非负的,即激活函数后的结果是非零值,则因此需要处理更多的位。
图10图示了其中n=1的总和,即其中j=0,1。其中j=0已计算为-103,040。其中j=1,在第一嵌套求和项34(见图7)中,输入向量Ii中的每个乘以对应权重向量(即,Wi,1)中的j=1位,并且该值乘以1位的位置值(2K-j-1->28-1-1->26)。因此,当Wi,1=0时,增加值将为0,并且当Wi,1=1时,增加值将是相应的输入乘以26。这些是根据第一嵌套求和项34的外部求和来计算然后求和的。在本示例中,和等于48,448。当将此值添加到j=0值时,总数为-54,592。
假设图10的第二嵌套求和项36是“最坏情况”,如上所述,这是会导致最多计算周期的情况,即其中假设权重向量的每个剩余未知位为“1”。当n=1时,这个值是十进制的63,因此输入值中的每个乘以相应假设的权重向量中的每个的值63,然后加在一起得到数字81,711。如果将此最坏情况和与累加值-54,592进行比较,可以看到最终值可能高达-54,592+81,711=27,119。由于这个值是非负的,即激活函数之后的结果是非零值,那么因此需要处理更多的位。应注意的是,因为权重向量的第二位(j=1)实际上并不是最坏情况,所以在处理第二位之后,累加值和最坏情况值之间的差值—27,119比仅处理上面的第一位之后的差值—61,679不那么正。
图11图示了n=2的求和,即当j=0,1,2时。当j=0,1时,已计算为-54,592。当j=2时,在第一嵌套求和项34(见图7)中,输入向量Ii中的每个乘以对应权重向量(即,Wi,2)中的j=2位,并且该值乘以2位的位值(2K-j-1->28-2-1->25)。因此,当Wi,2=0时,增加值将为0,并且当Wi,2=1时,增加值将是相应的输入乘以25。这些是根据第一嵌套求和项34的外部求和来计算然后求和的。在此示例中,和等于17,216。当将此值添加到j=0,1值时,总数为-37,376。
假设图11的第二嵌套求和项36是“最坏情况”,如上所述,这是会导致最多计算周期的情况,即其中假设权重向量的每个剩余未知位为“1”。当n=2时,这个值是十进制的31,因此输入值中的每个乘以相应假设的权重向量中的每个的值31,然后加在一起得到数字40,207。如果将此最坏情况和与累加值-37,376进行比较,则可以看到最终值可能高达-37,376+40,207=2,831。由于这个值是非负的,即激活函数之后的结果是非零值,那么因此需要处理更多的位。
图12图示了n=3的求和,即当j=0,1,2,3时。当j=0,1,2时,已经计算为-37,376。当j=3时,在第一嵌套求和项34(见图7)中,输入向量Ii中的每个乘以对应权重向量(即Wi,3)中的j=3位,并且该值乘以3位的位值(2K-j-1->28-3-1->24)。因此,当Wi,3=0时,增加值将为0,并且当Wi,3=1时,增加值将是相应的输入乘以24。这些是根据第一嵌套求和项34的外部求和来计算然后求和的。在本示例中,和等于8,800。当将此值添加到j=0,1,2值时,总数为-28,576。
假设图12的第二嵌套求和项36是“最坏情况”,如上所述,这是会导致最多计算周期的情况,即其中假设权重向量的每个剩余未知位为“1”。当n=3时,这个值是十进制的15,因此输入值中的每个乘以相应假设的权重向量中的每个的值15,然后加在一起得到数字19,455。如果将此最坏情况和与累加值-28,576进行比较,则可以看到最终值可能高达-28,576+19,455=-9121。由于该值对于“最坏情况”情况是负的,因此可以确定没有剩余的权重向量值可能导致非负值。换言之,当n=4,5,6,7时的权重向量的剩余位没有任何值将导致非负乘积和累加。对于权重向量的任何剩余未处理位,由于累加值始终为负,因此当累加值被传递给ReLU激活函数时,结果将始终为0。因此,处理任何进一步的位将浪费资源。在这种情况下,跳过模块可以激活一个跳过信号并且下一个输入块将被处理。
图13图示了跳过评估和激活部件的过程流程图100。在110处,以按字输入和按位加权的方式执行作为MAC和乘积累加的部分的部分和累加。这种方式是如上所描述的,其中整个无符号输入值(任何位长)以逐位方式乘以有符号权重向量。部分和累加方面反映了逐位处理权重向量的迭代过程。因此,在110处,处理权重向量的一个位。在120处,针对跳过条件评估部分累加的乘积和。跳过条件可以基于对应的激活函数。例如,在一些实施例中,激活函数可以是ReLU激活函数,使得如果MAC和乘积累加的输出为负,则激活函数的输出为零。因此,跳过条件可以评估部分累加的乘积和以预测MAC和乘积可能是正的还是负的。在一些实施例中,跳过条件可以基于预定义的阈值(例如,见图23A和图23B以及它们的随附描述)。在其他实施例中,可以基于对剩余未处理加权位的预测来动态计算跳过条件。
在130处,如果确定部分累加的乘积和满足跳过条件,则在140处,断言信号以指示可以跳过后续操作。后续操作可以例如包括存储器存取读取操作(例如,加载输入或权重值等)或计算操作(例如,后续的迭代)。如果在130处确定部分累加的乘积和不满足跳过条件,则在150处,将确定是否所有的权重位都已被处理。如果所有的权重位都已处理完毕,则过程结束,并且部分累加的乘积和已累加成为160处的MAC和乘积输出。当在160处确定输出后之后,在170处,将激活函数应用于输出。如果在150处,没有处理完毕所有的权重位,则在180处下一个权重位将被推进,并且在110处重复处理。需要注意的是,在140之后,如果满足跳过条件并且断言了信号以跳过后续操作,则输出可以可选地作为累加乘积和,并且可以对输出执行170处的激活函数。
图14图示了MAC跳过电路200的硬件实现的高级电路框图。在一些实施例中,MAC跳过电路200可以在单个半导体衬底上实现。在其他实施例中,MAC跳过电路200可以在多个半导体衬底上实现并且根据需要互连。输入块210从无符号输入向量205获取输入值。权重块220从有符号权重向量215获取其输入。输入向量205乘以225权重向量215的下一位。如果下一位是第一位,则结果被转换为2s补码格式,并且通过加法块230与左移的部分和255相加(其被初始化为“0”),然后储存为新的部分和235,否则,则通过加法块230将结果与左移的部分和255相加。如果权重向量215的所有位都已被处理,则将部分和235被作为输出240。否则,在每次迭代之后,通过跳过模块245评估部分和235以确定是否存在跳过条件。如果是这样,则断言跳过信号。如果不是,则对权重向量的K位中的每个位再次重复处理,直到断言跳过信号或直到处理完K位中的剩余者。如果断言了跳过信号,则部分和235可以被作为输出240、可以被修改并且然后作为输出240,或者可以将零作为输出240。
图15图示了根据一些实施例的MAC跳过电路200的更详细的框图。相同的标号用于指代与上面关于图14讨论的MAC跳过电路200相同的元件。应当理解,具有相同标记的引脚都耦合在一起(例如,标记为“x”的输出引脚将被耦合到标有“x”的输入引脚)。输入向量205包括一组M个N位向量。从输入向量205通向输入触发器(FF)210的箭头线中的斜线表示一条线用于示出多条线。在一些实施例中,可能有M条线通向输入FF210,一条线用于输入向量205中的每个。在一些实施例中,可能有N条线用于M个向量中的每个,或者N×M条线通向输入FF 210。在这样的实施例中,可以并行处理M个向量的每个位。输入向量205可以一次锁存一位,或者可以逐字的方式例如一次锁存8位。
输入FF 210是触发器电路块,用于将输入向量205锁存到MAC跳过电路200中。IN_LAT引脚为输入FF 210提供锁存信号输入,当被激活时,导致输入FF 210将输入向量205锁存到输入FF 210触发器中。RST引脚是输入FF 210触发器的复位信号输入以适应通用复位信号,通用复位信号可以提供给各种块,从而导致MAC跳过电路200(包括输入FF 210触发器)的状态返回初始状态/复位状态。在一些实施例中,输入FF 210包括足够的触发器状态以适应每个输入向量205的每个位,即M×N个触发器状态。触发器可以布置成一系列寄存器,例如,一个N位寄存器用于每个M个输入向量205。
权重FF 220是触发器电路块,用于将权重向量215锁存到MAC跳过电路200中。W_LAT引脚为权重FF 220提供锁存信号输入,当被激活时,导致权重FF 220将权重向量215锁存到权重FF 220触发器中。RST引脚是权重FF 220触发器的复位信号输入以适应通用复位信号,通用复位信号可以提供给各种块,从而导致MAC跳过电路200(包括权重FF 220触发器)的状态返回初始状态/复位状态。在一些实施例中,权重FF 220锁存所有的权重向量215并且具有足够的触发器状态以适应M个K位权重向量215,即M×K个触发器状态。在其他实施例中,权重FF 220从MSB开始一次仅锁存来自每个权重向量215的一个位,即K个触发器状态。权重FF 220的输出可以包括对于每个权重向量215的相同位置值的每个权重位的并行输出。
乘法器225是乘法器电路块,用于以逐位方式将锁存在输入FF 210中的输入向量205中的每个与锁存在权重FF 220中的每个相应权重向量215相乘。换言之,每次仅将来自每个权重向量215的一个位与相应的输入向量205相乘。乘法器225还包括Flow_Thru引脚,当激活该引脚时导致乘法器225使输入向量205通过而不论来自权重FF 220的位值如何。
图14的加法块230被分解为加法器230a和累加器230b。加法器230a是用于将位权重输入向量205中的每个加在一起的加法器电路块。如所示的使用了加法器树电路块,然而,可以使用其他类型的加法器。加法器策略保留进位。加法器230a的输出位的数量与每个输入向量的位的数量(N)和输入向量的数量(M)有关。加法器将输出N+Roundup(log2M)位。因此,对于9个8位输入向量的示例卷积,加法器将输出8+4=12位。加法器230a的输出引脚耦合到累加器230b的输入引脚。
累加器230b本质上是2x1加法器电路块,它将进入的和乘积与移位的先前的和乘积相加,该移位的先前的和乘积被反馈给累加器230b到累加器230b的另一个输入引脚。累加器230b包括ADD引脚,该ADD引脚在被激活时指示累加器230b将两个输入相加而不是两个输入相减。累加器230b的输出被提供给移位寄存器235的输入引脚和跳过模块245的输入引脚。
移位寄存器235包括布置成具有移位能力的寄存器的多个触发器。移位寄存器235包括SHIFT(移位)255输入引脚,当该引脚被激活时,会导致移位寄存器235左移移位寄存器235的内容。移位寄存器235还包括提供锁存信号输入的ACC_LAT引脚以将累加器230b的输出锁存到移位寄存器235中。RST引脚是移位寄存器235的复位信号输入以适应通用复位信号,通用复位信号可以提供给各种块,这导致MAC跳过电路200(包括移位寄存器235)的状态返回初始状态/复位状态。
跳过模块245是确定是否发生跳过条件的电路块。跳过模块的细节将在下面关于图17更详细地讨论。跳过模块245包括接收累加器230b的输出的输入引脚和可以向控制器260提供跳过(SKIP)信号的输出引脚(SKIP 250)。RST引脚是跳过模块245的复位信号输入以适应通用复位信号,通用复位信号可以提供给各种块,这可以导致MAC跳过电路200(包括跳过模块245)的状态返回初始状态/复位状态。
控制器260是包含状态机并驱动必要的信号的电路块,以控制上述图15的各个电路块之间的交互。接下来更详细地讨论控制器260。
图16示出了控制器260电路块的框图。控制器260包括几个子电路块,包括有限状态机(FSM)305电路块、状态逻辑310电路块、计数器(CNT)315电路块、计数器逻辑(CNT逻辑)320电路块、解码状态触发器(SFF)325电路块、用于控制信号的逻辑330电路块和跳转(JMP)逻辑335电路块。控制器260具有用于接收SKIP 250信号输入、START(开始)信号输入、NEXT(下一个)信号输入和RST信号输入的引脚,每个都在同名引脚上接收。控制器260具有用于提供控制信号的引脚,包括IN_LAT信号、W_LAT信号、ACC_LAT信号、ADD信号、SHIFT 255信号、SKIPFF_LAT信号、SKIPSR_LAT信号、SkipSHIFT信号、Flow_Thru信号和OUT_RDY信号,每个都在同名的引脚上提供。这些控制信号由用于控制信号的逻辑330提供。
SKIP 250引脚从跳过模块245接收信号,这将在下面进一步详细讨论。NEXT引脚接收信号以指示控制器260是否应该进入状态机中的下一个状态。NEXT引脚接收到的信号可以触发以指示状态机应该继续下一步骤。NEXT引脚接收到的信号可以来自系统外部,并且帮助控制系统。START引脚接收信号以指示状态机应该从第一状态移到第二状态。逻辑可以将START引脚信号与NEXT切换组合,使得当START=1且NEXT触发时,状态机进入下一个状态。由START引脚接收的信号可以来自系统外部并且帮助控制系统。RST引脚接收信号以指示控制器260是否应复位所有的锁存器并复位状态返回初始状态。由RST引脚接收的信号可以来自系统外部并且帮助控制系统。
上面讨论了IN_LAT引脚、W_LAT引脚、ACC_LAT引脚、ADD引脚、SHIFT 255引脚、SKIPFF_LAT引脚、SKIPSR_LAT引脚、SkipSHIFT引脚和Flow_Thru引脚,以及它们对应的引脚上面讨论的各种电路块。OUT_RDY引脚提供信号,该引脚在被激活时指示MAC跳过电路200的输出准备好被获取或提供,例如由实现激活函数(诸如ReLU激活函数)的电路获取或提供给实现激活函数(诸如ReLU激活函数)的电路。
FSM 305是确定当前状态和下一状态的电路块,当前状态在ST引脚上输出,在当前实施例中,ST引脚可以包括三个引脚<0:2>,表示根据下面关于图24A和图24B描述的状态图的八种可能状态中的一个。基于当前状态、START引脚处的值、RST引脚处的值、JMP0引脚处的值、JMP1引脚处的值以及NEXT引脚处的值的触发,生成下一个状态并放置在ST引脚上。
ST引脚耦合到状态逻辑310电路块处的同名引脚。状态逻辑310块使用ST引脚和NEXT引脚来确定放置在使用一种热方式的引脚ST_d上的解码输出,引脚ST_d包括8个引脚。热方式解码将八种可能状态中的每种转换为输出条件,其中一次只有一个输出引脚为高,而其他引脚保持低,使得一个引脚有效地分配给每个可能的状态。NEXT引脚当被激活时向状态逻辑310发出信号以寻找新的输入。
计数器(CNT)315电路块是生成计数器的电路块,该计数器用于跟踪权重向量的位位置以用于以按位方式处理权重值。CNT 315的CNT引脚包括<0:K'>引脚,其中K'等于Roundup(log2K)。CNT 315块的输出处的值基于CNTplus引脚发生变化。当CNTplus引脚被激活时,CNT引脚将发生变化,从而输出等于先前输出加1的值。RST引脚是当被激活时复位CNT315的引脚,使得CNT引脚的值一致为零。
CNT逻辑320电路块是类似于状态逻辑310电路块的电路块。CNT逻辑320电路块具有耦合到与CNT 315电路块同名的引脚的引脚,并在引脚CNT_d上以一种热方式提供解码输出。CNT_d的引脚数量是<0:K>,其中K是如上所述—权重向量215中的位的数量。NEXT引脚当被激活时向CNT逻辑320发出信号以寻找CNT上的新的输入。
状态触发器(SFF)325电路块是包含触发器的电路块,触发器用于存储来自状态逻辑310电路块的解码状态引脚上存在的每个值。例如,SFF 325可以包含用于解码状态引脚中的每个的D型触发器。作为替代,可以使用其他触发器类型。ST_dlat引脚可以将锁存信号传输到用于控制信号的逻辑330。
控制信号电路块的逻辑330是具有用于ST_dlat的引脚、用于CNT_d的引脚、用于NEXT的引脚、用于RST的引脚、用于CNTplus的引脚以及用于IN_LAT、W_LAT、ACC_LAT、ADD、SHIFT 255、SkipFF_LAT、SkipR_LAT、SkipSHIFT、Flow_Thru和OUT_RDY的引脚的电路。这些同名引脚的信号是根据下面描述的状态图和状态表使用逻辑门而生成的。
跳转(JMP)逻辑335电路块是具有耦合到CNT或CNT_d引脚的引脚、耦合到ST或ST_d引脚的引脚、耦合到RST引脚的引脚、耦合到NEXT引脚的引脚以及耦合到SKIP 250引脚的引脚的电路块。JMP逻辑335还具有耦合到FSM 305的JMP0引脚的JMP0引脚以及耦合到FSM 305的JMP4引脚的JMP4引脚。当两个条件中的任一个为真时JMP逻辑335使用激活JMP0引脚的逻辑。第一,当RST=0AND(与)NEXT触发AND CNT=1时,或者第二,当SKIP=1时。当RST=0ANDNEXT触发AND CNT!=7时,JMP逻辑335使用激活JMP4引脚的逻辑。可选地,JMP0或JMP4引脚的激活可以被限制在当前状态为7的条件下。这可以从ST或ST_d引脚或者从热引脚解码的特定ST_d引脚(例如ST_d<7>引脚)获取。应当理解,JMP逻辑335电路块只是实现该逻辑的一种方式。该逻辑也可以作为附加状态集成到逻辑330或有限状态机中。
图17图示了根据一些实施例的跳过模块245电路块的框图。跳过模块245电路块可以根据图7的数学公式、图8至图12的示例或者图13的流程图使用其他逻辑/电路块来实现。跳过模块245包括几个子电路块,包括输入和触发器(IS_FF)350、移位寄存器355、减法器360、比较器365、绝对值(Abs)370电路块和跳过触发器(SkipFF)375电路块。跳过模块245包括SkipSHIFT引脚、SkipSR_LAT引脚、SkipFF_LAT引脚、RST引脚、输入和引脚组、累加乘积和引脚组以及SKIP 250引脚。这些引脚提供或接收同名的信号并耦合到MAC跳过电路200的如上所述的同名引脚。
IS_FF 350电路块是可以利用触发器以储存来自IS引脚的输入和的电路块。SkipFF_LAT引脚可以提供信号以将输入和锁存到IS_FF 350中。RST引脚可以提供信号以将IS_FF 350复位到初始状态。IS_FF 350的位的数量可以等于输入向量205的位的数量N加上输入向量的数量M的对数(以2为底)(RoundUP(log2M))。IS_FF 350的输出引脚可以耦合到移位寄存器355并且耦合到减法器360作为减数。
移位寄存器355电路块是利用能够执行左移的寄存器的电路块。SkipSHIFT引脚当被激活时会触发左移。SkipSR_LAT引脚当被激活时导致来自IS_FF 350的输入和(IS)被锁存到移位寄存器355中。RST引脚可以提供信号以将移位寄存器355复位到初始状态。移位寄存器355的位的数量可以等于输入向量205的位的数量N加上权重向量215的位的数量K加上输入向量的数量M的对数(以2为底)(RoundUP(log2M))。移位寄存器355的输出引脚可以耦合到减法器360作为被减数。
减法器360获取IS_FF 350的值并且从移位寄存器355的值中减去它以计算输出B。减法器360经由输出引脚向比较器365提供输出B。
绝对值(Abs)370电路块是被配置为获取累加乘积和(accumulated product sum,APS)并计算绝对值并且将其作为输出A提供给比较器365的电路块。Abs 370电路块包括用于这些功能的相应引脚。Abs 370可以可选地配置为经由一组TH引脚获取阈值TH值,该TH值可以添加到APS的绝对值作为阈值偏移,以增加或减少发现跳过条件的可能性。在这样的实施例中,Abs 370可以包括加法器,以在将输出A提供给比较器365之前从输出A加上或减去阈值TH。下面参考图23A和图23B更详细地讨论阈值TH。
比较器365电路块是将输出A与输出B进行比较的电路块。如果输出A大于输出B,则发现跳过条件。比较器包括用于这些值的相应引脚。跳过条件在与SkipFF 375电路块耦合的Skip_LAT引脚上提供。SkipFF 375电路块是包括触发器的电路块,当由Skip_LAT引脚上的信号激活时,其锁存SKIP 250输出引脚。
图15的MAC跳过电路200的操作可以通过参考图15、图16和图17中的电路框图通过图18至图22中的示例情况来示范。图18图示了如上面关于图8使用的相同的输入向量和权重向量。输入向量被锁存在输入FF 210中。权重向量中的第一MSB位被锁存在权重FF 220中。在图18中,不管权重值如何,乘法器225中的Flow_Thru引脚被激活并且输入向量都被允许流过乘法器225。这相当于将每个输入向量乘以“1”。然后输入向量由加法器230a相加,并且输入和0101 0001 0001(1297)被提供给跳过模块245。输入和被锁存到IS_FF 350中。如上所述,IS_FF 350中的位的数量NIS=K+Roundup(log2M)。输入和的最高NIS-K+1位被锁存到移位寄存器355。这相当于将输入和除以2N IS -K+1,在这种情况下为27。这样做的原因是因为输入向量和权重向量的MSB的乘积的计算尚未完全加权。每个循环将移位部分累加的乘积和一个位置。类似地,每个周期将移位寄存器一个位置。因此,利用输入和的最高NIS–K+1位确保了比较在相同的乘法器中进行。
例如,权重位的MSB的部分累加的乘积和等于∑IN·W[7],然后将它乘以其位置值27。剩余未处理的权重可以被调节为∑IN·W[6]·26+∑IN·W[5]·25+∑IN·W[4]·24+∑IN·W[3]·23+∑IN·W[2]·22+∑IN·W[1]·21+∑IN·W[0]·20。在最坏情况下,权重位中的每个为1。因此,上式可以重写为IS·26+IS·25+IS·24+IS·23+IS·22+IS·21+IS·20,其中IS等于所有的权重位为1的情况。分解出IS,这相当于IS·127。因为部分累加的乘积和的位置值还没有被移位,所以IS·127除以128可以通过计算IS-IS/128得到,例如,
因此,跳过阈值STH可以通过将输入和的最高NIS-K+1位取入移位寄存器355来计算,如上所述,这相当于将输入和除以128。然后移位寄存器355可以从输入和中减去以获得STH。
在图19中,处理了第一权重位。各个输入分别乘以权重向量的MSB中的相应一个。然后将这些乘积相加在一起得到0011 0010 0101(-805)。因为第一位是符号位,所以从初始的累加的乘积和(即0)中减去这个值(ADD=0)将累加的乘积和变为2s补码格式。通过从作为被减数的IS_FF 0101 0001 0001(1297)中减去作为减数的移位寄存器1010(10)来计算跳过阈值(STH)。为了确定是否发生跳过条件,将STH0101 0000 0111(1287)与累加的乘积和的绝对值0011 0010 0101(805)进行比较。由于不满足条件A>B,则在后续周期中处理下一个权重位。
在图20中,累加的乘积和左移,并处理第二权重位。各个输入各自乘以权重向量的下一位中的相应一个。然后将这些乘积相加在一起得到0010 1111 0101(757)。将该值添加到移位后的累加的乘积和中,得到1111 1111 1100 1010 1011(-853)。这样累加的乘积和等于∑IN·W[7]·21+∑IN·W[6]。移位寄存器355也被移位并且再次从IS_FF 350中减去以找到跳过阈值STH 0000 0000 0100 1111 1101(1277)。这样做是因为最坏情况是其中IS·25+IS·24+IS·23+IS·22+IS·21+IS·20,其等于IS·63。移位寄存器355是先前IS除以128,但因为累加的乘积和已移位了一次,所以它也移位了一次,使得它改为除以64。IS·63/64的值可以通过计算IS–IS/64得到。可选地,输入和的最高NIS–K位可以被锁存到移位寄存器355中,这相当于将IS除以64。为了确定是否发生跳过条件,将STH 0000 0000 01001111 1101(1277)与累加的乘积和的绝对值0011 0101 0101(853)进行比较。由于不满足条件A>B,则在后续周期中处理下一个权重位。
在图21中,累加的乘积和左移,并处理第二权重位。各个输入各自乘以权重向量的下一位中的相应一个。然后将这些乘积相加在一起得到0010 0001 1010(538)。将该值添加到移位后的累加的乘积和中,得到1111 1111 1011 0111 0000(-1168)。这样累加的乘积和等于∑IN·W[7]·22+∑IN·W[6]·21+∑IN·W[5]·20。移位寄存器355也被移位并且再次从IS_FF 350中减去以找到跳过阈值STH 0000 0000 0100 1110 1001(1257)。这样做是因为最坏情况是其中IS·24+IS·23+IS·22+IS·21+IS·20,其等于IS·31。移位寄存器355是先前IS除以64,但因为累加的乘积和已移位了一次,所以移位寄存器也移位一次,使得它改为除以32。值IS·31/32可以通过计算IS-IS/32求出。可选地,输入和的最高NIS-K-1位可以被锁存到移位寄存器355中,这相当于将IS除以32。为了确定是否发生跳过条件,将STH00000000 0100 1110 1001(1257)与累加的乘积和的绝对值0100 1001 0000(1168)进行比较。由于不满足条件A>B,则在后续周期中处理下一个权重位。
在图22中,累加的乘积和左移,并处理第三权重位。各个输入各自乘以权重向量的下一位中的相应一个。然后将这些乘积相加在一起得到0010 0010 0110(550)。将该值添加到移位后的累加的乘积和中,得到1111 1111 1001 0000 0110(-1786)。这样累加的乘积和等于∑IN·W[7]·23+∑IN·W[6]·22+∑IN·W[5]·21+∑IN·W[4]·20。移位寄存器355也被移位并且再次从IS_FF 350中减去以找到跳过阈值STH 0000 0000 0100 1100 0001(1217)。这样做是因为最坏情况是其中IS·23+IS·22+IS·21+IS·20,其等于IS·15。移位寄存器355是先前IS除以32,但因为累加的乘积和已移位了一次,所以移位寄存器也移位一次,使得它改为除以16。值IS·15/16可以通过计算IS–IS/16求出。可选地,输入和的最高NIS–K–2位可以被锁存到移位寄存器355中,这相当于将IS除以16。为了确定是否发生跳过条件,将STH 0000 0000 0100 1110 1001(10000 0000 0100 1100 0001(1217)与累加的乘积和的绝对值0110 1111 1010(1786)进行比较,由于满足条件A>B,则中止权重位的剩余处理,并且可以将输出提供给实现激活函数(诸如ReLU激活函数)的电路。
假设不满足阈值,则处理将以几乎相同的方式继续下一个周期。各个输入将乘以权重向量的下一位。然后将这些乘积相加在一起形成加法器230A输出。然后将该值添加到移位后的累加的乘积和中,得到∑IN·W[7]·24+∑IN·W[6]·23+∑IN·W[5]·22+∑IN·W[4]·21+∑IN·W[3]·20。移位寄存器355也被移位并且再次从IS_FF 350中减去以找到跳过阈值。这样做是因为最坏情况是其中IS·22+IS·21+IS·20,其等于IS·7。移位寄存器是先前IS除以16,但因为累加的乘积和已移位了一次,所以移位寄存器也移位一次,使得它改为除以8。值IS·7/8可以通过计算IS–IS/8求出。可选地,输入和的最高NIS–K–3位可以被锁存到移位寄存器355中,这相当于将IS除以8。为了确定是否发生跳过条件,将STH与累加的乘积和的绝对值进行比较。
假设不满足阈值,则处理将以相同的方式继续下一个周期。各个输入将乘以权重向量的下一位。然后将这些乘积相加在一起形成加法器230A输出。然后将该值添加到移位后的累加的乘积和中,得到∑IN·W[7]·25+∑IN·W[6]·24+∑IN·W[5]·23+∑IN·W[4]·22+∑IN·W[3]·21+∑IN·W[2]·20。移位寄存器355也被移位并且再次从IS_FF 350中减去以找到跳过阈值。这样做是因为最坏情况是其中IS·21+IS·20,其等于IS·3。移位寄存器是先前IS除以8,但因为累加的乘积和已移位了一次,所以移位寄存器也移位一次,使得它改为除以4。值IS·3/4可以通过计算IS–IS/4求出。可选地,输入和的最高NIS–K–4位可以被锁存到移位寄存器355中,这相当于将IS除以4。为了确定是否发生跳过条件,将STH与累加的乘积和的绝对值进行比较。
假设不满足阈值,则处理将以相同的方式继续下一个周期。各个输入将乘以权重向量的下一位。然后将这些乘积相加在一起形成加法器230A输出。然后将该值添加到移位后的累加的乘积和中,得到∑IN·W[7]·26+∑IN·W[6]·25+∑IN·W[5]·24+∑IN·W[4]·23+∑IN·W[3]·22+∑IN·W[2]·21+∑IN·W[1]·20。移位寄存器355也被移位并且再次从IS_FF 350中减去以找到跳过阈值。这样做是因为最坏情况是其中IS·20,其等于IS。移位寄存器是先前IS除以4,但因为累加的乘积和已移位了一次,所以移位寄存器也移位一次,使得它改为除以2。值IS·1/2可以通过计算IS-IS/2求出。可选地,输入和的最高NIS–K–5位可以被锁存到移位寄存器355中,这相当于将IS除以2。为了确定是否发生跳过条件,将STH与累加的乘积和的绝对值进行比较。
假设不满足阈值,则处理将以相同的方式继续下一个周期。如果权重位的数量K等于8,如本示例所示,这是最后一个周期,因为将不再有未知的权重值。各个输入将乘以权重向量的下一位。然后将这些乘积相加在一起形成加法器230A输出。然后将该值添加到移位后的累加的乘积和中,得到∑IN·W[7]·27+∑IN·W[6]·26+∑IN·W[5]·25+∑IN·W[4]·24+∑IN·W[3]·23+∑IN·W[2]·22+∑IN·W[1]·21+∑IN·W[0]·20。由于所有权重位都已处理,因此将输出提供给实现激活函数(诸如ReLU激活函数)的电路。
参考图23A和图23B,显示了流程图,其图示了如图17所示的阈值TH的使用。如上所述,当Abs(累加的乘积和)>STH时检测到跳过条件。阈值TH可以是一个添加(added)值,可以用来放宽跳过条件所需的条件。例如,如上所述,STH的计算是基于权重向量的最坏情况情景的假设。由于权重向量的所有位不太可能都是“1”,因此通过添加阈值TH来放宽要求,可以导致更少的计算能量,而不会引入不可接受的错误量(例如,如果添加阈值TH导致跳过不应跳过的值,可以发生这种错误)。
在图23A中,在一些实施例中,阈值TH可以是基于权重向量的一些已知统计特性和误差容限的预定义值。例如,如果已知误差容限允许放宽最坏情况,则阈值TH可以等于输入和的除法后的部分。例如,阈值可以等于输入和除以4、8或16。在其他实施例中,阈值TH可以是基于累加的乘积和(APS)的预定义值。例如,阈值TH可以等于Abs(APS)的部分添加回其自身,诸如Abs(APS)+Abs(APS)/8。在又一实施例中,阈值TH可以是常数,诸如值128,或一些其他值。在元素405处,基于预定条件计算阈值TH,诸如上述那些条件中的任何条件。在这样的实施例中,阈值TH或者是常数或者是基于可用的数值中的一个(诸如输入和或APS)来计算的。在元素410处,TH在进入比较器365之前被添加到Abs(APS)。实际上,比较器365确定A+TH>B?或A>B-TH?。应注意,虽然TH显示为被添加到Abs(APS),但在进入减法器360之前,可以从被减数(IS_FF)中减去TH或添加到减数(来自移位寄存器355)中。
在图23B中,在一些实施例中,阈值TH可以是基于一些外部因素计算的动态值,或者可以是使用如上所述的预定分量加上这里讨论的动态分量。例如,如果计算器件的资源低(电池、电源、存储器、处理可用性等),则可以增加阈值。在元素455处,检测条件,条件包括一些外部因素,诸如低计算资源、高温、故障的冷却条件、移动等。在460处,增加TH以减少计算能量。如果TH增加,则跳过条件被触发的可能性也会增加。在一些实施例中,TH可以基于如上所述的预定TH,但然后TH被调整以进一步降低计算能量。增加TH具有增加误差的潜在负面影响。在其他实施例中,TH可以等于0。在465处,检测到条件已经恢复或改变,以允许使用更多的计算资源。在470处,降低TH以增加计算能量并减少误差。
在图24A、图24B和图25中,提供了有关状态的信息。应当理解,此信息可能会根据实际使用部件的运行参数和特性而有所变化。例如,移位寄存器可以使用组合逻辑,以使得锁存信号以特定方式与移位信号相互作用。作为另一个示例,在一些硬件中,乘法器225和加法器230a电路块可以立即开始计算而没有单独的状态。图24A提供了状态图,并且图24B描述了在每个状态期间完成的基本处理。为简单起见,本说明中的CNT具有在0和7之间的值。应当理解,这里的7是当每个权重向量中的位的数量K=8时的值K-1。如果K是不同的数字,则可以适当替换值“7”。
在状态0处,MAC空闲,跳过空闲,存储器空闲。状态0是就绪状态。当与其他状态相关的计算完成时,它也是返回状态。当在任何其他状态期间断言RST信号时,它也是返回状态。如图25所示,在状态0处,OUT_RDY信号为高,并且累加的乘积和可用于激活函数。如果RST=0并且NEXT被触发并且START=1,则进入状态1。
在状态1处,存储器读取输入向量205并在MAC跳过电路200的引脚上提供这些值。输入向量205被锁存到输入FF 210中。因此,INPUT_FF 210的输出立即使其输出可用于乘法器225电路块。Flow_Thru引脚被激活,允许输入向量205流过乘法器225电路块到加法器230a。加法器230a将输入向量205加在一起并产生输入和(IS)到跳过模块245。如图25所示,在状态1处,IN_LAT引脚被激活,Flow_Thru被激活。如果RST=0并且NEXT被触发,则进入状态2。
在状态2处,输入和IS被锁存到跳过模块245的IS_FF 350。如图25所示,在状态2处,Flow_Thru引脚被激活并且SkipFF_LAT引脚被激活。如果RST=0并且NEXT被触发,则进入状态3。
在状态3处,存储器读取锁存到权重FF 220中的权重向量215的MSB。在跳过模块245中,IS的最高NIS-K+1位被锁存到移位寄存器355中。如图25所示,在状态3处,W_LAT引脚被激活并且SkipSR_LAT引脚被激活。如果RST=0并且NEXT被触发,则进入状态4。
在状态4处,输入向量205由输入FF 210提供,并且当前权重位由权重FF 220提供给乘法器225电路块,其将输入向量205与当前权重位相乘并提供输出到加法器230a。将乘积和提供给累加器230b。在一些实施例中,可以在先前状态中提供乘积和(例如,如果锁存操作立即将输入提供给乘法器225)。如果CNT=0,则ADD信号无效并且乘积和将被减去,因为乘积和应该为负,因为它将表示权重向量215的符号位的乘积和。如果CNT=0,则部分累加的乘积和为0。如果CNT!=0,则部分乘积和已从先前的状态7执行移位。在累加器将来自移位寄存器235的部分累加的乘积和APS与当前乘积和相加之后,累加器230b的输出引脚准备就绪。然后计数器增加以表示当前位已被处理。如图25所示,在状态4处,CNT_plus引脚被激活。如果RST=0并且NEXT被触发,则进入状态5。
在状态5处,新的累加的乘积和APS被锁存到移位寄存器235中,并提供给跳过模块245,跳过模块245经由比较器365电路块将abs(APS)与STH进行比较。如图25所示,在状态5处,ACC_LAT引脚被激活以表示锁存累加的乘积和APS。如果RST=0并且NEXT被触发,则进入状态6。
在状态6处,跳过比较的结果被锁存到SkipFF 375中。如图25所示,在状态6处,SKIP_LAT引脚被激活(除非CNT=7,因为那时所有位都已被处理)。如果RST=0并且NEXT被触发,则进入状态7。
在状态7处,如果CNT!=7,则移位寄存器235左移以准备下一个权重位处理,存储器读取权重向量的下一位,并且权重向量的下一位被锁定在权重FF 220中。如果RST=0并且NEXT被触发并且CNT!=7,则接下来进入状态4。这表示还有其他权重位要处理并且没有断言跳过。如果RST=0并且NEXT被触发并且CNT=7表示所有权重位都已处理,则进入状态0。无论CNT值如何,如果SKIP=1也进入状态0,中止对剩余权重位的进一步处理。如图25所示,在状态7处,(如果CNT!=7)W_LAT、ACC_SHIFT引脚被激活以表示移位移位寄存器235,并且SkipSHIFT引脚被激活。
图26是使用MAC跳过电路的系统500的系统图。存储器505耦合到MAC跳过电路200以向MAC跳过电路200提供输入数据和权重。存储器505可以是用于存储非暂时性计算机可读数据的任何合适的存储器器件和介质。控制器510(例如卷积控制器510)耦合到MAC跳过电路200和存储器505。控制器510提供控制信号和逻辑以指示MAC跳过电路200操作,诸如START和NEXT控制信号。MAC跳过电路200还向控制器510提供的状态信号,诸如OUT_READY信号。控制器510还指示存储器505将哪些输入和权重提供给MAC跳过电路。激活函数515获取MAC跳过电路200的输出并将例如激活函数(诸如ReLU激活函数)应用于输出。然后可以将结果存储回存储器505并提供给控制器510。
图27图示了一系列样品测试的结果。该图图示了运行累加的部分和的每个数据点所需的能量。虚线椭圆包围了在没有跳过模块的情况下处理产生的累加的部分和。如图所示,当累加的部分和大于零时,使用跳过模块的用于计算累加的部分和的能量大于不使用跳过模块的能量。但是,当累加的部分和仅适度地小于0时,使用跳过模块时的能量需求要少得多。在此示例中,使用跳过模块平均节能约为12.2%。可以实现10%到40%的节能。
上述MAC处理的计算复杂性随着输入和权重向量的大数量M增加而增加。已知ReLU激活函数仅在MAC的输出值为正时存储MAC的输出值,而在MAC的输出值为负时存储零,实施例提供了一种处理方法、电路和系统,可以可选地跳过输入数据的剩余处理以节省计算能力。实施例迭代地计算乘积和。在每次迭代之后,跳过功能块评估部分累加的乘积和。如果部分累加的乘积和为负以至于剩余的操作不能使结果为正,则跳过剩余计算。跳过剩余计算提供了减少的计算周期和减少的存储器调用。
一个实施例是一种用于乘积和累加的方法,包括:以按字输入和按位加权的方式对输入向量和权重向量的乘积执行部分和累加,以得到部分累加的乘积和;将部分累加的乘积和与阈值条件进行比较;以及当部分累加的乘积和满足阈值条件时,断言跳过指示符以指示跳过和累加的剩余计算。
在一个实施例中,该方法还包括:跳过输入向量与权重向量的至少一个位位置的乘积的部分和累加。在一个实施例中,阈值条件是动态计算的阈值条件。在一个实施例中,当部分累加的乘积和为负并且未知权重位的剩余集合将不能够使部分累加的乘积和为正时,断言跳过指示符。在一个实施例中,未知权重位的剩余集合均被假设为“1”。在一个实施例中,该方法还包括:对部分累加的乘积和执行激活函数,并且将激活函数的输出记录为等于0或部分累加的乘积和中的较大值。在一个实施例中,该方法还包括,当部分累加的乘积和小于阈值条件时:以按字输入和按位加权的方式对输入向量与权重向量的剩余部分的乘积执行第二部分和累加,以得到第二部分累加的乘积和。
另一个实施例涉及一种包括跳过电路块的计算器件,包括乘法累加电路块,该乘法累加电路块被配置为分别将M个输入向量的组乘以M个权重向量的组的第一权重位以计算第一组M个乘积,将第一组M个乘积相加在一起以计算第一乘积和,并且在乘积和输出引脚组上提供第一乘积和。该器件还包括累加器电路块,该累加器电路块包括耦合到乘积和输出引脚组的累加器输入引脚组,累加器电路块被配置为通过在累加器输入引脚组上接收第一值并将第一值加到累加器电路块中的累加值中以替换替换累加值来累加第一值,并且在累加值输出引脚组上提供累加值。该器件还包括跳过电路块,该跳过电路块包括耦合到累加值输出引脚组的累积值输入引脚组,跳过电路块被配置为将累加值与阈值进行比较,并且当满足阈值时,在跳过引脚上断言跳过信号。该器件还包括控制电路块,控制电路块被配置为检查跳过引脚是否有跳过信号,并且当跳过信号未被断言时:使乘法累加电路块处理M个权重向量的组的下一个权重位,并且当跳过信号被断言时:终止处理M个权重向量的组的剩余部分、断言输出就绪信号以及将累加值提供给激活电路。
在一个实施例中,跳过电路块包括:减法电路块,被配置为从输入和中减去移位的输入和以计算阈值,移位的输入和移位的次数基于正被处理的组M个权重向量的组的权重位位置,并且将阈值与累加值进行比较。在一个实施例中,阈值是第一阈值,其中减法电路块还被配置为通过在将第一阈值与累加值进行比较之前将第二阈值加到累加值中来改变累加值。在一个实施例中,第二阈值是常数值、基于输入和或累加值的导出值或者基于环境变量的动态值,环境变量包括电源状态、电池状态、硬件状态或资源状态。在一个实施例中,累加器电路块包括ADD引脚,其中,累加器电路块被配置为当由ADD引脚控制时从累加值中减去第一值,其中,控制电路块还被配置为当第一权重位对应于M个权重向量的组的最高有效位时经由ADD引脚控制累加器电路块减去第一值。在一个实施例中,该器件还包括:输入锁存电路块,被配置为储存M个输入向量的组;权重位锁存电路块,被配置为储存M个权重位的组;和乘法累加电路块,包括乘法块和加法器树以计算第一乘积和。
另一个实施例涉及一种包括跳过模块的计算系统,包括乘法累加器件,该乘法累加器件被配置为以按位加权的方式分别计算输入节点与输入中的权重向量的乘积,并对乘积中的每个求和以计算每个位的乘积和,根据每个位的位值位置对乘积和进行加权,并且将乘积和累加为累加的乘积和。该系统还包括跳过模块,该跳过模块被配置为将乘积和与阈值进行比较,并且当满足阈值时断言跳过信号。该系统还包括控制逻辑器件,该控制逻辑器件被配置为当跳过信号未被断言时使乘法累加器件处理权重向量的下一位,并且当跳过信号被断言时使乘法累加器件中止处理权重向量的剩余部分。该系统还包括激活器件,激活器件基于累加的乘积和的值确定输入节点的卷积值。
在一个实施例中,跳过模块被配置为在处理每个权重位之后评估乘积和。在一个实施例中,跳过模块的阈值是基于输入节点的所有输入的输入和来计算的。在一个实施例中,跳过模块的阈值是通过从输入和中减去位-移位的输入和来计算的,位-移位的输入和通过与当前评估的权重位的位位置相对应的位的数量来移位。在一个实施例中,阈值是第一阈值,跳过模块还被配置为将第二阈值添加到乘积和的绝对值并将它与第一阈值进行比较,并且如果大于第一阈值,则断言跳过信号。在一个实施例中,第二阈值是基于乘积和的当前值、输入节点的所有输入的输入和或者常数值的预定阈值。在一个实施例中,第二阈值是基于环境因素的动态阈值,环境因素包括电源状态、电池电平、计算资源可用性或硬件故障中的一个或多个。
上述概述了几个实施例的特征,以便本领域技术人员可以更好地理解本公开的各个方面。本领域技术人员应当理解,他们可以容易地使用本公开作为设计或修改用于实现本文所介绍的实施例的相同目的和/或实现其相同优点的其它过程和结构的基础。本领域技术人员还应当认识到,此类等效结构不背离本发明的精神和范围,并且它们可以在不背离本发明的精神和范围的情况下在本发明中进行各种改变、替换以及改变。
Claims (10)
1.一种用于乘积和累加的方法,包括:
以按字输入和按位加权的方式对输入向量和权重向量的乘积执行部分和累加,以得到部分累加的乘积和;
将所述部分累加的乘积和与阈值条件进行比较;以及
当所述部分累加的乘积和满足所述阈值条件时,断言跳过指示符以指示跳过和累加的剩余计算。
2.根据权利要求1所述的方法,还包括:
跳过所述输入向量与所述权重向量的至少一个位位置的乘积的部分和累加。
3.根据权利要求1所述的方法,其中,所述阈值条件是动态计算的阈值条件。
4.根据权利要求1所述的方法,其中,当所述部分累加的乘积和为负并且未知权重位的剩余集合将不能够使所述部分累加的乘积和为正时,断言所述跳过指示符。
5.根据权利要求4所述的方法,其中,所述未知权重位的所述剩余集合均被假设为1。
6.根据权利要求1所述的方法,还包括:
对所述部分累加的乘积和执行激活函数,并且将所述激活函数的输出记录为等于0或所述部分累加的乘积和中的较大值。
7.根据权利要求1所述的方法,还包括,当所述部分累加的乘积和小于所述阈值条件时:以按字输入和按位加权的方式对所述输入向量与所述权重向量的剩余部分的乘积执行第二部分和累加,以得到第二部分累加的乘积和。
8.一种包括跳过电路块的计算器件,包括:
乘法累加电路块,被配置为分别将M个输入向量的组乘以M个权重向量的组的第一权重位以计算第一组M个乘积,将所述第一组M个乘积相加在一起以计算第一乘积和,并且在乘积和输出引脚组上提供所述第一乘积和;
累加器电路块,包括耦合到所述乘积和输出引脚组的累加器输入引脚组,所述累加器电路块被配置为通过在所述累加器输入引脚组上接收所述第一值并将所述第一值加到所述累加器电路块中的累加值中以替换所述替换累加值来累加第一值,并且在累加值输出引脚组上提供所述累加值;
跳过电路块,包括耦合到所述累加值输出引脚组的累积值输入引脚组,所述跳过电路块被配置为将所述累加值与阈值进行比较,并且当满足所述阈值时,在跳过引脚上断言跳过信号,以及
控制电路块,被配置为检查所述跳过引脚是否有所述跳过信号,并且当所述跳过信号未被断言时:使所述乘法累加电路块处理所述M个权重向量的组的下一个权重位,并且当所述跳过信号被断言时:终止处理所述M个权重向量的组的剩余部分、断言输出就绪信号以及将所述累加值提供给激活电路。
9.根据权利要求8所述的计算器件,其中,所述跳过电路块包括:
减法电路块,被配置为从输入和中减去移位的输入和以计算所述阈值,所述移位的输入和移位的次数基于正被处理的所述组M个权重向量的组的权重位位置,并且将所述阈值与所述累加值进行比较。
10.一种包括跳过模块的计算系统,包括:
乘法累加器件,被配置为以按位加权的方式分别计算输入节点与输入中的权重向量的乘积,并对所述乘积中的每个求和以计算每个位的乘积和,根据每个位的位值位置对所述乘积和进行加权,并且将所述乘积和累加为累加的乘积和;
跳过模块,被配置为将所述乘积和与阈值进行比较,并且当满足所述阈值时断言跳过信号;
控制逻辑器件,被配置为当所述跳过信号未被断言时使所述乘法累加器件处理所述权重向量的下一位,并且当所述跳过信号被断言时使所述乘法累加器件中止处理所述权重向量的剩余部分;以及
激活器件,所述激活器件基于所述累加的乘积和的值确定所述输入节点的卷积值。
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202163232915P | 2021-08-13 | 2021-08-13 | |
US63/232,915 | 2021-08-13 | ||
US202163254574P | 2021-10-12 | 2021-10-12 | |
US63/254,574 | 2021-10-12 | ||
US17/679,260 US20230053294A1 (en) | 2021-08-13 | 2022-02-24 | Bitwise product-sum accumulations with skip logic |
US17/679,260 | 2022-02-24 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115469825A true CN115469825A (zh) | 2022-12-13 |
Family
ID=84368016
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210829419.2A Pending CN115469825A (zh) | 2021-08-13 | 2022-06-22 | 包括跳过电路块的计算器件和系统以及方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20230053294A1 (zh) |
JP (1) | JP7420880B2 (zh) |
KR (1) | KR20230025325A (zh) |
CN (1) | CN115469825A (zh) |
DE (1) | DE102022105152A1 (zh) |
TW (1) | TWI815404B (zh) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0830572A (ja) * | 1994-07-18 | 1996-02-02 | Nippon Telegr & Teleph Corp <Ntt> | ニューラルネットワーク回路及びこれを用いた演算方法 |
JP3292073B2 (ja) * | 1996-12-19 | 2002-06-17 | 日本電気株式会社 | ニューラルユニット演算方式およびその装置 |
SG90099A1 (en) * | 1999-02-25 | 2002-07-23 | Texas Instruments Inc | A system and method for optimizing signal processing via a unique truncating and rounding operation |
CN109328361B (zh) * | 2016-06-14 | 2020-03-27 | 多伦多大学管理委员会 | 用于深度神经网络的加速器 |
US11663001B2 (en) * | 2018-11-19 | 2023-05-30 | Advanced Micro Devices, Inc. | Family of lossy sparse load SIMD instructions |
US11562212B2 (en) * | 2019-09-09 | 2023-01-24 | Qualcomm Incorporated | Performing XNOR equivalent operations by adjusting column thresholds of a compute-in-memory array |
-
2022
- 2022-02-24 US US17/679,260 patent/US20230053294A1/en active Pending
- 2022-03-04 DE DE102022105152.8A patent/DE102022105152A1/de active Pending
- 2022-04-19 TW TW111114891A patent/TWI815404B/zh active
- 2022-04-19 KR KR1020220048056A patent/KR20230025325A/ko not_active Application Discontinuation
- 2022-06-22 CN CN202210829419.2A patent/CN115469825A/zh active Pending
- 2022-08-12 JP JP2022128737A patent/JP7420880B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
DE102022105152A1 (de) | 2023-02-16 |
KR20230025325A (ko) | 2023-02-21 |
TW202307646A (zh) | 2023-02-16 |
JP2023026404A (ja) | 2023-02-24 |
JP7420880B2 (ja) | 2024-01-23 |
TWI815404B (zh) | 2023-09-11 |
US20230053294A1 (en) | 2023-02-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102181385B1 (ko) | 신경망에서의 무작위성 생성 | |
Anguita et al. | Feed-forward support vector machine without multipliers | |
JPH07248841A (ja) | 非線形関数発生装置およびフォーマット変換装置 | |
EP3769208B1 (en) | Stochastic rounding logic | |
JP2019139338A (ja) | 情報処理装置、情報処理方法、およびプログラム | |
CN112835551B (zh) | 用于处理单元的数据处理方法、电子设备和计算机可读存储介质 | |
Oudjida et al. | Radix-$2^{r} $ arithmetic for multiplication by a constant | |
US20210091786A1 (en) | Hardware module for converting numbers | |
JP2005018759A (ja) | 2の浮動小数点数乗の概算を実施するための方法および装置 | |
JP2021530761A (ja) | 補償命令により可能にされる低精度ディープニューラルネットワーク | |
JP4273071B2 (ja) | 除算・開平演算器 | |
TWI815404B (zh) | 用於處理資料之方法、裝置及系統 | |
CN110659014B (zh) | 乘法器及神经网络计算平台 | |
US20230401420A1 (en) | Compiling asymmetrically-quantized neural network models for deep learning acceleration | |
CN111445016A (zh) | 加速非线性数学计算的系统及方法 | |
TW202219739A (zh) | 藉由算數及/或逐位元單元的條件敘述執行 | |
Zadiraka et al. | Calculating the Sum of Multidigit Values in a Parallel Computational Model | |
US20240086152A1 (en) | Calculation unit for multiplication and accumulation operations | |
Sreehari et al. | A hardware accelerator based on quantized weights for deep neural networks | |
US11636176B2 (en) | Interpolation method and apparatus for arithmetic functions | |
Chen et al. | Low-area and high-speed approximate matrix-vector multiplier | |
Cardarilli et al. | Approximated Canonical Signed Digit for Error Resilient Intelligent Computation | |
US20210334635A1 (en) | Neural network accelerator configured to perform operation on logarithm domain | |
Li et al. | An Area-Power-Efficient Multiplier-less Processing Element Design for CNN Accelerators | |
KR20240057754A (ko) | 인메모리 컴퓨팅을 위한 메모리 장치 및 그 동작 방법 |
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 |