首页 / 计算装置以及计算方法

计算装置以及计算方法有效专利 发明

技术领域

[0001] 本申请属于神经网络运算领域,尤其涉及一种计算装置以及计算方法。

相关背景技术

[0002] 数据处理是大部分算法需要经过的步骤或阶段,在计算机引入数据处理领域后,越来越多的数据处理通过计算机来实现,现有的算法中有计算设备在进行神经网络的数据计算时速度慢,效率低。
[0003] 申请内容
[0004] 有鉴于此,本申请提供一种计算装置以及计算方法,能够提高计算速度,并且运算性能高效。
[0005] 本申请提供一种计算装置,所述计算装置包括:存储器、寄存器单元、互联模块、运算单元、控制单元、数据访问单元;所述运算单元包括多个运算器,其中,
[0006] 寄存器单元,用于存储运算指令、数据块的在存储介质的地址,运算指令对应的计算拓扑结构;
[0007] 控制单元,用于从寄存器单元内提取运算指令,该运算指令对应的操作域以及该运算指令对应的第一计算拓扑结构,将该运算指令译码成执行指令,该执行指令用于控制运算单元执行运算操作,将该操作域传输至数据访问单元;
[0008] 数据访问单元,用于提取该操作域对应的数据块,并将该数据块传输至互联模块;
[0009] 互联模块、用于接收数据块,将该数据块发送至运算单元;
[0010] 运算单元,用于在执行运算的过程中,根据指令中操作数所指示的运算数据的位宽,选择相应的一个或多个运算器以执行运算。

具体实施方式

[0033] 参阅图1-1,图1-1提供了一种计算装置,该计算装置包括:存储器611(可选的)、寄存器单元612、互联模块613、运算单元614、控制单元615和数据访问单元616;
[0034] 其中,运算单元614包括:加法计算器、乘法计算器、比较器、激活运算器中至少二种。
[0035] 互联模块613,用于控制运算单元614中计算器的连接关系使得该至少二种计算器组成不同的计算拓扑结构。
[0036] 指令存储单元(可以是寄存器单元,指令缓存,高速暂存存储器)612,用于存储该运算指令、数据块的在存储介质的地址、运算指令对应的计算拓扑结构。
[0037] 该运算指令可以包括:操作域以及操作码,以卷积计算指令为例,如表1所示,其中,寄存器0、寄存器1、寄存器堆2、寄存器3、寄存器4可以为操作域。其中,每个寄存器0、寄存器1、寄存器2、寄存器3、寄存器4可以是一个或者多个寄存器。
[0038] 表1:
[0039]
[0040] 存储器611可以为片外存储器,当然在实际应用中,当为片内存储器时,该片内存储器可以为缓存,具体的,可以为高速暂存缓存,用于存储数据块,该数据块具体可以为n维数据,n为大于等于1的整数,例如,n=1时,为1维数据,即向量,如n=2时,为2维数据,即矩阵,如n=3或3以上时,为多维数据。
[0041] 控制单元615,用于从寄存器单元612内提取运算指令、该运算指令对应的操作域以及该运算指令对应的第一计算拓扑结构,将该运算指令译码成执行指令,该执行指令用于控制运算单元执行运算操作,将该操作域传输至数据访问单元616,。
[0042] 数据访问单元616,用于从存储器611中提取该操作域对应的数据块,并将该数据块传输至互联模块613。
[0043] 互联模块613、用于接收数据块,将该数据块发送至运算单元614。
[0044] 运算单元614,用于该执行指令调用运算单元614的计算器对该数据块执行运算操作得到运算结果,将该运算结果传输至数据访问单元存储在存储器内。一个实施例里,运算单元614,用于按第一计算拓扑结构以及该执行指令调用计算器对数据块执行运算操作得到运算结果,将该运算结果传输至数据访问单元存储在存储器内。
[0045] 在一种可选的实施例中,上述第一计算拓扑结构可以为:乘法运算器-加法运算器-加法运算器-激活运算器。
[0046] 下面通过不同的运算指令来说明如图1-1所示的计算装置的具体计算方法,这里的运算指令以卷积计算指令为例,该卷积计算指令可以应用在神经网络中,所以该卷积计算指令也可以称为卷积神经网络。对于卷积计算指令来说,其实际需要执行的公式可以为:s=s(∑wxi+b),其中,即将卷积核w乘以输入数据xi,进行求和,然后加上偏置b后做激活运算,得到最终的输出结果S。依据该公式即可以得到该计算拓扑结构为,乘法运算器-加法运算器-(可选的)激活运算器。
[0047] 上述运算指令可以包括指令集,该指令集包括:卷积神经网络指令,有不同功能的卷积神经网络COMPUTE指令以及CONFIG指令、IO指令、NOP指令、JUMP指令和MOVE指令。在一种实施例中,COMPUTE指令包括:
[0048] 卷积神经网络指令,根据该指令,装置分别从存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址取出指定大小的输入数据和卷积核,在卷积运算部件中做卷积运算直接得到输出结果。即该指令不执行后续的操作,直接做卷积运算得到输出结果。
[0049] 卷积神经网络sigmoid指令,根据该指令,装置分别从存储器(优选的高速暂存存储器或者标量寄存器堆)的指定地址取出指定大小的输入数据和卷积核,在卷积运算部件中做卷积操作,优选的,然后将输出结果做sigmoid激活;
[0050] 卷积神经网络TanH指令,根据该指令,装置分别从存储器(优选的高速暂存存储器)的指定地址取出指定大小的输入数据和卷积核,在卷积运算部件中做卷积操作,优选的,然后将输出结果做TanH激活;
[0051] 卷积神经网络ReLU指令,根据该指令,装置分别从存储器(优选的高速暂存存储器)的指定地址取出指定大小的输入数据和卷积核,在卷积运算部件中做卷积操作,优选的,然后将输出结果做ReLU激活;以及
[0052] 卷积神经网络group指令,根据该指令,装置分别从存储器(优选的高速暂存存储器)的指定地址取出指定大小的输入数据和卷积核,划分group之后,在卷积运算部件中做卷积操作,优选的,然后将输出结果做激活。
[0053] CONFIG指令在每层人工神经网络计算开始前配置当前层计算需要的各种常数。
[0054] IO指令实现从外部存储空间读入计算需要的输入数据以及在计算完成后将数据存回至外部空间。
[0055] NOP指令负责清空当前装置内部所有控制信号缓存队列中的控制信号,保证NOP指令之前的所有指令全部指令完毕。NOP指令本身不包含任何计算操作;
[0056] JUMP指令负责控制将要从指令存储单元读取的下一条指令地址的跳转,用来实现控制流的跳转;
[0057] MOVE指令负责将装置内部地址空间某一地址的数据搬运至装置内部地址空间的另一地址,该过程独立于运算单元,在执行过程中不占用运算单元的资源。
[0058] 如图1-1所示的计算装置执行卷积计算指令的方法具体可以为:
[0059] 控制单元615从寄存器单元612内提取卷积计算指令、卷积计算指令对应的操作域,控制单元将该操作域传输至数据访问单元。
[0060] 数据访问单元从存储器内提取该操作域对应的卷积核w和偏置b(当b为0时,不需要提取偏置b),将卷积核w和偏置b传输至运算单元。
[0061] 运算单元的乘法运算器将卷积核w与输入数据Xi执行乘法运算以后得到第一结果,将第一结果输入到加法运算器执行加法运算得到第二结果,将第二结果和偏置b执行加法运算得到第三结果,将第三结果输到激活运算器执行激活运算得到输出结果S,将输出结果S传输至数据访问单元存储至存储器内。其中,每个步骤后都可以直接输出结果传输到数据访问存储至存储器内。另外,将第二结果和偏置b执行加法运算得到第三结果这一步骤为可选步骤,即当b为0时,不需要这个步骤。
[0062] 本申请提供的技术方案通过一个指令即卷积计算指令即实现了卷积的计算,在卷积计算的中间数据(例如第一结果、第二结果、第三结果)均无需存储或提取,减少了中间数据的存储以及提取操作,所以其具有减少对应的操作步骤,提高卷积的计算效果的优点。
[0063] 图1-2是本申请实施例提供的卷积神经网络运算装置执行卷积神经网络的流程图,如图1-2所示,执行卷积神经网络指令的过程包括:
[0064] 在步骤S6B1,在指令存储单元的首地址处预先存入一条IO指令。
[0065] 在步骤S6B2,控制器单元从指令存储单元的首地址读取该条IO指令,根据译出的控制信号,数据访问单元从存储器读取相应的所有卷积神经网络运算指令,并将其缓存在指令存储单元中。
[0066] 在步骤S6B3,控制器单元接着从指令存储单元读入下一条IO指令,根据译出的控制信号,数据访问单元从存储器读取运算单元需要的所有数据块(例如,包括输入数据、用于作快速的激活函数运算的插值表、用于配置运算器件参数的常数表、偏置数据等)。
[0067] 在步骤S6B4,控制器单元接着从指令存储单元读入下一条CONFIG指令,根据译出的控制信号,装置配置该层神经网络计算需要的各种常数。例如,运算单元根据控制信号里的参数配置单元内部寄存器的值,所述参数包括例如激活函数需要的数据。
[0068] 在步骤S6B5,控制器单元接着从指令存储单元读入下一条COMPUTE指令,根据译出的控制信号,互连模块将卷积窗口内的输入数据发给计算单元内的各计算器。
[0069] 在步骤S6B6,根据COMPUTE指令译出的控制信号,互联模块将乘法计算器、加法计算器和激活计算器连接形成第一计算拓扑结构。
[0070] 在步骤S6B7,乘法运算器将卷积核w与输入数据Xi执行乘法运算以后得到第一结果,将第一结果输入到加法运算器执行加法运算得到第二结果,将第二结果和偏置b执行加法运算得到第三结果,将第三结果输入到激活运算器执行激活运算得到输出结果S,将输出结果S传输至数据访问单元存储至存储介质内。其中,将第二结果和偏置b执行加法运算得到第三结果这一步骤可选,即当b为0时,不需要这个步骤。
[0071] 可选的,互连模块构成主运算模块和所述多个从运算模块之间的连续或离散化数据的数据通路,互连模块为以下任一种结构:树状结构、环状结构、网格状结构、分级互连、总线结构。
[0072] 本披露了一种能支持不同位宽运算数据的运算单元,通过配置指令中的位宽域来配置参与运算的运算数据位宽,在根据指令执行运算时,首先判断是否存在与运算数据位宽相同的运算器,如果是,将该运算数据直接传给相应的运算器,否则,生成运算器合并策略,并根据运算器合并策略将多个运算器合并成一个新的运算器,以使该新的运算器的位宽符合该运算数据的位宽,并将该运算数据传给该新的运算器;再令获得该运算数据的运算器执行神经网络运算/矩阵运算/向量运算/卷积运算。本披露能够支持不同位宽运算数据的运算,以实现高效的神经网络运算、矩阵运算、向量运算以及卷积运算,同时,节省运算器的数量,减少硬件面积。能支持不同位宽运算数据的运算单元可以设置在如图1-1所示的计算装置内。
[0073] 为使本披露的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本披露进一步详细说明。
[0074] 运算单元,用于获取指令,根据指令在寄存器单元中获取神经元/矩阵/向量地址,然后,根据该神经元/矩阵/向量地址在存储单元中获取相应的神经元/矩阵/向量,从而对该运算数据(神经元/矩阵/向量)执行运算。运算单元执行的运算包括但不限于:上述的神经网络专用指令的本披露的运算指令里所讨论的运算操作。
[0075] 运算单元在执行运算的过程中,根据指令中操作数所指示的运算数据的位宽,选择相应的一个或多个运算器以执行运算,其中,一个或多个运算器具有不同的位宽,例如,有的运算器支持16位的数据运算,有的运算器支持32位的数据运算,运算器实质上可以是向量乘法部件、累加部件和标量乘法部件等。如图2-1所示,运算单元包括判断子模块、运算器合并子模块和运算子模块;
[0076] 判断子模块用于判断是否存在与该操作数所指示的运算数据位宽相同的运算器,如果是,将该操作数传给相应的运算器,否则,将运算器合并策略及该操作数传递给运算器合并子模块;
[0077] 运算器合并子模块用于根据运算器合并策略将多个运算器合并成一个新的运算器,以使该新的运算器的位宽符合该操作数的位宽,并将该操作数传给该新的运算器。具体的,运算器合并策略是指优先选用较大位宽的运算器进行组合。当存在与所需位宽相同的运算器时,直接使用对应的运算器;若不存在,则选用比所需运算器位宽小且最为接近的可用的运算器进行组合。例如,可用的用于组合的运算器位宽分别为8位、16位、32位时,当所需的运算器的位宽为32位时,直接使用32位运算器;当所需的运算器的位宽为64位时,使用两个32位运算器进行合并;当所需的运算器的位宽为48位时,使用一个32位运算器和一个16位运算器进行合并;当所需的运算器的位宽为40位时,则选用一个32位运算器和一个8位运算器进行合并。
[0078] 运算子模块用于令获得该操作数的运算器执行运算。
[0079] 本披露的指令采用了两种方式进行实现:一种为直接采用一条指令的方式,该指令中同时包括操作数和位宽域,运算单元能够直接根据该指令获取操作数和相应位宽的运算器,以执行相应的运算;另一种为采用两条指令的方式,运算单元先根据位宽配置指令获取或构造相应位宽的运算器,再根据运算指令获取操作数以执行相应的运算。
[0080] 需要说明的是,本披露指令集采用Load/Store结构,运算单元不会对内存中的数据进行操作。本指令集采用超长指令字架构,通过对指令进行不同的配置可以完成复杂的神经网络运算,也可以完成简单的矩阵/向量运算。另外,本指令集同时采用定长指令。
[0081] 图2-2示出了本披露采用一条指令的方式执行运算的指令格式示意图,如图2-2所示,指令包括至少一操作码和至少3个操作数和至少2个位宽域,其中,位宽域与在运算器中运算时操作数的种类数量相同;其中,操作码用于指示该运算指令的功能,运算单元通过识别一个或多个操作码可进行不同的运算,操作数用于指示该运算指令的数据信息,位宽域用于指明对应操作数的位宽;其中,数据信息可以是立即数或寄存器号,例如,要获取一个矩阵时,根据寄存器号可以在相应的寄存器中获取矩阵起始地址和矩阵长度,再根据矩阵起始地址和矩阵长度在存储单元中获取相应地址存放的矩阵。
[0082] 图2-3是本披露的神经网络运算指令的格式示意图,其为图2-2指令的实例化指令,如图2-3所示,神经网络运算指令包括至少一操作码和16个操作数和4个位宽域,其中,操作码用于指示该神经网络运算指令的功能,运算单元通过识别一个或多个操作码可进行不同的神经网络运算,操作数用于指示该神经网络运算指令的数据信息,其中,数据信息可以是立即数或寄存器号,位宽域用于指明操作数在运算中所对应的位宽,同时,位宽域用于指明运算过程中所对应的运算器的位宽以及是否需要将低位宽运算器合并为高位宽运算器。
[0083] 图2-4是本披露的矩阵-矩阵运算指令的格式示意图,其为图2-2指令的实例化指令,如图2-4所示,矩阵-矩阵运算指令包括至少一操作码和至少4个操作数和2个位宽域,其中,操作码用于指示该矩阵-矩阵运算指令的功能,运算单元通过识别一个或多个操作码可进行不同的矩阵运算,操作数用于指示该矩阵-矩阵运算指令的数据信息,其中,数据信息可以是立即数或寄存器号,位宽域用于指明操作数在运算中所对应的位宽,同时,位宽域用于指明运算过程中所对应的运算器的位宽以及是否需要将低位宽运算器合并为高位宽运算器。
[0084] 图2-5是本披露的向量-向量运算指令的格式示意图,其为图2-2指令的实例化指令,如图2-5所示,向量-向量运算指令包括至少一操作码和至少3个操作数和至少2个位宽域,其中,操作码用于指示该向量-向量运算指令的功能,运算单元通过识别一个或多个操作码可进行不同的向量运算,操作数用于指示该向量-向量运算指令的数据信息,其中,数据信息可以是立即数或寄存器号,位宽域用于指明操作数在运算中所对应的位宽,同时,位宽域用于指明运算过程中所对应的运算器的位宽以及是否需要将低位宽运算器合并为高位宽运算器。
[0085] 图2-6是本披露的矩阵-向量运算指令的格式示意图,其为图2-2指令的实例化指令,如图2-6所示,矩阵-向量运算指令包括至少一操作码和至少6个操作数和至少3个位宽域,其中,操作码用于指示该矩阵-向量运算指令的功能,运算单元通过识别一个或多个操作码可进行不同的矩阵和向量运算,操作数用于指示该矩阵-向量运算指令的数据信息,其中,数据信息可以是立即数或寄存器号,位宽域用于指明操作数在运算中所对应的位宽,同时,位宽域用于指明运算过程中所对应的运算器的位宽以及是否需要将低位宽运算器合并为高位宽运算器。
[0086] 图2-7是本披露一优选实施例的运算装置的结构示意图,如图2-7所示,该装置包括取指模块、译码模块、指令队列、标量寄存器、依赖关系处理单元、存储队列、重排序缓存、运算单元、高速暂存器、IO内存存取模块;
[0087] 取指模块,该模块负责从指令序列中取出下一条将要执行的指令,并将该指令传给译码模块;
[0088] 译码模块,该模块负责对指令进行译码,并将译码后指令传给指令队列;如图2-8所示,该译码模块包括:指令接受模块、微指令生成模块、微指令队列、微指令发射模块;其中,指令接受模块负责接受从取指模块取得的指令;微指令译码模块将指令接受模块获得的指令译码成控制各个功能部件的微指令;微指令队列用于存放从微指令译码模块发送的微指令;微指令发射模块负责将微指令发射到各个功能部件;
[0089] 指令队列,用于顺序缓存译码后的指令,送往依赖关系处理单元;
[0090] 标量寄存器,提供装置在运算过程中所需的标量寄存器;
[0091] 依赖关系处理单元,该模块处理指令与前一条指令可能存在的存储依赖关系。矩阵运算指令会访问高速暂存存储器,前后指令可能会访问同一块存储空间。为了保证指令执行结果的正确性,当前指令如果被检测到与之前的指令的数据存在依赖关系,该指令必须在存储队列内等待至依赖关系被消除。
[0092] 存储队列,该模块是一个有序队列,与之前指令在数据上有依赖关系的指令被存储在该队列内,直至依赖关系消除之后,提交指令。
[0093] 重排序缓存,指令在执行过程中,同时也被缓存在该模块中,当一条指令执行完之后,如果该指令同时也是重排序缓存中未被提交指令中最早的一条指令,该指令将被提交。一旦提交,该条指令进行的操作对装置状态的改变将无法撤销;该重排序缓存里的指令起到占位的作用,当它包含的第一条指令存在数据依赖时,那么该指令就不会提交(释放);尽管后面会有很多指令不断进入,但是只能接受部分指令(受重排序缓存大小控制),直到第一条指令被提交,整个运算过程才会顺利进行。
[0094] 运算单元,该模块负责装置的所有的神经网络运算和矩阵/向量运算操作,包括但不限于:卷积神经网络正向运算操作、卷积神经网络训练操作、神经网络Pooling运算操作、full connection神经网络正向运算操作、full connection神经网络训练操作、batch normalization运算操作、RBM神经网络运算操作、矩阵-向量乘运算操作、矩阵-矩阵加/减运算操作、向量外积(张量)运算操作、向量内积运算操作、向量四则运算操作、向量逻辑运算操作、向量超越函数运算操作、向量比较运算操作、求向量最大/最小值运算操作、向量循环移位运算操作、生成服从一定分布的随机向量运算操作。运算指令被送往该运算单元执行,首先,运算单元判断是否有与指令中操作数对应的位宽域长度相同的运算器,如果有,选用对应的运算器,如果没有,通过多个低位宽的运算器合并的方式构成所需位宽的运算器,然后,根据指令中操作码对运算数用选择的运算器进行对应的运算,得出相应的结果;
[0095] 高速暂存存储器,该模块是数据专用的暂存存储装置,能够支持不同长度和不同位宽的数据;
[0096] IO内存存取模块,该模块用于直接访问高速暂存存储器,负责从高速暂存存储器中读取数据或写入数据。
[0097] 图2-9是本披露实施例的运算装置采用一条指令的方式执行运算的流程图。如图2-9所示,过程包括:
[0098] S1,取指模块取出指令,并将该指令送往译码模块。
[0099] S2,译码模块对指令译码,并将指令送往指令队列。
[0100] 其中,S2可以包括:S2.1,在译码模块中,指令被送往指令接受模块。
[0101] S2.2,指令接受模块将指令发送到微指令生成模块,进行微指令生成。
[0102] S2.3,微指令生成模块从标量寄存器里获取指令的神经网络运算操作码和神经网络运算操作数,同时将指令译码成控制各个功能部件的微指令,送往微指令发射队列;微指令又可称为含参机器码,指硬件能识别的一系列01编码,包括指令被译码后的结果。
[0103] S3,在取得需要的数据后,该指令被送往依赖关系处理单元。依赖关系处理单元分析该指令与前面的尚未执行结束的指令在数据上是否存在依赖关系。该条指令需要在存储队列中等待至其与前面的未执行结束的指令在数据上不再存在依赖关系为止。
[0104] S4,依赖关系不存在后,该条神经网络运算以及矩阵/向量指令对应的微指令被送往运算单元等功能部件。
[0105] S5,运算单元根据所需数据的地址和大小从高速暂存存储器中取出需要的数据,然后判断是否有与指令中位宽域相同的运算器,如果有,则选用匹配的运算器完成指令对应的运算,如果没有,则通过将低位宽的运算器合并的方式组成一个所需位宽的运算器来完成指令对应的运算。
[0106] S6,运算完成后,将输出数据写回至高速暂存存储器的指定地址,同时重排序缓存中的该指令被提交。
[0107] 图2-10和图2-11示出了本披露采用两条指令的方式执行运算的指令格式示意图,其中,图2-10是位宽配置指令的格式示意图,位宽配置指令包括至少一操作码至少2个位宽域,用于指明下条运算指令所使用的运算器的位宽。图2-11是运算指令的格式示意图,运算指令包括至少一操作码至少3个操作数,其中,操作码用于指示该运算指令的功能,运算单元通过识别一个或多个操作码可进行不同的运算,操作数用于指示该运算指令的数据信息,其中,数据信息可以是立即数或寄存器号,例如,要获取一个矩阵时,根据寄存器号可以在相应的寄存器中获取矩阵起始地址和矩阵长度,再根据矩阵起始地址和矩阵长度在存储单元中获取相应地址存放的矩阵。
[0108] 图2-12~图2-13是图2-10~图2-11的实例化,其分别为神经网络位宽配置指令和神经网络运算指令的格式示意图,如图2-12~图2-13所示,位宽配置指令包括至少一操作码至少4个位宽域,用于指明下条神经网络运算指令所使用的运算器的位宽。配置指令包括至少一操作码和16个操作数,其中,操作码用于指示该神经网络运算指令的功能,运算单元通过识别一个或多个操作码可进行不同的神经网络运算,操作数用于指示该神经网络运算指令的数据信息,其中,数据信息可以是立即数或寄存器号。
[0109] 图2-14~图2-15是图2-10~图2-11的实例化,其分别为矩阵-矩阵位宽配置指令和矩阵-矩阵运算指令的格式示意图,如图2-14~图2-15所示,位宽配置指令包括至少一操作码至少2个位宽域,用于指明下条矩阵-矩阵运算指令所使用的运算器的位宽。矩阵-矩阵运算指令包括至少一操作码和至少4个操作数。其中,操作码用于指示该矩阵-矩阵运算指令的功能,运算单元通过识别一个或多个操作码可进行不同的矩阵运算,操作数用于指示该矩阵-矩阵运算指令的数据信息,其中,数据信息可以是立即数或寄存器号。
[0110] 图2-16~图2-17是图2-10~图2-11的实例化,其分别为向量-向量位宽配置指令和向量-向量运算指令的格式示意图,如图2-16~图2-17所示,位宽配置指令包括至少一操作码至少2个位宽域,用于指明下条向量-向量运算指令所使用的运算器的位宽。向量-向量运算指令包括至少一操作码和至少3个操作数,其中,操作码用于指示该向量-向量运算指令的功能,运算单元通过识别一个或多个操作码可进行不同的向量运算,操作数用于指示该向量-向量运算指令的数据信息,其中,数据信息可以是立即数或寄存器号。
[0111] 图2-18~图2-19是图2-10~图2-11的实例化,其分别为矩阵-向量位宽配置指令和矩阵-向量运算指令的格式示意图,如图2-18~图2-19所示,位宽配置指令包括至少一操作码至少3个位宽域,用于指明下条向量-向量运算指令所使用的运算器的位宽。矩阵-向量运算指令包括至少一操作码和至少6个操作数,其中,操作码用于指示该矩阵-向量运算指令的功能,运算单元通过识别一个或多个操作码可进行不同的矩阵和向量运算,操作数用于指示该矩阵-向量运算指令的数据信息,其中,数据信息可以是立即数或寄存器号。
[0112] 图2-20是本披露实施例的运算装置采用两条指令的方式执行运算的流程图。如图2-20所示,过程包括:
[0113] 步骤S1,取指模块取出一条位宽配置指令,并将指令送往译码模块;
[0114] 步骤S2,译码模块对所述指令译码,并将所述指令送往指令队列;
[0115] 其中,S2可以包括步骤S2.1,在译码模块,所述指令被送往指令接受模块;
[0116] 步骤S2.2,指令接收模块将所述指令发送到微指令译码模块,进行微指令译码;
[0117] 步骤S2.3,微指令译码模块将指令译码成控制运算单元选定指定位宽的运算器的微指令,发送到微指令发射队列;
[0118] 步骤S3,取指模块取出一条神经网络运算以及矩阵/向量指令,并将所述指令送往译码模块;
[0119] 步骤S4,译码模块对所述指令译码,并将所述指令送往指令队列;
[0120] 其中S4可以包括:步骤S4.1,在译码模块中,所述指令被送往指令接受模块;
[0121] 步骤S4.2,指令接受模块将所述指令发送到微指令译码模块,进行微指令译码;
[0122] 步骤S4.3,微指令译码模块从标量寄存器里获取所述指令的神经网络运算操作码和神经网络运算操作数,同时将所述指令译码成控制各个功能部件的微指令,送往微指令发射队列;
[0123] 步骤S5,在取得需要的数据后,所述指令被送往依赖关系处理单元;依赖关系处理单元分析所述指令与之前尚未执行完的指令在数据上是否存在依赖关系,如果存在,则所述指令需要在存储队列中等待至其与之前未执行完的指令在数据上不再存在依赖关系为止;
[0124] 步骤S6,将所述指令对应的微指令以及之前的指定运算器位宽的微指令送往运算单元;
[0125] 步骤S7,运算单元根据所需数据的地址和大小从高速暂存存储器中取出需要的数据;然后判断是否有与位宽指定指令中位宽域相同的运算器,如果有,则选用匹配的运算器完成所述指令对应的神经网络运算和/或矩阵/向量运算,如果没有,则通过将低位宽的运算器合并的方式组成一个所需位宽的运算器来完成所述指令对应的神经网络运算和/或矩阵/向量运算;
[0126] S8,运算完成后,将输出数据写回至高速暂存存储器的指定地址,同时重排序缓存中的该指令被提交。
[0127] 本披露一种运算器位宽可配置的用于执行神经网络运算以及矩阵/向量运算的装置和方法能够应用在神经网络的其他运算方法或计算装置内,本披露并不限制上述方法或装置的应用场景。
[0128] 综上所述,本披露了一种运算器位宽可配置的用于执行神经网络运算以及矩阵/向量运算的装置和方法,配合相应的指令,能够很好地解决当前计算机领域神经网络算法和大量矩阵/向量运算的问题,相比于已有的传统解决方案,本披露可以具有指令可配置、使用方便、运算器的位宽可以选择,多个运算器可以合并,并通过专用位宽配置指令和在运算指令上指定位宽域两种方式来实现运算器位宽的配置,支持的神经网络规模和矩阵/向量位宽和规模灵活、片上缓存充足,运算器可合并等优点。通过指令中的位宽域来指定运算数据的位宽,使得运算数据的位宽能够根据需要任意配置,针对某一位宽的运算数据,如果存在与该位宽符合的运算器,可直接调用该运算器执行运算,如果该运算数据的位宽过大,没有符合该位宽的运算器,可对多个较低位宽的运算器进行合并,以构造新的运算器,并利用新的运算器执行运算,能够支持不同位宽运算数据的运算,以实现高效的神经网络运算、矩阵运算及向量运算,同时,节省运算器的数量,减少硬件面积。采用高速暂存存储器,其能够实现对不同长度和不同位宽的运算数据(如:神经元、向量、矩阵)的存储。
[0129] 在一些实施例里,公开了一种芯片封装结构,其包括了上述芯片。
[0130] 在一些实施例里,公开了一种板卡,其包括了上述芯片封装结构。
[0131] 在一些实施例里,公开了一种电子装置,其包括了上述板卡。
[0132] 电子装置包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备交通工具、家用电器、和/或医疗设备。
[0133] 所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
[0134] 以上所述的具体实施例,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施例而已,并不用于限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页 第1页 第2页 第3页