CN108256638B - 微处理器电路以及执行神经网络运算的方法 - Google Patents

微处理器电路以及执行神经网络运算的方法 Download PDF

Info

Publication number
CN108256638B
CN108256638B CN201810016819.5A CN201810016819A CN108256638B CN 108256638 B CN108256638 B CN 108256638B CN 201810016819 A CN201810016819 A CN 201810016819A CN 108256638 B CN108256638 B CN 108256638B
Authority
CN
China
Prior art keywords
parameter
parameters
sub
output
neural network
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
Application number
CN201810016819.5A
Other languages
English (en)
Other versions
CN108256638A (zh
Inventor
陈静
李晓阳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Zhaoxin Semiconductor Co Ltd
Original Assignee
Shanghai Zhaoxin Integrated Circuit Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Zhaoxin Integrated Circuit Co Ltd filed Critical Shanghai Zhaoxin Integrated Circuit Co Ltd
Priority to CN201810016819.5A priority Critical patent/CN108256638B/zh
Priority to US15/928,113 priority patent/US11468311B2/en
Publication of CN108256638A publication Critical patent/CN108256638A/zh
Application granted granted Critical
Publication of CN108256638B publication Critical patent/CN108256638B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Abstract

本发明提出一种微处理器电路以及一种执行神经网络运算的方法。微处理器电路适用于执行神经网络运算。所述微处理器电路包括参数产生模块、运算模块以及截位逻辑。所述参数产生模块并行接收所述神经网络运算的多个输入参数以及多个权重参数。所述参数产生模块依据所述多个输入参数以及所述多个权重参数来并行产生多个子输出参数。所述运算模块并行接收所述多个子输出参数。所述运算模块加总所述多个子输出参数,以产生加总参数。所述截位逻辑接收所述加总参数。所述截位逻辑对所述加总参数进行截位运算,以产生所述神经网络运算的输出参数。

Description

微处理器电路以及执行神经网络运算的方法
技术领域
本发明是有关于一种单指令流多数据流(Single Instruction Multiple Data,SIMD)架构的应用,且特别是有关于一种应用此架构的微处理器电路以及执行神经网络运算的方法。
背景技术
一般而言,传统的处理器执行神经网络运算(Neural network operation)需要利用大量的储存空间。在一般的情况下,神经网络运算将在静态随机存取存储器(StaticRandom Access Memory,SRAM)中占用大量的储存空间,或是在静态随机存取存储器与动态随机存取存储器(Dynamic Random Access Memory,DRAM)之间进行大量的数据交换。并且,当处理器例如执行二值神经网络(Binary Neural Network,BNN)运算或三值神经网络(Ternary Neural Network,TNN)运算时,输出参数
Figure BDA0001540580730000011
其中wi为一位(1-bit)或二位(2-bit)的权重参数,xi为与wi位宽相等的输入数据,y为输出参数,其中一位(1-bit)或二位(2-bit)的权重参数wi以及输入数据xi还需配合八位(8-bit)单指令流多数据流(SIMD)通道(Lane)进行处理。当处理器例如执行二值权重网络(Binary Weight Network,BWN)运算或三值权重网络(Ternary Weight Network,TWN)运算时,输出参数
Figure BDA0001540580730000012
其中wi为一位(1-bit)或二位(2-bit)权重参数,xi为八位(8-bit)输入数据,y为输出参数,其中一位(1-bit)或二位(2-bit)的权重参数wi需配合八位(8-bit)单指令流多数据流(SIMD)通道(Lane)进行处理。因此,传统的处理器执行神经网络运算的方式会造成运算资源的浪费。有鉴于此,以下将提出几个解决方案。
发明内容
本发明提供一种微处理器电路以及执行神经网络运算(Neural networkoperation)的方法,可有效节省神经网络运算的运算资源。
本发明的一种微处理器电路适用于执行神经网络运算。所述微处理器电路包括参数产生模块、运算模块以及截位逻辑。所述参数产生模块用以并行接收所述神经网络运算的多个输入参数以及多个权重参数。所述参数产生模块依据所述多个输入参数以及所述多个权重参数来并行产生多个子输出参数。所述运算模块耦接所述参数产生模块。所述运算模块用以并行接收所述多个子输出参数。所述运算模块加总所述多个子输出参数,以产生加总参数。所述截位逻辑耦接所述运算模块。所述截位逻辑用以接收所述加总参数。所述截位逻辑对所述加总参数进行截位运算,以产生所述神经网络运算的输出参数。
本发明的一种执行神经网络运算的方法适用于微处理器电路。所述微处理器电路包括参数产生模块、运算模块以及截位逻辑。所述方法包括以下步骤:透过所述参数产生模块并行接收多个输入参数以及多个权重参数,并且依据所述多个输入参数以及所述多个权重参数来并行产生多个子输出参数。透过所述运算模块并行接收所述多个子输出参数,并且加总所述多个子输出参数,以产生加总参数。透过所述截位逻辑接收所述加总参数,并且对所述加总参数进行截位运算,以产生所述神经网络运算的输出参数。
基于上述,本发明的微处理器电路以及执行神经网络运算的方法可应用单指令流多数据流(Single Instruction Multiple Data,SIMD)架构,并且当执行二值权重网络(Binary Weight Network,BWN)运算或三值权重网络(Ternary Weight Network,TWN)运算时,可实现非常高的并行性(Parallelism),以有效节省神经网络运算的运算资源。
为让本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图式作详细说明如下。
附图说明
图1是依照本发明的一实施例的微处理器电路的示意图。
图2是依照本发明的第一实施例的微处理器电路的示意图。
图3是依照本发明的第一实施例的执行神经网络运算的方法的流程图。
图4是依照本发明的第二实施例的微处理器电路的示意图。
图5是依照本发明的第二实施例的执行神经网络运算的方法的流程图。
图6是依照本发明的第三实施例的微处理器电路的示意图。
图7是依照本发明的第三实施例的执行神经网络运算的方法的流程图。
具体实施方式
为了使本发明的内容可以被更容易明了,以下特举实施例做为本发明确实能够据以实施的范例。另外,凡可能之处,在图式及实施方式中使用相同标号的组件/构件/步骤,代表相同或类似部件。
图1是依照本发明的一实施例的微处理器电路的示意图。参考图1,微处理器电路100包括参数产生模块110、运算模块120以及功能逻辑(Logic)130。参数产生模块110耦接运算模块120。运算模块120耦接功能逻辑130。在本实施例中,微处理器电路100例如是一种通用处理器(General Purpose Processor,GPP),并且微处理器电路100整合一个或多个处理单元来执行对应的运算工作。在本实施例中,微处理器电路100是以单指令流多数据流(Single Instruction Multiple Data,SIMD)架构来执行神经网络运算(Neural NetworkComputing)的微指令(micro-instruction或μop)以完成对应的神经网络运算,微处理器电路100为包含于处理器核心(core)的执行单元(execution unit)中的硬件电路。值得注意的是,本实施例所提及的微指令是指微处理器电路100所属的微处理器能直接执行的指令。所述微处理器可例如是复杂指令集计算机(CISC)指令集架构的超标量乱序执行处理器、精简指令集计算机(RISC)指令集架构的处理器、为执行神经网络运算而设计的专有架构处理器或是其它架构的处理器。
在本实施例中,当微处理器电路100执行神经网络运算工作时,参数产生模块110并行接收神经网络运算的输入数据X以及权重数据W,并且参数产生模块110依据输入数据X以及权重数据W来产生子输出数据Y至运算模块120。在本实施例中,输入数据X、权重数据W以及子输出数据Y可分别包括多个数值。在本实施例中,输入数据X包括多个并行的输入参数(x1、x2~xn)。权重数据W包括多个并行的权重参数(w1、w2~wn)。子输出数据Y包括多个并行的子输出参数(y1、y2~yn)。在本实施例中,参数产生模块110例如透过查找表(Look-uptable)或特定逻辑电路来依据并行的多个输入参数(x1、x2~xn)以及并行的多个权重参数(w1、w2~wn),来并行产生多个并行的子输出参数(y1、y2~yn)。
在本实施例中,运算模块120并行接收参数产生模块110提供的包括多个子输出参数(y1、y2~yn)的子输出数据Y,并且对多个子输出参数(y1、y2~yn)进行运算。运算模块120对具有多个数值的子输出数据Y进行并行运算(parallel computing)。举例来说,运算模块120包括一个或多个加法器(Adder),以透过加法器来加总子输出参数Y的多个数值(y1、y2~yn),并且产生加总参数Ay。也就是说,在本实施例中,运算模块120对具有多个数值的子输出参数(y1、y2~yn)并行执行加法运算,以有效率地产生加总参数Ay。
在本实施例中,功能逻辑130为一个或多个运算逻辑组成的硬件架构。功能逻辑130例如是比较逻辑(compare logic)或截位逻辑(truncation logic)等诸如此类的逻辑。功能逻辑130接收运算模块120提供的加总参数Ay,其中加总参数Ay可以为单一笔数值。功能逻辑130对加总参数Ay进行特定功能运算,以产生神经网络运算的输出参数y。也就是说,本实施例的微处理器电路100透过直接执行一条微指令(micro-instruction或μop),即可有效率地产生神经网络运算的输出参数y。
举例而言,上述的微指令可例如是“MAC,Dst,Scr1,Scr2,size 1,size 2,size3”。在一实施例中,微处理器电路100可执行单一的一条这样的微指令即可完成特定神经网络运算
Figure BDA0001540580730000051
其中字段MAC为操作码。微处理器电路100识别此操作码以得知由自己来处理此微指令。需注意的是,微处理器电路100仅为微处理器的执行单元(execution unit)的一部分,所述微处理器的执行单元可进一步包含执行其它类型指令的其它执行电路。在上述的微指令中,字段“Scr1”用于指示微指令的一源操作数(source operand),并且包括上述多个输入参数(x1、x2~xn)。字段“Scr2”用于指示微指令的另一源操作数,并且包括上述多个权重参数(w1、w2~wn)。字段“Dst”用于指示微指令的目的操作数(destinationoperand),并且取得上述神经网络运算的输出参数y。字段“size 1”用于指示每个输入参数(x1、x2~xn)的位宽(bit width)。字段“size 2”用于指示每个权重参数(w1、w2~wn)的位宽。字段“size 3”用于指示输出参数y的位宽。然而,上述的微指令的格式仅为本发明的其中一种实施范例,本发明并不限于此。
进一步来说,本实施例的微处理器电路100的实施架构可例如适用于执行二值神经网络(Binary Neural Network,BNN)运算、三值神经网络(Ternary Neural Network,TNN)运算、二值权重网络(Binary Weight Network,BWN)运算以及三值权重网络(TernaryWeight Network,TWN)运算等诸如此类的神经网络运算。在BNN运算和TNN运算中,每个输入参数(x1、x2~xn)的位宽等于每个权重参数(w1、w2~wn)的位宽,例如为2bit,而输出参数y的位宽例如为8bit。在BWN运算和TWN运算中,每个权重参数wi的位宽例如为2bit,并且每个输入参数(x1、x2~xn)的位宽大于每个权重参数(w1、w2~wn)的位宽,例如皆为8bit。也就是说,BNN运算和TNN运算的两个源操作数的位宽“size 1”和“size 2”相等。BWN运算和TWN运算的两个源操作数的位宽“size 1”和“size 2”不相等,并且“size 1”大于“size 2”。对此,本发明的微处理器电路100的位宽(例如为256/128bit)大于所述多个输入参数(x1、x2~xn)及所述多个权重参数(w1、w2~wn)的位宽总和。
在本实施例中,微处理器电路100并行接收神经网络运算的多个较短的输入参数(x1、x2~xn)及多个权重参数(w1、w2~wn),以执行运算
Figure BDA0001540580730000061
以使微处理器电路100可适应神经网络运算具有数据量大且数据位宽短的特点,并且实现并行运算。因此,本实施例的微处理器电路100可有效节省运算周期,并且提高运算效率。为了更进一步说明本发明的微处理器电路的多种的实施架构,以下各范例实施例的微处理器电路将分别搭配执行对应的神经网络运算方法来说明之。
图2是依照本发明的第一实施例的微处理器电路的示意图。图3是依照本发明的第一实施例的执行神经网络运算的方法的流程图。参考图2以及图3,微处理器电路200包括参数产生模块210、运算模块220以及比较逻辑230。在本实施例中,微处理器电路200适用于执行BNN运算,并且微处理器电路200欲实现的BNN运算如以下公式(1)。在本实施例中,输入参数x1、x2~xn、权重参数w1、w2~wn及输出参数y的取值范围为{-1,1}。并且,依据BNN运算的算法规定,若输入参数x1、x2~xn以及权重参数w1、w2~wn的求和结果大于或等于0(y≥0),则y=1。反之,则y=-1。
Figure BDA0001540580730000071
首先,在步骤S310中,微处理器电路200透过参数产生模块210并行接收神经网络运算的多个输入参数x1、x2~xn以及多个权重参数w1、w2~wn。参数产生模块210依据输入参数x1、x2~xn以及权重参数w1、w2~wn来产生多个子输出参数y1、y2~yn,其中n为大于0的正整数。在本实施例中,输入参数x1、x2~xn以及权重参数w1、w2~wn的取值范围为{-1,1}。在本实施例中,参数产生模块210预先对输入参数x1、x2~xn以及权重参数w1、w2~wn进行编码,其中编码结果例如以下表1。并且,在本实施例中,编码后的输入参数x1、x2~xn、编码后的权重参数w1、w2~wn以及对应的子输出参数y1、y2~yn的数值如以下表2(第一查找表),其中i∈{1,2,3,…,n}。
w<sub>i</sub>,x<sub>i</sub> w<sub>i</sub>,x<sub>i</sub>(编码后)
-1 0
1 1
表1
Figure BDA0001540580730000072
表2
在本实施例中,参数产生模块210依据上述表2来并行取得所有的子输出参数y1、y2~yn,但本发明并不限于此。在一实施例中,参数产生模块210可以采用其它编码方式来产生子输出参数y1、y2~yn,例如1编码为1,-1编码为0。在一实施例中,参数产生模块210也可依据以下公式(2)对应的数字逻辑电路(第一逻辑电路)来取得对应的子输出参数y1、y2~yn。如图2所示,参数产生模块210可包括第一逻辑电路。在本实施例中,以下公式(2)当中的符号“~”以及符号“^”为操作数(operator)的符号,其中可分别代表“取反(INV)”以及“异或(XOR)”。注意本发明不限于此,例如在将数值为1的输入参数xi或权重参数wi编码为1,将数值为-1的输入参数xi或权重参数wi编码为0的实施方式中,可采用另一公式yi=wi^xi对应的数字逻辑电路来取得对应的子输出参数y1、y2~yn
Figure BDA0001540580730000081
接着,在步骤S320中,微处理器电路200透过运算模块220并行接收子输出参数y1、y2~yn,并且加总子输出参数y1、y2~yn,以产生加总参数Ay。在本实施例中,运算模块220包括多个加法器221。运算模块220对子输出参数y1、y2~yn同时进行加法运算。举例来说,加法器221的第一层对子输出参数y1、y2~yn的每四个数据进行相加的运算,并且提供至这些加法器221的第二层。以此类推,这些加法器221的最后一层可输出加总参数Ay。在本实施例中,每个加法器221可由基本的4:2进位保留加法器(Carry Save Adder,CSA)实现,每个CSA加法器包括4个输入和2个输出(包括总和Sum和进位Carry)。然而,运算模块220的这些加法器221的数量及层数可依据子输出参数y1、y2~yn的数量来对应设计,本发明的运算模块220的这些加法器221的配置方式不限于图2所示。
在本实施例中,由于BNN运算的算法中输入参数x1、x2~xn以及权重参数w1、w2~wn的取值范围为{-1,1},即取值仅两种数值“-1”和“1”。因此,参数产生模块210采用1-bit编码方式对输入参数x1、x2~xn以及权重参数w1、w2~wn进行编码后产生的编码后数值为“0”或“1”。换句话说,运算模块220经由多个加法器221运算输出参数y1、y2~yn,以取得加总参数Ay,其目的在于取得子输出参数y1、y2~yn当中的第一数值类型(“1”)的数量。加总参数Ay即对应上述公式(1)的乘加求和运算的结果。
最后,在步骤S330中,微处理器电路200透过比较逻辑230接收加总参数Ay,并且比较逻辑230依据加总参数Ay执行比较运算,以产生神经网络运算的输出参数y。在本实施例中,比较逻辑230依据加总参数Ay来判断子输出参数y1、y2~yn当中的第一数值类型(“1”)的数量以及第二数值类型(“0”)的数量,以决定输出参数y为“1”或“0”。举例来说,比较逻辑230可执行如以下公式(3)的判断。
Figure BDA0001540580730000091
因此,在BNN运算中,若n=8,则比较逻辑430可将加总参数Ay与数值“4”作比较(大于、等于或小于),以决定输出参数y为“0”(原始取值-1)或“1”(原始取值1)。在此例中,若加总参数Ay大于或等于数值“4”,则表示子输出参数y1、y2~yn当中的第一数值类型“1”的数量大于或等于第二数值类型“0”的数量。也就是说,由于子输出参数y1、y2~yn的原始数值为“1”的数量大于或等于原始数值为“-1”的数量,因此子输出参数y1、y2~yn求和所得的输出参数y为非负值,并且依据公式(3)取值“1”(原始取值1)。
然而,在此例中,若加总参数Ay小于数值“4”,则表示子输出参数y1、y2~yn当中的第一数值类型“1”的数量小于第二数值类型“0”的数量。也就是说,由于子输出参数y1、y2~yn的原始数值为“1”的数量小于原始数值为“-1”的数量,因此对子输出参数y1、y2~yn求和所得的输出参数y为负值,并且依据公式(3)取值“0”(原始取值-1)。比较逻辑230产生的输出参数y即为BNN运算的结果。
据此,基于上述步骤S310~S330以及图2的微处理器电路200的架构,本实施例的微处理器电路200可采用较节省处理资源并且高效(本实施例可并行实现多个二值的乘法和累加运算)的方式来有效执行低精度的BNN运算。另外,关于上述表1、表2、公式(2)以及公式(3)的编码方式以及判断条件可依据不同运算需求来对应调整其内容,本发明并不限于此。
图4是依照本发明的第二实施例的微处理器电路的示意图。图5是依照本发明的第二实施例的执行神经网络运算的方法的流程图。参考图4以及图5,微处理器电路400包括参数产生模块410、运算模块421、422以及比较逻辑430。参数产生模块410包括子参数产生模块411、412。在本实施例中,微处理器电路400适用于执行TNN运算,并且微处理器电路400欲实现的神经网络运算如同上述公式(1)。相较于上述实施例的微处理器电路200,不同之处在于本实施例的输入参数x1、x2~xn、权重参数w1、w2~wn及输出参数y的取值范围为{-1,0,1}。
首先,在步骤S510中,微处理器电路400透过两个子参数产生模块411、412分别并行接收神经网络运算的多个输入参数x1、x2~xn以及多个权重参数w1、w2~wn。此两个子参数产生模块411、412依据输入参数x1、x2~xn以及权重参数w1、w2~wn来分别产生多个子输出参数y1[1]、y2[1]~yn[1]、y1[0]、y2[0]~yn[0],其中n为大于1的正整数。在本实施例中,输入参数x1、x2~xn以及权重参数w1、w2~wn的取值集合为{-1,0,1}。在本实施例中,子参数产生模块411、412可分别先对输入参数x1、x2~xn以及权重参数w1、w2~wn进行编码,编码结果例如以下表3。并且,在本实施例中,编码后的输入参数x1、x2~xn、编码后的权重参数w1、w2~wn以及对应的子输出参数y1、y2~yn的数值可如以下表4(第二查找表),其中i∈{1,2,3,…,n}。
Figure BDA0001540580730000111
表3
Figure BDA0001540580730000112
表4
也就是说,在本实施例中,子参数产生模块411、412预先对输入参数x1、x2~xn以及权重参数w1、w2~wn进行编码,并且依据上述表4来快速地取得对应的子输出参数y1、y2~yn。在本实施例中,子参数产生模块411输出查表所得的子输出参数y1、y2~yn的第一位(例如高位)y1[1]、y2[1]~yn[1],以表示子输出参数y1、y2~yn的数值为第一数值类型(“10”)的数量。子参数产生模块412输出查表所得的子输出参数y1、y2~yn的第二位(例如低位)y1[0]、y2[0]~yn[0],以表示子输出参数y1、y2~yn的数值为第二数值类型(“01”)的数量。
另外,在一实施例中,子参数产生模块411也可依据编码后的输入参数x1、x2~xn以及编码后的权重参数w1、w2~wn来透过以下公式(4)对应的数字逻辑电路(第一子逻辑电路),来取得对应的子输出参数y1、y2~yn的高位y1[1]、y2[1]~yn[1]。并且,子参数产生模块412也可依据编码后的输入参数x1、x2~xn以及编码后的权重参数w1、w2~wn来透过以下公式(5)对应的数字逻辑电路(第二子逻辑电路),来取得对应的子输出参数y1、y2~yn的低位y1[0]、y2[0]~yn[0]。如图4所示,参数产生模块411可包括第一子逻辑电路,并且参数产生模块412可包括第二子逻辑电路。在本实施例中,以下公式(4)以及公式(5)当中的符号“~”以及符号“&”为操作数的符号,分别代表“取反(INV)”以及“按位与(AND)”。
yi[1]=wi[1]&~xi[1]&xi[0]+~wi[1]&wi[0]&xi[1]......公式(4)
yi[0]=wi[1]&xi[1]+~wi[1]&wi[0]&~xi[1]&xi[0]......公式(5)
接着,在步骤S520中,微处理器电路400透过子运算模块421、422分别并行接收对应的子输出参数的第一位y1[1]、y2[1]~yn[1]以及第二位y1[0]、y2[0]~yn[0]。子运算模块421、422分别加总子输出参数的第一位y1[1]、y2[1]~yn[1]以及第二位y1[0]、y2[0]~yn[0],以产生两个加总参数Ay[1]、Ay[0]。在本实施例中,子运算模块421包括多个加法器421_1,并且子运算模块422包括多个加法器422_1。在本实施例中,子运算模块421、422分别对子输出参数y1[1]、y2[1]~yn[1]、y1[0]、y2[0]~yn[0]同时进行加法运算。举例来说,这些加法器421_1、422_1的第一层可对子输出参数y1[1]、y2[1]~yn[1]、y1[0]、y2[0]~yn[0]的每四个数据进行相加的运算,并且提供至这些加法器421_1、422_1的第二层。以此类推,这些加法器421_1、422_1的最后一层可输出两个加总参数Ay[1]、Ay[0]。在本实施例中,每个加法器421_1、422_1可由基本的4:2进位保留加法器(Carry Save Adder,CSA)实现,每个CSA加法器包括4个输入和2个输出(包括总和Sum和进位Carry)。
在本实施例中,加总参数Ay[1]代表子输出参数y1[1]、y2[1]~yn[1]为第一数值类型(“10”)的数量,并且加总参数Ay[0]代表子输出参数y1[1]、y2[1]~yn[1]为第二数值类型(“01”)的数量。然而,运算模块421、422的这些加法器421_1、422_1的数量及层数可依据子输出参数y1、y2~yn的数量来对应设计,本发明的运算模块421、422的这些加法器421_1、422_1的配置方式不限于图4所示。
在本实施例中,由于TNN算法中输入参数x1、x2~xn以及权重参数w1、w2~wn的取值范围为{-1,0,1},即取值仅三种数值“-1”、“0”和“1”,因此子参数产生模块411、412采用2-bit编码方式对输入参数x1、x2~xn以及权重参数w1、w2~wn进行编码后产生的编码后数值为“1X”、“00”、“01”。在一实施例中,数值“1X”也可代表“10”或“11”,本发明并不加以限制。换句话说,子运算模块421、422经由这些加法器421_1、422_1分别操作数输出参数的第一位y1[1]、y2[1]~yn[1]以及第二位y1[0]、y2[0]~yn[0],以取得两个加总参数Ay[1]、Ay[0],其目的在于取得子输出参数y1、y2~yn当中的第一数值类型(“10”)的数量以及第二数值类型(“01”)的数量。
为了便于统计第一数值类型(“10”)以及第二数值类型(“01”)的数量,在一实施例中,子参数产生模块411、412输出的子输出参数y1、y2~yn中,数值“01”代表“1”,数值“00”代表“0”,数值“10”代表“-1”。参考表4,子输出参数y1、y2~yn的第一位y1[1]、y2[1]~yn[1]为“1”的数量(即加总参数Ay[1])可表示子输出参数y1、y2~yn的原始数值为“-1”的数量。子输出参数y1、y2~yn的第二位y1[0]、y2[0]~yn[0]为“1”的数量(即加总参数Ay[0])可表示子输出参数y1、y2~yn的原始数值为“1”的数量。
最后,在步骤S530中,微处理器电路400透过比较逻辑430接收两个加总参数Ay[1]、Ay[0],并且微处理器电路400依据此两个加总参数Ay[1]、Ay[0]执行比较运算,以产生神经网络运算的输出参数y。在本实施例中,比较逻辑430比较此两个加总参数Ay[1]、Ay[0],以判断子输出参数y1、y2~yn当中的第一数值类型(“10”)的数量以及第二数值类型(“01”)的数量,并且决定输出参数y为“01”、“00”或“10”。举例来说,比较逻辑430可执行如以下公式(6)的判断。
Figure BDA0001540580730000141
因此,在TNN中,若子输出参数y1、y2~yn当中的第一数值类型“10”(对应原始取值-1)的数量大于第二数值类型“01”(对应原始取值1)的数量,则对所有子输出参数y1、y2~yn求和所得的输出参数y为负值,并且依据公式(6)取值“10”(对应原始取值-1)。若子输出参数y1、y2~yn当中的第一数值类型“10”(对应原始取值-1)的数量小于第二数值类型“01”(对应原始取值1)的数量,则对所有子输出参数y1、y2~yn求和所得的输出参数y为正值,并且依据公式(6)取值“01”(对应原始取值1)。否则,输出参数y取值“00”(对应原始取值0)。比较逻辑430产生的输出参数y即为上述公式(1)的TNN运算的结果。
据此,基于上述步骤S510~S530以及图4的微处理器电路400的架构,本实施例的微处理器电路400可采用较节省处理资源并且高效(本实施例可并行实现多个三值的乘法和累加运算)的方式来有效执行低精度的TNN运算。另外,关于上述表3、表4、公式(4)、公式(5)以及公式(6)的编码方式以及判断条件可依据不同运算需求来对应调整其内容,本发明并不限于此。
图6是依照本发明的第三实施例的微处理器电路的示意图。图7是依照本发明的第三实施例的执行神经网络运算的方法的流程图。参考图6以及图7,微处理器电路600包括参数产生模块610、运算模块620以及比较逻辑630。在本实施例中,微处理器电路600适用于执行BWN运算以及TWN运算,并且微处理器电路400欲实现的神经网络运算如同上述公式(1)。在BWN运算中,权重参数w1、w2~wn的位宽为1~2bit,并且权重参数w1、w2~wn的取值范围为{-1,1}。输入参数x1、x2~xn与输出参数y的位宽相同。输入参数x1、x2~xn与输出参数y皆为微处理器电路600所在处理器普通算术运算的全位宽(例如为8/16bit)。输入参数x1、x2~xn与输出参数y的位宽大于权重参数w1、w2~wn的位宽。需注意的是,TWN运算与BWN运算不同之处在于,权重参数w1、w2~wn的取值范围为{-1,0,1},并且微处理器电路600的位宽大于多个输入参数x1、x2~xn及多个权重参数w1、w2~wn的位宽总和。
首先,在步骤S710中,微处理器电路600透过参数产生模块610并行接收神经网络运算的多个输入参数x1、x2~xn以及多个权重参数w1、w2~wn。参数产生模块610依据输入参数x1、x2~xn以及权重参数w1、w2~wn来产生多个子输出参数y1’、y2’~yn’,其中n为大于0的正整数。在本实施例中,输入参数x1、x2~xn为八位(8-bit)或十六位(16-bit)等诸如此类的全位(full-bit)参数。BWN运算的权重参数w1、w2~wn的取值范围为{-1,1}。TWN运算的权重参数w1、w2~wn的取值范围为{-1,0,1}。
在本实施例中,参数产生模块610预先对权重参数w1、w2~wn进行编码。参数产生模块610藉由依据权重参数w1、w2~wn的取值范围来对权重参数w1、w2~wn进行对应的编码。在本实施例中,若权重参数w1、w2~wn的取值范围为{-1,1},则权重参数w1、w2~wn的编码结果例如以下表5。其中i∈{1,2,3,…,n}。
Figure BDA0001540580730000161
表5
在一实施例中,若权重参数w1、w2~wn的取值范围为{-1,0,1},则权重参数w1、w2~wn的编码结果例如以下表6,其中i∈{1,2,3,…,n}。
Figure BDA0001540580730000162
表6
在本实施例中,参数产生模块610接着依据编码后的输入参数x1、x2~xn及权重参数w1、w2~wn来决定子输出参数y1’、y2’~yn’。在本实施例中,若权重参数w1、w2~wn的取值范围为{-1,1},则参数产生模块610依据以下公式(7)(第四条件式)来产生对应的子输出参数y1’、y2’~yn’。需先说明的是,以下公式(7)以及公式(8)当中的符号“[]”为操作数的符号,其中代表“补码”。
Figure BDA0001540580730000163
在一实施例中,若权重参数w1、w2~wn的取值范围为{-1,0,1},则参数产生模块610依据以下公式(8)(第五条件式)来产生对应的子输出参数y1’、y2’~yn’。
Figure BDA0001540580730000171
也就是说,当参数产生模块610判断权重参数w1、w2~wn的取值范围包含两种数值类型时,参数产生模块610将子输入参数x1、x2~xn各别的原始码或补码作为子输出参数y1’、y2’~yn’。当参数产生模块610判断权重参数w1、w2~wn的取值范围包含三种数值类型时,参数产生模块610将零码或子输入参数x1、x2~xn各别的原始码或补码作为多个子输出参数y1’、y2’~yn’。
接着,在步骤S720中,微处理器电路600透过运算模块620并行接收子输出参数y1’、y2’~yn’,并且加总子输出参数y1’、y2’~yn’,以产生加总参数Ay’。在本实施例中,运算模块620包括多个加法器621,并且运算模块620对子输出参数y1’、y2’~yn’同时进行加法运算。举例来说,这些加法器621的第一层可对子输出参数y1’、y2’~yn’的每四个数据进行相加的运算,并且提供至这些加法器621的第二层。以此类推,这些加法器621的最后一层可输出加总参数Ay’。在本实施例中,每个加法器621可由基本的4:2进位保留加法器(CarrySave Adder,CSA)实现,并且每个CSA加法器包括4个输入和2个输出(包括总和Sum和进位Carry)。然而,运算模块620的这些加法器621的数量及层数可依据子输出参数y1’、y2’~yn’的数量来对应设计,本发明的运算模块620的这些加法器621的配置方式不限于图6所示。加总参数Ay’即对应上述公式(1)的乘加求和运算的结果。
最后,在步骤S730中,微处理器电路600透过截位逻辑630接收加总参数Ay’,并且截位逻辑630对加总参数Ay’执行截位运算,以产生神经网络运算的输出参数y’。在本实施例中,截位逻辑630依据加总参数Ay’来进行近似运算,输出参数y’可等于或近似于公式(1)的输出参数y。换句话说,在精度允许的范围内,截位逻辑630可将加总参数Ay’当中的数值截位,以取得精度足够的计算结果。关于截位运算的方式具体而言包括:根据小数点的位置,对加总参数Ay’移位。对移位后的数值做饱和进位(saturation and round)处理,使得对普通数据宽度不会出现溢出的情况。当加总参数Ay’大于普通数据宽度的最大值或小于最小值时,加总参数Ay’会被饱和成普通数据宽度的最大值或最小值。
因此,截位逻辑630产生的输出参数y’即为上述公式(1)的神经网络运算的结果(或近似结果)。据此,基于上述步骤S710~S730以及图6的微处理器电路600的架构,本实施例的微处理器电路600可采用较节省处理资源的方式来有效执行高精度的BWN运算以及TWN运算。另外,关于上述表5、表6、公式(7)以及公式(8)的编码方式以及判断条件可依据不同运算需求来决定,本发明并不限于此。
综上所述,本发明的微处理器电路以及执行神经网络运算的方法透过参数产生模块对神经网络运算的输入数据以及权重数据的至少其中之一进行编码,并且依据编码后的数据产生对应的子输出参数。接着,本发明的微处理器电路以及执行神经网络运算可透过运算模块以及功能逻辑可计算此对应的子输出参数,以产生神经网络运算的输出参数。并且,本发明的功能逻辑的类型可依据不同的神经网络运算的类型来选择。因此,本发明的微处理器电路以及执行神经网络运算的方法,相较于一般的微处理器电路中的算术逻辑单元(ALU)以普通乘法器和加法器实现乘累加运算来产生神经网络运算的输出参数的技术方案相比,可有效节省神经网络运算的运算资源。
虽然本发明已以实施例揭露如上,然其并非用以限定本发明,任何所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可作些许的更动与润饰,故本发明的保护范围当视权利要求所界定者为准。

Claims (18)

1.一种支持单指令流多数据流架构的微处理器电路,适用于执行神经网络运算,其特征在于,包括:
参数产生模块,用以并行接收所述神经网络运算的多个输入参数以及多个权重参数,并且所述参数产生模块依据所述多个输入参数以及所述多个权重参数来并行产生多个子输出参数;
运算模块,耦接所述参数产生模块,并且用以并行接收所述多个子输出参数,其中所述运算模块加总所述多个子输出参数,以产生加总参数;以及
截位逻辑,耦接所述运算模块,并且用以接收所述加总参数,其中所述截位逻辑对所述加总参数进行截位运算,以产生所述神经网络运算的输出参数,
其中所述微处理器电路透过执行单一一条微指令以完成所述神经网络运算,所述多个输入参数包含于所述微指令的第一源操作数,所述多个权重参数包含于所述微指令的第二源操作数,并且所述神经网络运算的输出参数包含于所述微指令的目的操作数。
2.根据权利要求1所述的微处理器电路,其特征在于,每一所述多个输入参数的位宽大于每一所述多个权重参数的位宽,其中所述微处理器电路的位宽大于所述多个输入参数及所述多个权重参数的位宽总和。
3.根据权利要求1所述的微处理器电路,其特征在于,所述参数产生模块依据所述多个权重参数的取值范围对所述多个权重参数进行对应的编码,而产生多个编码后的权重参数,其中所述参数产生模块依据所述多个输入参数以及所述多个编码后的权重参数来产生所述多个子输出参数。
4.根据权利要求1所述的微处理器电路,其特征在于,若所述多个权重参数的取值范围包括两种数值类型时,所述参数产生模块采用第一编码方式对所述多个权重参数进行编码。
5.根据权利要求4所述的微处理器电路,其特征在于,所述参数产生模块依据由所述第一编码方式产生的多个编码后的权重参数,将所述多个输入参数的其中之一的原始码或补码作为所述多个子输出参数的其中之一。
6.根据权利要求1所述的微处理器电路,其特征在于,若所述多个权重参数的取值范围包括三种数值类型,所述参数产生模块采用第二编码方式对所述多个权重参数进行编码。
7.根据权利要求6所述的微处理器电路,其特征在于,所述参数产生模块依据由所述第二编码方式产生的多个编码后的权重参数,将零码或所述多个输入参数的其中之一的原始码或补码作为所述多个子输出参数的其中之一。
8.根据权利要求1所述的微处理器电路,其特征在于,所述运算模块包括多个加法器层,并且所述多个加法器层的每一层包括多个加法器,所述多个加法器用以并行执行多个加法运算。
9.根据权利要求1所述的微处理器电路,其特征在于,经由所述截位运算而产生的所述输出参数的位宽等于所述多个输入参数的位宽。
10.一种执行神经网络运算的方法,适用于支持单指令流多数据流架构的微处理器电路,其特征在于,所述微处理器电路包括参数产生模块、运算模块以及截位逻辑,所述方法包括:
透过所述参数产生模块并行接收多个输入参数以及多个权重参数,并且依据所述多个输入参数以及所述多个权重参数来并行产生多个子输出参数;
透过所述运算模块并行接收所述多个子输出参数,并且加总所述多个子输出参数,以产生加总参数;以及
透过所述截位逻辑接收所述加总参数,并且对所述加总参数进行截位运算,以产生所述神经网络运算的输出参数,
其中所述微处理器电路透过执行单一一条微指令以完成所述神经网络运算,所述多个输入参数包含于所述微指令的第一源操作数,所述多个权重参数包含于所述微指令的第二源操作数,并且所述神经网络运算的输出参数包含于所述微指令的目的操作数。
11.根据权利要求10所述的执行神经网络运算的方法,其特征在于,每一所述多个输入参数的位宽大于每一所述多个权重参数的位宽,其中所述微处理器电路的位宽大于所述多个输入参数及所述多个权重参数的位宽总和。
12.根据权利要求10所述的执行神经网络运算的方法,其特征在于,依据所述多个输入参数以及所述多个权重参数来并行产生所述多个子输出参数的步骤包括:
透过所述参数产生模块依据所述多个权重参数的取值范围对所述多个权重参数进行对应的编码,而产生多个编码后的权重参数,
透过所述参数产生模块依据所述多个输入参数以及所述多个编码后的权重参数来产生所述多个子输出参数。
13.根据权利要求10所述的执行神经网络运算的方法,其特征在于,若所述多个权重参数的取值范围包括两种数值类型时,所述参数产生模块采用第一编码方式对所述多个权重参数进行编码。
14.根据权利要求13所述的执行神经网络运算的方法,其特征在于,所述参数产生模块依据由所述第一编码方式产生的多个编码后的权重参数,将所述多个输入参数的其中之一的原始码或补码作为所述多个子输出参数的其中之一。
15.根据权利要求10所述的执行神经网络运算的方法,其特征在于,若所述多个权重参数的取值范围包括三种数值类型,所述参数产生模块采用第二编码方式对所述多个权重参数进行编码。
16.根据权利要求15所述的执行神经网络运算的方法,其特征在于,所述参数产生模块依据由所述第二编码方式产生的多个编码后的权重参数,将零码或所述多个输入参数的其中之一的原始码或补码作为所述多个子输出参数的其中之一。
17.根据权利要求10所述的执行神经网络运算的方法,其特征在于,所述运算模块包括多个加法器层,并且所述多个加法器层的每一层包括多个加法器,所述多个加法器用以并行执行多个加法运算。
18.根据权利要求10所述的执行神经网络运算的方法,其特征在于,经由所述截位运算而产生的所述输出参数的位宽等于所述多个输入参数的位宽。
CN201810016819.5A 2018-01-05 2018-01-05 微处理器电路以及执行神经网络运算的方法 Active CN108256638B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201810016819.5A CN108256638B (zh) 2018-01-05 2018-01-05 微处理器电路以及执行神经网络运算的方法
US15/928,113 US11468311B2 (en) 2018-01-05 2018-03-22 Micro-processor circuit and method of performing neural network operation

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810016819.5A CN108256638B (zh) 2018-01-05 2018-01-05 微处理器电路以及执行神经网络运算的方法

Publications (2)

Publication Number Publication Date
CN108256638A CN108256638A (zh) 2018-07-06
CN108256638B true CN108256638B (zh) 2021-06-22

Family

ID=62726049

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810016819.5A Active CN108256638B (zh) 2018-01-05 2018-01-05 微处理器电路以及执行神经网络运算的方法

Country Status (2)

Country Link
US (1) US11468311B2 (zh)
CN (1) CN108256638B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108256644B (zh) * 2018-01-05 2021-06-22 上海兆芯集成电路有限公司 微处理器电路以及执行神经网络运算的方法
CN112789627B (zh) * 2018-09-30 2023-08-22 华为技术有限公司 一种神经网络处理器、数据处理方法及相关设备
CN112132272B (zh) * 2020-09-22 2023-09-12 中国科学院计算技术研究所 神经网络的计算装置、处理器和电子设备
CN112989273B (zh) * 2021-02-06 2023-10-27 江南大学 一种利用补码编码进行存内运算的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103019656A (zh) * 2012-12-04 2013-04-03 中国科学院半导体研究所 可动态重构的多级并行单指令多数据阵列处理系统
WO2015057305A1 (en) * 2013-10-17 2015-04-23 Qualcomm Incorporated Dynamically assigning and examining synaptic delay
CN106203621A (zh) * 2016-07-11 2016-12-07 姚颂 用于卷积神经网络计算的处理器
CN107451659A (zh) * 2017-07-27 2017-12-08 清华大学 用于位宽分区的神经网络加速器及其实现方法

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4073009B2 (ja) * 2002-09-18 2008-04-09 キヤノン株式会社 演算回路
US8738554B2 (en) * 2011-09-16 2014-05-27 International Business Machines Corporation Event-driven universal neural network circuit
US20160026912A1 (en) * 2014-07-22 2016-01-28 Intel Corporation Weight-shifting mechanism for convolutional neural networks
CN105654176B (zh) * 2014-11-14 2018-03-27 富士通株式会社 神经网络系统及神经网络系统的训练装置和方法
US10891538B2 (en) * 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
WO2018119785A1 (en) * 2016-12-28 2018-07-05 Intel Corporation Method and apparatus for a binary neural network mapping scheme utilizing a gate array architecture
CN106909970B (zh) * 2017-01-12 2020-04-21 南京风兴科技有限公司 一种基于近似计算的二值权重卷积神经网络硬件加速器计算装置
CN107169563B (zh) * 2017-05-08 2018-11-30 中国科学院计算技术研究所 应用于二值权重卷积网络的处理系统及方法
WO2019023984A1 (en) * 2017-08-02 2019-02-07 Intel Corporation SYSTEM AND METHOD FOR INCLUSION OF NEURAL NETWORKS 1 AMONG N ON AN AUTOMATIC LEARNING COMPUTER PLATFORM

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103019656A (zh) * 2012-12-04 2013-04-03 中国科学院半导体研究所 可动态重构的多级并行单指令多数据阵列处理系统
WO2015057305A1 (en) * 2013-10-17 2015-04-23 Qualcomm Incorporated Dynamically assigning and examining synaptic delay
CN106203621A (zh) * 2016-07-11 2016-12-07 姚颂 用于卷积神经网络计算的处理器
CN107451659A (zh) * 2017-07-27 2017-12-08 清华大学 用于位宽分区的神经网络加速器及其实现方法

Also Published As

Publication number Publication date
US20190213477A1 (en) 2019-07-11
US11468311B2 (en) 2022-10-11
CN108256638A (zh) 2018-07-06

Similar Documents

Publication Publication Date Title
CN108256638B (zh) 微处理器电路以及执行神经网络运算的方法
CN108256644B (zh) 微处理器电路以及执行神经网络运算的方法
CN107451658B (zh) 浮点运算定点化方法及系统
TWI783295B (zh) 乘法器及乘法運算方法
CN110221808B (zh) 向量乘加运算的预处理方法、乘加器及计算机可读介质
JP2021525403A (ja) 改良された低精度の2進浮動小数点形式設定
CN115344237B (zh) 结合Karatsuba和蒙哥马利模乘的数据处理方法
CN111538473B (zh) 一种Posit浮点数处理器
CN110888623B (zh) 数据转换方法、乘法器、加法器、终端设备及存储介质
CN111936965A (zh) 随机舍入逻辑
US20220283777A1 (en) Signed multiword multiplier
US7219117B2 (en) Methods and systems for computing floating-point intervals
CN112906863B (zh) 一种神经元加速处理方法、装置、设备及可读存储介质
EP3767454B1 (en) Apparatus and method for processing floating-point numbers
EP3767455A1 (en) Apparatus and method for processing floating-point numbers
CN114329330A (zh) 数据处理装置、方法、芯片、计算机设备及存储介质
CN112558920A (zh) 有/无符号乘累加装置及方法
CN111857651B (zh) 用多比特加法器并行进行多个少比特加法的方法及应用
WO2023078364A1 (zh) 矩阵乘法的运算方法及装置
CN115857873B (zh) 乘法器、乘法计算方法、处理系统及存储介质
CN117908835B (zh) 一种基于浮点数计算能力加速sm2国密算法的方法
Li et al. An Area-Power-Efficient Multiplier-less Processing Element Design for CNN Accelerators
CN116974517A (zh) 浮点数处理方法、装置、计算机设备和处理器
CN110059817B (zh) 一种实现低资源消耗卷积器的方法
CN116306707A (zh) 一种计算x&amp;(x-1)的加速电路及计算设备

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
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203

Patentee after: Shanghai Zhaoxin Semiconductor Co.,Ltd.

Address before: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203

Patentee before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd.