一种基于数据流架构的多精度神经网络计算装置以及方法

文档序号:26394257发布日期:2021-08-24 16:03阅读:220来源:国知局
一种基于数据流架构的多精度神经网络计算装置以及方法

本发明涉及计算机领域,具体来说涉及神经网络模型计算的加速装置或者加速器领域,更具体地说,涉及一种基于数据流架构的多精度神经网络计算装置和方法。



背景技术:

深度神经网络(dnn)已经在许多应用领域中显示出显著的优势,从计算机视觉到自然语言处理和语音识别,强大硬件的支持使得训练dnn模型更加容易,随着应用的多样化和复杂化,dnn模型也随之复杂,其深度越来越深,参数越来越庞大,复杂的dnn模型对于特征和输出非线性关系的捕捉更具有表现力,由此表现出很好的结果精度。

虽然这些神经网络非常强大,但是大量的权重会占用大量的存储和内存带宽,同时dnn模型在运行期间也会产生大量的中间数据,在计算部件和缓冲器之间的移动受到内部带宽和巨大的能量耗散的影响。因此,在系统上部署深度神经网络变得越来越困难。

拥有数百万和数十亿参数的卷积神经网络的应用爆炸式地增长,给终端设备带来巨大的挑战,使得必须针对移动设备的有限资源获得定制的dnn模型,越来越多的科学家转向如何减少这些大量参数的研究中,已经证明了几种深度学习模型的参数化存在显著的冗余,可以利用网络的冗余特性以减少参数的数量。在dnn模型的压缩和加速中,低精度和量化是一种有效的压缩模型的方法。精度的降低可以减少内存占用和所需的外部存储器带宽,还可以减少能量的消耗,允许在片上安装更多乘法累加(mac)并实现更高的能效。例如,16位定点乘法在45nm工艺技术下比32位浮点乘法消耗的能量少约6.2倍。

神经网络的运算主要为输入特征图(也称为激活数据)与神经网络中的权重参数(网络模型提供的已知参数)执行乘加运算。网络低精度通过减少表示每个权重或激活数据所需的比特数来压缩原始网络,例如,使用8位、4位、3位或者动态位数表示权重及激活。

数据流架构在大数据处理、科学计算等方面具有广泛的应用,解耦的算法和结构使其具有良好的通用性和灵活性。数据流架构的天然并行性很好匹配了神经网络算法的并行特性。基于数据流的加速装置与专用的神经网络加速装置相比,具有一定的通用性,与gpu相比,又具有一定的能效比优势。基于数据流架构,将神经网络算法以数据流图的形式映射在由计算阵列(pe阵列)组成的架构中,数据流图中包含多个结点,结点中包含多个指令,流图的有向边表示结点的依赖关系。pe阵列执行映射的指令即可实现神经网络的运算。

神经网络中主要的运算为乘加运算,基于数据流的加速装置依据这些运算规则设计了相应的乘加指令以实现这些运算,同时为了实现高的数据传输和快的数据运算,一些现有技术设计了高的数据带宽和单指令多数据流运算(simd)模式支持网络运算。simd即为单指令多数据流运算,即使用一条指令,多个数据同时执行相同的运算。这种运算为神经网络提供快速的执行方式。在加速装置中,设计的运算部件主要为浮点乘加部件或者32bit/16bit的定点乘加部件,以支持这些较高的数据位宽来保证神经网络的结果精度。

为了压缩神经网络的模型,可以使用较低精度的数据执行神经网络运算,同时为了保证结果精度,可以对压缩后的网络模型进行训练以达到原始的结果精度。在这种情况下,可以使用压缩后并训练后的神经网络模型作为最终执行的神经网络,应用到加速装置上执行。但是,在现有的加速装置上,由于没有相关的计算部件支持低精度运算,也没有相应的指令支持,无法支持这些低精度的运算。故而,无法进行低精度的网络运算以降低加速装置的功耗。如果使用原始精度的运算部件执行低精度运算,浪费功耗的同时也没有性能的提升。另外,低精度运算的结果通常使用宽的位宽保存以避免数据溢出,加之现有的加速装置中使用simd运算具有高的数据带宽(片上网络带宽),当设计的低精度部件不合理时,不仅会操作带宽的浪费,还会造成数据的溢出,这使得支持多种低精度的部件设计具有一定的挑战性。



技术实现要素:

因此,本发明的目的在于克服上述现有技术的缺陷,提供一种基于数据流架构的多精度神经网络计算装置以及方法。

本发明的目的是通过以下技术方案实现的:

根据本发明的第一方面,提供一种基于数据流架构的多精度神经网络计算装置,包括:微控制器以及与之连接的由多个pe构成的pe阵列,pe阵列的每个pe中配置有用于原始精度的计算部件和分别用于精度低于原始精度的一种或者多种低精度的计算部件,其中,不同精度的计算部件中配置有相应数目的并行的乘法累加器以充分利用片上网络带宽,为每个pe中每种精度的计算部件配置相应数目的寄存器以避免数据溢出;所述微控制器被配置为:响应于对一个卷积神经网络的计算请求以及计算精度指示,控制pe阵列以对应于所述计算精度的计算部件执行所述卷积神经网络的相应的卷积操作中的运算并将中间计算结果存储至相应的寄存器。

在本发明的一些实施例中,同一个pe中不同精度的计算部件中所具有的乘法累加器的个数不同,其中,每种精度的计算部件中乘法累加器的个数等于或者基本等于处理阵列中片上网络带宽除以该精度对应的数据位数。

在本发明的一些实施例中,每种低精度的计算部件中为每种低精度的乘法累加器配置的寄存器的数据位宽大于该种低精度的乘法累加器的精度位数。

在本发明的一些实施例中,每个pe还可以包括:路由器,用于在pe阵列的各个pe之间构建mesh网络;指令缓存,用于缓存指令;指令状态寄存器,用于指示指令缓存中缓存的指令的状态,其中指令的状态包括正在运行、就绪和初始化;数据缓存,用于缓存相应指令所需的数据;执行部件,包括:加载单元,用于负责将数据从内存加载到所述数据缓存,存储单元,用于负责将数据从所述数据缓存传输到所述内存,数据流单元,用于将所述pe内的数据通过mesh网络传输给其他pe;控制器,用于对执行部件、指令缓存、指令状态寄存器、数据缓存、路由器进行控制,控制器包括译码部件,用于对计算指令进行译码,解析出用于所述神经网络计算所需精度的计算指令,根据相应精度的计算指令控制相应精度的计算部件执行以根据神经网络的输入数据和权重数据完成特征图的至少部分计算。

在本发明的一些实施例中,每个pe可以包括:原始精度的计算部件、第一低精度的计算部件和第二低精度的计算部件,其中,所述原始精度的计算部件包括精度为原始精度对应比特的定点计算的乘法累加器,配置原始数据位宽的寄存器用于保存中间计算结果;所述第一低精度的计算部件包括精度为第一预设数量比特的定点计算的乘法累加器,配置原始数据位宽的寄存器用于保存中间计算结果;所述第二低精度的计算部件包括精度为第二预设数量比特的定点计算的乘法累加器,配置原始数据位宽的寄存器用于保存中间计算结果。优选的,原始精度>第一低精度>第二低精度,所述第二低精度对应的比特位数大于等于8。

在本发明的一些实施例中,原始精度为32比特精度,所述第一低精度为16比特精度,所述第二低精度为8比特精度。

在本发明的一些实施例中,每个pe还可以包括:第三低精度的计算部件。优选的,所述第三低精度的计算部件包括精度为第三预设数量比特的定点计算的乘法累加器,配置4倍于原始数据位宽的寄存器用于保存中间计算结果。

在本发明的一些实施例中,每个pe还可以包括:第四低精度的计算部件。优选的,所述第四低精度的计算部件可以包括精度为第四预设数量比特的定点计算的乘法累加器,配置4倍于原始数据位宽的寄存器用于保存中间计算结果。

在本发明的一些实施例中,每个pe还可以包括:第五低精度的计算部件。优选的,所述第五低精度的计算部件可以包括精度为第五预设数量比特的定点计算的乘法累加器,配置4倍于原始数据位宽的寄存器用于保存中间计算结果。

优选的,所述第三低精度为4比特精度。所述第四低精度为2比特精度。所述第五低精度为1比特精度。

根据本发明的第二方面,提供一种用于第一方面所述的基于数据流架构的多精度神经网络计算装置的方法,包括:获取待计算的卷积神经网络以及计算指令,将该卷积神经网络的卷积操作分成多个并行的计算任务分配到pe阵列的不同pe中执行,其中所述计算指令包括用于所述卷积神经网络的计算精度指示以及操作对象;在每个pe中根据所述计算指令中的计算精度指示以及操作对象,利用相应精度的计算部件对卷积神经网络的多张特征图进行并行计算。

在本发明的一些实施例中,所述计算指令包括多个第一单指令多数据指令、多个第二单指令多数据指令、第三指令和第四指令,所述方法还包括:通过多个第一单指令多数据指令将多张特征图的多个操作数以及滤波器的多个操作数到加载相应计算精度的计算部件作为其乘法累加器的输入;通过所述多个第二单指令多数据指令利用相应计算精度的计算部件的多个乘法累加器分别对多张特征图的多个操作数以及滤波器的多个操作数进行乘法累加操作;通过第三指令从寄存器中获取多张特征图的卷积结果并存储到内存。

在本发明的一些实施例中,所述第二单指令多数据指令用于执行乘法累加运算,当前指令集中在前执行的第二单指令多数据指令得到中间计算结果作为在后执行的第二单指令多数据指令执行累加运算的累加值,中间计算结果通过指令集中的第三指令存储到寄存器中,在当前指令集中最后一个第二单指令多数据指令执行完毕后,通过指令集中的第四指令从寄存器中获取多张特征图的卷积结果并存储到内存。

与现有技术相比,本发明的优点在于:

本发明构建了一种基于数据流架构的多精度神经网络计算装置,包括:微控制器以及与之连接的pe阵列,pe阵列的每个pe中配置有原始精度和精度低于原始精度的多种低精度的计算部件,精度越低的计算部件中配置越多并行的乘法累加器以充分利用片上网络带宽,为每个pe中每种低精度的计算部件配置充足的寄存器以避免数据溢出;所述微控制器被配置为:响应于对特定卷积神经网络的加速请求,控制pe阵列中与所述特定卷积神经网络精度匹配的原始精度或者低精度的计算部件执行相应的卷积操作中的运算并将中间计算结果存储至相应的寄存器。从而可以为不同精度的卷积神经网络进行加速,降低计算时延,提高用户体验。在采用低精度的卷积运算时,还可以降低卷积神经网络运算的能耗。

附图说明

以下参照附图对本发明实施例作进一步说明,其中:

图1为根据本发明实施例的基于数据流架构的多精度神经网络加速装置的原理示意图;

图2为根据本发明实施例的计算单元中部署的多精度计算部件的示意图;

图3为根据本发明实施例的基于数据流架构的多精度神经网络加速装置的一个示意性的实施方式的示意图;

图4为根据本发明实施例的原始精度的卷积操作的示意图;

图5为根据本发明实施例的低精度的卷积操作的示意图。

具体实施方式

为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

如在背景技术部分提到的,现有的计算装置中使用simd运算具有高的数据带宽(片上网络带宽),当设计的低精度部件不合理时,不仅会操作带宽的浪费,还会造成数据的溢出。因此,本申请构建了一种基于数据流架构的多精度神经网络计算装置,包括:微控制器以及与之连接的pe阵列,pe阵列的每个pe中配置有原始精度和精度低于原始精度的多种低精度的计算部件,精度越低的计算部件中配置越多并行的乘法累加器以充分利用片上网络带宽,为每个pe中每种低精度的计算部件配置充足的寄存器以避免数据溢出;所述微控制器被配置为:响应于对特定卷积神经网络的加速请求,控制pe阵列中与所述特定卷积神经网络精度匹配的原始精度或者低精度的计算部件执行相应的卷积操作中的运算并将中间计算结果存储至相应的寄存器。从而可以为不同精度的卷积神经网络进行加速,降低计算时延,提高用户体验。在采用低精度的卷积运算时,还可以降低卷积神经网络运算的能耗。

在对本发明的实施例进行具体介绍之前,先对其中使用到的部分术语进行说明:

低精度的计算部件,是指使用低于32位(bit)的数据进行计算的部件。例如,通常情况下,神经网络运算使用32bit的浮点运算或定点运算,当使用32位的数据运算时,则认为是原始精度的运算,当使用低于32位的数据运算时,则认为是低精度的运算。

pe阵列,即处理单元阵列(processelementarray)或者阵列处理机(parallelprocessor),通过重复设置多个相同的处理单元(processingelement,pe),按一定方式互连成阵列并与微控制器连接,在微控制器的控制下,对各自所分配的不同数据并行执行同一组指令规定的操作。

simd,即singleinstructionmultipledata,指单指令多数据流运算。即使用一条指令,对多个数据同时执行相同的运算。

针对现有的计算装置不能执行低精度的神经网络运算,本发明设计多种低精度的计算部件以及相应的指令支持多种低精度的运算,同时,为了充分利用网络的高带宽,结合现有的网络带宽合理设计不同的低精度计算部件。根据本发明的一个实施例,一种基于数据流架构的多精度神经网络计算装置,可以包括:微控制器以及与之连接的由多个pe构成的pe阵列,pe阵列的每个pe中配置有用于原始精度的计算部件和分别用于精度低于原始精度的一种或者多种低精度的计算部件,其中,不同精度的计算部件中配置有相应数目的并行的乘法累加器以充分利用片上网络带宽,为每个pe中每种精度的计算部件配置相应数目的寄存器以避免数据溢出。优选的,所述微控制器可以被配置为:响应于对一个卷积神经网络的计算请求以及计算精度指示,控制pe阵列以对应于所述计算精度的计算部件执行所述卷积神经网络的相应的卷积操作中的运算并将中间计算结果存储至相应的寄存器。

本发明面向需要低精度运算的场景,例如,手机、电脑、智能手表等终端设备。该基于数据流架构的多精度神经网络计算装置可以在fpga或者asic上实现。例如,终端设备的通用处理器在识别到有需要加速的卷积神经网络的计算任务时,可以向集成终端设备内或者通过通信连接线与终端设备连接而设置在终端设备外部的基于数据流架构的多精度神经网络计算装置发送计算请求以及计算精度指示,通过基于数据流架构的多精度神经网络计算装置完成对卷积神经网络的计算任务的计算并获得计算结果。

原有的片上网络带宽是为原始精度的计算部件而设置的,片上网络带宽=原始精度的位数乘以原始精度的计算部件中并行的乘法累加器的个数。为了进行低精度的网络运算,降低计算功耗,根据本发明的一个实施例,在前述实施例的基础上,在基于数据流架构的多精度神经网络计算装置的每个pe中可以配置第一低精度的计算部件、第二低精度的计算部件、第三低精度的计算部件、第四低精度的计算部件和第五低精度的计算部件中的至少两种低精度的计算部件。参见图1,示出了一个pe中配置了原始精度的计算部件以及5种低精度的计算部件的pe的原理示意图。从计算数据的比特数来看,原始精度>第一低精度>第二低精度>第三低精度>第四低精度>第五低精度。第二低精度对应的比特位数大于等于8。在采用低精度的计算部件时,由于低精度的计算部件的操作数(输入数据)的位数更低,如果其内的乘法累加器的个数设置为与原始精度的计算部件内的乘法累加器的个数相同,会导致片上网络带宽没有充分利用。因此,为充分利用原有的片上网络带宽,需要合理地设置计算部件中乘法累加器的数量。根据本发明的一个实施例,同一个pe中不同精度的计算部件中所具有的乘法累加器的个数不同,其中,每种精度的计算部件中乘法累加器的个数等于或者基本等于处理阵列中片上网络带宽除以该精度对应的数据位数。为避免数据溢出,每种低精度的计算部件中为每种低精度的乘法累加器配置的寄存器的数据位宽大于该种低精度的乘法累加器的精度位数。

根据本发明的一个实施例,参见图2,pe中可以配置原始精度的计算部件a,设原始精度的计算部件支持32位的数据运算。支持simd32运算,即包括32个乘法累加器,片上网络带宽为32×32=1024bit。为原始精度的计算部件配置原始数据位宽的寄存器用于保存中间计算结果,原始数据位宽可以为1024bit。

第一低精度的计算部件b可以包括精度为第一预设数量比特的定点计算的乘法累加器,配置2倍于原始数据位宽的寄存器用于保存中间计算结果。例如,参见图2,第一预设数量比特为16比特(bit),第一低精度的计算部件中乘法累加器的个数为1024/16=64,命名为simd64,配置2×1024=2048bit的寄存器用于保存中间计算结果,即reg1、reg2。

第二低精度的计算部件c可以包括精度为第二预设数量比特的定点计算的乘法累加器,配置4倍于原始数据位宽的寄存器用于保存中间计算结果。例如,第二预设数量比特为8比特,第二低精度的计算部件中乘法累加器的个数为1024/8=128,命名为simd128,配置4×1024=4096bit的寄存器用于保存中间计算结果,即reg1、reg2、reg3、reg4。

第三低精度的计算部件d可以包括精度为第三预设数量比特的定点计算的乘法累加器,配置4倍于原始数据位宽的寄存器用于保存中间计算结果.例如,第三预设数量比特为4比特,第三低精度的计算部件中乘法累加器的个数为1024/4=256,命名为simd256,配置4×1024=4096bit的寄存器用于保存中间计算结果,即reg1、reg2、reg3、reg4。

第四低精度的计算部件e可以包括精度为第四预设数量比特的定点计算的乘法累加器,配置4倍于原始数据位宽的寄存器用于保存中间计算结果。例如,第四预设数量比特为2比特,第四低精度的计算部件中乘法累加器的个数为1024/2=512,命名为simd512,配置4×1024=4096bit的寄存器用于保存中间计算结果,即reg1、reg2、reg3、reg4。

第五低精度的计算部件f可以包括精度为第五预设数量比特的定点计算的乘法累加器,配置4倍于原始数据位宽的寄存器用于保存中间计算结果。例如,第五预设数量比特为1比特,第五低精度的计算部件中乘法累加器的个数为1024/1=1024,命名为simd1024,配置4×1024=4096bit的寄存器用于保存中间计算结果,即reg1、reg2、reg3、reg4。

概括来说,对于16bit的计算部件,由于原始数据位宽为1024bit,所以应该设置1024/16=64个乘法累加器,同理,对于8bit、4bit、2bit、1bit的运算,应该设置的计算部件分别为128、256、512、1024个,所以对应的simd通道分别为simd64、simd128、simd256、simd512、simd1024。图2中的b、c、d、e、f为所设计的低精度的计算部件。16bit、8bit、4bit、2bit、1bit在执行乘法时使用各自的位数执行乘法运算,结果保存为32bit、32bit、16bit、8bit、4bit,(为保证中间计算结果的精度,防止计算结果的溢出,中间计算结果的位宽高于数据的位宽,在此8bit、4bit、2bit、1bit运算的中间计算结果保存为原始数据位宽的4倍,16bit运算的中间计算结果保存为原始位宽的2倍),然后再分别与32bit、32bit、16bit、8bit、4bit的数执行加法运算。这样最终生成的结果的位数分别为2048bit、4096bit、4096bit、4096bit、4096bit,超过了原始数据位宽1024bit,所以需要将结果暂存到寄存器中,为了避免数据溢出,则为低精度的计算部件配置相对于原始精度的计算部件更多的寄存器。如图2所示,分别为不同的低精度计算部件配置了对应的寄存器,以存储simd运算的结果。

对于寄存器的设置,同一pe中的不同低精度计算部件之间彼此可以独立设置所需的寄存器,或者共享设置所需的寄存器。若独立设置,同一pe可以同时对不同精度的神经网络模型执行加速任务。若共享设置,则可以降低总的寄存器的设置数量,提高利用率。

对于低精度指令的设计,参见下表:

为支持不同的低精度运算,需要设计对应的指令,以使指令解码后可以执行对应的运算。madd16、madd8、madd4、madd2、madd1分别支持16bit、8bit、4bit、2bit、1bit的乘加运算。rxin指令用于将数据放入指定的寄存器编号中,rxout用于获取指定的寄存器中的值。pe可以根据乘累加运算对应的指令解析计算精度,例如,如果调用的指令为madd16,则需要调用16比特精度对应的计算部件进行计算。根据本发明的一个实施例,指令格式分别如下所述:

maddx(x表示xbit的乘加运算)的指令格式:[指令类型,源操作数0,源操作数1,目的操作数0]。以上表中madd16为例,madd16表示指令类型为16bit的乘法运算指令,src_operand0表示源操作数0,src_operand1表示源操作数1,dst_operand0表示目的操作数0。相应的计算为:目的操作数0=源操作数0×源操作数1+目的操作数0。

rxin指令格式:[指令类型,源操作数0,寄存器id]。rxin表示指令类型为rxin指令,src_operand0表示源操作数0,reg_id表示指定的寄存器编号。rxin指令的源操作数0可以对应于乘加指令(maddx指令)的结果。例如,对于16比特精度的一组指令集,rxin指令会将乘加指令inst19-inst27每次的结果存储到寄存器。即:rxin指令每次存储的是乘加指令的计算结果,即rxin指令的源操作数0=乘加指令每次计算更新的目的操作数0。其中,inst19-26指令计算的结果对应的是中间计算结果,每次计算后通过rxin将中间计算结果存储到相应编号的寄存器,inst27指令计算的结果对应的是滤波器与特征图的一个局部区域的卷积计算的结果。

rxout指令格式:[指令类型,寄存器id,目的操作数0]。rxout表示指令类型为rxout指令,reg_id表示指定的寄存器编号,dst_operand0表示目的操作数0。rxout指令可以用于将inst27指令计算的结果从寄存器取出,然后通过存储指令将inst27指令计算的结果存储到内存。

根据本发明的一个实施例,一种基于数据流架构的多精度神经网络计算装置,包括:微控制器以及与之连接的pe阵列,pe阵列的每个pe中配置有原始精度和精度低于原始精度的多种低精度的计算部件,精度越低的计算部件中配置越多并行的乘法累加器以充分利用片上网络带宽,为每个pe中每种低精度的计算部件配置充足的寄存器以避免数据溢出;所述微控制器被配置为:响应于对特定卷积神经网络的加速请求,控制pe阵列中与所述特定卷积神经网络精度匹配的原始精度或者低精度的计算部件执行相应的卷积操作中的运算并将中间计算结果存储至相应的寄存器。根据本发明的一个实施例,每个pe包括:路由器,用于在pe阵列的各个pe之间构建mesh网络;指令缓存,用于缓存指令;指令状态寄存器,用于指示指令缓存中缓存的指令的状态,指令的状态包括正在运行、就绪和初始化;数据缓存,用于缓存相应指令所需的数据;执行部件,包括:加载单元,用于负责将数据从内存加载到所述数据缓存,存储单元,用于负责将数据从数据缓存传输到内存,计算单元,包括所述原始精度和精度低于原始精度的多种低精度的计算部件,数据流单元,用于将一个pe内的数据通过mesh网络传输给其他pe;控制器,用于对执行部件、指令缓存、指令状态寄存器、数据缓存、路由器进行控制,控制器包括译码部件,用于对计算指令进行译码,解析出用于所述神经网络计算所需精度的计算指令,根据相应精度的计算指令控制相应精度的计算部件执行以根据神经网络的输入数据和权重数据完成特征图的至少部分计算。例如,就绪的指令通过译码部件进行译码,解析出神经网络所需精度的计算指令,相应精度的计算指令送入相应精度的计算部件中执行。

本发明的装置包含的是低精度的运算部件,以及对应的低精度运算指令。在执行不同的低精度网络时,根据不同的精度选择不同的运算部件执行运算,在充分利用原始数据带宽,提升低精度运算的性能。基于数据流架构的多精度神经网络计算装置中,设计的多精度的计算部件包含在pe中,当需要某一精度的运算时,就使用对应的精度的计算部件进行相应的计算。

一个示意性的基于数据流架构的多精度神经网络计算装置的整体结构如图3所示,微控制器管理pe阵列的执行过程,微控制器启动pe阵列,pe阵列完成初始化工作,即将内存中的指令加载至各个pe的指令缓存中,例如,图3所示的指令inst0等,pe阵列执行时根据指令状态寄存器(指令状态寄存器记录的是指令的状态,编号b0对应的running表示正在运行的指令,编号b1对应的ready表示就绪的指令,编号b2对应的init表示初始化的指令)选择就绪的指令,并从指令缓冲区中获取所选的指令,指令经过控制器内的译码部件后送入执行部件中执行指令。指令译码时,可以解析出具体精度的计算指令,相应的指令就会送入对应的精度的计算部件中执行。pe之间通过2d的mesh网络相互连接,并通过数据流单元(flowunit)进行数据的通信。在每个pe内部,分别包含加载单元(loadunit)、存储单元(storeunit)、计算单元(calunit)和数据流单元(flowunit)。加载单元负责将数据从内存加载到pe的数据缓存,例如图3所示的指令inst0所需的数据data0,存储单元负责将数据从数据缓存区传输到内存。数据流单元的功能是用于将一个pe内的数据通过路由器构建的mesh网络传输给另一个pe。

下面以一个pe内一次卷积运算为例,说明所需的指令以及执行过程。一次卷积运算和所需的指令如图4所示:

在simd32(一条指令执行32个数据的运算)的卷积运算中,涉及到由指令inst1-inst27构成的指令集。卷积神经网络的输入特征图ifmap的其中9个数据i0-i8(输入特征图中的9个数据,均为32bit)的数据分别与滤波器filter的w0-w8(滤波器中的9个数据,均为32bit)执行乘加运算,得到输出特征图ofmap的数据o0(为32bit)。在此过程中,ifmap需要使用指令inst1-inst9加载i0-i8数据,每条指令加载32个值(ifmap1-ifmap32的值),即32个分量(simd1-simd32分量),使用指令inst10-inst18加载滤波器filter的权重参数w0-w8,每条指令也加载32个值,即32个分量(simd1-simd32分量),然后使用指令inst19-inst27执行乘加运算,每条乘加指令执行32个分量(simd1-simd32)的乘加运算,完成一次卷积运算,在此次运算中,计算得到具有32个分量的o0值。

对于低精度运算,需要使用rxin指令将中间计算结果o0’放入寄存器中。参见图5,也涉及到由指令inst1-inst27构成的指令集。应当理解的是,为了简化,此处将madd16、madd8、madd4、madd2、madd1简化在一个图中,以madd16/8/4/2/1表示,实际上,每种指令应当是按照图4所示的结构分别构成该种精度对应的指令集。

对于16bit的低精度运算,即simd64的卷积运算,将具有64个分量,每个分量32bit的中间计算结果o0’使用rxin指令放入reg中,因为总共为2048bit,数据位宽为1024bit,所以使用两条rxin指令,将2018bit的o0放入两个reg中。例如,对simd1分量中的o0值进行计算时,加载i0值和w0值到一个乘法累加器的两个输入端后,通过madd指令计算i0×w0得到中间计算结果o0’,通过rxin指令将该o0’存储到对应编号的寄存器,再将同一张特征图的i1值和w1值利用同一个乘法累加器来计算o0’=i1×w1+o0’,以此类推,不断更新中间计算结果o0’,直到计算到o0=i8×w8+o0’,得到o0值。使用两条rxin指令,将2048bit的o0放入两个1024比特的寄存器中。通过rxout指令获取计算到的o0值,然后再使用存储指令(store指令)将o0值存入内存中。然后依照该方式进行下一次卷积运算,计算下一个区域的输出值,直至完成对整个特征图的卷积运算。

对于8bit的低精度运算,即simd128的卷积运算,同时最多可以对128张特征图对应的128个分量进行并行计算,每个分量的计算过程类似16bit的低精度运算,不作赘述。计算后,每个分量32bit的o0使用rxin指令放入reg中,因为总共为4096bit,所以使用四条rxin指令,将o0放入四个1024比特的寄存器reg中。通过rxout指令获取计算到的o0值,然后再使用存储指令(store指令)将o0值存入内存中。然后依照该方式进行下一次卷积运算,计算下一个区域的输出值,直至完成对整个特征图的卷积运算。

对于4bit的低精度运算,即simd256的卷积运算,同时最多可以对256张特征图对应的256个分量进行并行计算,每个分量的计算过程类似16bit的低精度运算,不作赘述。计算后,每个分量16bit的o0使用rxin指令放入reg中,因为总共为4096bit,所以使用四条rxin指令,将o0放入四个1024比特的寄存器reg中。通过rxout指令获取计算到的o0值,然后再使用存储指令(store指令)将o0值存入内存中。然后依照该方式进行下一次卷积运算,计算下一个区域的输出值,直至完成对整个特征图的卷积运算。

对于2bit的低精度运算,即simd512的卷积运算,首先将具有512个分量,每个分量8bit的o0使用rxin指令放入reg中,因为总共为4096bit,所以使用四条rxin指令,将o0放入四个1024比特的寄存器reg中。通过rxout指令获取计算到的o0值,然后再使用存储指令(store指令)将o0值存入内存中。然后依照该方式进行下一次卷积运算,计算下一个区域的输出值,直至完成对整个特征图的卷积运算。

对于1bit的低精度运算,即simd1024的卷积运算,首先将具有1024个分量,每个分量4bit的o0使用rxin指令放入寄存器reg中,因为总共为4096bit,所以使用四条rxin指令,将o0放入四个1024比特的寄存器reg中。通过rxout指令获取计算到的o0值,然后再使用存储指令(store指令)将o0值存入内存中。然后依照该方式进行下一次卷积运算,计算下一个区域的输出值,直至完成对整个特征图的卷积运算。

本发明还提供一种用于前述基于数据流架构的多精度神经网络计算装置的方法,可以包括:获取待计算的卷积神经网络以及计算指令,将该卷积神经网络的卷积操作分成多个并行的计算任务分配到pe阵列的不同pe中执行,其中所述计算指令包括用于所述卷积神经网络的计算精度指示以及操作对象;在每个pe中根据所述计算指令中的计算精度指示以及操作对象,利用相应精度的计算部件对卷积神经网络的多张特征图进行并行计算。根据本发明的一个实施例,假设待计算的卷积神经网络的精度为32位精度,则会使用pe中的原始精度的计算部件中执行卷积运算。假设待计算的卷积神经网络的精度为8位精度,则会使用pe中的8位的低精度的计算部件(前述实施例的第二低精度的计算部件)中执行卷积运算。操作对象可以包括指令的数据对象,例如源操作数和目的操作数。操作对象可以包括存储数据的寄存器编号。

根据本发明的一个实施例,通过识别出的原始精度或者相应的低精度的指令集对卷积神经网络的多张特征图进行并行计算包括:通过识别出的原始精度或者相应的低精度的指令集中的多个第一单指令多数据指令将多张特征图的多个操作数以及滤波器的多个操作数到加载相应计算精度的计算部件作为其乘法累加器的输入;通过识别出的原始精度或者相应的低精度的指令集中的多个第二单指令多数据指令利用相应计算精度的计算部件的多个乘法累加器分别对多张特征图的多个操作数以及滤波器的多个操作数进行乘法累加操作;通过第三指令从寄存器中获取多张特征图的卷积结果并存储到内存。优选的,第二单指令多数据指令可以用于执行乘法累加运算,当前指令集中在前执行的第二单指令多数据指令得到中间计算结果作为在后执行的第二单指令多数据指令执行累加运算的累加值,中间计算结果通过指令集中的第三指令存储到寄存器中,在当前指令集中最后一个第二单指令多数据指令执行完毕后,通过指令集中的第四指令从寄存器中获取多张特征图的卷积结果并存储到内存。根据本发明的一个实施例,第一单指令多数据指令例如是用于加载特征图的指令inst1-inst8以及用于加载滤波器的权重参数的指令inst10-inst18。第二单指令多数据指令例如是用于进行乘累加运算的inst19-inst27。第三指令例如是rxin指令。第四指令例如是rxout指令。

需要说明的是,虽然上文按照特定顺序描述了各个步骤,但是并不意味着必须按照上述特定顺序来执行各个步骤,实际上,这些步骤中的一些可以并发执行,甚至改变顺序,只要能够实现所需要的功能即可。

本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。

计算机可读存储介质可以是保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以包括但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1