CN112699058A - 适用于循环神经网络的寻址方法、装置、加速器以及介质 - Google Patents
适用于循环神经网络的寻址方法、装置、加速器以及介质 Download PDFInfo
- Publication number
- CN112699058A CN112699058A CN202011641714.2A CN202011641714A CN112699058A CN 112699058 A CN112699058 A CN 112699058A CN 202011641714 A CN202011641714 A CN 202011641714A CN 112699058 A CN112699058 A CN 112699058A
- Authority
- CN
- China
- Prior art keywords
- addressing
- address
- operand
- register
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 79
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 72
- 230000000306 recurrent effect Effects 0.000 title claims abstract description 50
- 125000004122 cyclic group Chemical group 0.000 claims abstract description 23
- 238000003860 storage Methods 0.000 claims abstract description 18
- 238000012545 processing Methods 0.000 claims abstract description 16
- 230000015654 memory Effects 0.000 claims description 44
- 238000009825 accumulation Methods 0.000 claims description 15
- 238000000605 extraction Methods 0.000 claims description 6
- 238000004364 calculation method Methods 0.000 abstract description 95
- 239000013598 vector Substances 0.000 description 48
- 230000008569 process Effects 0.000 description 43
- 238000012805 post-processing Methods 0.000 description 26
- 230000006870 function Effects 0.000 description 24
- 230000004913 activation Effects 0.000 description 22
- 238000012546 transfer Methods 0.000 description 19
- 238000013461 design Methods 0.000 description 15
- 230000035508 accumulation Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 238000005457 optimization Methods 0.000 description 6
- 238000010606 normalization Methods 0.000 description 5
- 230000001133 acceleration Effects 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 4
- 238000013527 convolutional neural network Methods 0.000 description 4
- 238000012544 monitoring process Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000012821 model calculation Methods 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 101100490563 Caenorhabditis elegans adr-1 gene Proteins 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000013329 compounding Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 229920006395 saturated elastomer Polymers 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
Images
Landscapes
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
本申请公开了一种适用于循环神经网络的寻址方法、装置、加速器以及介质,该包括:从操作指令中提取出操作数的地址编码以及控制码;根据地址编码中的寻址字段,确定操作数的地址信息;地址信息包括所述操作数的读取地址信息或写入地址信息;根据所述地址信息完成对当前操作数的相关寻址操作,然后根据控制码并通过预先在地址寄存器上配置的运算器,基于所述运算器提供的运算类型进行相应的地址更新。本申请通过预先设置在地址寄存器上配置的运算器来解决运算资源短缺和运算资源冲突问题,并且能够有效减少指令的存储,提升寻址效率。通过上述方案,本申请能够在针对循环神经网络的硬件加速器中有效展开寻址处理,契合循环神经网络的计算特点。
Description
技术领域
本发明涉及人工智能技术领域,特别涉及一种适用于循环神经网络的寻址方法、装置、加速器以及介质。
背景技术
目前,针对神经网络的硬件加速器有Google的TPU、NVDIA的NVDLA、寒武纪等等。主流的神经网络硬件加速器针对CNN(即Convolutional Neural Networks,卷积神经网络)网络做了大量了的计算优化,并在硬件计算的过程中针对卷积以及不同大小的卷积核卷积运算做了针对性的优化。
可见,当前整个神经网络硬件加速器的架构偏向于针对CNN的优化,这一部分也确实是神经网络算法中对算力要求最高的一部分。虽然这些神经网络硬件加速器同时也可以用于RNN(即Recurrent Neural Network,循环神经网络)神经网络,但是对循环神经网络的计算优化很少,适配程度较差。其中,在针对循环神经网络的硬件加速器中如何有效地展开寻址是目前有待解决的问题。
发明内容
有鉴于此,本发明的目的在于提供一种适用于循环神经网络的寻址方法、装置、加速器以及介质,能够在针对循环神经网络的硬件加速器中有效展开寻址过程。其具体方案如下:
第一方面,本申请公开了一种适用于循环神经网络的寻址方法,包括:
从操作指令中提取出操作数的地址编码以及控制码;
根据所述地址编码中的寻址字段,确定所述操作数的地址信息;其中,所述地址信息包括所述操作数的读取地址信息或写入地址信息;
根据所述地址信息完成对当前所述操作数的相关寻址操作,然后根据所述控制码并通过预先在地址寄存器上配置的运算器,基于所述运算器提供的运算类型进行相应的地址更新。
可选的,所述从操作指令中提取出操作数的地址编码以及控制码,包括:
从操作指令中提取出分别与源操作数和目标操作数对应的地址编码以及控制码。
可选的,所述操作指令为寻址模式为存储器间接寻址、寄存器间接寻址或直接寻址的操作指令。
可选的,所述根据所述地址编码中的寻址字段,确定所述操作数的地址信息,包括:
根据所述地址编码中的寻址字段,确定所述操作数的来源地标识以及寄存器指向符;其中,所述来源地标识包括存储器地址标识和寄存器地址标识。
可选的,所述根据所述控制码并通过预先在地址寄存器上配置的运算器,基于所述运算器提供的运算类型进行相应的地址更新,包括:
根据所述控制码并通过预先在地址寄存器上配置的运算器,基于累加、累减、循环加、循环减和移位中的任一种或几种运算方式进行相应的地址更新。
第二方面,本申请公开了一种适用于循环神经网络的寻址装置,包括:
信息提取模块,用于从操作指令中提取出操作数的地址编码以及控制码;
地址信息确定模块,用于根据所述地址编码中的寻址字段,确定所述操作数的地址信息;其中,所述地址信息包括所述操作数的读取地址信息或写入地址信息;
寻址模块,用于根据所述地址信息完成对当前所述操作数的相关寻址操作,然后根据所述控制码并通过预先在地址寄存器上配置的运算器,基于所述运算器提供的运算类型进行相应的地址更新。
可选的,所述操作指令为寻址模式为存储器间接寻址、寄存器间接寻址或直接寻址的操作指令。
可选的,所述寻址模块,包括:
地址更新单元,用于根据所述控制码并通过预先在地址寄存器上配置的运算器,基于累加、累减、循环加、循环减和移位中的任一种或几种运算方式进行相应的地址更新。
第三方面,本申请公开了一种硬件加速器,包括:
存储单元,用于保存寻址程序;
处理单元,用于执行所述寻址程序,以完成前述的寻址方法。
第四方面,本申请公开了一种计算机可读存储介质,用于保存寻址程序,所述寻址程序被执行时实现前述的寻址方法。
本申请中,从操作指令中提取出操作数的地址编码以及控制码;然后根据所述地址编码中的寻址字段,确定所述操作数的地址信息;其中,所述地址信息包括所述操作数的读取地址信息或写入地址信息;根据所述地址信息完成对当前所述操作数的相关寻址操作,然后根据所述控制码并通过预先在地址寄存器上配置的运算器,基于所述运算器提供的运算类型进行相应的地址更新。可见,本申请能够在寻址过程中不占用硬件加速模块中的MAC计算资源,而是通过预先设置在地址寄存器上配置的运算器来解决运算资源短缺和运算资源冲突问题,并且能够有效减少指令的存储,提升寻址效率。通过上述方案,本申请能够在针对循环神经网络的硬件加速器中有效展开寻址处理,契合循环神经网络的计算特点,实现了数据地址的更新。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种适用于循环神经网络的寻址方法流程图;
图2为一种常规的地址寄存器读取和更新过程示意图;
图3为本申请公开的一种地址寄存器读取和更新过程示意图;
图4为本申请公开的一种具体的适用于循环神经网络的寻址方法流程图;
图5为本申请中指令集所使用的寄存器组示意图;
图6为本申请公开的关于常规类型计算指令/专用类型计算指令/指数移位指令流水线涉及示意图;
图7为本申请公开的流水线计算周期示意图;
图8为本申请公开的有气泡的流水线计算周期示意图;
图9为本申请所使用的一种指令集的字段设计示意图;
图10为本申请公开的一种具体编码情况下的寻址过程示意图;
图11为本申请公开的另一种具体编码情况下的寻址过程示意图;
图12为本申请公开的一种适用于循环神经网络的寻址装置结构示意图;
图13为本申请公开的一种硬件加速器结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,神经网络硬件加速器的架构偏向于针对CNN的优化,这一部分也确实是神经网络算法中对算力要求最高的一部分。虽然这些神经网络硬件加速器同时也可以用于RNN神经网络,但是对循环神经网络的计算优化很少,适配程度较差。其中,在针对循环神经网络的硬件加速器中如何有效地展开寻址是目前有待解决的问题。为此,本申请相应的提出了一种适用于循环神经网络的寻址方案,能够在针对循环神经网络的硬件加速器中有效展开寻址处理,契合循环神经网络的计算特点。
参见图1所示,本发明实施例公开了一种适用于循环神经网络的寻址方法,包括:
步骤S11:从操作指令中提取出操作数的地址编码以及控制码。
本实施例中,针对循环神经网络的硬件加速器在实际运行时会涉及到不同类型的操作指令,用于满足不同类型的计算需求。其中,操作指令在执行过程中会涉及到寻址过程,与操作指令对应的寻址模式具体可以是存储器间接寻址、寄存器间接寻址或直接寻址。为了实现寻址,本实施例需要先从操作指令中提取出操作数的地址编码和操作数的控制码。其中,可以理解的是,上述操作数包括源操作数和目标操作数,上述源操作数指令具体是指执行相应操作时所请求及输入的数据,相应的,目标操作数则是指在指令完成相应操作时所生成及输出的数据。在实际应用过程中,一条操作指令对应的操作数至少包括上述两种类型操作数中的一种,通常是同时包含上述两种类型的操作数。另外,上述操作数的控制码,通过该控制码能够决定操作数的寻址控制过程。
步骤S12:根据所述地址编码中的寻址字段,确定所述操作数的地址信息;其中,所述地址信息包括所述操作数的读取地址信息或写入地址信息。
本实施例中,上述地址编码中包含用于表征操作数地址信息的寻址字段,根据上述寻址字段能够确定出操作数的地址信息,其中包括操作数的读取地址信息或写入地址信息。
步骤S13:根据所述地址信息完成对当前所述操作数的相关寻址操作,然后根据所述控制码并通过预先在地址寄存器上配置的运算器,基于所述运算器提供的运算类型进行相应的地址更新。
可以理解的是,在获取到上述操作数的地址信息之后,便可基于该地址信息完成针对当前操作数的相关寻址处理,然后根据上述操作数的控制码并通过预先在地址寄存器上配置的运算器实现对地址的更新。参见图2和图3所示,图2示出了一种常规的地址寄存器读取和更新过程,图3则示出了本申请所采取的地址寄存器读取和更新过程,本申请实施例的寻址过程中的地址更新方案,能够在寻址过程中不占用硬件加速模块中的MAC计算资源,而是通过预先设置在地址寄存器上配置的运算器来解决运算资源短缺和运算资源冲突问题,并且能够有效减少指令的存储,提升寻址效率。
本申请实施例中,从操作指令中提取出操作数的地址编码以及控制码;然后根据所述地址编码中的寻址字段,确定所述操作数的地址信息;其中,所述地址信息包括所述操作数的读取地址信息或写入地址信息;根据所述地址信息完成对当前所述操作数的相关寻址操作,然后根据所述控制码并通过预先在地址寄存器上配置的运算器,基于所述运算器提供的运算类型进行相应的地址更新。可见,本申请实施例能够在寻址过程中不占用硬件加速模块中的MAC计算资源,而是通过预先设置在地址寄存器上配置的运算器来解决运算资源短缺和运算资源冲突问题,并且能够有效减少指令的存储,提升寻址效率。通过上述方案,本申请实施例能够在针对循环神经网络的硬件加速器中有效展开寻址处理,契合循环神经网络的计算特点,实现了数据地址的更新。
参见图4所示,本申请实施例公开了一种具体的适用于循环神经网络的寻址方法,包括:
步骤S21:从操作指令中提取出分别与源操作数和目标操作数对应的地址编码以及控制码。
本实施例中,针对循环神经网络的硬件加速器在实际运行时会涉及到不同类型的操作指令,用于满足不同类型的计算需求。其中,操作指令在执行过程中会涉及到寻址过程,与操作指令对应的寻址模式具体可以是存储器间接寻址、寄存器间接寻址或直接寻址。
下面对本申请实施例中硬件加速器所处理的指令集进行说明,上述指令集中包括多种不同类型的操作指令,具体包括:
数据流控制指令,用于执行数据流控制,以控制循环神经网络计算流水线的输入端的数据和输出端的数据;
常规类型计算指令,用于执行常规类型计算,以完成所述循环神经网络中的常规类型计算;其中,所述常规类型计算的表达式为θ(w*x+b),θ表示激活函数或tanh函数,w表示权重向量,x表示数据向量,b表示偏置参数;
专用类型计算指令,用于执行专用类型计算,以完成所述循环神经网络中的专用类型计算;其中,所述专用类型计算的表达式为及其延伸运算,it表示输入门,表示状态门,ft表示遗忘门,ct-1表示前一状态数据,⊙表示哈达玛乘积;
指数移位指令,用于执行指数移位,以完成所述循环神经网络计算中的数据归一化;
数据转移指令,用于执行数据转移,以完成所述循环神经网络计算时不同寄存器之间的数据转移操作以及寄存器与存储器之间的数据转移操作。
本实施例中,所述硬件加速器中具体可以包括处理单元、计算单元、激活函数单元、后处理单元、回写单元以及存储器和寄存器。其中,硬件加速器的输入侧可以获取指令、向量、权重以及偏置参数等,并将其放进对应的寄存器中,处理单元具体用于取指、译码以及获取操作数,计算单元具体用于进行基本的乘加运算,激活函数单元用于获得sigmoid或tanh函数值,后处理单元则用于进行一次乘法或加法运算以及fp16数据格式化等,回写单元用于将结果缓存到储存器指定位置。在计算完毕之后,硬件加速器通过输出结果存储器输出相应的计算结果。
另外,硬件加速器中的上述存储器除了用于保存指令的指令存储器以外,还具体包括:
输入向量存储器,用于存储待计算的输入向量;
权重向量存储器,用于存储所述循环神经网络的权重向量;
偏置参数存储器,用于存储所述循环神经网络的偏置参数;
中间数据通用存储器,用于存储所述循环神经网络运行过程中产生的中间数据;
输出结果存储器,用于存储所述循环神经网络的输出结果。
另外,本实施例中,所述硬件加速器内设置的寄存器具体可以包括:
向量寄存器,用于存储向量变量;
地址寄存器,用于完成地址的寻址和计算处理;
普通寄存器,用于存储指令计算结果;
部件寄存器,用于为半精度浮点运算过程、激活函数计算过程和后处理过程提供服务以减少流水线等待时间;
循环寄存器,用于为循环指令和跳转指令提供服务。
图5则示出了本实施例中指令集所使用的寄存器,其中,adr0,adr1…为地址寄存器,VREG0,VREG1..为向量寄存器,i0,i1,i2,i3,f0,f1…,T0,T1,T2,T3为普通寄存器,MacR0,MacR1..LUTR0,LUTR1为部件寄存器。部件寄存器在流水线的部件中,在指令执行过程中使用,为了减少流水线气泡而设计;普通寄存器是用来存储指令计算结果;向量寄存器存储的是向量变量,循环神经网络计算中主要的操作数常为向量变量;循环寄存器是用给循环指令、跳转指令隐藏使用的。
另外,需要指出的是,本实施例中的向量寄存器、普通寄存器和部件寄存器均为数量可配置的寄存器。
下面通过以LSTM(即Long Short-Term Memory,长短期记忆网络)这种循环神经网络为例,对上述指令集的形成原因进行具体说明。在LSTM网络中,在一次循环中主要进行下面的六个计算:
it=σ(Wxixt+Whiht-1+bi) (1)
ft=σ(Wxfxt+Whfht-1+bf) (2)
ot=σ(Wxoxt+Whoht-1+bo) (5)
ht=ot⊙tanh(ct) (6)
式中,it表示输入门,表示状态门,ft表示遗忘门,ct表示状态数据,σ表示激活函数,⊙表示哈达玛乘积,ot表示输出门,ht表示中间结果,作为下一次循环计算的输入之一,循环的最后一次计算后的ht作为LSTM的最终输出,W表示权重,x表示数据向量,b表示偏置参数。其中,上述计算公式(1)、(2)、(3)和(5)对应于常规类型计算指令12,而上述计算公式(4)和(6)则对应于专用类型计算指令。数据流控制指令则是用于进行数据流的控制,指数移位指令用于进行指数移位,防止计算中的数据格式对应的数值表达域的溢出,以对数据实现空间归一化操作。数据转移指令则用于执行数据转移。具体的:
对于数据流控制指令:为了完成整个计算过程,往往需要对中间各个计算环节进行监控,把控每一步何时启动、何时等待、何时中断等。具体的,比如在上一步计算没有完成前或是数据不到位的情况下等待;在上一步计算完成后及数据到位的情况下启动。如果在上一步计算没有完成前或是数据不到位的情况下,启动下一步计算,则会发生溢出类错误;再如果,在上步计算完成后及数据到位的情况下,如果还在等待,则会影响计算效率。但是,对中间的每个环节都进行监控效率是极低的,开销也会很大。比如,每一步计算单元计算完成向控制单元发出结果有效信号,控制单元收到上一步计算的结果的有效信号,向下一步计算单元发出使能信号。可想而知,不仅控制逻辑开销大、功耗高,而且反而因为增加监控影响计算效率的最大化。为此,本实施例选择监控计算流水线的输入端和输出端,以取代对中间各个计算环节进行监控。
对于常规类型计算指令:首先,将上面公式的(1)、(2)、(3)和(5)抽象为:
其中,θ代表激活函数σ或tanh函数,对应上式(1)、(2)、(3)和(5)中的{it,Wxi,Whi,bi}、{ft,Wxf,Whf,bf}、 或{ot,Wxo,Who,bo},一组变量中对应第j个元素或第j行向量,其中τj与bj为元素,与为行向量。所以,LSTM模型计算中有2/3都是如(7)的计算形式,在传统指令设计中是没有单独考虑这类运算的,或是无法通过一条指令实现;本专利中,特别针对这类计算形式设计了常规类型计算指令。其次,为了方便向量操作,单条指令中直接传递本条指令循环次数,其对应向量的维度。具体的,使用指令的高8位(即56~63位,指令集为64位)表示循环次数,所以对应的一条指令可以最多循环128次(=28),可支持最高128维的向量计算操作。另外,单条指令中包括了灵活的地址后处理操作命令,对比传统技术中需要多条指令重复堆叠或用指令循环嵌套来实现方式,本实施例不仅简化了编指工作,提高取指和译码的效率,更能有效减少指令存储所占空间,减轻对计算单元的竞争与负载。具体的,使用64位指令低的0~15位(共16比特位),每4位为一段,分别对应指定一个目标操作数地址或三个源操作数地址的一个地址后处理操作计算方式。
对于专用类型计算指令:由于LSTM是一种循环神经网络,上面公式(1)~(6)的计算过程其实是循环的。于是,在为公式(1)(2)(3)(5)设计了相应的指令之后,本实施例也为另外的两个高频计算形式(对应于公式(4)和(6))设计专有指令,即得到上述专用类型计算指令。
对于指数移位指令:由于神经网络计算时数据需要尽可能保持同分布的特点,并且为了支持fp16、int16、int8等低位宽的计算要求,往往数据需要做空间归一化的操作。同时,如果指定数据归一化的比例为2m,这里m∈Z;这样,归一化操作只是对计算二进制结果的指数部分进行操作,可放在后处理阶段。这样,不仅没有太多的额外计算,减轻对计算单元的竞争与负载;同时,保证了后续流水线周期的对齐,便于设计。以fp16数据格式为例,如果需要将数据缩小16倍,则将16位二进制数的指数部分的高3位减1,若无溢出,其它位保持不变,即得到原数据缩小16倍后的结果。
对于数据转移指令:众所周知,寄存器访问速度快,但面积大数量设计有限;而存储ROM访问延时高,但地址空间多。数据搬移指令设计,目的之一是为了平衡两者的使用。除了现有指令集中的功能以外,通过数据转移指令还实现了LSTM循环计算时变量的更新;同时,数据转移指令还可将立即数传递给寄存器或存储中,从而实现了LSTM/RNN模型的初始化和输入数据窗口的滑动。
本实施例中,上述指令具有高效、灵活和简洁等优点。具体的,
a、全面支持向量操作:通过的特殊字段的使用与定义,本申请中的指令集实现了对多维向量的操作的全面支持,不仅减少了指令存储开销,更为后续编指应用提供便捷。为了方便向量操作,单条指令中直接传递本条指令循环次数,其对应向量的维度。具体的,使用指令的高8位(即56~63位,指令集为64位,首位为第0位)表示循环次数,所以对应的一条指令可以最多循环128次(=28),可支持最高128维的向量计算操作。
b、既高效又灵活的多合一指令功能设计:本申请的指令集中的指令,特别是计算操作类指令,包含:操作类型、操作数或其地址、地址的后处理、计算的后处理以及循环次数等信息字段。不仅减少了指令存储开销,提高取指和译码的效率;更重要的是,通过指令功能的复合,使得在指令集的设计中就提前考虑流水线并行的效率,降低了后续编指及应用中的性能瓶颈或资源冲突发生的风险,提升了二次开发的易操作性。
c、自动取址后处理创新,聚焦操作重点:针对循环神经网络计算中循环过程和输入变量的特点,电路实现地址获取后寄存器地址的自动更新,指向指令循环请求的下一目标操作数地址或源操作数地址,强化流水线核心任务的聚焦。单条指令中包括了灵活的地址后处理操作命令,对比传统技术中需要多条指令重复堆叠或用指令循环嵌套来实现方式,不仅简化了编指工作,提高取指和译码的效率,更能有效减少指令存储所占空间,减轻对计算单元的竞争与负载。具体的,使用64位指令低0~15位(共16比特位),每4位为一段,分别对应指定一个目标操作数地址或三个源操作数地址的一个地址后处理操作计算方式。
e、与循环神经网络计算特点的高度契合,算力资源有的放矢:从前述内容可以看出,尤其是常规类型计算指令、专用类型计算指令和指数移位指令的设计,使得本指令集能够高度契合LSTM模型计算的特点,提炼了核心运算的共性,全面覆盖了模型计算的各个环节,从实际应用效果来看,计算资源实际的利用率达到95%以上,实现了循环神经网络计算加速器的高功效。
本实施例中,所述数据流控制指令,具体可以包括:
第一子指令,用于执行输入控制,以通过所述输入向量存储器的状态控制所述循环神经网络中的计算流水线的输入;
第二子指令,用于执行输出控制,以通过所述输出结果存储器的状态控制所述循环神经网络中的计算流水线的输出;
第三子指令,用于执行运行控制,以控制所述循环神经网络中的计算流水线的运行。
需要指出的是,在实际应用过程中,上述输入控制、输出控制和运行控制的相关操作,既可以同时存在,也可以相互独立的出现。
本实施例中,所述常规类型计算指令,具体可以包括:
第一参数提取单元,用于从所述常规类型计算指令中提取出向量操作数地址、偏置参数地址、激活操作控制码和后处理操作控制码;
第一数据读取单元,用于从相关的寄存器或存储器中读取出与所述向量操作数地址对应的所述权重向量和所述数据向量,以及读取出与所述偏置参数地址对应的所述偏置参数;
第一计算单元,用于计算所述权重向量和所述数据向量的点乘结果,并将所述点乘结果与所述偏置参数相加,得到相应的向量计算结果;
第二计算单元,用于在所述激活控制码的控制下,完成所述常规类型计算过程中的与所述向量计算结果对应的激活函数,得到相应的激活函数运算结果;
第三计算单元,用于在所述后处理操作控制码的控制下,完成所述常规类型计算过程中的与所述激活函数运算结果对应的后处理操作。
本实施例中,所述专用类型计算指令,具体可以包括:
第二参数提取单元,用于从所述专用类型计算指令中提取出向量操作数地址、激活操作控制码和后处理操作控制码;
第二数据读取单元,用于从相关的寄存器或存储器中读取出与所述向量操作数地址对应的所述输入门、所述状态门、所述遗忘门和所述前一状态数据;
第四计算单元,用于创建与所述输入门和所述遗忘门对应的第一向量以及创建与所述状态门和所述前一状态数据对应的第二向量,然后计算所述第一向量和所述第二向量的点乘结果;
第五计算单元,用于在所述激活操作控制码的控制下,完成所述专用类型计算过程中的与所述点乘结果对应的激活函数,得到相应的激活函数运算结果;
第六计算单元,用于在所述后处理操作控制码的控制下,完成所述专用类型计算过程中的与所述激活函数运算结果对应的后处理操作。
本实施例中,所述指数移位指令,具体可以包括:
第三参数提取单元,用于从所述指数移位指令中提取出向量操作数地址、激活操作控制码和后处理操作控制码;
第三数据读取单元,用于从相关的寄存器或存储器中读取出与所述向量操作数地址对应的第一向量和第二向量;
第七计算单元,用于对所述第一向量和所述第二向量进行乘积累加运算,得到相应的乘积累加运算结果;
第八计算单元,用于在所述激活操作控制码的控制下,完成所述移位操作过程中的与所述乘积累加运算结果对应的激活函数,得到相应的激活函数运算结果;
第九计算单元,用于在所述后处理操作控制码的控制下,完成所述移位操作过程中的与所述激活函数运算结果对应的后处理操作。
本实施例中,上述第一向量和第二向量多用于输入预处理和输出后处理,输入预处理和输出后处理一般采用的是全连接层的计算方式,全连接层的每步计算对应有一个输入和权重,另外,通过上述第三数据读取单元读取出的信息还可以包括偏置参数。
本实施例中,所述数据转移指令,具体可以包括:
MOV指令,用于执行第一数据转移操作,以完成所述循环神经网络计算时不同寄存器之间的数据转移操作;
LDR指令,用于执行第二数据转移操作,以从存储器中读取数据并将读取到的数据转移至寄存器;
SRT指令,用于执行第三数据转移操作,以从寄存器中读取数据并将读取到的数据转移至存储器。
需要指出的是,在实际应用过程中,上述第一数据转移操作、第二数据转移操作和第三数据转移操作可以同时存在,也可以相互独立的出现。
进一步的,本实施例进一步提出了一种流水线设计方案,具体可以参见图6、图7和图8。本实施例中上述指令集的设计和实现,能够保证流水线具备以下特性:
A、周期均分:根据流水线的原理,不难得出各段执行时间最长的那段为整个流水线的瓶颈。比如,图8所示,此处乘加计算阶段需要5个时钟周期,激活函数查表需要4个时钟周期,如果直接按照流水线并行来处理,会出现图中所示气泡的发生。于是,本实施例将各指令的处理过程的各个阶段尽可能按照一个时钟周期进行切分设计,尤其是计算相关指令,如图6所示:
取指(1个周期);
译码(3个周期):获取指令中源和目标操作数对应字段;如是直接或间接寻址,继续访问对应寄存器;如是间接寻找,继续访问上一周期访问的对应寄存器中地址信息所对应的寄存器或存储器中的单元;
乘加计算(5个周期):乘法1个周期;另4个周期最大支持128个数线性流水线累加;
激活函数查表(4个周期):确定分段;地址映射;查表;插值计算;
后处理(2个周期):可选的乘加运算;fp16规格化处理;
写缓存(1个周期)。
通过上述设计,实现了图7所示的饱和的流水线计算过程。
B、分段对齐:注意到,前述公式(6)的计算需要用到公式(4)的结果,由于等待上一步计算结果,将会使线性流水线并行无法饱和,产生气泡。因此,本实施例可以将公式(6)进行转化,得到公式(8):
并且,将⊙运算(哈达玛乘积)放在最后进行,对应流水线中的后处理计算阶段,这样实现了计算指令流水线处理的各个阶段的对齐与统一,不仅避免了上述问题,更方便了如避免资源竞争的其它设计。
C、资源占用不重叠:为了保证线性流水线的并行,在每条指令的一次执行过程中避免计算器、存储器和寄存器的在多个时钟周期被占用或者重叠的情况发生。比如,乘法加法计算阶段,4个时钟周期使用的加法器是不同的,并不是循环复用的,从而避免各阶段计算不能并行给流水线带来气泡的情况发生。
步骤S22:根据所述地址编码中的寻址字段,确定所述操作数的包含来源地标识以及寄存器指向符的地址信息;其中,所述来源地标识包括存储器地址标识和寄存器地址标识。
本实施例中,操作数的来源地标识包括存储器地址标识和寄存器地址标识,其中,存储器地址标识用于标识存储器间接寻址中操作数存放在存储器中,寄存器地址标识用于标识寄存器间接寻址中操作数存放在寄存器组中。寄存器指向符用于表示操作数在寄存器组或存储器中的位置信息。具体的,如果来源地标识为存储器地址标识,寄存器指向符表示操作数在存储器中的位置;如果来源地标识为寄存器地址标识,寄存器指向符表示操作数在寄存器组中的位置。
步骤S23:根据所述地址信息完成对当前所述操作数的相关寻址操作,然后根据所述控制码并通过预先在地址寄存器上配置的运算器,基于累加、累减、循环加、循环减和移位中的任一种或几种运算方式进行相应的地址更新。
从图9的指令编码内容中可以看出,S2/S1/S0属于源操作数相关的地址编码,D0则属于目标操作数的相关编码,另外,S_CTRLH、S_CTRLL属于源操作数和目标操作数的控制码,包含了OPD0、OPS2、OPS1和OPS0这4个部分,上述4个部分分别决定了D0/S2/S1/S0对应操作数的寻址控制。
本实施例中,寻址过程中基本的编码方式为:对于任意的寻址字段(D0/S2/S1/S0),编码由M和ADR共8比特位组成,其中,M占用最高比特位,ADR占用剩余7比特位。具体地,当M=1时,表示对应操作数从存储器中获取;当M=0时,表示对应操作数从寄存器组中获取。当ADR指向地址寄存器对应的地址时,表示访问数据/写回数据真正的地址来自地址寄存器中。当ADR指向其他寄存器时,对于S2/S1/S0而言,表示相应操作数的数据由ADR指向的寄存器提供;对于D0而言,则是相应操作数的数据将写入ADR指向的寄存器。也即,访问寄存器组和访问存储器,均可以通过地址寄存器中的地址得到,不过在访问非地址寄存器时还可以通过直接的ADR编码指向得到。
寻址模式通常分为四种,存储器间接寻址、寄存器间接寻址、直接寻址和立即数寻址。本实施例中的寻址方案适用于前三种寻址。对于D0/S2/S1/S0来说,相关操作数的获取均遵循前三种寻址。下面以S0为例,对本实施例的前三种寻址方式进行描述,如上:
存储器间接寻址:ADR(S0)7比特位为地址寄存器地址,地址寄存器中存了存储器地址,即操作数在存储器中的位置;
寄存器间接寻址:ADR(S0)7比特位为地址寄存器地址,地址寄存器中存了寄存器地址,即操作数在寄存器组中的位置;
直接寻址:ADR(S0)7比特位为非地址寄存器地址,为直接目的寄存器地址,即操作数从该寄存器中读取或写入。
需要说明的是,本实施例中地址寄存器是一种专用的寄存器,其中每个地址寄存器除了原有的寄存器部分外,都预先独立配置了一个ADDER运算器,以便用于进行寻址过程中的地址后处理。一般情况下,可以根据需要配置地址寄存器的数量,例如配置为8、16或者32个,具体可以取决于实际算法的具体实现。本实施例中,地址寄存器的数量设计为32个,7比特位对应的ADR在0000000b~0011111b范围内,则为地址寄存器地址;否则,为非地址寄存器地址。另外,本实施例中的地址寄存器位宽为16比特位。
进一步的,在神经网络算法计算过程中,计算往往是连续或者循环的,这种情况下,最好能够避免使用额外的指令开销去维护地址的变动,所以在指令设计中,设计了地址的后处理模式。指定了地址的后处理模式的指令具体可以根据图9中的各字段位置、长度以及定义来完成对应编码。另外,本实施例中的指令集规定为64比特位格式。
下面结合图10和图11,对在不同编码情况下的寻址过程进行说明;其中,AxAdr为所述地址寄存器。本实施例中,具体的编码操作,可以分M=1和M=0两种情况:
对于M=1的情形:本实施例中,控制码为OP,包含4个比特位,OP[i]表示OP的第i个比特位。具体地,当OP[3]对应的比特位为1时,对地址的后处理为累减,OP[3]对应的比特位为0时,对地址的后处理为累加。OP[2:0]则决定了地址累加/累减循环的边界,从图10可以看出,ADR为地址寄存器中的数值,OP[2:0]的值决定了上述地址之后的多少比特位为变动项,也就是说,累加或者累减时,是有边界的,永远在一个范围内循环。
对于M=0的情形:M=0的情况,和M=1的情况不同之处在与循环的范围变小了。因为,电路设计中相同位宽的一个寄存器面积要远远大于存储器一个存储单元所占面积,为了控制面积考虑,寄存器数量要远小于存储器中的地址数量;所以,M=0时为从寄存器组中选择寄存器,循环的范围相应变小,所以产生了上述差别。
参见图12所示,本申请实施例还相应公开了一种适用于循环神经网络的寻址装置,包括:
信息提取模块11,用于从操作指令中提取出操作数的地址编码以及控制码;
地址信息确定模块12,用于根据所述地址编码中的寻址字段,确定所述操作数的地址信息;其中,所述地址信息包括所述操作数的读取地址信息或写入地址信息;
寻址模块13,用于根据所述地址信息完成对当前所述操作数的相关寻址操作,然后根据所述控制码并通过预先在地址寄存器上配置的运算器,基于运算器提供的运算类型进行相应的地址更新。
本实施例中,所述操作指令为寻址模式为存储器间接寻址、寄存器间接寻址或直接寻址的操作指令。
本实施例中,所述寻址模块,具体可以包括:
地址更新单元,用于根据所述控制码并通过预先在地址寄存器上配置的运算器,基于累加、累减、循环加、循环减和移位中的任一种或几种运算方式进行相应的地址更新。
其中,关于上述寻址装置中各模块更加具体的工作过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
本申请实施例中,从操作指令中提取出操作数的地址编码以及控制码;然后根据所述地址编码中的寻址字段,确定所述操作数的地址信息;其中,所述地址信息包括所述操作数的读取地址信息或写入地址信息;根据所述地址信息完成对当前所述操作数的相关寻址操作,然后根据所述控制码并通过预先在地址寄存器上配置的运算器,基于运算器提供的运算类型进行相应的地址更新。可见,本申请实施例能够在寻址过程中不占用硬件加速模块中的MAC计算资源,而是通过预先设置在地址寄存器上配置的运算器来解决运算资源短缺和运算资源冲突问题,并且能够有效减少指令的存储,提升寻址效率。通过上述方案,本申请实施例能够在针对循环神经网络的硬件加速器中有效展开寻址处理,契合循环神经网络的计算特点,实现了数据地址的更新。
进一步的,参见图13所示,本申请实施例还公开了一种硬件加速器20,包括:存储单元21,用于保存寻址程序;处理单元22,用于执行所述寻址程序,以完成以下步骤:
从操作指令中提取出操作数的地址编码以及控制码;根据所述地址编码中的寻址字段,确定所述操作数的地址信息;其中,所述地址信息包括所述操作数的读取地址信息或写入地址信息;根据所述地址信息完成对当前所述操作数的相关寻址操作,然后根据所述控制码并通过预先在地址寄存器上配置的运算器,基于运算器提供的运算类型进行相应的地址更新。
其中,关于上述各个步骤更加具体的工作过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
进一步的,本申请还公开了一种计算机可读存储介质,用于保存寻址程序,所述寻址程序被执行时实现前述实施例公开的寻址方法,关于该寻址方法的具体过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明所提供的一种适用于循环神经网络的寻址方法、装置、加速器以及介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种适用于循环神经网络的寻址方法,其特征在于,包括:
从操作指令中提取出操作数的地址编码以及控制码;
根据所述地址编码中的寻址字段,确定所述操作数的地址信息;其中,所述地址信息包括所述操作数的读取地址信息或写入地址信息;
根据所述地址信息完成对当前所述操作数的相关寻址操作,然后根据所述控制码并通过预先在地址寄存器上配置的运算器,基于所述运算器提供的运算类型进行相应的地址更新。
2.根据权利要求1所述的适用于循环神经网络的寻址方法,其特征在于,所述从操作指令中提取出操作数的地址编码以及控制码,包括:
从操作指令中提取出分别与源操作数和目标操作数对应的地址编码以及控制码。
3.根据权利要求1所述的适用于循环神经网络的寻址方法,其特征在于,所述操作指令为寻址模式为存储器间接寻址、寄存器间接寻址或直接寻址的操作指令。
4.根据权利要求1所述的适用于循环神经网络的寻址方法,其特征在于,所述根据所述地址编码中的寻址字段,确定所述操作数的地址信息,包括:
根据所述地址编码中的寻址字段,确定所述操作数的来源地标识以及寄存器指向符;其中,所述来源地标识包括存储器地址标识和寄存器地址标识。
5.根据权利要求1所述的适用于循环神经网络的寻址方法,其特征在于,所述根据所述控制码并通过预先在地址寄存器上配置的运算器,基于所述运算器提供的运算类型进行相应的地址更新,包括:
根据所述控制码并通过预先在地址寄存器上配置的运算器,基于累加、累减、循环加、循环减和移位中的任一种或几种运算方式进行相应的地址更新。
6.一种适用于循环神经网络的寻址装置,其特征在于,包括:
信息提取模块,用于从操作指令中提取出操作数的地址编码以及控制码;
地址信息确定模块,用于根据所述地址编码中的寻址字段,确定所述操作数的地址信息;其中,所述地址信息包括所述操作数的读取地址信息或写入地址信息;
寻址模块,用于根据所述地址信息完成对当前所述操作数的相关寻址操作,然后根据所述控制码并通过预先在地址寄存器上配置的运算器,基于所述运算器提供的运算类型进行相应的地址更新。
7.根据权利要求6所述的适用于循环神经网络的寻址装置,其特征在于,所述操作指令为寻址模式为存储器间接寻址、寄存器间接寻址或直接寻址的操作指令。
8.根据权利要求6所述的适用于循环神经网络的寻址装置,其特征在于,所述寻址模块,包括:
地址更新单元,用于根据所述控制码并通过预先在地址寄存器上配置的运算器,基于累加、累减、循环加、循环减和移位中的任一种或几种运算方式进行相应的地址更新。
9.一种硬件加速器,其特征在于,包括:
存储单元,用于保存寻址程序;
处理单元,用于执行所述寻址程序,以完成如权利要求1至5任一项所述的寻址方法。
10.一种计算机可读存储介质,其特征在于,用于保存寻址程序,所述寻址程序被执行时实现如权利要求1至5任一项所述的寻址方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011641714.2A CN112699058B (zh) | 2020-12-31 | 2020-12-31 | 适用于循环神经网络的寻址方法、装置、加速器以及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011641714.2A CN112699058B (zh) | 2020-12-31 | 2020-12-31 | 适用于循环神经网络的寻址方法、装置、加速器以及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112699058A true CN112699058A (zh) | 2021-04-23 |
CN112699058B CN112699058B (zh) | 2023-12-29 |
Family
ID=75514111
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011641714.2A Active CN112699058B (zh) | 2020-12-31 | 2020-12-31 | 适用于循环神经网络的寻址方法、装置、加速器以及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112699058B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114461274A (zh) * | 2022-01-30 | 2022-05-10 | 上海阵量智能科技有限公司 | 指令处理装置、方法、芯片、计算机设备以及存储介质 |
WO2023142524A1 (zh) * | 2022-01-30 | 2023-08-03 | 上海商汤智能科技有限公司 | 指令处理方法、装置、芯片、电子设备以及存储介质 |
WO2024124807A1 (zh) * | 2022-12-14 | 2024-06-20 | 成都登临科技有限公司 | 一种ai芯片、张量处理方法及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1521617A (zh) * | 2003-02-13 | 2004-08-18 | 上海汉芯半导体科技有限公司 | 具有取模地址运算的数字信号处理器 |
CN108090560A (zh) * | 2018-01-05 | 2018-05-29 | 中国科学技术大学苏州研究院 | 基于fpga的lstm递归神经网络硬件加速器的设计方法 |
CN111126583A (zh) * | 2019-12-23 | 2020-05-08 | 中国电子科技集团公司第五十八研究所 | 一种通用神经网络加速器 |
CN112015473A (zh) * | 2020-07-23 | 2020-12-01 | 中国科学院计算技术研究所 | 基于数据流架构的稀疏卷积神经网络加速方法及系统 |
-
2020
- 2020-12-31 CN CN202011641714.2A patent/CN112699058B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1521617A (zh) * | 2003-02-13 | 2004-08-18 | 上海汉芯半导体科技有限公司 | 具有取模地址运算的数字信号处理器 |
CN108090560A (zh) * | 2018-01-05 | 2018-05-29 | 中国科学技术大学苏州研究院 | 基于fpga的lstm递归神经网络硬件加速器的设计方法 |
CN111126583A (zh) * | 2019-12-23 | 2020-05-08 | 中国电子科技集团公司第五十八研究所 | 一种通用神经网络加速器 |
CN112015473A (zh) * | 2020-07-23 | 2020-12-01 | 中国科学院计算技术研究所 | 基于数据流架构的稀疏卷积神经网络加速方法及系统 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114461274A (zh) * | 2022-01-30 | 2022-05-10 | 上海阵量智能科技有限公司 | 指令处理装置、方法、芯片、计算机设备以及存储介质 |
WO2023142524A1 (zh) * | 2022-01-30 | 2023-08-03 | 上海商汤智能科技有限公司 | 指令处理方法、装置、芯片、电子设备以及存储介质 |
WO2024124807A1 (zh) * | 2022-12-14 | 2024-06-20 | 成都登临科技有限公司 | 一种ai芯片、张量处理方法及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112699058B (zh) | 2023-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109522254B (zh) | 运算装置及方法 | |
CN112699058A (zh) | 适用于循环神经网络的寻址方法、装置、加速器以及介质 | |
CN107729990B (zh) | 支持离散数据表示的用于执行正向运算的装置及方法 | |
CN112784970B (zh) | 一种硬件加速器、数据处理方法、系统级芯片及介质 | |
US10019230B2 (en) | Calculation control indicator cache | |
KR101515311B1 (ko) | 승산-승산-누산 명령 수행 | |
WO2019127731A1 (zh) | 卷积神经网络硬件加速装置及卷积计算方法及存储介质 | |
CN118690805A (zh) | 处理装置和处理方法 | |
CN110659015A (zh) | 使用分段线性逼近的深度神经网络架构 | |
JP2021108102A (ja) | 行列演算アクセラレータの命令のための装置、方法、およびシステム | |
CN106997286A (zh) | 用于循环分支的分支历史寄存器 | |
CN102576302B (zh) | 微处理器及用于微处理器上增强精确度乘积和计算的方法 | |
JP2019511056A (ja) | 複素数乗算命令 | |
JP2006520964A5 (zh) | ||
JP2006520964A (ja) | 分岐ターゲットに基づいて分岐予測をするための方法および装置 | |
CN112148251A (zh) | 跳过无意义的矩阵运算的系统和方法 | |
WO2010111249A2 (en) | System and method for achieving improved accuracy from efficient computer architectures | |
CN101211256A (zh) | 一种专用双流水线risc指令系统及其操作方法 | |
US6941334B2 (en) | Higher precision divide and square root approximations | |
KR20210028075A (ko) | 범위-특정 계수 세트를 사용하여 단항 함수를 수행하는 시스템 | |
JP5193624B2 (ja) | データプロセッサ | |
US11010170B2 (en) | Arithmetic processing apparatus which replaces values for future branch prediction upon wrong branch prediction | |
CN109993276B (zh) | 用于执行人工神经网络反向训练的装置和方法 | |
JP5610551B2 (ja) | データプロセッサ | |
JP2001216136A (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 |