CN110889080B - 乘积累加运算装置、乘积累加运算方法和系统 - Google Patents
乘积累加运算装置、乘积累加运算方法和系统 Download PDFInfo
- Publication number
- CN110889080B CN110889080B CN201910706737.8A CN201910706737A CN110889080B CN 110889080 B CN110889080 B CN 110889080B CN 201910706737 A CN201910706737 A CN 201910706737A CN 110889080 B CN110889080 B CN 110889080B
- Authority
- CN
- China
- Prior art keywords
- data
- multiply
- memory
- accumulate
- value
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title abstract description 29
- 230000015654 memory Effects 0.000 claims abstract description 250
- 238000011156 evaluation Methods 0.000 claims description 20
- 230000001174 ascending effect Effects 0.000 claims description 5
- 239000000284 extract Substances 0.000 claims description 3
- 238000009825 accumulation Methods 0.000 abstract description 46
- 238000004364 calculation method Methods 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 24
- 238000012545 processing Methods 0.000 description 9
- 238000013500 data storage Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 238000013528 artificial neural network Methods 0.000 description 5
- 238000010801 machine learning Methods 0.000 description 5
- 238000013527 convolutional neural network Methods 0.000 description 4
- 238000012360 testing method Methods 0.000 description 3
- 101100521334 Mus musculus Prom1 gene Proteins 0.000 description 2
- 230000000052 comparative effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000006866 deterioration Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- 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/15—Correlation function computation including computation of convolution operations
- G06F17/153—Multidimensional correlation or convolution
-
- 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- 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/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- 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)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Neurology (AREA)
- Nonlinear Science (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Complex Calculations (AREA)
Abstract
本公开的实施例涉及乘积累加运算装置、乘积累加运算方法和系统。提供了一种乘积累加计算装置、乘积累加计算方法和用于有效地执行乘积累加计算的系统。乘积累加运算装置包括多个存储器块,该多个存储器块存储多个被乘元素并且对输入数据执行乘积累加运算。每个存储器块存储多个被乘元素的相同数位的一位值。输入数据生成单元通过从多个乘元素中提取相同数位的数据来生成输入数据。控制单元累加和相加乘积累加运算结果的值;以及数据存储器存储累加相加值作为接下来的乘积累加运算的乘元素。
Description
相关申请的交叉引用
于2018年9月7日提交的、包括说明书、附图和摘要的日本专利申请号2018-167802的公开内容,以其整体通过引用并入本文。
背景技术
在深度神经网络(DNN)中,已知多个元素的乘积累加运算是处理时间中的主导因素。在非专利文献1“In-Memory Computation of a Machine-Learning Classifier in aStandard 6T SRAM Array”中,公开了一种用于在存储器阵列内执行乘积累加运算的技术。在非专利文献1中,使用存储器单元阵列配置,并且被连接到相应位线的多个存储器单元被同时驱动以进行充电和放电。以这种方式,同时相加多个乘法结果。
通常,用于访问存储器单元阵列的字线的输入是数字值0/1,并且使用1位输入的乘积累加运算可能导致在诸如通用对象识别等应用中的识别准确度的降低。因此,通过使用多值位输入执行乘积累加运算,可以提高识别准确度。然而,在普通存储器单元阵列中,必须增加存储器大小以便使用多值位输入来执行运算。例如,为了利用4位的无符号多值位输入来执行运算,对于16(=2^4)个单元,在相同的位线方向上存储被乘元素。在非专利文献1中,DAC(数模转换器)被设置在输入部分处以便使用多值位输入。施加到字线的电压被控制为模拟值,以对应于多值位,从而在多值位输入中执行乘法过程。
在日本未审查专利申请公开号2017-79017(专利文献1)中,公开了一种用于DNN的数字架构级技术。在专利文献1中,在输入数据部分中提供有移位寄存器。
发明内容
DNN算法的一个特征是,多次重复访问相同的数据。因此,在专利文献1中,通过使用上述移位寄存器来在本地寄存器中重用数据。结果,可以减少对主存储器的访问次数,并且可以抑制冗余存储器访问、与其相关联的功率开销等。此外,专利文献1采用累加相加方法,同时移位在乘积累加运算时要进行累加和相加的元素的乘法的定时。
在专利文献1中,移位作为累加相加的元素的用于执行乘法的定时。然而,难以将专利文献1中公开的乘积累加运算应用于其中同时执行乘积累加运算的非专利文献1。
在非专利文献1中,当执行多值位输入运算时,存储器的输入部分需要诸如DAC等电路。尽管存储器阵列内的乘积累加运算中的功率效率增加,但是存在当向存储器阵列生成输入数据时消耗能量的问题。此外,当在存储器单元阵列中执行乘积累加运算时,需要同时驱动大量字线。因此,阵列的每列都需要DAC电路,能耗和面积开销增加。此外,在使用模拟输入的算术运算中,算术运算结果易受变化的影响,并且发生算术运算结果的可靠性降低的问题。换言之,即使当提供DAC电路以使用多值位输入时,也有可能不能提高应用上的识别准确度。
根据本说明书的描述和附图,其他目的和新颖特征将变得很清楚。
根据一个实施例,乘积累加运算装置包括多个存储器块和输入数据生成器,该多个存储器块存储多个被乘元素并且对输入数据执行乘积累加运算,其中一个存储器块将多个被乘元素的相同数位的一位值存储为第一位值,输入数据生成器用于从多个乘元素中提取相同数位的第二位值以生成输入数据。
根据上述实施例,可以有效地执行乘积累加运算。
附图说明
图1是示出根据第一实施例的乘积累加运算装置的配置的框图;
图2是图示控制单元的配置的框图;
图3是图示译码器的配置的框图;
图4是用于说明存储器块之间的数据存储方法的图示;
图5是存储器块的算术运算流程;
图6是示出存储器块的算术运算流程中的每个步骤的乘元素的数位和块地址的表;
图7是存储器块中的算术运算;
图8是用于说明输入数据生成单元中的处理的图;
图9是根据比较示例的输入数据生成单元;
图10是根据第二实施例的输入数据生成单元;
图11是示出当K=2位时的存储器块的算术运算流程的图示;
图12是示出当K=2位时的乘元素的数位和块地址的表;
图13是示出当K=1位时的存储器块的算术运算流程的图示;
图14是示出当K=1位时的乘元素的数位和块地址的表;
图15是示出第三实施例的系统的框图;
图16是用于说明移位地址以获得最佳地址的过程的图示;
图17是图示用于确定最佳地址的过程的流程图;
图18是图示第三实施例中的译码器的框图;以及
图19是示出根据另一实施例的乘积累加运算装置的框图。
具体实施方式
为了清楚地解释,适当地省略和简化以下描述和附图。另外,附图中描述为用于执行各种过程的功能块的各个元件在硬件方面可以由CPU(中央处理单元)、存储器和其他电路进行配置,并且在软件方面可以由在存储器中加载的程序来实现。因此,本领域技术人员可以理解,这些功能块可以通过仅硬件、仅软件或其组合以各种形式实现,并且本发明不限于它们中的任何一种。在附图中,相同的元件由相同的附图标记表示,并且根据需要省略其重复描述。
在下面的说明中,将说明用于对被乘元素和乘元素执行乘积累加运算的乘积累加运算装置、以及乘积累加运算过程。例如,乘积累加运算装置使用用于CNN(卷积神经网络)的加权参数作为被乘元素,并且使用输入数据作为乘元素。被乘元素是通过诸如深度学习等机器学习获得的值。乘元素例如是基于由诸如相机等传感器检测的检测数据而获得的特征量等。
乘元素和被乘元素分别是多位或1位数据。乘积累加运算装置执行多个乘元素和多个被乘元素的乘积累加运算。通过乘积累加运算获得的值变为用于CNN的下一层的乘积累加运算运算的乘元素。
例如,乘积累加运算装置在一个乘积累加运算中对m个乘元素(m是等于或大于2的整数)和m个被乘元素执行乘积累加运算。也就是说,乘积累加运算装置将m个乘元素乘以对应的m个被乘元素的数据以获得m个乘积。然后,乘积累加运算装置获得m个乘积之和作为乘积累加运算值。该乘积累加运算值变为接下来的乘积累加运算的乘元素。例如,乘积累加运算值用于CNN的下一层的乘积累加运算。以这种方式,乘积累加运算装置重复执行乘积累加运算。因此,在本实施例中,乘积累加运算装置包括用于执行乘积累加运算的多个存储器块。
第一实施例
图1是示出根据第一实施例的乘积累加运算装置100的配置的框图。乘积累加运算装置100包括存储器单元101、存储器块102、块阵列103、数据存储器104、译码器105、控制单元106和指令存储器107。
存储器单元101分别存储被乘元素的位数据。具体地,一个存储器单元101存储一位数据。作为存储器单元,例如,可以使用诸如SRAM(静态随机存取存储器)、闪速存储器、MRAM(磁阻随机存取存储器)、ReRAM(电阻式随机存取存储器)或FeRAM(铁电随机存取存储器)等存储器单元。
存储器块102包括多个存储器单元101。在存储器块102中,存储器单元101被布置成阵列。存储器块102包括多个字线和多个位线。此外,存储器块102具有乘积累加运算功能。具体地,存储器块102具有同时访问存储器单元的数据的功能,并且具有读取在多个存储器单元101中存储的数据的功能。每个存储器块102还包括用于将与位线电位相对应的输出值转换为数字值的A/D(模拟数字)转换器。
每个存储器块102共同存储被乘元素的相同数位的数据。因此,一个存储器块102存储用于乘积累加运算的被乘元素的相同数位的数据。
块阵列103包括多个存储器块102。虽然在图1中,块阵列103包括3×3个(即9个)存储器块102,但是块阵列103中包括的存储器块102的数目没有特别限制。
数据存储器104是用于存储乘元素的主存储器。数据存储器104具有数据读取功能和数据写入功能。数据存储器104将基于存储器块102的运算结果的存储乘积累加运算值存储作为接下来的乘积累加运算的乘元素。
译码器105从数据存储器104接收多个乘元素。然后,译码器105选择多个乘元素的相同数位的值以获得输入数据。译码器105将输入数据输出到与指定地址相对应的存储器块102。输入数据由在多个乘元素中包括的相同数位的数据组成。例如,输入数据由与用于一个乘积累加运算的乘元素的数目相对应的位数的数据组成。
控制单元106控制乘积累加计算装置100。具体地,乘元素的数据从数据存储器104读出。控制单元106将从数据存储器104读取的数据提供给译码器105。控制单元106控制由译码器105选择的乘元素的数位。此外,控制单元106控制块地址和输入数据的选择。控制单元106向译码器105输出用于指定存储器块102的块地址的信息,输入数据被提供给该块地址。此外,控制单元106从存储器块102接收运算值,该运算值是乘积累加运算结果。图2是示出控制单元106的配置的框图。控制单元106包括控制器1061、写数据生成单元1064、累加加法器1063和位移位器1062。控制器1061控制乘积累加运算装置100。位移位器1062根据乘元素和被乘元素的数位来对从存储器块102接收的运算值执行移位运算,并且将结果提供给累加加法器1063。累加加法器1063将位移位器1062的值与直到前一步骤的累加相加值相加,并且存储它。当所有数位的乘积累加运算完成时,控制单元106基于指定的乘法数据的数位和运算值在写数据生成单元1064中生成写数据。控制单元106将写数据写入到数据存储器104的指定地址。写入数据存储器104中的写数据变为接下来的乘积累加运算的乘元素。
指令存储器107存储乘元素的位数和被乘元素的位数。指令存储器107存储数据存储器104的写地址和读地址。指令存储器107存储存储器块102的地址信息。控制单元106顺序地读出在指令存储器107中存储的诸如位数和地址等数据。然后,控制单元106基于诸如位数和地址等数据来执行与乘积累加运算有关的控制。结果,控制单元106可以将适当输入数据提供给与适当块地址相对应的存储器块102。
接下来,将参考图3描述译码器105。图3是示出译码器105的配置的框图。译码器105包括第二位计数器202、第一位计数器203、地址保持单元204、块地址生成单元205、选择器206和输入数据生成单元207。
第一位计数器203是保持与被乘元素的数位相对应的第一数位信息的第一保持单元。第二位计数器202是保持与乘元素的数位相对应的第二数位信息的第二保持单元。地址保持单元204保持从数据存储器104读取的乘元素的存储器地址。块地址生成单元205参考存储器地址和第一数位信息,并且生成指定存储器块的块地址。块地址生成单元205将块地址输出到选择器206。
输入数据生成单元207临时保持来自数据存储器104的乘元素。输入数据生成单元207基于乘元素的位数和存储器地址将乘元素分成数位。然后,输入数据生成单元207选择乘元素的数位,并且向指定的存储器块生成输入数据。输入数据是多个乘元素的相同数位的数据的集合。也就是说,输入数据生成单元207从多个乘元素中提取相同数位的数据,并且将提取的数据作为输入数据输出到选择器206。
选择器206将输入数据从输入数据生成单元207输出到对应的存储器块102。即,选择器206将输入数据输出到与由块地址生成单元205生成的块地址相对应的存储器块102。
图4示出了存储器块102中的被乘元素的数据存储方法。图4示出了其中每个被乘元素是4位数据的示例。这里,ai是乘元素之一,并且wji是被乘元素之一。注意,i是从1到m的任意整数,j是从1到n的任意整数。在一个乘积累加运算中,执行m(m是等于或大于2的整数)个被乘元素和m个乘元素的乘积累加运算。也就是说,m个乘元素乘以对应的被乘元素以获得m个乘积。m个乘积的总和变为通过wj,i和ai的乘积累加运算得到的乘积累加运算值oj。
wn,i是4位数据,并且由0到3个比特数位(还简称为数位)组成。在wn,i中,第0数位的数据被定义为w0 n,i,第1数位的数据被定义为w1 n,i,第2数位的数据被定义为w2 n,i,并且第3数位的数据被定义为w3 n,i。wj,i也可以用与wn,i相同的方式表示。
各个数位的数据是1位数据,wk n,i表示0或1。注意,k是指示数位的值,并且是从0到3的任意整数。wn,i由下式给出:
wn,i=23·w3 n,i+22·w2 n,i+21·w1 n,i+20·w0 n,i
wj,i根据数位的数目存储在不同的存储器块102中。例如,一个存储器块102存储第三数位的数据w3 1,1到w3 n,m,即m×n个1位数据。w3 1,1到w3 n,m被概括并且表示为w3 i,j。下面的存储器块102存储第二数位的数据w2 i,j,即数据w2 1,1到数据w2 n,m。另外两个存储器块102分别存储第一数位数据w1 i,j(即,w1 1,1到w1 n,m)和第零数位数据w0 i,j(即,w0 1,1到w0 n,m)。每个存储器块102存储(n×m)个一位数据,即(n×m)位数据。
因此,每个存储器块102包括m×n个存储器单元101,并且每个存储器单元101存储一位数据。存储器块102包括n个位线102b和m个字线102w。在与一个位线102b相对应的m个单元中,存储m个被乘元素的相同数位的数据。例如,图4示出了存储器块102,存储器块102存储被乘元素w3 1,1到w3 n,m。如图4所示,在与第一位线102b相对应的存储器单元101中,存储w3 1,1到w3 1,m。在该配置中,由于存储器块102相对于m个乘元素的输入利用n行被乘元素来执行乘积累加运算,所以同时执行m×n个乘积累加运算。
m个乘元素的相同数位的数据从m个字线102w共同提供给存储器单元101。此时,其中存储“1”作为乘元素的值的行的字线被驱动,并且位线根据其中存储乘元素的存储器单元的值而被充电和放电。其中存储“0”作为乘元素的值的行的字线不被驱动,并且不管其中存储乘元素的存储器单元的值如何,都不对位线进行充电/放电。以这种方式,m个乘元素的相同数位的数据可以同时被提供给用于一个乘积累加运算的m个被乘元素的相同数位的数据w3 1,1到w3 1,m。读取电路(未示出)读取位线电位并且执行A/D转换。然后,数字值被输出到控制单元106。
因此,对于每个数位,一个被乘元素被存储在不同的存储器块102中。当一个被乘元素是4位数据时,一个被乘元素以分布方式存储在四个存储器块102中。在通用存储器存储格式的情况下,数据以数据单位(乘积累加运算中的乘法的一个元素单位)存储在相同的存储器块中。这是因为,当一个被乘元素数据对于每个数位以分布的方式存储在不同块中时,在基于数字算术单元的使用方法中发生数据的多次访问和冗余读取。因此,通常,以4位格式存储的数据被存储在同一存储器块中。
将参考图5到图8描述存储器块中的运算处理。图5是示出存储器块中的乘积累加运算的流程的图示。图6是示出对于每个步骤的块地址和数位的表。图7是示出在一个存储器块102中的运算的图示。图8是示出由译码器生成的输入数据的图示。
在以下说明中,假定一个乘元素ai是4位数据。假定ai由0到3数位组成。在ai中,第0数位的数据被定义为a0 i,第1数位的数据被定义为a1 i,第2数位的数据被定义为a2 i,第3数位的数据被定义为a3 i。ak i表示0或1。注意,i是1到m的任意整数,k是0到3的任意整数。ai由下式表示:
ai=23·a3 i+22·a2 i+21·a1 i+20·a0 i
这里,如图5所示,假定块阵列103包括9个存储器块102,并且其块地址是0到8。块地址3的存储器块102存储被乘元素wj,i的第0数位的数据w0 j,i。块地址4的存储器块102存储被乘元素wj,i的第一数位的数据w1 j,i。类似地,块地址5和6的存储器块102分别存储被乘元素wj,i的第二数位的数据w2 j,i和第三数位的数据w3 j,i。
设c是乘元素的数位,d是被乘元素的数位。c和d中的每个是等于或大于0的整数。这里,由于乘元素和被乘元素是4位,因此c和d分别是0、1、2或3。由于被乘元素和乘元素是4位数据,因此乘积累加运算装置100重复步骤(下文中,步骤1到16)16(=4×4)次。也就是说,一个乘积累加运算被时分为16个步骤并且被执行。
首先,在步骤1中,如图8所示,译码器105生成概括乘元素ai的第0位的数据a0 0到a0 m的输入数据。m个数据a0 0到a0 m统称为输入数据a0 i。译码器105将输入数据a0 i输出到在块地址3处的存储器块102。块地址3的存储器块102将a0 i和w0 j,i的乘积累加运算的结果(即,第一步骤运算值O0_0 1)输出到控制单元106。在移位器1062中,控制单元106将第一步骤运算值O0_0 1乘以与乘元素的数位(c=0)相对应的值(1=2c)和与被乘元素的数位d(d=0)相对应的值(1=2d)以获得乘法值。乘法值被相加到累加加法器1063。控制单元106将乘法值作为累加相加值存储在累加加法器1063中。步骤1处的累加相加值是O0_0 1。
在步骤2中,类似于在步骤1中,输入数据a0 0到a0 m。译码器105将输入数据a0 i输出到在块地址4处的存储器块102。在块地址4处的存储器块102向控制单元106输出a0 i和w1 j,i的乘积累加运算的结果(即,第二步骤运算值O0_1 1)。在位移位器1062中,控制单元106将第二步骤运算值O0_1 1乘以与乘元素的数位c(c=0)相对应的值(1=2c)和与被乘元素的数位d(d=1)相对应的值(2=2d)以获得乘法值cdO0_1 1。然后,控制单元106在累加加法器1063中将乘法值cdO0_1 1与步骤1的累加相加值相加,并且更新累加相加值。步骤2的累加相加值为2×O0 _1 1+O0_0 1。
在步骤3中,数据a0 0到a0 m是输入数据,类似于在步骤1和2中。译码器105将输入数据a0 i输出到存储w2 j,i的块地址5的存储器块102。块地址5的存储器块102将a0 i和w2 j,i的乘积累加运算的结果(即,第三步骤运算值O0_2 1)输出到控制单元106。在位移位器1062中,控制单元106将第三步骤运算值O0_2 1乘以与乘元素的数位c(c=0)相对应的值(1=2c)和与被乘元素的数位d(d=2)相对应的值(4=2d)以获得乘法值cdO0_2 1。然后,控制单元106在累加加法器1063中将乘法值cdO0_2 1与步骤2的累加相加值相加,并且更新累加相加值。步骤3的累加相加值为4×O0_2 1+2×O0_1 1+O0_0 1。
在步骤4中,数据a0 0到a0 m是输入数据,类似于在步骤1和2中。译码器105将输入数据a0 i输出到存储w3 j,i的块地址6的存储器块102。块地址6的存储器块102将a0 i和w3 j,i的乘积累加运算的结果(作为第四步骤运算值O0_3 1)输出到控制单元106。在位移位器1062中,控制单元106将第四步骤运算值乘以与乘元素的数位c相对应的值(1=2c)和与被乘元素的数位d(d=3)相对应的值(8=2d)以获得乘法值cdO0_3 1。然后,控制单元106在累加加法器1063中将乘法值cdO0_3 1与步骤3的累加相加值相加,并且更新累加相加值。步骤4的累加相加值为8×O0_3 1+4×O0_2 1+2×O0_1 1+O0_0 1。
在步骤5中,译码器105生成输入数据,其中概括了乘元素ai的第0位的数据a1 0到a0 m。m个数据a1 0到a1 m统称为输入数据a1 i。译码器105将输入数据a1 i输出到存储w0 j,i的块地址3的存储器块102。块地址3的存储器块102将a1 i和w0 j,i的乘积累加运算的结果(即,第五步骤运算值O1_0 1)输出到控制单元106。
在位移位器1062中,控制单元106将第五步骤运算值O1_0 1乘以与乘元素的数位c(c=1)相对应的值(2=2c)和与被乘元素的数位d(d=0)相对应的值(1=2d)以获得乘法值cdO1_0 1。然后,控制单元106通过在累加加法器1063中将乘法值cdO1_0 1与步骤4处的累加相加值相加来更新累加相加值。步骤5处的累加和是2×O1_0 1+8×O0_3 1+4×O0_2 1+2×O0_1 1+O0_0 1。
此后,乘积累加运算装置100重复上述过程直到步骤16。图6示出了在步骤1到16中的乘元素的数位和块地址。步骤6到16根据图6所示的数位和块地址来执行。控制单元106在位移位器1062中将各个步骤中的乘积累加运算结果Oc_d j乘以与乘元素的数位c相对应的值(2c)和与被乘元素的数位d相对应的值(2d)以获得乘法值。然后,控制单元106在累加加法器1063中将累加相加值累加并且相加,并且覆写并且存储累加相加值。在到步骤16的过程完成之后,控制单元106将累加相加结果转换为写数据生成单元1064中的乘元素的最大数位的数据,并且将该数据存储在数据存储器104中。乘积累加运算装置100重复乘积累加运算和累加相加运算,从而使用存储器块102实现利用多值位的乘积累加运算。
为了执行上述过程,译码器105提取m个1位数据(该数据是m个乘元素的相同数位)以用作输入数据。输入数据(其是m位数据)沿着存储器块102的列方向布置,并且被提供给存储器块102。
在存储器块102的列方向上,存储被乘元素的相同数位的数据。然后,在存储器块102的列方向上输入多个乘元素的相同数位的数据。存储器块102对乘元素的某个数位的数据与被乘元素的某个数位执行乘积累加运算。然后,存储器块102通过按顺序改变数位组合来重复地获得乘积累加运算值。此外,通过将乘积累加运算值乘以与数位相对应的值而获得的乘法值之和变为下一层的乘积累加运算的乘元素。通过这样做,可以有效地执行用于卷积运算的乘积累加运算。乘积累加运算装置100类似地使用以下乘元素执行乘积累加运算。
在本实施例中,对于每个数位划分被乘元素,并且将每个位存储在不同的存储器块中。此外,对于每个数位划分用作输入数据的乘元素,并且通过时分将每个数位的数据提供给存储器块102。结果,可以使用存储器块实现多值位的乘积累加运算。
通过使用这种配置,相对于包括使用存储器元件的乘积累加运算电路阵列的处理器,可以生成多值输入数据,因为它是数字表示。因此,可以执行多位乘积累加运算而无需DAC等的附加成本。例如,不需要在输入级中提供用于将输入数据输入到存储器块的DAC。
在上面的描述中,已经描述了一个示例,其中被乘元素的每个数位的数据和乘元素的每个数位的数据按升序处理,但是处理数据的顺序没有特别限制。例如,译码器105可以向块阵列103提供数据,使得被乘元素和乘元素的每个位数的数据按降序处理。更具体地,当按降序处理被乘元素的数位时,可以将输入数据提供给存储被乘元素的第三数位的数据的存储器块102,并且然后提供给存储被乘元素的第二数位的数据的存储器块102。当按降序处理乘元素的数位时,译码器可以生成多个乘元素的第三数位的数据作为输入数据,并且然后生成乘元素的第二数位的数据作为输入数据。
在本实施例中,乘元素和被乘元素的数据被描述为4位数据,但是这些数据不限于4位。通过增加用于存储被乘元素的块存储器,可以任意扩展被乘元素的数位的数目。另外,通过增加时分数(步数)可以任意扩展要输入的乘元素的数位的数目,并且在使用相同的硬件配置的同时,可以针对每个应用根据识别准确度和处理速度设置最佳数位的数目。
第二实施例
在本实施例中,数据存储器104的数据存储格式和输入数据生成单元207的配置与第一实施例中的不同。除数据存储器104和输入数据生成单元207的数据存储格式之外的基本配置与第一实施例的相同。例如,存储器块102的数据存储格式与第一实施例的相同。将适当地省略对与第一实施例相同的内容的描述。
在本实施例中,改进了数据存储器104的数据存储格式以实现位可伸缩性。此外,可以简化译码器105的电路配置以改善面积和速度。图9是示出根据比较示例的输入数据生成单元207a的配置的框图。图10是示出第二实施例的输入数据生成单元207的配置的框图。
输入数据生成单元207包括输入缓冲器301、选择电路302和输出缓冲器303。这里,输入缓冲器301的大小是16位,输出缓冲器303的大小是4位。在下文中,将描述其中将乘元素的位长度K改变为1、2或4位的情况。
来自数据存储器104的乘元素的数据被输入到输入缓冲器301。输入缓冲器301存储乘元素的每个数位的数据。输入缓冲器301以与数据存储器的数据存储格式相对应的顺序存储数据。图9和图10示出了当K=1、2和4时数据存储器104中的16位数据的存储顺序。
选择电路302选择向输入缓冲器301输入的数据并且将数据输出到输出缓冲器303。选择电路302从存储在输入缓冲器301中的16位数据中选择4位数据。输出缓冲器303存储由选择电路302选择的数据。输出缓冲器303将存储的数据共同输出到存储器块102。从输出缓冲器303输出的数据被提供给一个存储器块102。然后,存储器块102以与第一实施例相同的方式执行乘积累加运算。
在下面的描述中,输入数据的数据长度用N表示,数据存储器104的字长用W表示,乘元素的数据长度用K表示。输入数据的数据长度N对应于输出缓冲器303的大小,并且在图9和10中N=4。在数据存储器104中,以字长W为单位执行数据的写入和读取。数据存储器104的字长W对应于输入缓冲器301的大小,并且在图9和10中,字长W=16(=24)。乘元素的数据长度K对应于乘元素的数位的数目。乘元素的长度K是2的幂,即由2n表示的整数,其中n是大于或等于0的整数。
在图9所示的输入数据生成单元207中,输入缓冲器301在相邻位中存储相同的乘元素。此外,数据存储器104以与通用数据存储格式相同的方式按乘元素的顺序存储数据。例如,当乘元素是4位数据(K=4)时,一个乘元素a1的数据a0 1、a1 1、a2 1和a3 1被存储在4个连续的位中。在乘元素a1旁边,随后的乘元素a2的数据a0 2、a1 2、a2 2和a3 2被存储在四个连续的位中。类似地,当乘元素是2位数据(K=2)时,一个乘元素的数据a0 1和a1 1被存储在两个相邻的位中。在乘元素a1旁边,随后的乘元素a2的数据a0 2和a1 2被存储在两个连续的位中。当乘元素是1位数据(K=1)时,乘元素a1到a16的a0 1到a0 16按此顺序进行存储。
输入数据生成单元207的输入缓冲器301具有16位。选择电路302从16位数据中选择数据并且将数据输出到输出缓冲器303。此时,选择电路302需要改变数据的顺序,使得相同数位的数据是连续的。也就是说,选择电路302选择四个连续乘元素的相同数位的数据。因此,当使输入数据生成单元207对应于不同的数据长度K时,选择电路302变得复杂,如图9所示。因此,可能发生面积增加或速度降低。
因此,在本实施例中,数据存储器104按照图10所示的顺序存储数据。其中乘元素的数据长度K是4位的情况与图9中的相同。即,在数据存储器104中,一个乘元素的数据连续存储,并且数据按乘元素的顺序存储。乘元素的数位按升序布置,诸如0、1、2和3,但可以按降序布置。
当乘元素的数据长度K是2位时,数据按a0 1、a1 1、a0 5、a1 5、a0 2、a1 2、a0 6、a1 6、......的顺序存储在数据存储器104中,如图10所示。即,在数据存储器104中,一个乘元素的数据连续存储,但是数据按与乘元素的顺序不同的顺序存储。例如,在乘元素a1旁边,存储不是下一乘元素a2的乘元素a5的数据。乘元素的数位按升序布置,诸如0和1,但可以按降序布置。
当乘元素的数据长度K是1位时,数据按a0 1、a0 5、a0 9、a0 13、a0 2、a0 6......的顺序存储在数据存储器104中,如图10所示。即,在数据存储器104中,数据按不同于乘元素顺序的顺序存储。例如,在乘元素a1旁边,存储不是下一乘元素a2的乘元素a5的数据。
当使用数据存储器104的字长W、乘元素的数据长度K和乘元素的最大数据长度K_max时,一个字的第i(大于或等于0且小于W的整数)数据ak index可以通过下式(1)进行一般化。
[等式1]
注意,Y mod X是通过将Y除以X而获得的余数,并且等式(1)中的商的值(即,i/K_max、W/K_max和(i mod K_max)/K)是通过四舍五入小数点后的值而获得的整数值。如果乘元素数据长度K是2n,则可以实现具有(n+1)个位可伸缩性模式的译码器105。数据存储器104存储乘元素,使得单字数据ak index的存储顺序满足等式(1)。也就是说,控制单元106以满足等式(1)的写入顺序将多个乘元素的每个位的数据写入数据存储器104中。在等式(1)中,k是按升序布置的,但可以按降序布置。
在下文中,将描述第二实施例中的过程。图11是示出存储器块102的运算流程的图示。图12是示出每个步骤中的乘元素的数位和块地址的表。在图11和图12中,乘元素的数据长度K被设置为2,并且乘元素被设置为2位数据。乘积累加运算装置100重复8个步骤(下文中称为步骤1到步骤8)。令M是字长W中所包括的乘元素的数目。在图10中的K=2位的示例中,由于a1到a8的乘元素被存储在输入缓冲器301中,因此M=8。通常,M=W/K。
具有块地址3到6的四个存储器块102存储乘元素的数据wj,i。在块地址3的存储器块102中,存储被乘元素的第0数位的w1 0 j,i。被乘元素的第一数位的数据w1 1 j,i被存储在块地址4的存储器块102中。在块地址5的存储器块102中,存储被乘元素的第0数位的w2 0 j,i。被乘元素的第一数位的数据w2 1 j,i被存储在块地址6的存储器块102中。
用于一个乘积累加运算的被乘元素的相同数位的数据被划分到两个存储器块102中并且进行存储。更具体地,与块地址3和5相对应的存储器块102存储用于一个乘积累加运算的被乘元素的第0数位数据。与块地址4和6相对应的存储器块102存储用于一个乘积累加运算的被乘元素的第一数位数据。与块地址3和4相对应的存储器块102存储多个被乘元素的不同数位的数据。与块地址5和6相对应的存储器块102存储多个被乘元素的不同数位的数据。
在步骤1中,译码器105收集作为第1到第M/2乘元素的多个乘元素的第0数位的数据以获得输入数据。这里,如上所述,输入数据生成单元207选择输入缓冲器301的数据的一部分作为输入数据。然后,选择器206将输入数据提供给块地址3的存储器块102。块地址3的存储器块102向控制单元106输出输入数据和存储在存储器块102中的数据的乘积累加运算结果(即,第一步骤运算值)。在位移位器1062中,控制单元106将第一步骤运算值乘以与乘元素的数位(c=0)相对应的值(1=2c)和与被乘元素的数位d(d=0)相对应的值(1=2d)以获得乘法值。控制单元106将乘法值作为累加相加值存储在累加加法器1063中。
在步骤2中,类似于在步骤1中,从第1到第M/2数位的多个乘元素的第0数位的数据是输入数据。选择器206将输入数据提供给块地址4的存储器块102。块地址4的存储器块102向控制单元106输出输入数据和存储在块地址4的存储器块102中的数据的乘积累加运算结果,该结果是第二步骤运算值。在位移位器1062中,控制单元106将第二步骤运算值乘以与乘元素的数位(c=0)相对应的值(1=2c)和与被乘元素的数位d(d=1)相对应的值(2=2d)以获得乘法值。控制单元106通过将乘法值与在累加加法器1063中在前一步骤中获得的累加相加值相加来更新累加相加值。
在步骤3中,译码器105收集从1到M/2的多个乘元素的第一数位的数据作为输入数据。选择器206将输入数据提供给块地址3的存储器块102。块地址3的存储器块102向控制单元106输出输入数据和存储在块地址3的存储器块102中的数据的乘积累加运算结果,该结果是第三步骤运算值。在位移位器1062中,控制单元106将第三步骤运算值乘以与乘元素的数位(c=1)相对应的值(2=2c)和与被乘元素的数位d(d=0)相对应的值(1=2d)以获得乘法值。控制单元106通过将乘法值与在累加加法器1063中在前一步骤中获得的累加相加值相加来更新累加相加值。
在步骤4中,如在步骤3中,从第1到第M/2的多个乘元素的第一个数位的数据是输入数据。选择器206将输入数据提供给块地址4的存储器块102。块地址4的存储器块102向控制单元106输出输入数据和存储在块地址4的存储器块102中的数据的乘积累加运算结果,该结果是第四步骤运算值。在位移位器1062中,控制单元106将第四步骤运算值乘以与乘元素的数位(c=1)相对应的值(2=2c)和与被乘元素的数位d(d=1)相对应的值(2=2d)以获得乘法值。控制单元106通过将乘法值与在累加加法器1063中在前一步骤中获得的累加相加值相加来更新累加相加值。
在步骤5中,译码器105收集从第M/2+1到第M乘元素的多个乘元素的第0数位的数据,并且将该数据设置为输入数据。选择器206将输入数据提供给块地址5的存储器块102。块地址5的存储器块102向控制单元106输出输入数据和存储在块地址5的存储器块102中的数据的乘积累加运算结果(即,第五步骤运算值)。在块移位器1062中,控制单元106将第五步骤运算值乘以与乘元素的数位(c=0)相对应的值(1=2c)和与被乘元素的数d位(d=0)相对应的值(1=2d)以获得乘法值。控制单元106通过将乘法值与在累加加法器1063中在前一步骤中获得的累加相加值相加来更新累加相加值。
在步骤6中,如在步骤5中,从第(M/2+1)到第M的多个乘元素的第0数位的数据是输入数据。选择器206将输入数据提供给块地址6的存储器块102。块地址6的存储器块102向控制单元106输出输入数据和存储在块地址6的存储器块102中的数据的乘积累加运算结果(即,第六步骤运算值)。在位移位器1062中,控制单元106将第六步骤运算值乘以与乘元素的数位(c=0)相对应的值(1=2c)和与被乘元素的数位d(d=1)相对应的值(2=2d)以获得乘法值。控制单元106通过将乘法值与在累加加法器1063中在前一步骤中获得的累加相加值相加来更新累加相加值。
在步骤7中,译码器105收集第M/2+1到第M乘元素的第一数位的数据作为输入数据。选择器206将输入数据提供给块地址5的存储器块102。块地址5的存储器块102向控制单元106输出输入数据和存储在存储器块102中的数据的乘积累加运算结果,该结果是第七步骤运算值。在位移位器1062中,控制单元106将第七步骤运算值乘以与乘元素的数位(c=1)相对应的值(2=2c)和与被乘元素的数位d(d=0)相对应的值(1=2d)以获得乘法值。控制单元106通过将乘法值与在累加加法器1063中在前一步骤中获得的累加相加值相加来更新累加相加值。
在步骤8中,如在步骤7中,从第M/2+1到第M的多个乘元素的第一数位的数据是输入数据。选择器206将输入数据提供给块地址6的存储器块102。块地址6的存储器块102向控制单元106输出输入数据和存储在存储器块102中的数据的乘积累加运算结果,该结果是第八步骤运算值。在位移位器1062中,控制单元106将第八步骤运算值乘以与乘元素相对应的数位(c=1)的值(2=2c)和与被乘元素的数位d(d=1)相对应的值(2=2d)以获得乘法值。控制单元106通过将乘法值与在累加加法器1063中在前一步骤中获得的累加相加值相加来更新累加相加值。在到步骤8的处理完成之后,控制单元106将累加的相加结果转换为写数据生成单元1064中的乘元素的最大数位的数据,并且将该数据存储在数据存储器104中。
接下来,将参考图13和图14描述其中乘元素的数据长度K是1的情况。图13是示出存储器块的运算流程的图示。图14是示出每个步骤中的乘元素的数位和块地址的表。在图13和图14中,乘元素的数据长度K被设置为1,并且乘元素被设置为1位数据。乘积累加运算装置100重复4个步骤(下文中称为步骤1到步骤4)。在以下描述中,M是字长W中包括的乘元素的数目。在图10中的K=1位的情况下,由于a1到a16的乘元素被存储在输入缓冲器301中,因此M=16。
与块地址3到6相对应的四个存储器块102存储被乘元素的数据wj,i。在块地址3的存储器块102中,存储被乘元素的第0数位的w1 0 j,i。在块地址4的存储器块102中,存储被乘元素的第0数位的数据w2 0 j,i。在块地址5的存储器块102中,存储被乘元素的第0数位的w3 0 j,i。被乘元素的第0数位的数据w4 1 j,i被存储在块地址6的存储器块102中。
用于一个乘积累加运算的被乘元素的相同数位的数据被划分到四个存储器块102中并且进行存储。更具体地,与块地址3到6相对应的存储器块102都存储用于一个乘积累加运算的被乘元素的第0位数据。
在步骤1中,译码器105收集从第1到第M/4乘元素的多个乘元素的第0数位的数据以获得输入数据。这里,如上所述,输入数据生成单元207选择输入缓冲器301的数据的一部分作为输入数据。然后,选择器206将输入数据提供给块地址3的存储器块102。块地址3的存储器块102向控制单元106输出输入数据和存储在块地址3的存储器块102中的数据的乘积累加运算结果(即,第一步骤运算值)。在块移位器1062中,控制单元106将第一步骤运算值乘以与乘元素的数位(c=0)相对应的值(1=2c)和与被乘元素的数位d(d=0)相对应的值(1=2d)以获得乘法值。控制单元106将乘法值作为累加相加值存储在累加加法器1063中。
在步骤2中,译码器105收集从第M/4+1到第M/2乘元素的多个乘元素的第0数位的数据作为输入数据。选择器206将输入数据提供给块地址4的存储器块102。块地址4的存储器块102向控制单元106输出输入数据和存储在块地址4的存储器块102中的数据的乘积累加运算结果,该结果是第二步骤运算值。在位移位器1062中,控制单元106将第二步骤运算值乘以与乘元素的数位(c=0)相对应的值(1=2c)和与被乘元素的数位d(d=0)相对应的值(1=2d)以获得乘法值。控制单元106通过将乘法值与在累加加法器1063中在前一步骤中获得的累加相加值相加来更新累加相加值。
在步骤3中,译码器105收集从第(M/2+1)到第(3M/4)的多个乘元素的第0数位的数据作为输入数据。选择器206将输入数据提供给块地址5的存储器块102。块地址5的存储器块102向控制单元106输出输入数据和存储在块地址5的存储器块102中的数据的乘积累加运算结果,该结果是第三步骤运算值。在位移位器1062中,控制单元106将第三步骤运算值乘以与乘元素的数位(c=0)相对应的值(1=2c)和与被乘元素的数位d(d=0)相对应的值(1=2d)以获得乘法值。控制单元106通过将乘法值与在累加加法器1063中在前一步骤中获得的累加相加值相加来更新累加相加值。
在步骤4中,译码器105收集从第3M/4+1到第M的多个乘元素的第0数位的数据,并且将数据设置为输入数据。选择器206将输入数据提供给块地址6的存储器块102。块地址6的存储器块102向控制单元106输出输入数据和存储在块地址6的存储器块102中的数据的乘积累加运算结果,该结果是第四步骤运算值。在位移位器1062中,控制单元106将第四步骤运算值乘以与乘元素的数位(c=0)相对应的值(1=2c)和与被乘元素的数d位(d=0)相对应的值(1=2d)以获得乘法值。控制单元106通过将乘法值与在累加加法器1063中在前一步骤中获得的累加相加值相加来更新累加相加值。在到步骤4的处理完成之后,控制单元106将累加相加结果转换为写数据生成单元1064中的乘元素的最大数位的数据,并且将该数据存储在数据存储器104中。
在本实施例中,当k(k是从0到K的任何整数,并且K是从2开始的整数)被用作乘元素的数位时,存储在数据存储器104中的一个字的第i数据ak index(i是从0到小于W的整数)被存储以满足上述等式(1)。
这使得可以实现位可伸缩性,同时抑制用于向存储器块生成输入数据的电路的规模和速度延迟。输入数据生成单元207的选择电路302可以容易地选择适当的数据。例如,当K=1、2和4作为可伸缩性时,在图10中,选择电路302可以从输入缓冲器301的四个位中选择一个位。另一方面,在图9的配置中,由选择电路302选择的输入缓冲器301的位数很大。因此,本实施例的配置可以抑制电路的尺寸和速度延迟。
第三实施例
通常,在使用存储器单元阵列的乘积累加运算技术中,由于装置特性的变化的影响,存在运算结果中可能发生错误的可能性。这样的错误可能会导致应用的性能下降。作为用于处理从不同芯片之间的元件的随机变化的方法,使用利用实际装置的输入/输出结果再次执行机器学习的方法。
在执行机器学习的情况下,需要根据应用使用数万个数据重复以下过程(a)到(c)数百次。(a)使用临时参数执行计算。(b)根据预期值计算误差。(c)调节参数。因此,神经网络的规模越大,学习时间越长。此外,重新学习每个芯片的成本非常高。
在第三实施例中,示出了在不执行重新学习的情况下防止由于变化导致的识别准确度降低的技术。图15是根据第三实施例的乘积累加运算装置100的系统配置图。在图15所示的乘积累加运算装置100中,CPU 111、写控制单元112、芯片110和评估装置120被添加到图1所示的配置。具体地,芯片110包括第一实施例的乘积累加运算装置100和写控制单元112。评估装置120被连接到芯片110。评估装置120评估乘积累加运算装置100的运算结果。
在使用存储器元件阵列的乘积累加运算技术中,通过机器学习预先获得的参数被写入存储区域中作为被乘元素。在本实施例中,写控制单元112仅改变被乘元素的写目的地的地址。也就是说,写控制单元112移位写目的地的地址。乘积累加运算装置100对每个地址执行乘积累加运算。然后,评估装置120通过使用乘积累加运算结果来评估每个移位地址的识别准确度。
评估装置120可以是例如与芯片110分开提供的诸如个人计算机等处理装置。或者,安装在芯片110上的CPU 111可以执行部分或全部评估。例如,当乘积累加运算装置100执行用于图像识别的神经网络的乘积累加运算时,改变偏移地址,使得所识别的图像的准确度最高。
图16示出了写数据的地址偏移及其评估图像。被乘元素是0/1组合。另外,当数据1被存储在具有大的特征变化的存储器元件中时,相对于被乘元素的运算结果的误差变大。另一方面,广泛使用在0附近分布神经网络的参数的方法,并且很多数据倾向于为0。因此,写入被乘元素的地址以行或块为单位进行移位。例如,在图16中,写地址401被移位一行。通过这样做,0被写入具有大的特征变化的元素,这对计算准确度具有致命的不利影响。也就是说,通过移位写地址401,乘积累加运算的结果出现差异,因此,识别准确度出现差异。例如,评估装置120获得偏移地址,以便具有大的特征变化的存储器元件被写入0。该偏移地址是具有最高识别准确度的最佳地址。
图17示出了计算准确度调节的流程。首先,在步骤S11中,写控制单元112设置地址。这里,偏移量为0的地址被指定为初始值。在步骤S12中,乘积累加运算装置100执行运算。这里,执行第一实施例所示的乘积累加运算。然后,乘积累加运算装置100执行重复乘积累加运算,并且将最终运算结果输出到评估装置120。
接下来,在步骤S13中,评估装置120评估运算结果。也就是说,评估装置120基于乘积累加运算的运算结果来评估识别准确度。例如,当乘积累加运算装置100对图像识别神经网络执行乘积累加运算时,准备多个图像样本。然后,乘积累加运算装置100将基于一个图片样本的数据存储在数据存储器中。在S12中,乘积累加运算装置100对各个图片样本执行乘积累加运算。使用一个偏移地址对每个图像执行乘积累加运算。评估装置120评估每个图像是否被正确识别。然后,评估装置120评估各个图像的识别结果,并且存储指示识别准确度的数值。
接下来,在步骤S14中,写控制单元112确定地址移位搜索是否完成。当搜索没有完成时(S14中的“否”),写控制单元112移位地址(S15)。然后,利用移位的地址执行S12和S13的处理。结果,评估装置120可以评估移位地址处的识别准确度。要移位的地址可以是块地址或块地址的行地址。或者,写控制单元112可以按顺序移位块地址和行地址。
当搜索完成时(S14中的“是”),评估装置120存储最佳地址的设置(S16)。也就是说,写控制单元112按顺序移位地址,并且评估装置120评估所有移位地址的识别准确度。然后,评估装置120记录所有移位地址中具有最高识别准确度的地址作为偏移地址。以这种方式,完成初步测试。
图18是示出根据本实施例的译码器105的配置的框图。在译码器105中,地址移位单元220被添加到图3的配置。地址移位单元220具有移位写地址的功能。评估装置120将通过初步测试获得的最佳偏移地址信息输出到乘积累加运算装置100。
例如,地址移位单元208从控制单元106接收在初步测试中获得的最佳偏移地址的信息。然后,地址移位单元208根据偏移地址信息移位乘元素的写入目的地。通过这样做,可以在使用已经学习一次的参数的同时抑制存储器元件的特性变化的影响。在本实施例中,可以在不重新学习的情况下抑制识别准确度的恶化。因此,可以缩短对于每个存储器设备由DNN实现推理程序的开发时间。
根据第一到第三实施例的乘积累加运算装置100适用于自动运算中的终点处、监视相机等的DNN处理的乘积累加运算。通过根据本实施例的乘积累加运算的装置和方法增强了功率效率。此外,通过使用乘积累加运算装置100,可以有效地操作诸如图像识别等整个应用。特别地,乘积累加计算装置100适用于诸如机器人、监视相机、无人机等的自动控制等应用。
部分或全部上述乘积累加运算装置100可以由包括诸如半导体存储器等半导体电路的硬件实现。此外,乘积累加运算装置100的一些功能可以由软件程序实现。
图19是示出根据另一实施例的乘积累加运算装置100的配置的框图。乘积累加计算装置100包括多个存储器块102、输入数据生成单元207、控制单元106和数据存储器104。多个存储器块102存储多个被乘元素并且对输入数据执行乘积累加运算。一个存储器块102将多个乘元素的相同数位的第一位值存储为一位值。输入数据生成单元207通过从多个乘元素中提取相同数位的第二位值来生成输入数据。数据存储器104累加地相加与存储器块102的乘积累加运算相对应的值。数据存储器104存储通过累加相加获得的累加相加值作为接下来的乘积累加运算的乘元素。结果,可以有效地执行乘积累加运算。
乘积累加运算方法包括以下步骤(A)到(G)。(A)从数据存储器中读取多个乘元素。(B)从将多个被乘元素的相同数位的第一位值存储为一位值的多个存储器块中选择一个存储器块。(C)通过从多个乘元素中提取相同数位的第二位值来生成输入数据。(D)将输入数据输入到所选择的一个存储器块中。(E)存储器块使用第一位值和第二位值执行乘积累加运算。(F)累加地相加与存储器块的乘积累加运算相对应的值。(G)将通过累加相加获得的累加相加值存储在数据存储器中作为接下来的乘积累加运算的乘元素。结果,可以有效地执行乘积累加运算。
而且,可以使用各种类型的非暂态计算机可读介质来存储上述程序并且将其提供给计算机。非暂态计算机可读介质包括各种类型的有形存储介质。非暂态计算机可读介质的示例包括磁记录介质(例如,软盘、磁带、硬盘驱动器)、磁光记录介质(例如,磁光盘)、CD-ROM(只读存储器)、CD-R、CD-R/W、固态存储器(例如,掩模型ROM、PROM(可编程ROM)、EPROM(可擦除PROM)、闪存ROM、RAM(随机存取存储器))。程序还可以通过各种类型的暂态计算机可读介质提供给计算机。暂态计算机可读介质的示例包括电信号、光信号和电磁波。暂态计算机可读介质可以经由有线或无线通信路径(诸如电线和光纤)向计算机提供程序。
尽管已经基于实施例具体描述了由发明人做出的本发明,但是本发明不限于已经描述的实施例,并且不用说,在不脱离其主旨的情况下可以进行各种修改。
Claims (4)
1.一种乘积累加运算装置,用于在一个乘积累加运算中执行m个乘元素与m个被乘元素的乘积累加运算,以获得m个乘积,并且随后获得所述乘积之和作为乘积累加运算值,m是2或更大的整数,每个被乘元素由p个位组成,每个乘元素由s个位组成,p和s是2或更大的整数,
所述乘积累加运算装置包括:
数据存储器,用于存储乘元素;
输入数据生成单元,用于从来自所述数据存储器的m个乘元素中的每个乘元素,针对每个相同数位,提取所述相同数位的一位数据,并且输出m个所提取的一位数据作为每个数位的输入数据;
p个存储器块,对应于所述被乘元素的所述p个位被提供,每个存储器块具有:i)m×n个存储器单元,每个存储器单元用于存储一位数据,ii)n个位线,以及iii)m个字线,n是2或更大的整数,其中在第k个存储器块中,第k数位的m×n个被乘元素的数据被存储,k是1与p之间的整数,所述第k个存储器块被配置为执行第j数位的m个所提取的一位数据与所述第k数位的所述m×n个被乘元素的所存储的数据的乘积累加运算,作为通过相应的m个字线被供应的输入数据,并且输出乘积累加结果,j是1与s之间的整数,将m个所提取的一位数据供应给所述存储器块针对每个存储器块和每个数位被重复,由此输出p×s个乘积累加结果;
第一保持单元,用于保持与所述m×n个被乘元素的所述第k数位相对应的第一数位信息;
第二保持单元,用于保持与所述m个乘元素的所述第j数位相对应的第二数位信息;以及
控制单元,被配置为:
通过将所述p×s个乘积累加结果中的对应的一个乘积累加结果乘以与对应于所述乘积累加结果的所述第一数位信息相对应的值和与对应于所述乘积累加结果的所述第二数位信息相对应的值,生成p×s个乘法值,并且
将所生成的乘法值累加地相加,由此获得累加相加值,以及
其中所述数据存储器被配置为将所述累加相加值存储为下一乘元素。
2.根据权利要求1所述的乘积累加运算装置,
其中所述输入数据生成单元包括:
输入缓冲器,用于存储来自所述数据存储器的、字长为W的数据,W为等于或大于1的整数;
选择器,用于从所存储的在所述输入缓冲器中的、字长为W的数据中选择数据长度为N的数据,N是1到W的整数,以及
输出缓冲器,用于向所述存储器块输出通过所述选择器所选择的数据长度为N的数据,
其中假定所述乘元素的数据长度是K,所述乘元素的最大数据长度是K_max,所述乘元素的数位的数目是k,k是2到K的任意整数,并且K是2的幂,
作为所述数据存储器的一个字中的第i数据的数据ak index由所述控制单元以满足下式(1)的写入顺序被存储,其中在所述式(1)中,k按升序布置或者按降序布置,其中i/K_max、W/K_max和(i mod K_max)/K是小数点以下省略的整数值,i是大于或等于0并且小于W的整数:
3.根据权利要求1或2所述的乘积累加运算装置,还包括地址移位单元,所述地址移位单元基于偏移地址来移位用于所述乘元素的写地址。
4.一种乘积累加运算系统,包括:
根据权利要求3所述的乘积累加运算装置,以及
评估装置,被配置为在改变用于所述乘元素的所述写地址的同时,评估来自所述乘积累加运算装置的所述乘积累加结果,
其中所述偏移地址基于评估结果而被设置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018-167802 | 2018-09-07 | ||
JP2018167802A JP7129857B2 (ja) | 2018-09-07 | 2018-09-07 | 積和演算装置、積和演算方法、及びシステム |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110889080A CN110889080A (zh) | 2020-03-17 |
CN110889080B true CN110889080B (zh) | 2024-09-24 |
Family
ID=67587443
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910706737.8A Active CN110889080B (zh) | 2018-09-07 | 2019-08-01 | 乘积累加运算装置、乘积累加运算方法和系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11182128B2 (zh) |
EP (1) | EP3620911A1 (zh) |
JP (1) | JP7129857B2 (zh) |
CN (1) | CN110889080B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20220010362A (ko) * | 2020-07-17 | 2022-01-25 | 삼성전자주식회사 | 뉴럴 네트워크 장치 및 그의 동작 방법 |
TWI782574B (zh) * | 2021-01-28 | 2022-11-01 | 旺宏電子股份有限公司 | 乘加運算裝置以及其乘加運算的控制方法 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR0150350B1 (ko) * | 1994-05-10 | 1998-10-15 | 모리시다 요이치 | 직교변환 프로세서 |
CN1109990C (zh) * | 1998-01-21 | 2003-05-28 | 松下电器产业株式会社 | 运算装置及运算方法 |
JP2002246956A (ja) | 2001-02-19 | 2002-08-30 | Canon Inc | 同期捕捉回路 |
JP4408712B2 (ja) * | 2004-01-26 | 2010-02-03 | 富士通マイクロエレクトロニクス株式会社 | 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路 |
KR20050088506A (ko) * | 2004-03-02 | 2005-09-07 | 삼성전자주식회사 | 다중 세정도를 지원하는 확장형 몽고메리 모듈러 곱셈기 |
JP5194302B2 (ja) | 2008-02-20 | 2013-05-08 | ルネサスエレクトロニクス株式会社 | 半導体信号処理装置 |
GB2474901B (en) * | 2009-10-30 | 2015-01-07 | Advanced Risc Mach Ltd | Apparatus and method for performing multiply-accumulate operations |
JP6458316B2 (ja) | 2014-09-29 | 2019-01-30 | 株式会社北電子 | 遊技機 |
JP6025882B2 (ja) | 2015-02-05 | 2016-11-16 | キヤノン株式会社 | 画像処理装置、画像処理方法及びプログラム |
JP6700712B2 (ja) | 2015-10-21 | 2020-05-27 | キヤノン株式会社 | 畳み込み演算装置 |
JP2017211704A (ja) * | 2016-05-23 | 2017-11-30 | ルネサスエレクトロニクス株式会社 | 相関演算回路および半導体装置 |
US10997496B2 (en) * | 2016-08-11 | 2021-05-04 | Nvidia Corporation | Sparse convolutional neural network accelerator |
US11243765B2 (en) * | 2017-09-29 | 2022-02-08 | Intel Corporation | Apparatus and method for scaling pre-scaled results of complex multiply-accumulate operations on packed real and imaginary data elements |
US10340003B1 (en) * | 2018-07-06 | 2019-07-02 | National Tsing Hua University | Input-pattern aware reference generation system and computing-in-memory system including the same |
-
2018
- 2018-09-07 JP JP2018167802A patent/JP7129857B2/ja active Active
-
2019
- 2019-08-01 CN CN201910706737.8A patent/CN110889080B/zh active Active
- 2019-08-08 EP EP19190658.5A patent/EP3620911A1/en active Pending
- 2019-08-20 US US16/545,570 patent/US11182128B2/en active Active
Non-Patent Citations (1)
Title |
---|
IMCE: Energy-Efficient Bit-Wise In-Memory Convolution Engine for Deep Neural Network;Shaahin Angizi;《2018 23rd Asia and South Pacific Design Automation Conference (ASP-DAC)》;20180122;第111-116页 * |
Also Published As
Publication number | Publication date |
---|---|
EP3620911A1 (en) | 2020-03-11 |
CN110889080A (zh) | 2020-03-17 |
US20200081687A1 (en) | 2020-03-12 |
US11182128B2 (en) | 2021-11-23 |
JP2020042399A (ja) | 2020-03-19 |
JP7129857B2 (ja) | 2022-09-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7348971B2 (ja) | 畳み込みニューラルネットワークハードウエア構成 | |
US11501829B2 (en) | Resistive random-access memory for embedded computation | |
US11853846B2 (en) | Acceleration of model/weight programming in memristor crossbar arrays | |
US20170011288A1 (en) | Neural network processor | |
CN112085186A (zh) | 一种神经网络的量化参数确定方法及相关产品 | |
US10491239B1 (en) | Large-scale computations using an adaptive numerical format | |
US20220188604A1 (en) | Method and Apparatus for Performing a Neural Network Operation | |
KR102409615B1 (ko) | 연상 메모리에서의 최소값-최대값 계산 방법 | |
CN110889080B (zh) | 乘积累加运算装置、乘积累加运算方法和系统 | |
Chen et al. | A high-throughput and energy-efficient RRAM-based convolutional neural network using data encoding and dynamic quantization | |
US20230005529A1 (en) | Neuromorphic device and electronic device including the same | |
CN118072788A (zh) | 存算一体电路、芯片及电子设备 | |
JP7206531B2 (ja) | メモリデバイスおよびその動作方法 | |
CN112561049A (zh) | 一种基于忆阻器的dnn加速器的资源分配方法及装置 | |
JP7255068B2 (ja) | メモリデバイス及びその動作方法 | |
CN114492778B (zh) | 神经网络模型的运行方法、可读介质和电子设备 | |
CN113988279A (zh) | 一种支持负值激励的存算阵列输出电流读出方法及系统 | |
JP7279293B2 (ja) | メモリデバイスおよびその動作方法 | |
CN114492779B (zh) | 神经网络模型的运行方法、可读介质和电子设备 | |
CN112766477B (zh) | 神经网络运算电路 | |
US20230043170A1 (en) | Memory device for performing convolution operation | |
US20230237307A1 (en) | Systems and methods for a hardware neural network engine | |
CN110007959B (zh) | 用于深度神经网络的硬件实现的层次化尾数位长度选择 | |
US20240152327A1 (en) | Computing circuit, computing method, and decoder | |
CN116594588A (zh) | 一种通用的存内矩阵-张量处理器及其操作方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |