CN108416431B - 神经网络微处理器与宏指令处理方法 - Google Patents
神经网络微处理器与宏指令处理方法 Download PDFInfo
- Publication number
- CN108416431B CN108416431B CN201810052752.0A CN201810052752A CN108416431B CN 108416431 B CN108416431 B CN 108416431B CN 201810052752 A CN201810052752 A CN 201810052752A CN 108416431 B CN108416431 B CN 108416431B
- Authority
- CN
- China
- Prior art keywords
- instruction
- data
- macro
- bit
- bit width
- 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
Images
Classifications
-
- 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
Abstract
本发明提供一种神经网络微处理器与宏指令处理方法。该神经网络微处理器包括一映射表、一微码存储器以及一微码解码有限状态机。该映射表将一宏指令映射至该微码存储器上一微码存储器地址。根据该微码存储器上该微码存储器地址所指示的内容,该微码解码有限状态机解码产生多个微指令。上述多个微指令包括至少一微指令循环。上述微指令循环反复操作一数据路径以完成该宏指令。
Description
技术领域
本发明涉及处理器,特别涉及实现类神经网络算法的神经网络处理器或加速器。
背景技术
人工智能技术常使用类神经网络建立机器学习架构。类神经网络涉及复杂且大量的运算,尤其涉及大量的张量(tensor)乘法和乘加运算。如何根据神经网络算法的特殊性,设计适用于神经网络算法的处理器架构,为本技术领域一项重要课题。
发明内容
根据本申请一种实施方式所实现的一种神经网络微处理器,包括一映射表、一微码存储器以及一微码解码有限状态机。该映射表将一宏指令映射至该微码存储器上一微码存储器地址。根据该微码存储器上该微码存储器地址所指示的内容,该微码解码有限状态机解码产生多个微指令。上述多个微指令包括至少一微指令循环。上述微指令循环反复操作一数据路径以完成该宏指令。
一种实施方式有关于一种神经网络微处理器对宏指令处理方法,包括:经一映射表将一宏指令映射至一微码存储器上一微码存储器地址;以及根据该微码存储器上该微码存储器地址所指示的内容解码产生多个微指令。上述多个微指令包括至少一微指令循环。上述微指令循环反复操作一数据路径以完成该宏指令。
根据本申请技术,一条宏指令可以实现颗粒度更高的运算而不受限于数据路径的物理位宽(例如128bit)。该宏指令的操作数可以达到向量或矩阵级别。例如,两个256*256个元素的矩阵(每个元素的大小为16bit)乘法可以直接以一条宏指令实现。神经网络算法编程的复杂度大大简化。当数据路径的硬件设计更改,宏指令也无需改动,更新微码存储器中对应的微指令即可。
一种实施方式中,上述微指令循环还包括至少一载入微指令和至少一运算微指令。上述载入微指令用于将上述运算微指令对应的运算元载入。该宏指令可指示张量相加,且上述运算微指令包括一加法微指令。该宏指令可指示张量相乘,且上述运算微指令包括一乘累加微指令及一累加指令。
下文特举实施例,并配合所附图示,详细说明本发明内容。
附图说明
图1根据本申请一种实施方式图解一微处理器100为类神经网络演算所提供的硬件架构;
图2图解该数据位宽调整器108的一种实施方式;
图3为流程图,根据本申请一种实施方式说明差值监控模块216以及小数位宽FL调整模块204的运作逻辑;
图4为流程图,根据本申请一种实施方式说明判断模块224以及字长WL调整208的运作逻辑;
图5根据本申请一种实施方式图解一微指令(μop)的格式;
图6为方块图,根据本申请一种实施方式图解一微处理器600,其中聚焦于宏指令转换为微指令的技术;
图7根据本申请一种实施方式图解微码解码有限状态机612如何解码一宏指令以及所对应的多个微指令如何执行的流程图;
图8特别图解一二阶张量(即矩阵)相乘所对应的多个微指令如何执行;
图9图解图5微指令(μop)字段A与B所指示的各32位数据的各种数据位宽(WL);
图10根据本申请一种实施方式图解乘加运算的一数据路径1000;
图11以字长WL为8位为例,说明乘加运算所获得的数据M以及S;
图12A-1、图12A-2、图12B-1以及图12B-2因应字长WL不定,图解32位数据B的各种三位内容bn+1bnbn-1;
图13根据本申请一种实施方式图解乘法器1002的硬件架构;且
图14根据本申请一种实施方式图解数据路径1000执行的一微指令(可为SIMD微指令)1400。
【符号说明】
100~处理器;
102~数据路径;
104~数据位宽(WL,FL)寄存器;
106~统计用寄存器;
108~数据位宽(WL,FL)调整器;
110~数据,提供输入运算元;
202~溢位监控模块;
204~小数位宽FL调整模块;
206~数值分布分析模块;
208~字长WL调整模块;
212~最高位(MSB)溢位计数器;
214~次高位(MSB-1)溢位计数器;
216~差值监控模块;
222~直方图数据建立模块;
224~判断模块;
600~微处理器;
602~指令抓取模块;
604~初解码器;
606~队列;
608~映射表;
610~微码存储器;
612~微码解码有限状态机;
614~寄存器;
1002~乘法器;
1004~加法器树;
1302、1304~寄存器;
1306~移位加法器;
1400~微指令;
A与B~源操作数/包含一或多个输入运算元的数据;
A0…A7、B0…B7~输入运算元;
B0_4bit…B7_4bit、B0_8bit…B3_8bit、B0_16bit、B1_16bit、B0_32bit~乘数;
B_PP0…B_PP23_2~数据B的三位bn+1bnbn-1取值;
C~目的操作数/包含输出运算元的数据;
CS~控制信号;
Dst~目的操作数;
FL~小数位宽;
M~数据,载有乘积M0…Mm;
M0…Mm~乘积;
Mux2、Mux3、Mux5~多工器;
OF_1~最高位MSB溢位发生次数;
OF_2~次高位MSB-1溢位发生次数;
opcode~字段,填写操作码;
Operation~有/无符号的乘法或乘加运算;
PP0…PP23_2~部分乘积/部分乘积候选;
S~数据,乘积M0…Mm加总;
signed/unsigned~有/无符号;
size1~SIMD位宽;
size2~字长WL;
S302…S312、S402…S410、S701、S702…S708、S801、S802…S814~步骤;
subopcode~字段,填写副操作码;
WL~字长;
WLFLin~字段,填写该数据路径102使用的数据位宽(WL,FL)来源;以及
WLFLout~字段,填写该数据位宽(WL,FL)调整器108所调适出的字长WL以及小数位宽FL暂存目标。
具体实施方式
以下叙述列举本发明的多种实施例。以下叙述介绍本发明的基本概念,且并非意图限制本发明内容。实际发明范围应依照权利要求书界定。
人工智能为科技领域重大发展,其中常使用类神经网络(neural network)作为机器学习架构。类神经网络包括多层运算,其中,在每层的运算中,需要进行大量的卷积(convolution)运算,因此乘累加(multiply-accumulate)和乘法(multiply)运算占据了大部分运算量。本发明设计的神经网络微处理器架构特别为了适配海量的乘累加和乘法运算进行了硬件优化。此外,其中运算的定点数(fixed point number)包括一整数部分和一小数部分,该整数部分与该小数部分的总位宽为字长(word width,以WL代号),该小数部分的位宽为小数位宽(fraction length,以FL代号),后面将字长和小数位宽统称为数据位宽(bit length)。通常处理器的定点数的数据位宽在算法编程完毕后就是固定的,而在本发明中,数据位宽,包括小数位宽(fraction length,以FL代号)以及字长(word width,以WL代号),并不固定。本申请在硬件实现上考虑如此数据位宽(WL,FL)调适需求,以逼近类神经网络演算。
图1根据本申请一种实施方式图解一微处理器100为类神经网络演算所提供的硬件架构,包括一数据路径(datapath)102、一数据位宽(WL,FL)寄存器104、一统计用寄存器106、以及一数据位宽(WL,FL)调整器108。
数据路径102为算术逻辑运算单元的组合,可用来实现类神经网络常使用的乘加运算或乘法运算,也可以实现最大池化(max pool)、平均(average)运算。数据路径102所接收的数据110是根据一微指令(μop)自寄存器或是存储器(未显示在图中)获得,内含输入运算元。特别是,数据路径102是根据该数据位宽寄存器104存储的数据位宽(bit length),包括一字长(word width)WL以及一小数位宽(fraction length)FL,来对数据110进行运算。以乘加运算为例,数据路径102内的乘法器是以字长WL决定乘加运算微指令的运算元长度,而乘加过程中,小数点位置则是由小数位宽FL决定。一种实施方式中,数据位宽寄存器104是为该数据路径102提供控制参数的特殊功能寄存器(special purpose register,SPR)。前述微指令将设定该数据路径102根据该数据位宽寄存器104所存储的字长WL以及小数位宽FL操作。统计用寄存器106以及数据位宽调整器108即是用来调适该数据位宽寄存器104所存储的该字长WL以及该小数位宽FL。
统计用寄存器106收集数据路径102的运算结果。根据统计用寄存器106内容,数据位宽调整器108更新该字长WL以及该小数位宽FL。前述微指令(μop)可指示更新后的字长WL以及小数位宽FL的存储目标,以待之后随另一笔微指令填入该数据位宽寄存器104进行该另一笔微指令所要求的运算。
一种实施方式中,数据位宽WL以及FL在数据位宽寄存器104中有两组内容,一组为WL0以及FL0,一组为WL1以及FL1。两组内容以乒乓方式切换使用。当WL0以及FL0实际为数据路径102采用时,WL1以及FL1则用于逐步更新(在数据位宽调整器108)。待WL1以及FL1实际为数据路径102采用时,WL0以及FL0则用于逐步更新。前述微指令(μop)可以一字段指示数据位宽来源以及数据位宽更新暂存目标。一微指令(μop)指示该数据路径102以WL0以及FL0为数据位宽来源时,更指示该数据位宽调整器108以WL1以及FL1为更新暂存目标。后续微指令(μop)可切换为指示该数据路径102以WL1以及FL1为数据位宽来源时,更指示该数据位宽调整器108以WL0以及FL0为更新暂存目标。
一种实施方式中,以上乒乓切换是在单层类神经网络演算完毕时进行。第一层类神经网络演算采用WL0以及FL0,且更新WL1以及FL1。第二层类神经网络演算采用WL1以及FL1,且更新WL0以及FL0。第三层类神经网络演算采用WL0以及FL0,且更新WL1以及FL1。后面依次类推。
另一种实施方式中,前述实施例中的每组WL、FL还包括存储WL/FL及运算WL/FL,其中存储WL是指数据在系统存储器中存储的字长,存储FL是运算指数据在系统存储器中小数部分的长度,运算WL是指在数据路径102内部运算时所用的字长,运算FL是指在数据路径102内部运算时小数部分的长度。如此一来,数据位宽寄存器104需存储四组数据位宽WL、FL,包括存储WL0/FL0、运算WL0/FL0、存储WL1/FL1及运算WL1/FL1。神经网络运算中,越靠前面的层,字长WL越长,越靠后面的层,字长WL越短,即,随着运算过程,字长WL通常是不断减小的,其典型值为16bit到4bit,小数位宽FL决定了每层数据的动态范围,在字长WL固定的情形下,小数位宽FL越长,整数部分越短,则动态范围越小,运算的精度越高。数据位宽WL、FL的具体变化方式与网络的输入数据有关,因此在运算过程中动态调整数据位宽WL、FL有利于获得更好的精度。在本实施例中,具体调整过程如下:
首先对WL0/FL0赋值,存储WL与运算WL相等,为神经网络第一层格式对应的WL(例如为16bit),存储FL与运算FL相等,为软件事先计算出的一初始固定值。
运算第n层时,输入数据格式为WL0、FL0,数据输出格式为WL1、FL1。第n层运算过程中,数据路径102按照存储WL0、FL0(第一组数据位宽)从系统存储器读取输入运算元,并按照运算WL0、FL0(第二组数据位宽)来进行运算;数据路径102按照存储WL1、FL1(第三组数据位宽)输出运算结果,在运算和输出的同时,数据位宽调整器108对运算WL1、FL1(第四组数据位宽)不断更新。第n层的运算完成后,运算WL1、FL1(第四组数据位宽)优化为对于第n层数据的最佳值(如8bit),但存储WL1、FL1(第三组数据位宽)数值不变(16bit)。
运算n+1层时,输入数据格式为WL1、FL1,输出数据格式为WL0、FL0。第n+1层运算过程中,数据路径102按照存储WL1、FL1(第三组数据位宽)从系统存储器读取输入运算元(例如还是16bit不变),并按照运算WL1、FL1(第四组数据位宽,在第n层运算后更新为例如8bit)来进行运算,在运算时需要对数据做移位。数据路径102按照存储WL0、FL0(第一组数据位宽)输出运算结果,在运算和输出的同时,数据位宽调整器108按照类似第n层的方式更新运算WL0、FL0(第一组数据位宽),即,将运算WL0、FL0(第二组数据位宽)的值更新为对于第n+1层数据的最佳值(如4bit)。值得注意的是,存储WL0、FL0(第一组数据位宽)在第n层运算结束后用运算WL1、FL1(第四组数据位宽,在第n层运算后更新为例如8bit)更新过,注意运算WL1、FL1(第四组数据位宽)的最终值需要第n层最后一笔运算完成后才能确定,所以第n层还是按照存储WL1、FL1(第三组数据位宽)输出,而在第n层运算全部结束以后,用更新后的运算WL1、FL1(第四组数据位宽)更新存储WL0、FL0(第一组数据位宽),供数据路径102输出第n+1层的运算结果使用,例如数据路径102按照8bit的数据宽度输出第n+1层的运算结果。
循环上述2个步骤,直到神经网络所有层运算完成。
在本实施例中,在第n层运算进行时,数据路径102是根据存储WL1、FL1(第三组数据位宽)输出第n层的运算结果;在第n层运算结束时,数据位宽调整器108根据更新后的运算WL1、FL1(第四组数据位宽)更新存储WL0、FL0(第一组数据位宽)。在第n+1层运算进行时,数据路径102是根据更新后的存储WL0、FL0(第一组数据位宽)输出第n+1层的运算结果;在第n+1层运算结束时,数据位宽调整器108根据更新后的运算WL0、FL0(第二组数据位宽)更新存储WL1、FL1(第三组数据位宽)。
一种实施方式中,统计用寄存器106是为该数据路径102存储运算元的一般功能寄存器(general purpose register,GPR)。以乘加运算为例,类神经网络单一层可能就会产生数万笔乘加运算结果。如此大量的乘加运算结果可由该统计用寄存器106分段收集,供该数据位宽调整器108据以进行数据位宽(WL,FL)更新。一种实施方式中,统计用寄存器106位宽为40位,应付在32、16、8、4、2以及1位宽变动的运算。
图2图解该数据位宽调整器108的一种实施方式,其中溢位监控模块202对该统计用寄存器106进行溢位监控,据以调整数据位宽(WL,FL),在一实施例中,当统计用寄存器106所收集的运算结果的最高位MSB发生溢位的次数超过一阈值时,小数位宽FL调整模块204减小小数位宽FL;当统计用寄存器106所收集的运算结果的次高位(MSB-1)发生溢位的次数超过另一阈值时,小数位宽FL调整模块204增加小数位宽FL。在另一实施例中,溢位监控模块202也可仅对最高位MSB发生溢位的次数进行溢位监控,据以调整数据位宽(WL,FL)。值得注意的是,在一实施例中,调整小数位宽FL时,字长WL保持不变。此外,数值分布分析模块206对统计用寄存器106进行数值分布分析,据以调整数据位宽(WL,FL),在一实施例中,当统计用寄存器106所收集的运算结果的稀疏度较高,字长WL调整208模块减小字长WL,反之若稀疏度较低,则增加字长WL,值得注意的是,在一实施例中,调整字长WL时,小数位宽FL保持不变。
图2所示的实施例的溢位监控模块202包括一最高位(MSB)溢位计数器212、一次高位(MSB-1)溢位计数器214以及一差值监控模块216。一种实施方式中,统计用寄存器106所统计的多笔运算结果包括由该最高位MSB溢位计数器212计数得一最高位MSB溢位发生次数OF_1,并由该次高位MSB-1溢位计数器214计数得一次高位MSB-1溢位发生次数OF_2。差值监控模块216监控该最高位MSB溢位发生次数OF_1以及次高位MSB-1溢位发生次数OF_2之间的差值,小数位宽FL调整模块204根据该差值调整小数位宽FL。具体而言在一实施例中,倘若最高位溢位发生次数OF_1大于次高位溢位发生次数OF_2一阈值或者次高位溢位发生次数OF_2大于最高位溢位发生次数OF_1另一阈值时,则小数位宽FL调整模块204启动,视该最高位MSB溢位发生次数OF_1、以及该次高位MSB-1溢位发生次数OF_2调整该小数位宽FL。
图例数值分布分析模块206包括直方图(histogram)数据建立模块222以及判断模块224。一种实施方式中,统计用寄存器106所统计的多笔运算结果经直方图数据建立模块222统计出数据分布,其中,横轴为运算结果(以数据位宽8为例,运算结果包括0~(28-1)),纵轴为各运算结果落入各统计范围内的个数。判断模块224可识别出各运算结果分布的稀疏度,如果稀疏度高于一定阈值或低于一定阈值时,字长WL调整模块208启动,适应性更新字长WL。神经网络运算的特点是,越靠前级的层,数据的稀疏度越弱,需要的字长WL较大;越靠后级的层,数据的稀疏度越强,需要的字长WL越小。根据神经网络的这一特点,本发明通过统计监测运算结果分布的稀疏度,当数据分布的稀疏度强时,字长WL调整模块208减小字长WL;当数据分布的稀疏度较低时,字长WL调整模块208增加字长WL。数据分布的稀疏度是通过运算结果分别落入直方图数据建立模块222的各统计范围内的数量是否均匀来判断,例如字长WL=8bit,则运算结果的数值范围为0~28(256),统计2000次运算结果的统计直方图可如下表:
统计范围 | 0-15 | 16-31 | 32-47 | 48-63 | … | 241~256 |
落入数量 | 1500 | 20 | 30 | 150 | 100 |
可见,运算结果落入范围[0-15]数量最大,落入范围[48-63]和[241~256]的数量较大,其它范围的数量都相对较小,由于运算结果的数值分布不均匀且在0附近的分布概率高,则认为稀疏性较强,则字长WL调整208模块将调小WL,比如缩减到4bit。缩减的程度要保证神经网络后级的推测(inference)的精度可基本保持不变。
图3为流程图,根据本申请一种实施方式说明差值监控模块216以及小数位宽FL调整模块204的运作逻辑,可以软、硬件方式实现在微处理器100中。针对统计用寄存器106所统计的内容,步骤S302接收计数器212的计数值OF_1以及计数器214的计数值OF_2。步骤S304判断计数差值(OF_1-OF_2)是否大于阈值TH1,即判断最高位MSB溢位发生次数是否比次高位MSB-1溢位发生次数多阈值TH1。若步骤S304判断为否,流程进入步骤S306判断计数差值(OF_2-OF_1)是否大于阈值TH2,即判断次高位MSB-1溢位发生次数是否比最高位MSB溢位发生次数多阈值TH2。若步骤S306的判断结果也为否,流程结束,尚不更新小数位宽FL。反之,流程进入步骤S310,增加小数位宽FL,从而增加运算的精度。若步骤S304判断为是,流程进行步骤S308,减小小数位宽FL,字长WL不变的情形下,整数位宽因而拉长,以增加数的动态范围从而抑制最高位MBS溢位发生。
图4为流程图,根据本申请一种实施方式说明判断模块224以及字长WL调整208的运作逻辑,可以软、硬件方式实现在微处理器100中。针对统计用寄存器106所统计的内容,步骤S402自直方图数据建立模块222接收直方图数据。步骤S404以阈值THuneven比对直方图数据的数值在各个数值范围的分布,判断数值分布的稀疏性。若运算结果稀疏性较强,类神经网络演算可能进行到后面层,流程进行步骤S406,可减小字长WL,同时保证推测的精度保持不变。反之,流程进入步骤S408,以阈值THeven(低于阈值THuneven)比对直方图数据的数值在各个数值范围的分布,判断数值分布是否均匀。若是,代表运算结果均匀出现,类神经网络演算可能是在进行前面层,流程进行步骤S410,可增加字长WL,以提高运算精度,增加运算结果的分辨率。反之,流程结束,尚不更新字长WL。通常,类神经网络前层涉及密集矩阵的运算,需要较长字长WL,后层所需的字长WL较短。本申请微处理器100可完全贴近类神经网络演算。
在某些实施例中,图3对小数位宽FL的调整时,字长WL保持不变,因此其调整与小数点定位相关,同时也决定整数位宽。图4对字长WL调整时,小数位宽FL保持不变。本申请数据位宽调整又可视为小数点定位/整数位宽调整。
图5根据本申请一种实施方式图解一微指令(μop)的格式。该微指令(μop)可为一种单指令多数据流(Single Instruction Multiple Data,缩写:SIMD)指令,可驱动数据路径102直接执行。字段opcode填写操作码。例如,指示为乘加运算或乘法运算。字段subopcode填写副操作码。例如,指示清除该统计用寄存器106、或饱和取整(saturationand round)该统计用寄存器106。字段WLFLin填写该数据路径102运算所使用的数据位宽(WL,FL)来源。字段WLFLout填写该数据位宽(WL,FL)调整器108所调适出的字长WL以及小数位宽FL的暂存目标。一种实施方式中,有的微指令填写WLFLin为(WL0,FL0)且WLFLout为(WL1,FL1),有的微指令填写WLFLin为(WL1,FL1)且WLFLout为(WL0,FL0),如此达成数据位宽(WL,FL)训练与更新的乒乓切换。
在另一实施例中,(WL0,FL0)又包括两组(存储WL0,存储FL0)及(运算WL0,运算FL0),(WL1,FL1)又包括两组(存储WL1,存储FL1)及(运算WL1,运算FL1),其中数据路径102根据(存储WL0,存储FL0)取得输入运算元、并根据(运算WL0,运算FL0)进行运算的过程中,数据路径102根据(存储WL1,存储FL1)输出该层的多个运算结果,且数据位宽调整器108对(运算WL1,运算FL1)进行更新,当该层的运算全部结束后,数据位宽调整器108用更新后的(运算WL1,运算FL1)更新(存储WL0,存储FL0)。在一下层的运算中,数据路径102根据(存储WL1,存储FL1)取得输入运算元、并根据更新的(运算WL1,运算FL1)进行运算的过程中,数据路径102根据更新的(存储WL0,存储FL0)输出该层的多个运算结果,且数据位宽调整器108对(运算WL0,运算FL0)进行更新,当该层的运算全部结束后,数据位宽调整器108用更新后的(计算WL0,计算FL0)更新(存储WL1,存储FL1)。
字段C填写目的操作数,可为一般功能寄存器GPR或一存储器位置,用以存储该数据路径102当次运算的结果(输出运算元)。字段A与B则对应源操作数,可为一般功能寄存器GPR或一存储器位置,据以取得输入数据交由该数据路径102运算。此外,本申请更涉及一种微指令,用于初始化数据位宽寄存器104的内容WL0、FL0、WL1以及FL1。
微指令(μop)可更有其他格式,或是视该数据路径102的硬件设计更改而有微调。为了增强各代产品之间的相容性,本申请为适用各产品的宏指令(macro instruction)提供一种转换为微指令(μop)的技术。
图6为方块图,根据本申请一种实施方式图解一微处理器600,其中聚焦于宏指令转换为微指令的技术。指令抓取模块602取得的指令需经由一初解码器604判断是否需要自宏指令转换为微指令。简单(simple)指令将直接由初解码器604解码并送入队列(issuequeue)606排队等待被执行。复杂(complex)指令则需进行宏指令至微指令转换。藉由查询映射表608,复杂指令将对应微码存储器(microcode ROM)610的地址。该微码存储器610该地址的内容经一微码解码有限状态机(microcode decoding FSM)612解码为多个微指令后,送入队列606排队等待被执行。多个微指令包括至少一微指令循环(loop),该微指令循环反复操作上述数据路径102而实现一宏指令。如图所示,队列606输出包括用于寄存器614填写。寄存器614包括数据路径102所参考的多个寄存器,以存储该宏指令的来源操作数长度,存储上述多个微指令的运算元尺寸(例如图1的数据位宽寄存器104存储的(WL,FL)),以及暂存该宏指令的中间运算结果。本发明的微处理器600为适配神经网络的运算特点所进行的另一方面的优化在于,藉由查询映射表608、微码存储器610及微码解码有限状态机612,一条宏指令可以实现颗粒度更高的运算而不受限于数据路径102的物理位宽(例如128bit),该宏指令的操作数可以达到向量或矩阵级别,例如两个256*256个元素的矩阵(每个元素的大小为16bit)乘法可以直接以一条宏指令实现,且当大大简化神经网络算法编程的复杂度,当数据路径102的硬件设计更改,宏指令也无需改动,更新微码存储器610中对应的微指令即可。
图7根据本申请一种实施方式图解微码解码有限状态机612如何解码一宏指令以及所对应的多个微指令如何执行的流程图。微码解码有限状态机612执行步骤S701,经由该映射表608将宏指令映射至微码存储器610中对应地址,并更解码出该宏指令的多个信息,这些信息包括暂存该宏指令的来源操作数的尺寸以及该宏指令的运算元尺寸的寄存器614的地址,这些寄存器614可以是微处理器600的架构寄存器(architecture register)。在一实施例中,该来源操作数为一三阶张量(tensor),也可以叫做三维矩阵,则该来源操作数的尺寸包括该三维矩阵的长度(length)、宽度(width)及深度(depth),该运算元尺寸为该三维矩阵的元素大小,供微码解码有限状态机612将来源操作数划分为多个运算元,其中运算元尺寸由数据路径102的数据位宽决定,数据位宽例如为图1的数据位宽寄存器104存储的(WL,FL),但本发明并不限这种动态可调的方式,该数据位宽也可由宏指令指定并在编程时确定。微码存储器610中对应地址开始的部分微指令执行步骤S702,根据步骤S701解码出的寄存器地址取得宏指令信息。微码存储器610中对应地址开始的部分微指令以循环方式多次进行,基于步骤S702取得的宏指令信息在执行步骤S704~S708的微指令循环时使用。S704藉由至少一载入微指令载入运算元至寄存器(或其他存储空间)。步骤S706藉由至少一运算微指令驱动数据路径102执行运算,其中可还包括串联前一次数据路径102运算所需的微指令。步骤S708检查循环是否结束。一宏指令因而由反复操作数据路径102达成。
以张量相加为例,一宏指令所指示的较大颗粒度的张量相加可切分由多次加法微指令相加实现。数据路径102提供算术逻辑运算单元执行加法微指令,上述加法微指令以该算术逻辑运算单元的宽度(SIMD width)确定运算元尺寸,不足整数个SIMD宽度则补零。步骤S702取得的宏指令所指示的张量尺寸(例如,通过架构寄存器(architectureregister))、以及操作数来源地址。藉步骤S704~S708,数据路径102对应的加法微指令组合成张量相加运算。
以张量相乘为例,一宏指令所指示的张量相乘可切分由多个乘累加运算微指令(形如图5)实现。数据路径102提供算术逻辑运算单元执行这些乘累加运算微指令。步骤S702用于取得张量相乘宏指令所指示的张量尺寸、操作数来源地址以及运算元大小,以张量为三维矩阵为例,该张量尺寸包括该三维矩阵的长度(length)、宽度(width)及深度(depth),该运算元尺寸为该三维矩阵的最大元素的大小,例如为16bit。藉由执行循环步骤S704~S708,数据路径102反复执行乘累加运算微指令以完成张量相乘运算。
图8特别图解一二阶张量(即矩阵)相乘所对应的多个微指令如何执行。微码解码有限状态机612执行步骤S801,经由该映射表608将矩阵相乘宏指令映射至微码存储器610中对应地址,并更解码出该矩阵相乘宏指令的多个信息,这些信息包括暂存来源矩阵的宽度(width)、深度(depth)以及来源矩阵元素的最大尺寸的寄存器614的地址,这些寄存器614可以是微处理器600的架构寄存器(architecture register)。微码存储器610中对应地址开始的部分微指令执行步骤S802,根据步骤S801解码出的寄存器地址取得矩阵相乘宏指令所指示的矩阵尺寸以及矩阵元素尺寸。微码存储器610中对应地址开始的部分微指令以循环方式多次进行,执行步骤S804至S814,以多个乘加运算实现矩阵相乘。步骤S804载入乘加运算所需的运算元至寄存器。步骤S806操作数据路径102进行乘加运算。步骤S808累加运算结果。步骤S810检查矩阵宽度是否满足。若未满足,则再次进行步骤S804以及S808。若满足,步骤S812存储累加结果,为乘积矩阵其一元素。步骤S814则检查矩阵尺寸是否满足。若未满足,则反复进行步骤S804~S812,直到乘积矩阵所有元素都求出。矩阵尺寸满足则宏指令所要求的矩阵相乘完成。以实现两个256*256个元素的矩阵A和B相乘结果为矩阵C的宏指令为例,假设矩阵A和B的矩阵元素的大小为16bit,数据路径102的物理位宽为128bit,则数据路径102的乘加运算单元可以同时执行8个矩阵元素的相乘后再累加的运算,则步骤S806系数据路径102执行1条形如图5的乘加微指令:macc WLFL0,WLFL1,C[i][j],A[i][k++],B[j][k++],完成8个矩阵元素的乘加;步骤S808将步骤S806执行乘加微指令所得的结果与前次乘加微指令所得的结果累加,步骤S810判断是否256个元素均乘加完毕,如果是则进入步骤S812(注意本实施例中,内循环S804~S808将执行32次),将S808的累加结果作为矩阵C的一矩阵元素输出,步骤S814再判断矩阵A和B的宽度256和长度256是否满足,若否则反复执行步骤S804~S812,直到乘积矩阵C的所有256*256个元素都求出。
本申请所提出的宏指令(macro instruction)至微指令(μop)转换架构无须复杂编译程序。特别是,每一产品世代都可采用同样简洁的宏指令,相当节省指令存储器空间,另外可维持每代产品的相容性,有利于建立并保持神经网络微处理器的软件发展生态环境。
以下介绍数据路径102的算术逻辑运算电路的硬件设计,以适配动态可调的数据字长WL。值得注意的是,神经网络算法中存在大量的较短数据位宽WL的数据需要进行乘法或点积运算,例如神经网络算法中的权重(weight)等数据常常为1~2bit位宽,本发明的数据路径102的乘法执行电路经过特别设计,可通用于不同数据字长WL的乘法运算,乘法微指令的乘数与被乘数的数据字长WL可低至4bit,甚至更可低至1~2bit。
图9图解图5微指令(μop)字段A与B所指示的各32位数据的各种数据位宽(WL)。数据位宽(WL)32位时,字段A指示一笔32位数据A0作为被乘数,字段B指示一笔32位数据B0作为乘数。数据位宽(WL)16位时,字段A指示两笔16位被乘数(A1、A0),字段B指示两笔16位乘数(B1、B0)。数据位宽(WL)8位时,字段A指示四笔8位被乘数(A3、A2、A1、A0),字段B指示四笔8位乘数(B3、B2、B1、B0)。数据位宽(WL)4位时,字段A指示8笔4位被乘数A7…A0,字段B指示8笔4位乘数B7…B0。数据位宽(WL)2位时,字段A以及B各指示16笔2位被乘数。数据位宽(WL)1位时,字段A以及B各指示32笔1位乘数。本申请提供的数据路径102可对A以及B所指示的数据(以下同样标号为A与B)做多种位宽的运算。
图10根据本申请一种实施方式图解乘加运算的一数据路径1000,其中包括一乘法器1002以及一加法器树1004。控制信号CS指示字长WL、以及是否为有符号运算(signed/unsigned)。字长WL可根据图1的数据位宽寄存器104而设定,或是指示于微指令中。符号运算与否(signed/unsigned)可参考数据位宽寄存器104,另以寄存器管理,或是指示于微指令中。乘法器1002以及加法器树1004会根据控制信号CS动作。乘法器1002输出为数据M,其包括多个乘积。加法器树1004将数据M包括的多个乘积累加,输出为数据S。图11以字长WL为8位为例,说明乘加运算所获得的数据M以及S。数据M包括4个乘积M0…M3。数据S为4个乘积M0…M3相累加。
本申请特别公开乘法器1002的一种实施方式,其中采用布斯(Booth)乘法。特别是对乘数Bi(载于数据B的乘数B0…Bm其一)做三位bn+1bnbn-1一组的取值。三位bn+1bnbn-1的位bn+1与更高位三位bn+3bn+2bn+1有一个位(位bn+1)的重叠。凑不足三位的部分则补零。布斯(Booth)乘法的运算如下:
b<sub>n+1</sub>b<sub>n</sub>b<sub>n-1</sub> | PP |
000 | +0*Ai |
001 | +1*Ai |
010 | +1*Ai |
011 | +2*Ai(向左移1位) |
100 | -2*Ai(向左移1位再取反) |
101 | -1*Ai(取反) |
110 | -1*Ai |
111 | -0*Ai |
Ai为载于数据A的被乘数A0…Am其一。bn+1bnbn-1移动取自乘数Bi,用以决定对被乘数Ai进行何种运算,以求出部分乘积PP。所有部分乘积PP移位相加后得到一个乘法Ai*Bi的运算结果,也就是乘积Mi,将用于数据M的累加。
因应字长WL不定,图12A-1、图12A-2、图12B-1以及图12B-2图解32位数据B的各种三位内容bn+1bnbn-1。数据B包括图示编号31…0的位b0~b31。墨色底表示填数值”0”。非墨色底表示操作数B的编号位n的数值复制,其中的数字n对应位编号。
本段落讨论字长WL为4位的例子。数据B位3…0的四位乘数B0_4bit(可称之为第一乘数,包括b0~b3)对应的三位内容bn+1bnbn-1分别为B_PP0、B_PP1、以及B_PP2_1(无符号)/B_PP2_2(有符号)。数据B位7…4的四位乘数B1_4bit(可称之为第二乘数,包括b4~b7)对应的三位内容bn+1bnbn-1分别为B_PP3_1、B_PP4、以及B_PP5_1(无符号)/B_PP5_2(有符号)。数据B位11…8的四位乘数B2_4bit(可称之为第五乘数,包括b8~b11)对应的三位内容bn+1bnbn-1分别为B_PP6_1、B_PP7、以及B_PP8_1(无符号)/B_PP8_2(有符号)。数据B位15…12的四位乘数B3_4bit(可称之为第七乘数,包括b12~b15)对应的三位内容bn+1bnbn-1分别为B_PP9_1、B_PP10、以及B_PP11_1(无符号)/B_PP11_2(有符号)。后续的四位乘数B4_4bit(包括b16~b19)、四位乘数B5_4bit(包括b20~b23)、四位乘数B6_4bit(包括b24~b27)及四位乘数B7_4bit(包括b28~b31)依次类推。B_PP0、B_PP3_1、B_PP6_1、以及B_PP9_1分别为乘数B0_4bit、B1_4bit、B2_4bit、以及B3_4bit的起始取数。B_PP1、B_PP4、B_PP7、以及B_PP10分别为乘数B0_4bit、B1_4bit、B2_4bit、以及B3_4bit的中段取数。B_PP2_1、B_PP5_1、B_PP8_1、以及B_PP11_1分别为乘数B0_4bit、B1_4bit、B2_4bit、以及B3_4bit无符号的尾端取数。B_PP2_2、B_PP5_2、B_PP8_2、以及B_PP11_2分别为乘数B0_4bit、B1_4bit、B2_4bit、以及B3_4bit有符号的尾端取数。
本段落讨论字长WL为8位的例子。数据B位7…0的八位乘数B0_8bit(可称之为第三乘数,包括b0~b7)对应的三位内容bn+1bnbn-1分别为B_PP0、B_PP1、B_PP3_2、B_PP4以及B_PP5_1(无符号)/B_PP5_2(有符号)。数据B位15…8的八位乘数B1_8bit(可称之为第六乘数,包括b8~b15)对应的三位内容bn+1bnbn-1分别为B_PP6_1、B_PP7、B_PP9_2、B_PP10以及B_PP11_1(无符号)/B_PP11_2(有符号)。后续八位乘数B2_8bit(包括b16~b23)及八位乘数B3_8bit(包括b24~b31)依次类推。B_PP0以及B_PP6_1分别为乘数B0_8bit以及B1_8bit的起始取数。B_PP1、B_PP3_2、以及B_PP4为乘数B0_8bit的中段取数。B_PP7、B_PP9_2、以及B_PP10为乘数B1_8bit的中段取数。B_PP5_1以及B_PP11_1分别为乘数B0_8bit以及B1_8bit无符号的尾端取数。B_PP5_2以及B_PP11_2分别为乘数B0_8bit以及B1_8bit有符号的尾端取数。
本段落讨论字长WL为16位的例子。数据B位15…0的十六位乘数B0_16bit(可称之为第四乘数,包括b0~b15)对应的三位内容bn+1bnbn-1分别为B_PP0、B_PP1、B_PP3_2、B_PP4、B_PP6_2、B_PP7、B_PP9_2、B_PP10以及B_PP11_1(无符号)/B_PP11_2(有符号)。后续数据B位16…31的十六位乘数B1_16bit(包括b16~b31)对应的三位内容bn+1bnbn-1依次类推。B_PP0为乘数B0_16bit的起始取数。B_PP1、B_PP3_2、B_PP4、B_PP6_2、B_PP7、B_PP9_2、以及B_PP10为乘数B0_16bit的中段取数。B_PP11_1为乘数B0_16bit无符号的尾端取数。B_PP11_2为乘数B0_16bit有符号的尾端取数。
至于字长WL为32位的例子,如图所示,数据B位31…0的三十二位乘数B0_32bit(包括b0~b31)对应的三位内容bn+1bnbn-1分别为B_PP0、B_PP1、B_PP3_2、B_PP4、B_PP6_2、B_PP7、B_PP9_2、B_PP10、B_PP12_2、B_PP13、B_PP15_2、B_PP16、B_PP18_2、B_PP19、B_PP21_2、B_PP22以及B_PP23_1(无符号)/B_PP23_2(有符号)。B_PP0为乘数B0_32bit的起始取数。B_PP1、B_PP3_2、B_PP4、B_PP6_2、B_PP7、B_PP9_2、B_PP10、B_PP12_2、B_PP13、B_PP15_2、B_PP16、B_PP18_2、B_PP19、B_PP21_2、B_PP22为乘数B0_32bit的中段取数。B_PP23_1为乘数B0_32bit无符号的尾端取数。B_PP23_2为乘数B0_32bit有符号的尾端取数。
值得注意的是,因应字长WL不定,第一数据宽度(例如4bit)的第二个乘数(如B1_4bit)的起始取数(如B_PP3_1为4bit的第二个乘数B1_4bit的起始取数)需与第二数据宽度(例如8或16或32bit)的第一个乘数(如B0_8bit或B0_16bit或B0_32bit)的中段取数之一(如B_PP3_2为8bit乘数B0_8bit、16bit乘数B0_16bit及16bit乘数B0_16bit的中段取数之一)以多工选择方式进行考虑。第二数据宽度中段取数之一B_PP3_2与第一数据宽度起始取数B_PP3_1对齐取数。
特别是,图中全填零值的三位内容bn+1bnbn-1,包括B_PP2_2、B_PP5_2、B_PP8_2、B_PP11_2…等,除了提供乘数与下一乘数边界处的有符号的尾端取数选择(例如B_PP2_2供4bit乘数B0_4bit与下一乘数B1_4bit边界处的三位取值,B_PP5_2供4bit乘数B1_4bit与下一乘数B2_4bit边界处及8bit乘数B0_8bit与下一乘数B1_8bit边界处的三位取值),也用于其它非边界数据位宽的补零取数(例如B_PP2_2还供8bit、16bit及32bit数据位宽乘数B0_8bit、B0_16bit及B0_32bit的补零取数,B_PP5_2还供16bit及32bit数据位宽乘数B0_16bit及B0_32bit的补零取数)。如此的全零三位数(如B_PP2_2)与第一数据位宽(例如为4bit)的乘数(如B0_4bit)无符号的尾端取数(如B_PP2_1)呈多工选择。全零三位数B_PP2_2与第一数据宽度无符号的尾端取数B_PP2_1对齐取数。
图12A-1、12A-2、12B-1以及12B-2对数据B(乘数供应数据)的三位取数bn+1bnbn-1可以各自以寄存器暂存,待进行布斯乘法时使用。本申请所公开的乘法器1002对数据B取所有可能三位bn+1bnbn-1,与相应的被乘数A0…Am依布斯乘法产生部分乘积(PP),再据以移位相加获得乘积M0…Mm,组合成数据M。值得注意的是,数据路径1000的输出取决于数据路径1000的类型,如果数据路径1000为乘法运算单元,即仅执行乘法Ai*Bi,则获得的乘积M0…Mm组合成的数据M直接作为输出;如果数据路径1000为乘加运算单元,即执行乘法Ai*Bi=Mi后,则还要经加法器树1004将各个Mi累加产生累加和S作为输出。
图13根据本申请一种实施方式图解乘法器1002的硬件架构。数据B的三位bn+ 1bnbn-1取数分别暂存于对应的寄存器中,与数据同标号。图中仅显示局部,包括B_PP0、B_PP1、B_PP2_1、B_PP2_2、B_PP3_1、B_PP3_2、B_PP4、B_PP5_1、B_PP5_2。数据A则根据字长WL切分输入寄存器(图中仅显示局部,包括1302、1304)。例如当字长WL为4时,数据A位31…0切分为8个乘数A0_4bit、A1_4bit…A7_4bit,分别存入寄存器1302、1304…等寄存器;当字长WL为8时,数据A位31…0切分为4个乘数A0_8bit、A1_8bit、A2_4bit及A3_8bit,分别存入寄存器1302、1304…等寄存器;当字长WL为16时,数据A位31…0切分为2个乘数A0_16bit及A1_16bit,分别存入寄存器1302、1304…等寄存器;当字长WL为32时,数据A位31…0作为个乘数A0_32bit,分别存入寄存器1302、1304…等寄存器。乘法器1002还包括一部分乘积选择电路1301,其包括多个多工器,以乘数供应数据B和被乘数供应数据A均为32bit为例,部分乘积选择电路1301包括Mux2、Mux3、Mux5…Mux23(图未绘示)等15个多工器。
字长WL为4时,暂存内容1302为A0_4bit,且暂存内容1304为A1_4bit。A0_4bit与B_PP0、B_PP1、B_PP2_1、B_PP2_2进行布斯乘法后,得数值PP0、PP1、PP2_1以及PP2_2。控制信号CS若指示字长WL为4且为无符号运算,则多工器Mux2输出PP2_1为部分乘积PP2。控制信号CS若指示字长WL为4且为有符号运算,则多工器Mux2输出PP2_2为部分乘积PP2。部分乘积PP0、PP1以及PP2移位相加得乘积M0。A1_4bit与B_PP3_1、B_PP3_2、B_PP4、B_PP5_1以及B_PP5_2进行布斯乘法后,得数值PP3_1、PP3_2、PP4、PP5_1以及PP5_2。控制信号CS若指示字长WL为4且为无符号运算,则多工器Mux3输出PP3_1为部分乘积PP3,多工器Mux5输出PP5_1为部分乘积PP5。控制信号CS若指示字长WL为4且为有符号运算,则多工器Mux3仍输出PP3_1为部分乘积PP3,多工器Mux5则输出PP5_2为部分乘积PP5。部分乘积PP3、PP4以及PP5移位相加得乘积M1。后续类似架构可求出乘积M2…M7,其中M0=A0_4bit*B0_4bit,M1=A1_4bit*B1_4bit,M2=A2_4bit*B2_4bit…M7=A7_4bit*B7_4bit。乘积M0…M7可组成数据M为乘法器1002输出。移位加法器1306即负责部分乘积PP的移位相加以得到乘积M0…M7。
字长WL为8时,暂存内容1302为A0_8bit,且暂存内容1304也为A0_8bit。A0_8bit与B_PP0、B_PP1、B_PP2_1、B_PP2_2、B_PP3_1、B_PP3_2、B_PP4、B_PP5_1以及B_PP5_2进行布斯乘法后,得数值PP0、PP1、PP2_1、PP2_2、PP3_1、PP3_2、PP4、PP5_1以及PP5_2。控制信号CS显示字长WL为8(无论是无符号还是有符号运算),多工器Mux2输出PP2_2为部分乘积PP2,多工器Mux3输出PP3_2为部分乘积PP3。控制信号CS若指示字长WL为8且为无符号运算,则多工器Mux5输出PP5_1为部分乘积PP5。控制信号CS若指示字长WL为8且为有符号运算,则多工器Mux5输出PP5_2为部分乘积PP2。部分乘积PP0、PP1、PP2(字长WL为8/16/32时一定为0)、PP3、PP4以及PP5移位相加得乘积M0。值得注意的是,其中PP2(字长WL为8/16/32时一定为0)和PP3对齐相加。后续类似架构可求出乘积M1…M3,其中M0=A0_8bit*B0_8bit,M1=A1_8bit*B1_8bit,M2=A2_8bit*B2_8bit,M3=A3_8bit*B3_8bit。乘积M0…M3可组成数据M为乘法器1002输出。移位加法器1306即负责部分乘积PP的移位相加以得到乘积M0…M3。
其他更长字长WL(如,16、32位)的操作,也可根据以上架构实现。由于上述布斯乘法编码要求乘数数据B至少有一个3位数据,因此对于字长WL更小(如2或1位)的乘法,乘法器1002更可另外提供查表机制,供字长WL更小(如2或1位)的乘法运算可以直接查表获得。如此一来,乘法器1002将支持32/16/8/4/2/1位宽的可调适字长WL。当图1的数据位宽调整器108根据前述实施例方式动态调节字长WL时,图10的数据路径1000提供的乘法器1002对不同字长WL的乘法运算均能适用。
整理之,微处理器,如微处理器所包含的图13的乘法器1002,包括至少三个取数寄存器、以及一部分乘积选择电路。在第一数据位宽(例如4bit)下,一第一取数寄存器暂存一乘数供应数据(例如乘数供应数据B)所载的一第一乘数(例如乘数B0_4bit)的一无符号尾端取数(例如取数B_PP2_1,包括2位的0值及位b3)。在该第一数据位宽下,一第三取数寄存器暂存该乘数供应数据所载的一第二乘数(例如乘数B1_4bit)的起始取数(例如取数B_PP3_1,包括位b5b4及1位的0值)。在长于该第一数据位宽的一第二数据位宽(例如8bit)下,一第四取数寄存器暂存该乘数供应数据所载的一第三乘数(例如乘数B0_8bit)的中段取数(例如取数B_PP3_2,包括位b5b4b3)。该第三乘数的上述中段取数(例如位b5b4b3)由上述第一乘数的上述无符号尾端取数(例如00b3)及上述第二乘数的上述起始取数(例如b5b40)组合而成。在该第一数据位宽下,该部分乘积选择电路选择该第三取数寄存器内容(例如取数B_PP3_1)与该第二乘数对应的被乘数(例如被乘数A1_4bit)进行布斯乘法产生的结果(例如PP3_1)作为一第三部分乘积(例如部分乘积PP3)。在该第二数据位宽下,该部分乘积选择电路选择该第四取数寄存器内容(例如取数B_PP3_2)与该第三乘数对应的被乘数(例如被乘数A0_8bit)进行布斯乘法产生的结果(例如PP3_2)作为该第三部分乘积(例如部分乘积PP3)。
图14根据本申请一种实施方式图解数据路径1000执行的一微指令(可为SIMD微指令)1400。字段Dst为目的操作数,指示存储运算结果的空间(寄存器或存储器)。字段A和B为源操作数,标示被乘数供应数据A以及乘数供应数据B的来源,如,自寄存器或存储器取得数据A以及B。字段size1为数据路径1000的物理位宽(即SIMD位宽,例如128bit),该物理位宽决定数据A和B的长度。字段size2为数据位宽WL(例如32/16/8/4/2/1位),为数据A和B中单个输入运算元(被乘数、乘数)的尺寸。字段Operation用于设定是否有符号。字段Operation可更设定由数据路径1000执行的是乘法还是乘加操作,以决定是否使用加法器树1004处理乘法器1002输出M。当然,当数据位宽WL如图1所示的实施例由数据位宽调整器108动态可调时,字段size2的数据位宽WL对应的寄存器地址行如图5的WLFLin及WLFLout。
数据路径1000对乘数供应数据B进行取数获得多个布斯乘法取数。数据路径1000更依据数据位宽WL将被乘数供应数据A划分为多个被乘数Ai,依据数据位宽WL将乘数供应数据B划分为多个乘数Bi,并对各被乘数Ai与前述布斯乘法取数进行布斯乘法以产生多个部分乘积PP0、PP1、PP2_1、PP2_2、PP3_1、PP3_2……等,数据路径1000更根据数据位宽WL从前述部分乘积PP0、PP1、PP2_1、PP2_2、PP3_1、PP3_2……等中选择一部分部分乘积进行移位相加以产生该等被乘数Ai与该该等乘数Bi的多个乘积Mi:例如当数据位宽为4bit且为无符号操作时,选择PP0、PP1和PP2_1移位相加得乘积M0_4bit=A0_4bit*B0_4bit,选择PP3_1、PP4和PP5_1移位相加得乘积M1_4bit=A1_4bit*B1_4bit,选择PP6_1、PP7和PP8_1移位相加得乘积M2_4bit=A2_4bit*B2_4bit…依次类推;而当数据位宽为8bit且为无符号操作时,选择PP0、PP1、PP2_2、PP3_2、PP4和PP5_1移位相加得乘积M0_8bit=A0_8bit*B0_8bit,选择PP6_1、PP7、PP8_2、PP9_2、PP10和PP11_1移位相加得乘积M1_8bit=A1_8bit*B1_8bit…依次类推。如果字段Operation指示为乘法操作,多个乘积Mi可组成数据M作为数据路径1000的输出,如果字段Operation指示为乘加操作,累加多个乘积Mi得到S作为数据路径1000的输出。
根据本申请技术实现的微处理器可应用来实现人工智能技术,特别适用类神经网络运算中不同的数据位宽的运算(可能低至1~2bit)、且涉及大尺寸张量运算的应用。
虽然本发明已以优选实施例公开如上,然其并非用以限定本发明,本领域技术人员在不脱离本发明的精神和范围内,当可做些许更动与润饰,因此本发明的保护范围当视所附权利要求书界定范围为准。
Claims (18)
1.一种神经网络微处理器,包括:
映射表以及微码存储器,该映射表将宏指令映射至该微码存储器上一微码存储器地址;
微码解码有限状态机,其根据该微码存储器上该微码存储器地址所指示的内容解码产生多个微指令,其中上述多个微指令包括至少一微指令循环,上述微指令循环反复操作数据路径以完成该宏指令;以及
寄存器,其存储所述数据路径的数据位宽,
其中:
存储在所述寄存器中的所述数据路径的数据位宽是根据所述数据路径的运算结果被动态调整的;
该微码解码有限状态机还解码出该宏指令的信息;且
所解码出的该宏指令的信息还指示该宏指令的至少一来源操作数尺寸及运算元尺寸,供该微码解码有限状态机将该来源操作数划分为多个运算元;且
上述运算元尺寸由从所述寄存器获取的所述动态调整的数据位宽决定。
2.如权利要求1所述的神经网络微处理器,其中:
所解码出的该宏指令的信息存储上述来源操作数尺寸及上述运算元尺寸的多个寄存器的地址。
3.如权利要求1所述的神经网络微处理器,其中上述微指令循环还包括至少一载入微指令和至少一运算微指令,其中上述载入微指令用于将上述运算微指令对应的运算元载入。
4.如权利要求3所述的神经网络微处理器,其中:
该宏指令指示张量相加,上述运算微指令包括加法微指令。
5.如权利要求3所述的神经网络微处理器,其中:
该宏指令指示张量相乘,上述运算微指令包括乘累加微指令。
6.如权利要求5所述的神经网络微处理器,其中:
上述乘累加微指令将数量的上述运算元相乘后再累加,该数量由该数据路径的物理位宽和该运算元尺寸决定。
7.如权利要求6所述的神经网络微处理器,其中:
所解码出的该宏指令的信息还指示该宏指令的至少一张量一维大小;
上述运算微指令还包括至少一累加微指令,该数据路径每次操作,上述累加微指令即指示累加该数据路径的运算结果;且
上述运算微指令还包括至少一输出微指令,该数据路径反复操作至满足该张量一维大小时,上述输出微指令输出上述累加结果为一张量元素。
8.如权利要求7所述的神经网络微处理器,其中:
所解码出的该宏指令的信息还指示该宏指令的至少一张量二维大小;且
该数据路径被反复操作至既满足该张量一维大小、又满足该张量二维大小。
9.如权利要求1所述的神经网络微处理器,还包括:
指令抓取模块以及初解码器,
其中:
该宏指令是经该指令抓取模块抓取后,送入该初解码器判定查表该映射表,获得对应该宏指令的该微码存储器地址。
10.一种神经网络微处理器对宏指令处理方法,包括:
经映射表将宏指令映射至微码存储器上一微码存储器地址;以及
根据该微码存储器上该微码存储器地址所指示的内容解码产生多个微指令,
其中,上述多个微指令包括至少一微指令循环,上述微指令循环反复操作数据路径以完成该宏指令,
其中,所述方法还包括:
在寄存器中存储上述数据路径的数据位宽,
根据上述数据路径的运算结果动态调整存储在所述寄存器中的上述数据路径的数据位宽,
解码出该宏指令的信息,
其中:
其中所解码出的该宏指令的信息还指示该宏指令的至少一来源操作数尺寸及运算元尺寸,用以将该来源操作数划分为多个运算元;且
上述运算元尺寸由从所述寄存器获取的所述动态调整的数据位宽决定。
11.如权利要求10所述的方法,其中:
所解码出的该宏指令的信息存储上述来源操作数尺寸及上述运算元尺寸的多个寄存器的地址。
12.如权利要求10所述的方法,其中:
上述微指令循环还包括至少一载入微指令和至少一运算微指令;且
上述载入微指令用于将上述运算微指令对应的运算元载入。
13.如权利要求12所述的方法,其中:
该宏指令指示张量相加,上述运算微指令包括加法微指令。
14.如权利要求12所述的方法,其中:
该宏指令指示张量相乘,上述运算微指令包括乘累加微指令。
15.如权利要求14所述的方法,其中:
上述乘累加微指令将数量的上述运算元相乘后再累加,该数量由该数据路径的物理位宽和该运算元尺寸决定。
16.如权利要求15所述的方法,还包括:
所解码出的该宏指令的信息还指示该宏指令的至少一张量一维大小,
其中:
上述运算微指令还包括至少一累加微指令,该数据路径每次操作,上述累加微指令即指示累加该数据路径的运算结果;且
上述运算微指令还包括至少一输出微指令,该数据路径反复操作至满足该张量一维大小时,上述输出微指令输出上述累加结果为一张量元素。
17.如权利要求16所述的方法,还包括:
所解码出的该宏指令的信息还指示该宏指令的至少一张量二维大小,
其中,该数据路径被反复操作至既满足该张量一维大小、又满足该张量二维大小。
18.如权利要求10所述的方法,还包括:
提供指令抓取模块以及初解码器,
其中,该宏指令是经该指令抓取模块抓取后,送入该初解码器判定查表该映射表,获得对应该宏指令的该微码存储器地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810052752.0A CN108416431B (zh) | 2018-01-19 | 2018-01-19 | 神经网络微处理器与宏指令处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810052752.0A CN108416431B (zh) | 2018-01-19 | 2018-01-19 | 神经网络微处理器与宏指令处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108416431A CN108416431A (zh) | 2018-08-17 |
CN108416431B true CN108416431B (zh) | 2021-06-01 |
Family
ID=63126183
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810052752.0A Active CN108416431B (zh) | 2018-01-19 | 2018-01-19 | 神经网络微处理器与宏指令处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108416431B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111079909B (zh) * | 2018-10-19 | 2021-01-26 | 安徽寒武纪信息科技有限公司 | 运算方法、系统及相关产品 |
CN111078282B (zh) * | 2018-10-19 | 2020-12-22 | 安徽寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
WO2020078446A1 (zh) * | 2018-10-19 | 2020-04-23 | 中科寒武纪科技股份有限公司 | 运算方法、装置及相关产品 |
CN111079912B (zh) * | 2018-10-19 | 2021-02-12 | 中科寒武纪科技股份有限公司 | 运算方法、系统及相关产品 |
CN111079907B (zh) * | 2018-10-19 | 2021-01-26 | 安徽寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
CN111079910B (zh) * | 2018-10-19 | 2021-01-26 | 中科寒武纪科技股份有限公司 | 运算方法、装置及相关产品 |
CN111079911B (zh) * | 2018-10-19 | 2021-02-09 | 中科寒武纪科技股份有限公司 | 运算方法、系统及相关产品 |
CN111078281B (zh) * | 2018-10-19 | 2021-02-12 | 中科寒武纪科技股份有限公司 | 运算方法、系统及相关产品 |
CN111079916B (zh) * | 2018-10-19 | 2021-01-15 | 安徽寒武纪信息科技有限公司 | 运算方法、系统及相关产品 |
CN111079924B (zh) * | 2018-10-19 | 2021-01-08 | 中科寒武纪科技股份有限公司 | 运算方法、系统及相关产品 |
CN111079913B (zh) * | 2018-10-19 | 2021-02-05 | 中科寒武纪科技股份有限公司 | 运算方法、装置及相关产品 |
CN111078293B (zh) * | 2018-10-19 | 2021-03-16 | 中科寒武纪科技股份有限公司 | 运算方法、装置及相关产品 |
CN111352896B (zh) * | 2020-03-03 | 2022-06-24 | 腾讯科技(深圳)有限公司 | 人工智能加速器、设备、芯片以及数据处理方法 |
CN116909628B (zh) * | 2023-09-13 | 2023-12-26 | 腾讯科技(深圳)有限公司 | 直接内存访问系统、数据搬运方法、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0019392A2 (en) * | 1979-05-21 | 1980-11-26 | Motorola, Inc. | Instruction register sequence decoder for microprogrammed data processor and method |
US5867701A (en) * | 1995-06-12 | 1999-02-02 | Intel Corporation | System for inserting a supplemental micro-operation flow into a macroinstruction-generated micro-operation flow |
CN101178644A (zh) * | 2006-11-10 | 2008-05-14 | 上海海尔集成电路有限公司 | 一种基于复杂指令集计算机结构的微处理器架构 |
CN101329622A (zh) * | 2008-02-08 | 2008-12-24 | 威盛电子股份有限公司 | 微处理器以及宏指令执行方法 |
CN107329936A (zh) * | 2016-04-29 | 2017-11-07 | 北京中科寒武纪科技有限公司 | 一种用于执行神经网络运算以及矩阵/向量运算的装置和方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4649470A (en) * | 1980-02-11 | 1987-03-10 | Data General Corporation | Data processing system |
JPS63277547A (ja) * | 1987-05-08 | 1988-11-15 | Hitachi Ltd | 高温超伝導体磁器の製造方法 |
US7065633B1 (en) * | 1999-01-28 | 2006-06-20 | Ati International Srl | System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU |
JP2003186567A (ja) * | 2001-12-19 | 2003-07-04 | Matsushita Electric Ind Co Ltd | マイクロプロセッサ |
US8904151B2 (en) * | 2006-05-02 | 2014-12-02 | International Business Machines Corporation | Method and apparatus for the dynamic identification and merging of instructions for execution on a wide datapath |
CN102088603B (zh) * | 2010-12-31 | 2013-12-04 | 北京大学深圳研究生院 | 用于视频编码器的熵编码器及其实现方法 |
US10228941B2 (en) * | 2013-06-28 | 2019-03-12 | Intel Corporation | Processors, methods, and systems to access a set of registers as either a plurality of smaller registers or a combined larger register |
CN105849690B (zh) * | 2014-07-02 | 2019-03-15 | 上海兆芯集成电路有限公司 | 融合乘积-累加运算的处理器与方法 |
CN106355246B (zh) * | 2015-10-08 | 2019-02-15 | 上海兆芯集成电路有限公司 | 三配置神经网络单元 |
CN107423816B (zh) * | 2017-03-24 | 2021-10-12 | 中国科学院计算技术研究所 | 一种多计算精度神经网络处理方法和系统 |
-
2018
- 2018-01-19 CN CN201810052752.0A patent/CN108416431B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0019392A2 (en) * | 1979-05-21 | 1980-11-26 | Motorola, Inc. | Instruction register sequence decoder for microprogrammed data processor and method |
US5867701A (en) * | 1995-06-12 | 1999-02-02 | Intel Corporation | System for inserting a supplemental micro-operation flow into a macroinstruction-generated micro-operation flow |
CN101178644A (zh) * | 2006-11-10 | 2008-05-14 | 上海海尔集成电路有限公司 | 一种基于复杂指令集计算机结构的微处理器架构 |
CN101329622A (zh) * | 2008-02-08 | 2008-12-24 | 威盛电子股份有限公司 | 微处理器以及宏指令执行方法 |
CN107329936A (zh) * | 2016-04-29 | 2017-11-07 | 北京中科寒武纪科技有限公司 | 一种用于执行神经网络运算以及矩阵/向量运算的装置和方法 |
Non-Patent Citations (2)
Title |
---|
CROB:Implementing a Large Instruction Window through Compression;Fernando Latorre等;《computer science》;20111231;全文 * |
Java智能卡微处理器软件仿真指令的研究与发现;李飞卉等;《微电子学》;20021031;第32卷(第5期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN108416431A (zh) | 2018-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108416431B (zh) | 神经网络微处理器与宏指令处理方法 | |
CN108364065B (zh) | 采布斯乘法的微处理器 | |
US11775805B2 (en) | Deep neural network architecture using piecewise linear approximation | |
CN108256645B (zh) | 数据位宽可调适的处理器 | |
JP6882281B2 (ja) | ベクトルの処理のためのレーン位置情報 | |
US6223192B1 (en) | Bipartite look-up table with output values having minimized absolute error | |
CN108288091B (zh) | 采布斯乘法的微处理器 | |
CN112988657A (zh) | 用于机器学习的fpga专家处理块 | |
CN110235099B (zh) | 用于处理输入操作数值的装置和方法 | |
JP6803381B2 (ja) | 重複ビットを使用する数値の冗長表現 | |
US9678716B2 (en) | Apparatus and method for performing absolute difference operation | |
JP2019139338A (ja) | 情報処理装置、情報処理方法、およびプログラム | |
JPH07168697A (ja) | 倍精度除算回路および方法 | |
CN111936965A (zh) | 随机舍入逻辑 | |
US6941334B2 (en) | Higher precision divide and square root approximations | |
TWI776213B (zh) | 用於將輸入集相乘之硬體電路及方法,以及非暫時性機器可讀儲存裝置 | |
JP6877812B2 (ja) | 重複伝搬演算 | |
US7647368B2 (en) | Data processing apparatus and method for performing data processing operations on floating point data elements | |
US6963895B1 (en) | Floating point pipeline method and circuit for fast inverse square root calculations | |
JP7036224B2 (ja) | 演算処理装置及び演算処理装置の制御方法 | |
CN109416757B (zh) | 用于处理数值数据的方法、设备和计算机可读存储介质 | |
JP7371499B2 (ja) | 演算処理装置、演算処理装置の制御方法及び演算処理プログラム | |
US11966740B2 (en) | Use of multiple different variants of floating point number formats in floating point operations on a per-operand basis | |
CN117785111A (zh) | 具有自适应保真度的计算硬件块 | |
JP2024517707A (ja) | 半導体ハードウェアにおいてニューラルネットワークを処理するための実装および方法 |
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 | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
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 hi tech park, Shanghai 201203 Patentee before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd. |