CN110555520A - 执行卷积操作的方法、相应的处理装置及电子设备 - Google Patents
执行卷积操作的方法、相应的处理装置及电子设备 Download PDFInfo
- Publication number
- CN110555520A CN110555520A CN201810847533.1A CN201810847533A CN110555520A CN 110555520 A CN110555520 A CN 110555520A CN 201810847533 A CN201810847533 A CN 201810847533A CN 110555520 A CN110555520 A CN 110555520A
- Authority
- CN
- China
- Prior art keywords
- processing engine
- unit
- engine unit
- prefetch
- data
- 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.)
- Pending
Links
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/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
Abstract
本申请实施例提供了一种执行卷积操作的方法、相应的处理装置及电子设备。该方法包括:通过预取单元PFx,y获取预定数据,并将获取到的预定数据存储至预取单元PFx,y,其中,预取单元PFx,y为处理引擎单元阵列n*m中的任一预取单元,n、m、x和y为正整数,1≤x≤n,1≤y≤m;通过预定的处理引擎单元从预取单元PFx,y获取预定数据进行卷积操作。本申请基于卷积神经网络处理器引入预取单元,通过预取单元获取预定数据并进行存储;通过预定的处理引擎单元从预取单元获取预定数据进行卷积操作,使得卷积操作过程中,神经网络处理器中的大部分处理引擎单元无需直接从外部存储器重新读取数据,从而降低对存储器带宽的要求,并减少神经网络处理器的能量消耗。
Description
技术领域
本申请涉及神经网络技术领域,具体而言,本申请涉及一种执行卷积操作的方法、相应的处理装置及电子设备。
背景技术
深度学习是机器学习领域的重要分支,在近些年来取得了重大突破。采用深度学习算法训练的神经网络模型自提出以来,在图像识别、语音处理、智能机器人等应用领域上取得了令人瞩目的成果。深度学习中最著名的卷积神经网络,使用了局部感受野和权值共享的概念,解决了传统神经网络参数太多,很难训练等问题,大大减少了网络参数的数量。
随着卷积神经网络复杂度的不断提高,卷积神经网络技术在实际应用过程中存在占用资源多、运算速度慢、能量消耗大等问题,因此该技术在嵌入式设备或者低开销数据中心等领域应用时存在严重的能效问题和运算速度瓶颈。采用硬件加速替代传统软件计算的方法成为了提高卷积神经网络计算效率的一种行之有效的方式。主流的硬件加速方式包括通用图形处理器、专用处理器芯片和现场可编程逻辑阵列(FPGA)等。
硬件神经网络处理器的基本单元叫处理引擎(PE),神经网络计算时,处理引擎会把数据从外部存储器取到本地的寄存器中进行计算。但是由于处理引擎只能在相邻单元之间互传数据,不相邻单元的数据即使以后会使用到,也只能先写回外部存储器,用到时再重新读取。因此,神经网络处理器对数据的重复利用率很低,而大量的数据需要存储在外部存储器,处理引擎频繁地访问外部存储器进行存储、读取,会增加神经网络处理器的功耗,导致响应延迟。
发明内容
本申请提供了一种执行卷积操作的方法、神经网络处理器及电子设备,可以解决如何在卷积神经网络中减少对外部存储器的访问以达到降低能量消耗的目的。该技术方案如下:
第一方面,提供了一种基于神经网络处理器执行卷积操作的方法,神经网络处理器包括由至少一个处理引擎单元以及与处理引擎单元一一对应连接的预取单元组成的处理引擎单元阵列;该方法包括:
通过预取单元PFx,y获取预定数据,并将获取到的预定数据存储至预取单元PFx,y,其中,预取单元PFx,y为处理引擎单元阵列n*m中的任一预取单元,n、m、x和y为正整数,1≤x≤n,1≤y≤m;
通过预定的处理引擎单元从预取单元PFx,y获取预定数据进行卷积操作。
第二方面,提供了一种基于神经网络的处理装置,包括由至少一个处理引擎单元以及与处理引擎单元一一对应连接的预取单元组成的处理引擎单元阵列;
预取单元PFx,y用于获取预定数据并进行存储,其中,预取单元PFx,y为处理引擎单元阵列n*m中的任一预取单元,n、m、x和y为正整数,1≤x≤n,1≤y≤m;
预定的处理引擎单元用于从预取单元PFx,y获取预定数据进行卷积操作。
第三方面,提供了一种电子设备,该电子设备包括:
处理器和存储器,存储器存储有至少一条指令、至少一段程序、代码集或指令集,至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现第一方面所示的方法。
第四方面,提供了一种计算机可读存储介质,计算机存储介质用于存储计算机指令,当其在计算机上运行时,使得计算机可以执行上述第一方面所示的方法。
本申请提供的执行卷积操作的方法、相应的处理装置及电子设备,基于卷积神经网络处理器引入预取单元,通过预取单元获取预定数据并进行存储;通过预定的处理引擎单元从预取单元获取预定数据进行卷积操作,使得卷积操作过程中,神经网络处理器中的大部分处理引擎单元无需直接从外部存储器重新读取数据,从而降低对存储器带宽的要求,并达到减少神经网络处理器能量消耗的目的。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的神经网络处理器的架构示意图;
图2为本申请实施例提供的执行卷积操作方法的流程示意图;
图3为本申请实施例提供的一组处理引擎单元及预取单元的结构示意图;
图4为本申请实施例提供的子预取控制器的有限状态机示意图;
图5为本申请实施例提供的一种输入图像的示例图;
图6为本申请实施例提供的一种卷积核的示例图;
图7为本申请实施例提供的一种卷积结果的示例图;
图8为本申请实施例提供的执行简单预取模式的示例图;
图9为本申请实施例提供的另一种处理引擎单元阵列的示例图;
图10为本申请实施例提供的另一种输入图像的示例图;
图11为本申请实施例提供的另一种卷积结果的示例图;
图12为本申请实施例提供的执行行列预取模式的示例图;
图13为本申请实施例提供的执行复杂预取模式的示例图;
图14为本申请实施例提供的执行一般卷积的示例图;
图15为本申请实施例提供的神经网络处理器的结构示意图;
图16为本申请实施例提供的执行一般卷积的预取模式或一般卷积时子预取控制器执行的有限状态机示意图;
图17为本申请实施例提供的一种指令集的示例图;
图18为本申请实施例提供的一种扩张率在寄存器图中的示例图;
图19为本申请实施例提供的简单预取模式示例的时序图;
图20为本申请实施例提供的行列预取模式示例和复杂预取模式示例的时序图;
图21为本申请实施例提供的卷积操作时操作顺序的操作图;
图22为本申请实施例提供的不同预取模式的数据重用率的比较图;
图23为本申请实施例提供的不同预取模式的数据重用率的计算使用公式示意图;
图24为本申请实施例提供的一般卷积的预取模式时特征图缓冲器吞吐量效果图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本申请的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本申请的发明人经过研究后得出,针对现有神经网络处理器对数据的重复利用率低的问题,最直接的方式就是可以增加各个处理引擎之间的数据通路(data path),使得处理引擎的数据交互不再局限于相邻单元,可以扩展到与整个神经网络处理器,使得任意两个处理引擎之间可以直接进行数据交互。但是随着神经网络处理器规模地增加,处理引擎之间的数据通路对硬件资源的需求呈指数增长,因此限制了该方式在大规模神经网络处理器中的应用。
本申请提供的基于神经网络处理器执行卷积操作的方法、相应的处理装置、电子设备及计算机可读存储介质,旨在解决如上技术问题。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
实施例一
本申请实施例提供了一种优化的神经网络处理器架构,如图1所示,包括由至少一个处理引擎单元(PE,Processing Engine Unit)以及与处理引擎单元一一对应连接的预取单元(PF,Prefetch Unit)组成的处理引擎单元阵列。简单来说,就是每一个处理引擎单元PE都有一个预取单元PF与其连接。
本申请实施例中,处理引擎单元和预取单元可以是相互独立的单元,或者预取单元也可以是处理引擎单元的一部分,当预取单元是处理引擎单元的一部分时,处理引擎单元包括预取单元和计算单元。其中,处理引擎单元对应的预取单元获取的数据可以不参与计算单元中的数据计算。
实际应用中,该神经网络处理器架构还可以包括卷积核缓存器(kernel buffer)和特征图缓存器(feature map buffer),卷积核缓存器和特征图缓存器都与各个处理引擎单元及预取单元连接。
基于上述神经网络处理器架构,本申请实施例提供了一种基于神经网络处理器执行卷积操作的方法,如图2所示,该方法包括:
步骤S110:通过预取单元PFx,y获取预定数据,并将获取到的预定数据存储至预取单元PFx,y,其中,预取单元PFx,y为处理引擎单元阵列n*m中的任一预取单元,n、m、x和y为正整数,1≤x≤n,1≤y≤m;
步骤S120:通过预定的处理引擎单元从预取单元PFx,y获取预定数据进行卷积操作。
本申请实施例中,神经网络处理器拥有n行m列共n*m个处理引擎单元所组成的处理引擎单元阵列,相应地,即拥有一一对应的n*m个预取单元。步骤S110中,神经网络处理器中的任一预取单元PFx,y可以获取预定数据并进行存储,以供步骤S120中预定的处理引擎单元从预取单元PFx,y获取预定数据进行卷积操作。
需要说明的是,该方法可以由上述神经网络处理器架构执行,也可以也由神经网络处理器所在的芯片执行,还可以由神经网络处理器所在电子设备执行。
本申请实施例提供的技术方案带来的有益效果是:
基于卷积神经网络处理器中引入预取单元,通过预取单元获取预定数据并进行存储;通过预定的处理引擎单元从预取单元获取预定数据进行卷积操作,使得卷积操作过程中,神经网络处理器中的大部分处理引擎单元无需直接从外部存储器重新读取数据,从而降低对存储器带宽的要求,并达到减少神经网络处理器能量消耗的目的。
实施例二
本申请实施例提供了另一种可能的实现方式,在实施例一的基础上,还包括实施例二所示的方法,其中,
步骤S120中所指的预定的处理引擎单元为与预取单元PFx,y对应连接的处理引擎单元PEx,y相邻的处理引擎单元PEx-1,y或处理引擎单元PEx,y-1。
即步骤S110中,可以将处理引擎单元PEx-1,y所要进行卷积操作的预定数据由列方向上相邻的预取单元PFx,y进行获取并进行存储,以便步骤S120中处理引擎单元PEx-1,y从预取单元PFx,y获取预定数据进行卷积操作。
同理地,可以在步骤S110中将处理引擎单元PEx,y-1所要进行卷积操作的预定数据由行方向上相邻的预取单元PFx,y进行获取并进行存储,以便步骤S120中通过处理引擎单元PEx,y-1从预取单元PFx,y获取预定数据进行卷积操作。
本申请实施例中,步骤S110的具体实现方式包括以下任一情形:
(1)通过预取单元PFx,y从处理引擎单元PEx,y+1获取预定数据,并将获取到的预定数据存储至预取单元PFx,y;
若处理引擎单元PEx-1,y需要复用处理引擎单元PEx,y+1的预定数据进行卷积操作,可以在步骤S110中将处理引擎单元PEx,y+1的预定数据由行方向上相邻的预取单元PFx,y进行获取并存储,以便步骤S120中预取单元PFx,y将该预定数据提供给列方向上相邻的处理引擎单元PEx-1,y进行卷积操作。
同理地,若处理引擎单元PEx,y-1需要复用处理引擎单元PEx,y+1的预定数据进行卷积操作,可以在步骤S110中将处理引擎单元PEx,y+1的预定数据由行方向上相邻的预取单元PFx,y进行获取并存储,以便步骤S120中预取单元PFx,y将该预定数据提供给行方向上相邻的处理引擎单元PEx,y-1进行卷积操作。
该情形中,步骤S110之前,可以包括:第一时钟周期内,通过处理引擎单元PEx,y+1对预定数据进行卷积操作。
以及,步骤S110中,可以是在第二时钟周期内,通过预取单元PFx,y从处理引擎单元PEx,y+1获取预定数据,并将获取到的预定数据存储至预取单元PFx,y。
以及,步骤S120中,可以是在第三时钟周期内,通过处理引擎单元PEx-1,y或通过处理引擎单元PEx,y-1从预取单元PFx,y获取预定数据进行卷积操作。
其中,第一时钟周期先于第二时钟周期,第二时钟周期先于第三时钟周期,第一时钟周期、第二时钟周期和第三时钟周期为卷积操作的周期。
在本实施例中,处理引擎单元PEx-1,y或处理引擎单元PEx,y-1可以复用处理引擎单元PEx,y+1进行了卷积操作的数据,通过预先由预取单元PFx,y获取并存储,以便处理引擎单元PEx-1,y或处理引擎单元PEx,y-1可以快速复用。
实际应用中,处理引擎单元PEx,y-1复用处理引擎单元PEx,y+1数据的处理方式与处理引擎单元PEx-1,y复用处理引擎单元PEx,y+1数据的处理方式基本相同,下文中以处理引擎单元PEx,y-1复用处理引擎单元PEx,y+1数据的情况为例进行介绍,对处理引擎单元PEx-1,y复用处理引擎单元PEx,y+1数据的情况不再赘述。
为方便描述,下文中将预取单元PFx,y从处理引擎单元PEx,y+1获取预定数据并进行存储的方式简称为行预取方式。
(2)通过预取单元PFx,y从处理引擎单元PEx+1,y获取预定数据,并将获取到的预定数据存储至预取单元PFx,y;
若处理引擎单元PEx-1,y需要复用处理引擎单元PEx+1,y的预定数据进行卷积操作,可以在步骤S110中将处理引擎单元PEx+1,y的预定数据由列方向上相邻的预取单元PFx,y进行获取并存储,以便步骤S120中预取单元PFx,y将该预定数据提供给列方向上相邻的处理引擎单元PEx-1,y进行卷积操作。
同理地,若处理引擎单元PEx,y-1需要复用处理引擎单元PEx+1,y的预定数据进行卷积操作,可以在步骤S110中将处理引擎单元PEx+1,y的预定数据由列方向上相邻的预取单元PFx,y进行获取并存储,以便步骤S120中预取单元PFx,y将该预定数据提供给行方向上相邻的处理引擎单元PEx,y-1进行卷积操作。
该情形中,步骤S110之前,可以包括:第一时钟周期内,通过处理引擎单元PEx+1,y对预定数据进行卷积操作。
以及,步骤S110中,可以是在第二时钟周期内,通过预取单元PFx,y从处理引擎单元PEx+1,y获取预定数据,并将获取到的预定数据存储至预取单元PFx,y。
以及,步骤S120中,可以是在第三时钟周期内,通过处理引擎单元PEx-1,y或通过处理引擎单元PEx,y-1从预取单元PFx,y获取预定数据进行卷积操作。
其中,第一时钟周期先于第二时钟周期,第二时钟周期先于第三时钟周期,第一时钟周期、第二时钟周期和第三时钟周期为卷积操作的周期。
在本实施例中,处理引擎单元PEx-1,y或处理引擎单元PEx,y-1可以复用处理引擎单元PEx+1,y进行了卷积操作的数据,通过预先由预取单元PFx,y获取并存储,以便处理引擎单元PEx-1,y或处理引擎单元PEx,y-1可以快速复用。
实际应用中,处理引擎单元PEx,y-1复用处理引擎单元PEx+1,y数据的处理方式与处理引擎单元PEx-1,y复用处理引擎单元PEx+1,y数据的处理方式基本相同,下文中以处理引擎单元PEx-1,y复用处理引擎单元PEx+1,y数据的情况为例进行介绍,对处理引擎单元PEx,y-1复用处理引擎单元PEx+1,y数据的情况不再赘述。
为方便描述,下文中将预取单元PFx,y从处理引擎单元PEx+1,y获取预定数据并进行存储的方式简称为列预取方式。
(3)通过预取单元PFx,y从存储器读取预定数据,并将获取到的预定数据存储至预取单元PFx,y。
步骤S110中,可以是在第四时钟周期内,通过预取单元PFx,y从存储器读取预定数据,并将获取到的预定数据存储至预取单元PFx,y。
以及,步骤S120中,可以是在第五时钟周期内,通过处理引擎单元PEx-1,y或通过处理引擎单元PEx,y-1从预取单元PFx,y获取预定数据进行卷积操作。
其中,第四时钟周期先于第五时钟周期,第四时钟周期和第五时钟周期为卷积操作的周期。
在本实施例中,处理引擎单元PEx-1,y或处理引擎单元PEx,y-1需要进行卷积操作的数据可以预先由预取单元PFx,y从存储器读取并存储的,以便处理引擎单元PEx-1,y或处理引擎单元PEx,y-1可以快速获取并进行卷积操作。
实际应用中,预取单元PFx,y可以预取多个数据,以供多个相邻的处理引擎单元进行获取,以便进一步降低对存储器带宽的要求。
可以理解,当处理引擎单元阵列中的多个预取单元共同执行上述过程时,能够大幅度地降低对存储器带宽的要求,减少神经网络处理器的能量消耗。
为了实现更高的数据重用率和更少的能量消耗,本申请一种可行的实施例中,步骤S120之后,还可以包括:通过预取单元PFx-2,y从处理引擎单元PEx-1,y获取预定数据,并将获取到的预定数据存储至预取单元PFx-2,y,或通过预预取单元PFx-1,y-1从处理引擎单元PEx-1,y获取预定数据,并将获取到的预定数据存储至预取单元PFx-1,y-1;随后,通过处理引擎单元PEx-3,y从预取单元PFx-2,y、或通过处理引擎单元PEx-2,y-1从预取单元PFx-2,y、或通过处理引擎单元PEx-1,y-2从预取单元PFx-1,y-1、或通过处理引擎单元PEx-2,y-1从预取单元PFx-1,y-1获取预定数据进行卷积操作;
通过处理引擎单元阵列连续执行上述步骤对预定数据进行复用,直至通过处理引擎单元阵列边缘的处理引擎单元获取预定数据进行卷积操作。
其中,处理引擎单元阵列边缘的处理引擎单元包括以下任一项:位于处理引擎单元阵列中第一行的处理引擎单元;位于处理引擎单元阵列中第一列的处理引擎单元;位于处理引擎单元阵列中第二行的处理引擎单元;位于处理引擎单元阵列中第二列的处理引擎单元。
或者,为了实现更高的数据重用率和更少的能量消耗,本申请另一种可行的实施例中,步骤S120之后,还包括:通过预取单元PFx-1,y-1从处理引擎单元PEx,y-1获取预定数据,并将获取到的预定数据存储至预取单元PFx-1,y-1,或通过预取单元PFx,y-2从处理引擎单元PEx,y-1获取预定数据,并将获取到的预定数据存储至预取单元PFx,y-2;随后,通过处理引擎单元PEx-2,y-1从预取单元PFx-1,y-1、或通过处理引擎单元PEx-1,y-2从预取单元PFx-1,y-1、或通过处理引擎单元PEx,y-3从预取单元PFx,y-2、或通过处理引擎单元PEx-1,y-2从预取单元PFx,y-2获取预定数据进行卷积操作;通过处理引擎单元阵列连续执行上述步骤对预定数据进行复用,直至通过处理引擎单元阵列边缘的处理引擎单元获取预定数据进行卷积操作;
其中,处理引擎单元阵列边缘的处理引擎单元包括以下任一项:位于处理引擎单元阵列中第一行的处理引擎单元;位于处理引擎单元阵列中第一列的处理引擎单元;位于处理引擎单元阵列中第二行的处理引擎单元;位于处理引擎单元阵列中第二列的处理引擎单元。
本申请实施例中,可以利用最后一列或最后一行处理引擎单元对应的预取单元预取缓存中的数据,这样在后续周期中,如果其他列处理引擎单元需要对该数据进行计算,则可以通过相邻处理引擎单元之间的传递,重用该数据。
为方便描述,下文中将该方式简称为多重预取方式。
实际应用中,上述实施例二的实现方式可应用于多种类型的卷积神经网络,例如一般卷积神经网络、空洞卷积神经网络等。其中,空洞卷积网络作为卷积网络的一种,为了减少普通卷积中池化层所带来的精度丢失,通过在卷积核中插入0的方式,获得了比普通卷积更大的感受野,从而代替了池化操作来得到更高的精度。但也因此,现有技术中处理引擎只能在相邻单元之间互传数据的方式在空洞卷积神经网络中难以得到利用。
本申请实施例通过预取单元的设计,使得卷积神经网络中的数据交互不再局限于相邻的处理引擎单元,大大增加了空洞卷积神经网络中数据的重复利用率,从而减少对存储器的访问,降低了空洞卷积神经网络处理器的能量消耗。
同时,处理引擎单元与预取单元之间的数据交互相较于在存储器读取或存储数据,所需的处理时间大大减少,因此,采用本申请实施例提供的上述方法,还能够一定程度上提高神经网络处理的运行速度,提升卷积操作的执行效率。
实施例三
本申请实施例提供了另一种可能的实现方式,在实施例一或实施例二的基础上,还包括实施例三所示的方法,其中,
步骤S120中所指的预定的处理引擎单元为与预取单元PFx,y对应连接的处理引擎单元PEx,y。
具体而言,步骤S110中,通过预取单元PFx,y从存储器读取预定数据,并将获取到的预定数据存储至预取单元PFx,y。
本申请实施例中,通过第六时钟周期内执行步骤S110,通过预取单元PFx,y从存储器读取预定数据,并将获取到的预定数据存储至预取单元PFx,y;第七时钟周期内执行步骤S120:通过处理引擎单元PEx,y从预取单元PFx,y获取预定数据进行卷积操作;
其中,第六时钟周期为先于第七时钟周期的卷积操作周期;或者,
第六时钟周期为卷积操作前的预定前置周期。
在本实施例中,处理引擎单元PEx,y需要进行卷积操作的数据可以预先由预取单元PFx,y从存储器读取并存储的,以便处理引擎单元PEx,y可以快速获取并进行卷积操作。
实际应用中,上述实施例三的实现方式可应用于多种类型的卷积神经网络,例如一般卷积神经网络等。
本申请实施例通过预取单元的设计,使得卷积操作过程中,神经网络处理器中的大部分处理引擎单元无需直接从外部存储器重新读取数据,从而降低对存储器带宽的要求。
实施例四
本申请实施例在实施例一至实施例三任一实施例的基础上,对基于现场可编程逻辑阵列(FPGA,Field Programmable Gate Array)或专用集成电路(ASIC,ApplicationSpecific Integrated Circuit)的神经网络处理器的整体架构及运行方式进行介绍。
具体而言,神经网络处理器包括:
实施例一中提及的处理引擎单元,用于处理卷积中的乘法、加法、除法、减法、比较、激活、池化、双曲、指数、对数等计算操作;
实施例一中提及的预取单元,用于预取卷积操作所需的数据;
子预取控制器,与处理引擎单元和预取单元相连,用于对主控制器的指令进行解析并控制其所属的处理引擎单元与预取单元执行相应的指令;
主预取控制器,与各个子预取控制器和微控制单元相连,用于对微控制单元的指令进行解析并控制其所属的所有子预取控制器执行相应的指令;
直接存储器存取单元,与微控制单元和各个预取单元相连,用于执行存储器与预取单元的数据交互;
存储器,与直接存储器存取单元相连,用于存储卷积操作所需的各项数据;
微控制单元,与直接存储器存取单元和主控制单元相连,用于控制各个单元的状态并发送相应指令。
其中,每组处理引擎单元及预取单元的结构框图如图3所示,包括:处理引擎单元,子预取控制器,预取单元。其中,预取单元包括行(Row)预取寄存器和/或列(Column)预取寄存器,当预取单元包括行预取寄存器时,预取单元可以从右侧相邻的处理引擎单元预取数据;当预取单元包括列预取寄存器时,预取单元从下侧相邻的处理引擎单元预取数据。并且,行预取寄存器用于将数据输出到行方向上相邻的处理引擎单元,列预取寄存器用于将数据输出到列方向上相邻的处理引擎单元。
基于神经网络处理器包括与处理引擎单元一一对应连接的子预取控制器,以及与各个子预取控制器相连的主预取控制器,本申请实施例所示的方法中,还包括步骤:通过子预取控制器接收主预取控制器的指令。
那么,在步骤S110中,通过预取单元PFx,y根据子预取控制器接收到的指令获取预定数据,并将获取到的预定数据存储至预取单元PFx,y;
在步骤S120中,通过预定的处理引擎单元根据子预取控制器接收到的指令从预取单元PFx,y获取预定数据进行卷积操作。
具体而言,参见图4,示出了子预取控制器的一种操作方法的示例。其中,子预取控制器控制处理引擎单元与预取单元按照有限状态机中规定的状态执行相应的指令;整体流程为:
空闲状态时,子预取控制器接收到开始信号之后则进入初始状态;
初始状态时,子预取控制器接收到装载信号后则进入填充状态,此时子预取控制器会控制处理引擎单元阵列取得一个窗口卷积计算所需要的数据;
填充状态时,子预取控制器接收到下一行信号之后则进入列操作状态,或者子预取控制器接收到现在行信号之后则进入行操作状态,此时处理单元阵列会对一行进行卷积计算;
行操作状态时,子预取控制器接收到下一行信号之后进入列操作状态,此时子预取控制器会控制预取单元预取其下侧处理引擎单元的数据;
列操作状态时,子预取控制器接收到现在行信号之后又会返回行操作状态;
如此反复,当行操作状态或列操作状态时,子预取控制器接收到完成信号之后进入结束状态。
本实施例的核心状态就在填充、列操作、行操作状态时,子预取控制器接收到下一个卷积核信号之后,可以进入交错操作状态,此时按照卷积模式的不同,子预取控制器会控制预取单元按照不同的卷积模式进行预取;
当交错操作状态时,子预取控制器接收到下一个窗口信号、或下一行信号、或下一个输入信号之后,分别又返回到填充、或列操作、或行操作状态;
当交错操作状态时,子预取控制器接收到完成信号之后,便可进入结束状态。
结束状态时,子预取控制器接收到完成信号之后,便又回到最开始的空闲状态。
本申请实施例中,不同个数的行、列预取寄存器可以支持不同的预取模式,例如简单预取模式、行列预取模式以及复杂预取模式等。
简单预取模式只使用预取单元执行实施例二中的行预取方式或只使用预取单元执行实施例二中的列预取方式,在特定时钟周期里预取右侧行相邻或者下侧列相邻的处理引擎单元数据供其它处理引擎单元使用。为了更清楚的描述简单预取模式,将在实施例五中进行介绍。
行列预取模式将会使用行和列两种预取单元,在卷积网络中共同执行实施例二中的行预列方式和列预取方式,特定的时钟周期预取单元预取右侧行相邻的处理引擎单元数据供其它处理引擎单元使用;在读取新数据的时候,预取单元会预取下侧列相邻的数据供其它处理引擎单元使用。为了更清楚的描述行列预取模式,将在实施例六中进行介绍。
复杂预取模式也会使用行和列两种预取单元,但是相较于上述两种模式,复杂预取模式会需要更多寄存器,用于在行预取或列预取的基础上额外存储数据以执行实施例二中的多重预取方式。作为示例地,特定的时钟周期预取单元预取右侧行相邻的处理引擎单元数据供其它处理引擎单元使用;在读取新数据的时候,预取单元会预取下侧列相邻的数据放在第一个寄存器中供其它处理引擎单元使用,而在特定时钟周期时,预取单元也会预取下侧列相邻的数据放在第二个寄存器中供其它处理引擎单元使用。为了更清楚的描述复杂预取模式,将在实施例七中进行介绍。
本申请实施例提供的上述神经网络处理器及执行卷积操作的方法可用于图像分割领域,作为图像分割加速器使用;也可以用于其他流行的深度网络例如全卷积网络(fully convolution neural network)、循环神经网络(recurrent neural network)和长短期记忆(Long short term memory)等。
将本申请用于图像分割领域时,可用于手机、AR/MR眼镜、高级司机辅助系统(Advanced Driver Assistance System)等行业。可以集成于图像传感器或者视觉处理单元(VisualProcessingUnit)。
其中,输入的特征图和输出的特征图使用同一个特征图缓冲器。
实施例五
本申请实施例在实施例一至实施例四任一实施例的基础上,对简单预取模式执行空洞卷积的具体处理方式进行介绍。
本申请实施例中,以对图5所示的图像和图6所示的空洞卷积核执行行预取方式为例简单介绍简单预取模式的运算思路。
其中,图5所示的图像大小为高×宽×通道=8×8×1;图6所示的空洞卷积核大小为高×宽×通道×特征数=2×2×1×2。为了方便描述卷积操作过程,在输入图像和空洞卷积核的不同图像位置标示了不同的数字。该两者实际卷积会输出如图7所示的结果。
本申请实施例中,采用三行三列共9个处理引擎单元所组成的处理引擎单元阵列,如图8所示,通过执行简单预取模式,对图5所示的图像和图6所示的空洞卷积核做卷积操作。
图8中,深色框表明图像数据是从相邻的处理引擎单元得到的可复用数据,浅色框表明图像数据是访问存储器读取得到的非复用数据。从图中看到,处理引擎单元PE13在第一个周期(cycle 1)读取的数据x113会在两个周期之后(cycle 3)被处理引擎单元PE11使用。因此本申请实施例中,处理引擎单元PE12会在第二个周期(cycle 2)通过预取单元PF12取得PE13的图像数据x113供第三个周期(cycle 3)的PE11使用。
具体地,第一个周期(cycle 1)时,9个处理引擎单元(PE11~PE33)会一次性从存储器读取9个图像数据和全部的空洞卷积核数据进行卷积计算。其中,第一行的三个处理引擎单元(PE11、PE12、PE13)中,PF12在第二个周期(cycle 2)从PE13获取图像数据x113并进行存储,第三个周期(cycle 3)时,PE11从预取单元PF12获取图像数据x113进行卷积操作。
可选地,PE13的预取单元PF13会在第二个周期(cycle 2)从存储器多读取一个图像数据x114,在第三个周期提供给PE12使用。
在第三个周期(cycle 3),大部分的图像数据可以按照上述方法重用第二个周期(cycle 2)获取的图像数据,只有最后一列的处理引擎单元(PE13、PE23、PE33)需要重新读取新的图像数据。
第四个周期(cycle 4)可以继续重用第三个周期(cycle 3)获取的图像数据进行计算。
在第五个周期(cycle 5)重新读取新的图像数据之后,预取操作和第二个周期(cycle 2)到第四个(cycle 4)周期一样,图像数据得到大量复用。
经过8个周期之后,在一个处理引擎单元(例如PE11)会得到一个空洞卷积的两个通道特征图结果(例如y111、y211)。
以此类推,所有处理引擎在经过32个周期之后(cycle 32),会得到两个通道的空洞卷积的全部特征图。
下面将具体介绍如何将简单预取模式应用到更一般的情况。
如图9、图10、图11所示,神经网络处理器拥有pn行pm列共pn*pm个处理引擎单元所组成的处理引擎单元阵列。所处理的输入图像高为x1、宽为x2、输入通道数为x3、图片个数为b,共x1*x2*x3*b个数据,空洞卷积核高为k1、宽为k2、通道数为x3、组数为y3、膨胀率为d(以d>4为例),共k1*k2*x3*y3个数据,所得到的输出特征图高为y1、宽为y2、输出通道数为y3、个数为b。将处理引擎单元按(行,列)编号为(1,1)至(pn,pm),输入图像数据按(图像个数,通道数,图像高,图像宽)标记为从(1,1,1,1)至(b,x3,x1,x2)的张量,将空洞卷积核按(卷积核个数,卷积核通道数,卷积核高,卷积核宽)标注为从(1,1,1,1)至(y3,x3,k1,k2)的张量。将输出特征图按(图片个数,卷积核个数,特征图高,特征图宽)标注为从(1,1,1,1)至(b,y3,y1,y2)的张量。神经网络处理器拥有pn行pm列共pn*pm个预取单元,编号为(1,1)至(pn,pm)。可选的神经网络处理器不包含第1列预取单元,即编号(1,1)至(pn,1)的预取单元。
第1通道第1行第1个卷积核计算:
第1个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列从特征图缓存器一次性读取pn*pm个数据,这些数据位于第1幅图像的第1个输入通道,坐标为从(1,1,1,1)至(1,1,pn,pm)的高pn宽pm的矩形区域中的数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第1组卷积核中第1个通道第1行的第1个数据,坐标为(1,1,1,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p01中。
第2个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第1个周期从特征图缓存器读取的坐标从(1,1,1,1)至(1,1,pn,pm)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第2组卷积核中第1个通道第1行的第1个数据,坐标为(2,1,1,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p02中。
第2个时钟周期,从第d列至第pm-1列的预取单元读取并存储其右侧行相邻的处理引擎单元中的图像数据,这些图像数据为从(1,1,1,d+1)至(1,1,pn,pm)的高pn宽pm-d的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的处理引擎单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1,pm+1)至(1,1,pn,pm+1)一列pn个数据。
第3个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第1个周期从特征图缓存器读取的坐标从(1,1,1,1)至(1,1,pn,pm)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第3组卷积核中第1个通道第1行的第1个数据,坐标为(3,1,1,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p03中。
第3个时钟周期,从第d-1列至第pm-1列的预取单元读取并存储其右侧行相邻的预取单元中的图像数据,这些图像数据为从(1,1,1,d+1)至(1,1,pn,pm+1)的高pn宽pm-d+1的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的预取单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1,pm+2)至(1,1,pn,pm+2)一列pn个数据。
第4至d个时钟周期,重复上述第3个时钟周期的操作。
第1通道第1行第2个卷积核计算:
第d+1个时钟周期,处理引擎单元阵列中从第1列至第pm-1列的处理引擎单元,从其右侧行相邻的预取单元中读取图像数据。第pm列的处理引擎单元从特征图缓存器中读取pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1,pm+d)至(1,1,pn,pm+d)一列pn个数据。此时,处理引擎单元阵列中pn*pm个处理引擎单元的图像数据,应为第1幅图像的第1个输入通道,坐标为从(1,1,1,1+d)至(1,1,pn,pm+d)的高pn宽pm的矩形区域中的数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第1组卷积核中第1个通道第1行的第2个数据,坐标为(1,1,1,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p01的数据相累加,保存在每个处理引擎单元内部寄存器p01中。
第d+2个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第d+1个周期读取的,坐标从(1,1,1,1+d)至(1,1,pn,pm+d)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第2组卷积核中第1个通道第1行的第2个数据,坐标为(2,1,1,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p02的数据相累加,保存在每个处理引擎单元内部寄存器p02中。
第d+2个时钟周期,从第d列至第pm-1列的预取单元读取并存储其右侧行相邻的处理引擎单元中的图像数据,这些图像数据为从(1,1,1,2d+1)至(1,1,pn,pm+d)的高pn宽pm-d的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的处理引擎单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1,pm+d+1)至(1,1,pn,pm+d+1)一列pn个数据。
第d+3个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第d+1个周期读取的,坐标从(1,1,1,1+d)至(1,1,pn,pm+d)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第3组卷积核中第1个通道第1行的第2个数据,坐标为(3,1,1,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p03的数据相累加,保存在每个处理引擎单元内部寄存器p03中。
第d+3个时钟周期,从第d-1列至第pm-1列的预取单元读取并存储其右侧行相邻的预取单元中的图像数据,这些图像数据为从(1,1,1,2d+1)至(1,1,pn,pm+d+1)的高pn宽pm-d+1的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的预取单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1,pm+d+2)至(1,1,pn,pm+d+2)一列pn个数据。
第d+4至2d个时钟周期,重复上述第d+3个时钟周期的操作。
第1通道第1行第3至k2个卷积核,依照第d+1至2d个时钟周期的方式进行计算,所用时钟周期数为(k2-2)*d。
第1通道第2行第1个卷积核计算:
第k2*d+1个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列从特征图缓存器一次性读取pn*pm个数据,这些数据位于第1幅图像的第1个输入通道,坐标为从(1,1,1+d,1)至(1,1,pn+d,pm)的高pn宽pm的矩形区域中的数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第1组卷积核中第1个通道第2行的第1个数据,坐标为(1,1,2,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p01中。
第k2*d+2个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第k2*d+1个周期从特征图缓存器读取的坐标从(1,1,1+d,1)至(1,1,pn+d,pm)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第2组卷积核中第1个通道第2行的第1个数据,坐标为(2,1,2,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p02中。
第k2*d+2个时钟周期,从第d列至第pm-1列的预取单元读取并存储其右侧行相邻的处理引擎单元中的图像数据,这些图像数据为从(1,1,1+d,d+1)至(1,1,pn+d,pm)的高pn宽pm-d的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的处理引擎单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1+d,pm+1)至(1,1,pn+d,pm+1)一列pn个数据。
第k2*d+3个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第k2*d+1个周期从特征图缓存器读取的坐标从(1,1,1+d,1)至(1,1,pn+d,pm)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第3组卷积核中第1个通道第2行的第1个数据,坐标为(3,1,2,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p03中。
第k2*d+3个时钟周期,从第d-1列至第pm-1列的预取单元读取并存储其右侧行相邻的预取单元中的图像数据,这些图像数据为从(1,1,1+d,d+1)至(1,1,pn+d,pm+1)的高pn宽pm-d+1的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的预取单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1+d,pm+2)至(1,1,pn+d,pm+2)一列pn个数据。
第k2*d+4至k2*d+d个时钟周期,重复上述第k2*d+3个时钟周期的操作。
第1通道第2行第2个卷积核计算:
第k2*d+d+1个时钟周期,处理引擎单元阵列中从第1列至第pm-1列的处理引擎单元,从其右侧行相邻的预取单元中读取图像数据。第pm列的处理引擎单元从特征图缓存器中读取pn个图像数据,其中从特征图存储器读取的图像数据为从(1,1,1+d,pm+d)至(1,1,pn+d,pm+d)一列pn个数据。此时,处理引擎单元阵列中pn*pm个处理引擎单元的图像数据,应为第1幅图像的第1个输入通道,坐标为从(1,1,1+d,1+d)至(1,1,pn+d,pm+d)的高pn宽pm的矩形区域中的数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第1组卷积核中第1个通道第2行的第2个数据,坐标为(1,1,2,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p01的数据相累加,保存在每个处理引擎单元内部寄存器p01中。
第k2*d+d+2个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第k2*d+d+1个周期读取的,坐标从(1,1,1+d,1+d)至(1,1,pn+d,pm+d)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第2组卷积核中第1个通道第2行的第2个数据,坐标为(2,1,2,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p02的数据相累加,保存在每个处理引擎单元内部寄存器p02中。
第k2*d+d+2个时钟周期,从第d列至第pm-1列的预取单元读取并存储其右侧行相邻的处理引擎单元中的图像数据,这些图像数据为从(1,1,1+d,2d+1)至(1,1,pn+d,pm+d)的高pn宽pm-d的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的处理引擎单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1+d,pm+d+1)至(1,1,pn+d,pm+d+1)一列pn个数据。
第k2*d+d+3个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第k2*d+d+1个周期读取的,坐标从(1,1,1+d,1+d)至(1,1,pn+d,pm+d)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第3组卷积核中第1个通道第2行的第2个数据,坐标为(3,1,2,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p03的数据相累加,保存在每个处理引擎单元内部寄存器p03中。
第k2*d+d+3个时钟周期,从第d-1列至第pm-1列的预取单元读取并存储其右侧行相邻的预取单元中的图像数据,这些图像数据为从(1,1,1+d,2d+1)至(1,1,pn+d,pm+d+1)的高pn宽pm-d+1的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的预取单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1+d,pm+d+2)至(1,1,pn+d,pm+d+2)一列pn个数据。
第k2*d+d+4至k2*d+2d个时钟周期,重复上述第k2*d+d+3个时钟周期的操作。
第1通道第2行第3至k2个卷积核,依照第k2*d+d+1至k2*d+2d个时钟周期的方式进行计算,所用时钟周期数为(k2-2)*d。
第1通道第3行至第k1行,共(k1-2)*k2个卷积核,依照第k2*d+1至k2*d*2个时钟周期的方式进行计算,所用时钟周期数为(k1-2)*k2*d。
第k1*k2*d个时钟周期,神经网络处理器完成卷积核第1至d组、第1通道、第1行至第k1行,共k1*k2*d个卷积核的计算,在每个处理引擎单元内部编号为p01至p0d的d个内部寄存器,存储了共pn*pm*d个计算结果。
从第k1*k2*d+1至k1*k2*d*2个时钟周期,神经网络处理器从输入图像编号(1,2,1,1)的数据开始,重复上述第1至第k1*k2*d个时钟周期的操作,计算第2输入通道的数据。在第k1*k2*d*2个时钟周期时,神经网络处理器完成卷积核第1至d组、第2通道、第1行至第k1行,共k1*k2*d个卷积核的计算,在每个处理引擎单元内部编号为p01至p0d的d个内部寄存器,存储了共pn*pm*d个计算结果。在每个处理引擎单元内部,将第2输入通道的d个计算结果分别与第1输入通道的d个计算结果相累加,最终得到pn*pm*d个计算结果。
从第k1*k2*d*2+1至k1*k2*d*x3个时钟周期,神经网络处理器重复上述第k1*k2*d+1至k1*k2*d*2个时钟周期的操作,计算第3至x3输入通道的数据。在第k1*k2*d*x3个时钟周期时,神经网络处理器完成卷积核第1至d组、第1至x3通道、第1行至第k1行,共k1*k2*d*x3个卷积核的计算,在每个处理引擎单元内部编号为p01至p0d的d个内部寄存器,存储了共pn*pm*d个计算结果。处理引擎单元内每个编号为p01至p0d的内部寄存器,存储的都是第1输入通道至第x3输入通道的累加结果。上述计算结果为编号从(1,1,1,1)至(1,d,pn,pm)的输出特征图数据。
处理引擎单元阵列将这pn*pm*d个计算结果,存储至特征图缓存器,完成1轮空洞卷积计算。
神经网络处理器从输入图像编号(1,1,pn+1,pm+1)的数据开始,重复上述第1至第k1*k2*d*x3个时钟周期的操作,进行第2轮空洞卷积计算,得到编号从(1,1,pn+1,pm+1)至(1,d,pn*2,pm*2)的输出特征图数据。处理引擎单元阵列将这pn*pm*d个计算结果,存储至特征图缓存器,完成2轮空洞卷积计算。
将高为x1、宽为x2、输入通道数为x3、图片个数大小为b输入图像全部处理完成,空洞卷积计算过程完成,在特征图缓存器中,得到高为y1、宽为y2、输出通道数为y3、图片个数大小为b的输出特征图数据。
本申请实施例提供的简单预取实现方式,相比于现有的无预取实现方式,数据重用率(data re-usage rate)提高了58%,能量消耗减少为原先的58%。
实施例六
本申请实施例在实施例一至实施例五任一实施例的基础上,对行列预取模式执行空洞卷积的具体处理方式进行介绍。
本申请实施例中,同样以对图5所示的图像和图6所示的空洞卷积核采用三行三列共9个处理引擎单元所组成的处理引擎单元阵列进行卷积操作为例简单介绍行列预取模式的运算思路。
如图12所示,深色框表明图像数据是从相邻的处理引擎单元得到的可复用数据,浅色框表明图像数据是访问存储器读取得到的非复用数据。从图中看到,处理引擎单元PE13在第一个周期(cycle 1)读取的数据x113会在两个周期之后(cycle 3)被处理引擎单元PE11使用。因此本申请实施例中,处理引擎单元PE12会在第二个周期(cycle 2)通过预取单元PF12取得PE13的图像数据x113供第三个周期(cycle 3)的PE11使用。与此同时,处理引擎单元PE31在第一个周期读取的图像数据x131会在第五个周期被PE11使用。因此本申请实施例中,处理引擎单元PE21会在第二个周期(cycle2)通过预取单元PF21取得PE31的图像数据x131提供第五个周期(cycle 5)的PE11使用。
具体地,第一个周期(cycle 1)时,9个处理引擎单元(PE11~PE33)会一次性从存储器读取9个图像数据和全部的空洞卷积核数据进行卷积计算。其中,第一行的三个处理引擎单元(PE11、PE12、PE13)中,PF12在第二个周期(cycle 2)从PE13获取图像数据x113并进行存储,第三个周期(cycle 3)时,PE11从预取单元PF12获取图像数据x113进行卷积操作。
可选地,PE13的预取单元PF13会在第二个周期(cycle 2)从存储器多读取一个图像数据x114,在第三个周期(cycle 3)提供给PE12使用。
与此同时,PF21在第二个周期(cycle 2)从PE31获取图像数据x131并进行存储,第五个周期(cycle 5)时,PE11从预取单元PF21获取图像数据x131进行卷积操作。
同理,处理引擎单元PE32第一个周期(cycle 1)读取的图像数据x132会在第五个周期(cycle 5)在处理引擎PE12中用到,于是PE22会在第二个周期(cycle 2)时,执行预取单元PF22预先取得处理引擎PE32的图像数据,在第五个周期(cycle 5)时,被与其相邻的处理引擎PE12使用。
处理引擎单元PE33第一个周期(cycle 1)读取的图像数据x133会在第五个周期(cycle 5)在处理引擎PE13中用到,于是PE23会在第二个周期(cycle2)时,执行预取单元PF23预先取得处理引擎PE33的图像数据,在第五个周期(cycle 5)时,被与其相邻的处理引擎PE13使用。
在第三个周期(cycle 3),大部分的图像数据可以按照上述方法重用第二个周期(cycle 2)获取的图像数据,只有最后一列的处理引擎单元(PE13、PE23、PE33)需要重新读取新的图像数据。
第四个周期(cycle 4)可以继续重用第三个周期(cycle 3)获取的图像数据进行计算。
在第五个周期(cycle 5)重新读取新的图像数据之后,预取操作和第二个周期(cycle 2)到第四个周期(cycle 4)一样,图像数据得到大量复用。
经过8个周期(cycle 8)之后,在一个处理引擎单元(例如PE11)会得到一个空洞卷积的两个通道特征图结果(例如y111、y211)。
以此类推,所有处理引擎在经过32个周期之后(cycle 32),会得到两个通道的空洞卷积的全部特征图。
下面将具体介绍如何将行列预取模式应用到更一般的情况。
如图9、图10、图11所示,神经网络处理器拥有pn行pm列共pn*pm个处理引擎单元所组成的处理引擎单元阵列。所处理的输入图像高为x1、宽为x2、输入通道数为x3、图片个数为b,共x1*x2*x3*b个数据,空洞卷积核高为k1、宽为k2、通道数为x3、组数为y3、膨胀率为d(以d>4为例),共k1*k2*x3*y3个数据,所得到的输出特征图高为y1、宽为y2、输出通道数为y3、个数为b。将处理引擎单元按(行,列)编号为(1,1)至(pn,pm),输入图像数据按(图像个数,通道数,图像高,图像宽)标记为从(1,1,1,1)至(b,x3,x1,x2)的张量,将空洞卷积核按(卷积核个数,卷积核通道数,卷积核高,卷积核宽)标注为从(1,1,1,1)至(y3,x3,k1,k2)的张量。将输出特征图按(图片个数,卷积核个数,特征图高,特征图宽)标注为从(1,1,1,1)至(b,y3,y1,y2)的张量。神经网络处理器拥有pn行pm列共pn*pm个预取单元,编号为(1,1)至(pn,pm)。可选的神经网络处理器不包含第1列预取单元,即编号(1,1)至(pn,1)的预取单元。
第1通道第1行第1个卷积核计算:
第1个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列从特征图缓存器一次性读取pn*pm个数据,这些数据位于第1幅图像的第1个输入通道,坐标为从(1,1,1,1)至(1,1,pn,pm)的高pn宽pm的矩形区域中的数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第1组卷积核中第1个通道第1行的第1个数据,坐标为(1,1,1,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p01中。
第2个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第1个周期从特征图缓存器读取的坐标从(1,1,1,1)至(1,1,pn,pm)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第2组卷积核中第1个通道第1行的第1个数据,坐标为(2,1,1,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p02中。
第2个时钟周期,从第d列至第pm-1列的预取单元读取并存储其右侧行相邻的处理引擎单元中的图像数据到其行预取寄存器中,这些图像数据为从(1,1,1,d+1)至(1,1,pn,pm)的高pn宽pm-d的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的处理引擎单元编号为(a,b+1)。同时,从第d行至第pn-1行的列预取单元读取并存储其下侧列相邻的处理引擎单元中的图像数据到其列预取寄存器中,这些图像数据为从(1,1,d+1,1)至(1,1,pn,pm)的高pn-d宽pm的矩形区域中的数据。其中下侧列相邻是指,编号为(a.b)的预取单元,其下侧列相邻的处理引擎单元编号为(a+1,b)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1,pm+1)至(1,1,pn,pm+1)一列pn个数据。
第3个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第1个周期从特征图缓存器读取的坐标从(1,1,1,1)至(1,1,pn,pm)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第3组卷积核中第1个通道第1行的第1个数据,坐标为(3,1,1,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p03中。
第3个时钟周期,从第d-1列至第pm-1列的预取单元读取并存储其右侧行相邻的预取单元中的图像数据,这些图像数据为从(1,1,1,d+1)至(1,1,pn,pm+1)的高pn宽pm-d+1的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的预取单元编号为(a,b+1)。同时,从第d-1行至第pn-2行的预取单元读取并存储其下侧列相邻的预取单元中的图像数据到其列预取寄存器中,这些图像数据为从(1,1,d+1,1)至(1,1,pn,pm)的高pn-d宽pm的矩形区域中的数据。其中下侧列相邻是指,编号为(a.b)的预取单元,其下侧列相邻的处理引擎单元单元编号为(a+1,b)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1,pm+2)至(1,1,pn,pm+2)一列pn个数据。
第4至d个时钟周期,重复上述第3个时钟周期的操作。
第1通道第1行第2个卷积核计算:
第d+1个时钟周期,处理引擎单元阵列中从第1列至第pm-1列的处理引擎单元单元,从其右侧行相邻的预取单元中读取图像数据。第pm列的处理引擎单元从特征图缓存器中读取pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1,pm+d)至(1,1,pn,pm+d)一列pn个数据。此时,处理引擎单元阵列中pn*pm个处理引擎单元的图像数据,应为第1幅图像的第1个输入通道,坐标为从(1,1,1,1+d)至(1,1,pn,pm+d)的高pn宽pm的矩形区域中的数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第1组卷积核中第1个通道第1行的第2个数据,坐标为(1,1,1,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p01的数据相累加,保存在每个处理引擎单元内部寄存器p01中。
第d+2个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第d+1个周期读取的,坐标从(1,1,1,1+d)至(1,1,pn,pm+d)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第2组卷积核中第1个通道第1行的第2个数据,坐标为(2,1,1,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p02的数据相累加,保存在每个处理引擎单元内部寄存器p02中。
第d+2个时钟周期,从第d列至第pm-1列的预取单元读取并存储其右侧行相邻的处理引擎单元中的图像数据,这些图像数据为从(1,1,1,2d+1)至(1,1,pn,pm+d)的高pn宽pm-d的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的处理引擎单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1,pm+d+1)至(1,1,pn,pm+d+1)一列pn个数据。
第d+3个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第d+1个周期读取的,坐标从(1,1,1,1+d)至(1,1,pn,pm+d)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第3组卷积核中第1个通道第1行的第2个数据,坐标为(3,1,1,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p03的数据相累加,保存在每个处理引擎单元内部寄存器p03中。
第d+3个时钟周期,从第d-1列至第pm-1列的预取单元读取并存储其右侧行相邻的预取单元中的图像数据,这些图像数据为从(1,1,1,2d+1)至(1,1,pn,pm+d+1)的高pn宽pm-d+1的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的预取单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1,pm+d+2)至(1,1,pn,pm+d+2)一列pn个数据。
第d+4至2d个时钟周期,重复上述第d+3个时钟周期的操作。
第1通道第1行第3至k2个卷积核,依照第d+1至2d个时钟周期的方式进行计算,所用时钟周期数为(k2-2)*d。
第1通道第2行第1个卷积核计算:
第k2*d+1个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列中,第一行至pn-d行处理引擎单元使用从第1通道第1行第1个卷积核计算时预取单元保存的从(1,1,d+1,1)至(1,1,pn,pm)的高pn-d宽pm的图像数据,其第pn-d+1行至pn行则从特征图缓冲器读取第一幅图像的第一个输入通道,坐标为从(1,1,pn+1,1)至(1,1,pn+d,pm),一共d*pm个图像数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第1组卷积核中第1个通道第2行的第1个数据,坐标为(1,1,2,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p01中。
第k2*d+2个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第k2*d+1个周期从特征图缓存器读取的坐标从(1,1,pn+1,1)至(1,1,pn+d,pm)的图像数据和第1通道第1行第1个卷积核计算时预取单元保存的从(1,1,d+1,1)至(1,1,pn,pm)的高pn-d宽pm的图像数据,一共pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第2组卷积核中第1个通道第2行的第1个数据,坐标为(2,1,2,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p02中。
第k2*d+2个时钟周期,从第d列至第pm-1列的预取单元读取并存储其右侧行相邻的处理引擎单元中的图像数据,这些图像数据为从(1,1,1+d,d+1)至(1,1,pn+d,pm)的高pn宽pm-d的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的处理引擎单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1+d,pm+1)至(1,1,pn+d,pm+1)一列pn个数据。
第k2*d+3个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第k2*d+1个周期从特征图缓存器读取的坐标从(1,1,1+d,1)至(1,1,pn+d,pm)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第3组卷积核中第1个通道第2行的第1个数据,坐标为(3,1,2,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p03中。
第k2*d+3个时钟周期,从第d-1列至第pm-1列的预取单元读取并存储其右侧行相邻的预取单元中的图像数据,这些图像数据为从(1,1,1+d,d+1)至(1,1,pn+d,pm+1)的高pn宽pm-d+1的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的预取单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1+d,pm+2)至(1,1,pn+d,pm+2)一列pn个数据。
第k2*d+4至k2*d+d个时钟周期,重复上述第k2*d+3个时钟周期的操作。
第1通道第2行第2个卷积核计算:
第k2*d+d+1个时钟周期,处理引擎单元阵列中从第1列至第pm-1列的处理引擎单元,从其右侧行相邻的预取单元中读取图像数据。第pm列的处理引擎单元从特征图缓存器中读取pn个图像数据,其中从特征图存储器读取的图像数据为从(1,1,1+d,pm+d)至(1,1,pn+d,pm+d)一列pn个数据。此时,处理引擎单元阵列中pn*pm个处理引擎单元的图像数据,应为第1幅图像的第1个输入通道,坐标为从(1,1,1+d,1+d)至(1,1,pn+d,pm+d)的高pn宽pm的矩形区域中的数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第1组卷积核中第1个通道第2行的第2个数据,坐标为(1,1,2,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p01的数据相累加,保存在每个处理引擎单元内部寄存器p01中。
第k2*d+d+2个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第k2*d+d+1个周期读取的,坐标从(1,1,1+d,1+d)至(1,1,pn+d,pm+d)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第2组卷积核中第1个通道第2行的第2个数据,坐标为(2,1,2,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p02的数据相累加,保存在每个处理引擎单元内部寄存器p02中。
第k2*d+d+2个时钟周期,从第d列至第pm-1列的预取单元读取并存储其右侧行相邻的处理引擎单元中的图像数据,这些图像数据为从(1,1,1+d,2d+1)至(1,1,pn+d,pm+d)的高pn宽pm-d的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的处理引擎单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1+d,pm+d+1)至(1,1,pn+d,pm+d+1)一列pn个数据。
第k2*d+d+3个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第k2*d+d+1个周期读取的,坐标从(1,1,1+d,1+d)至(1,1,pn+d,pm+d)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第3组卷积核中第1个通道第2行的第2个数据,坐标为(3,1,2,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p03的数据相累加,保存在每个处理引擎单元内部寄存器p03中。
第k2*d+d+3个时钟周期,从第d-1列至第pm-1列的预取单元读取并存储其右侧行相邻的预取单元中的图像数据,这些图像数据为从(1,1,1+d,2d+1)至(1,1,pn+d,pm+d+1)的高pn宽pm-d+1的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的预取单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取并存储pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1+d,pm+d+2)至(1,1,pn+d,pm+d+2)一列pn个数据。
第k2*d+d+4至k2*d+2d个时钟周期,重复上述第k2*d+d+3个时钟周期的操作。
第1通道第2行第3至k2个卷积核,依照第k2*d+d+1至k2*d+2d个时钟周期的方式进行计算,所用时钟周期数为(k2-2)*d。
第1通道第3行至第k1行,共(k1-2)*k2个卷积核,依照第k2*d+1至k2*d*2个时钟周期的方式进行计算,所用时钟周期数为(k1-2)*k2*d。
第k1*k2*d个时钟周期,神经网络处理器完成卷积核第1至d组、第1通道、第1行至第k1行,共k1*k2*d个卷积核的计算,在每个处理引擎单元内部编号为p01至p0d的d个内部寄存器,存储了共pn*pm*d个计算结果。
从第k1*k2*d+1至k1*k2*d*2个时钟周期,神经网络处理器从输入图像编号(1,2,1,1)的数据开始,重复上述第1至第k1*k2*d个时钟周期的操作,计算第2输入通道的数据。在第k1*k2*d*2个时钟周期时,神经网络处理器完成卷积核第1至d组、第2通道、第1行至第k1行,共k1*k2*d个卷积核的计算,在每个处理引擎单元内部编号为p01至p0d的d个内部寄存器,存储了共pn*pm*d个计算结果。在每个处理引擎单元内部,将第2输入通道的d个计算结果分别与第1输入通道的d个计算结果相累加,最终得到pn*pm*d个计算结果。
从第k1*k2*d*2+1至k1*k2*d*x3个时钟周期,神经网络处理器重复上述第k1*k2*d+1至k1*k2*d*2个时钟周期的操作,计算第3至x3输入通道的数据。在第k1*k2*d*x3个时钟周期时,神经网络处理器完成卷积核第1至d组、第1至x3通道、第1行至第k1行,共k1*k2*d*x3个卷积核的计算,在每个处理引擎单元内部编号为p01至p0d的d个内部寄存器,存储了共pn*pm*d个计算结果。处理引擎单元内每个编号为p01至p0d的内部寄存器,存储的都是第1输入通道至第x3输入通道的累加结果。上述计算结果为编号从(1,1,1,1)至(1,d,pn,pm)的输出特征图数据。
处理引擎单元阵列将这pn*pm*d个计算结果,存储至特征图缓存器,完成1轮空洞卷积计算。
神经网络处理器从输入图像编号(1,1,pn+1,pm+1)的数据开始,重复上述第1至第k1*k2*d*x3个时钟周期的操作,进行第2轮空洞卷积计算,得到编号从(1,1,pn+1,pm+1)至(1,d,pn*2,pm*2)的输出特征图数据。处理引擎单元阵列将这pn*pm*d个计算结果,存储至特征图缓存器,完成2轮空洞卷积计算。
将高为x1、宽为x2、输入通道数为x3、图片个数大小为b输入图像全部处理完成,空洞卷积计算过程完成,在特征图缓存器中,得到高为y1、宽为y2、输出通道数为y3、图片个数大小为b的输出特征图数据。
本申请实施例提供的行列预取实现方式,相比于现有的无预取实现方式,数据重用率提高到了62%,能量消耗减少为原先的57%。
实施例七
本申请实施例在实施例一至实施例六任一实施例的基础上,对复杂预取模式执行空洞卷积的具体处理方式进行介绍。
本申请实施例中,同样以对图5所示的图像和图6所示的空洞卷积核采用三行三列共9个处理引擎单元所组成的处理引擎单元阵列进行卷积操作为例简单介绍复杂预取模式的运算思路。
如图13所示,深色框表明图像数据是从相邻的处理引擎单元得到的可复用数据,浅色框表明图像数据是访问存储器读取得到的非复用数据。从图中可以看到,处理引擎单元PE13在第一个周期(cycle 1)读取的数据x113会在两个周期之后(cycle 3)被处理引擎单元PE11使用。因此本申请实施例中,处理引擎单元PE12会在第二个周期(cycle 2)通过预取单元PF12取得PE13的图像数据x113供第三个周期(cycle 3)的PE11使用。与此同时,处理引擎单元PE31在第一个周期(cycle 1)读取的图像数据x131会在第五个周期(cycle 5)被PE11使用。因此本申请实施例中,处理引擎单元PE21会在第二个周期(cycle 2)通过预取单元PF21取得PE31的图像数据x131供第五个周期(cycle 5)的PE11使用。另外,处理引擎单元PE33在第一个周期(cycle 1)读取的图像数据x133会在第三个周期(cycle 3)被PE31使用,以及在第七个周期(cycle 7)被PE11使用。因此本申请实施例中,处理引擎单元PE32会在第二个周期(cycle 2)通过预取单元PF32取得PE33的图像数据x133提供第三个周期(cycle 3)的PE31使用。并且,处理引擎单元PE21会在第四个周期(cycle 4)通过预取单元PF21取得PE31在第三个周期(cycle 3)的图像数据x133提供第三个周期(cycle 3)的PE31使用。
具体地,第一个周期(cycle 1)时,9个处理引擎单元(PE11~PE33)会一次性从存储器读取9个图像数据和全部的空洞卷积核数据进行卷积计算。其中,第一行的三个处理引擎单元(PE11、PE12、PE13)中,PF12在第二个周期(cycle 2)从PE13获取图像数据x113并进行存储,第三个周期(cycle 3)时,PE11从预取单元PF12获取图像数据x113进行卷积操作。
可选地,PE13的预取单元PF13会在第二个周期(cycle 2)从存储器多读取一个图像数据x114,在第三个周期(cycle 3)提供给PE12使用。
与此同时,PF21在第二个周期(cycle 2)从PE31获取图像数据x131并进行存储,第五个周期(cycle 5)时,PE11从预取单元PF21获取图像数据x131进行卷积操作。
同理,处理引擎单元PE32第一个周期(cycle 1)读取的图像数据x132会在第五个周期(cycle 5)在处理引擎PE12中用到,于是PE22会在第二个周期(cycle 2)时,执行预取单元PF22预先取得处理引擎PE32的图像数据,在第五个周期(cycle 5)时,被与其相邻的处理引擎PE12使用。
处理引擎单元PE33第一个周期(cycle 1)读取的图像数据x133会在第五个周期(cycle 5)在处理引擎PE13中用到,于是PE23会在第二个周期(cycle2)时,执行预取单元PF23预先取得处理引擎PE33的图像数据,在第五个周期(cycle 5)时,被与其相邻的处理引擎PE13使用。
在第三个周期(cycle 3),大部分的图像数据可以按照上述方法重用第二个周期(cycle 2)获取的图像数据,只有最后一列的处理引擎单元(PE13、PE23、PE33)需要重新读取新的图像数据。
此时,处理引擎PE33读取的预取数据x133,又可以在第七周期(cycle7)中被处理引擎PE11用到,PE32会在第二个周期(cycle 2)时,执行预取单元PF32预先取得处理引擎PE33的图像数据,在第三个周期(cycle 3)时,被与其相邻的处理引擎P31使用。随后,PE21会在第四个周期(cycle 4)时,执行预取单元PF21预先取得处理引擎PE21在第三个周期(cycle 3)获取的图像数据并放入额外的列预取寄存器中,在第七个周期(cycle 7)时,被与其相邻的处理引擎P11使用。
此外,处理引擎PE32读取的预取数据x134,又可以在第七个周期(cycle7)中被处理引擎PE12用到,所以在第三个周期(cycle 3)处理引擎PE32中x134数据计算结束之后,处理引擎PE22会在第四个周期(cycle 4)使用预取单元取得处理引擎PE32中的x134数据并放入额外的列寄存器中,在第七个周期(cycle 7)时,提供给处理引擎PE12使用。
处理引擎PE33读取的新数据x135,又可以在第七个周期(cycle 7)中被处理引擎PE13用到,所以在第三个周期(cycle 3)处理引擎PE33中x135数据计算结束之后,处理引擎PE23会在第四个周期(cycle 4)使用预取单元取得处理引擎PE33中的x135数据并放入额外的列寄存器中,在第七个周期(cycle 7)时,提供给处理引擎PE13使用。
第四个周期(cycle 4)可以继续重用第三个周期(cycle 3)获取的图像数据进行计算。
在第五个周期(cycle 5)重新读取新的图像数据之后,预取操作和第二个周期(cycle 2)到第四个周期(cycle 4)一样,图像数据得到大量复用。
经过8个周期(cycle 8)之后,在一个处理引擎单元(例如PE11)会得到一个空洞卷积的两个通道特征图结果(例如y111、y211)。
以此类推,所有处理引擎在经过32个周期之后(cycle 32),会得到两个通道的空洞卷积的全部特征图。
下面将具体介绍如何将复杂预取模式应用到更一般的情况。
如图9、图10、图11所示,神经网络处理器拥有pn行pm列共pn*pm个处理引擎单元所组成的处理引擎单元阵列。所处理的输入图像高为x1、宽为x2、输入通道数为x3、图片个数为b,共x1*x2*x3*b个数据,空洞卷积核高为k1、宽为k2、通道数为x3、组数为y3、膨胀率为d(以d>4为例),共k1*k2*x3*y3个数据,所得到的输出特征图高为y1、宽为y2、输出通道数为y3、个数为b。将处理引擎单元按(行,列)编号为(1,1)至(pn,pm),输入图像数据按(图像个数,通道数,图像高,图像宽)标记为从(1,1,1,1)至(b,x3,x1,x2)的张量,将空洞卷积核按(卷积核个数,卷积核通道数,卷积核行,卷积核列)标注为从(1,1,1,1)至(y3,x3,k1,k2)的张量。将输出特征图按(图片个数,卷积核个数,特征图行,特征图列)标注为从(1,1,1,1)至(b,y3,y1,y2)的张量。神经网络处理器拥有pn行pm列共pn*pm个预取单元,编号为(1,1)至(pn,pm)。可选的神经网络处理器不包含第1列预取单元,即编号(1,1)至(pn,1)的预取单元。
第1通道第1行第1个卷积核计算:
第1个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列从特征图缓存器一次性读取pn*pm个数据,这些数据位于第1幅图像的第1个输入通道,坐标为从(1,1,1,1)至(1,1,pn,pm)的高pn宽pm的矩形区域中的数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第1组卷积核中第1个通道第1行的第1个数据,坐标为(1,1,1,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p01中。
第2个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第1个周期从特征图缓存器读取的坐标从(1,1,1,1)至(1,1,pn,pm)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第2组卷积核中第1个通道第1行的第1个数据,坐标为(2,1,1,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p02中。
第2个时钟周期,从第d列至第pm-1列的预取单元读取其右侧行相邻的处理引擎单元中的图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,这些图像数据为从(1,1,1,d+1)至(1,1,pn,pm)的高pn宽pm-d的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的处理引擎单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取pn个图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,其中从特征图缓存器读取的图像数据为从(1,1,1,pm+1)至(1,1,pn,pm+1)一列pn个数据。同时,从第d行至第pn-1行的预取单元读取其下侧列相邻的处理引擎单元中的图像数据,将这些图像数据分别存储于每个预取单元的编号为c01的列预取寄存器中,这些图像数据为从(1,1,d+1,1)至(1,1,pn,pm)的高pn-d宽pm的矩形区域中的数据。其中下侧列相邻是指,编号为(a.b)的预取单元,其下侧列相邻的处理引擎单元编号为(a+1,b)。
第3个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第1个周期从特征图缓存器读取的坐标从(1,1,1,1)至(1,1,pn,pm)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第3组卷积核中第1个通道第1行的第1个数据,坐标为(3,1,1,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p03中。
第3个时钟周期,从第d-1列至第pm-1列的预取单元读取其右侧行相邻的预取单元中的图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,这些图像数据为从(1,1,1,d+1)至(1,1,pn,pm+1)的高pn宽pm-d+1的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的预取单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取pn个图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,其中从特征图缓存器读取的图像数据为从(1,1,1,pm+2)至(1,1,pn,pm+2)一列pn个数据。同时,从第d-1行至第pn-2行的预取单元读取其下侧列相邻的预取单元中的图像数据,将这些图像数据分别存储于每个预取单元的编号为c01的列预取寄存器中,这些图像数据为从(1,1,d+1,1)至(1,1,pn,pm)的高pn-d宽pm的矩形区域中的数据。其中下侧列相邻是指,编号为(a.b)的预取单元,其下侧列相邻的处理引擎单元编号为(a+1,b)。
第4至d个时钟周期,重复上述第3个时钟周期的操作。
第1通道第1行第2个卷积核计算:
第d+1个时钟周期,处理引擎单元阵列中从第1列至第pm-1列的处理引擎单元,从其右侧行相邻的预取单元中读取图像数据。第pm列的处理引擎单元从特征图缓存器中读取pn个图像数据,其中从特征图缓存器读取的图像数据为从(1,1,1,pm+d)至(1,1,pn,pm+d)一列pn个数据。此时,处理引擎单元阵列中pn*pm个处理引擎单元的图像数据,应为第1幅图像的第1个输入通道,坐标为从(1,1,1,1+d)至(1,1,pn,pm+d)的高pn宽pm的矩形区域中的数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第1组卷积核中第1个通道第1行的第2个数据,坐标为(1,1,1,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p01的数据相累加,保存在每个处理引擎单元内部寄存器p01中。
第d+2个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第d+1个周期读取的,坐标从(1,1,1,1+d)至(1,1,pn,pm+d)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第2组卷积核中第1个通道第1行的第2个数据,坐标为(2,1,1,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p02的数据相累加,保存在每个处理引擎单元内部寄存器p02中。
第d+2个时钟周期,从第d列至第pm-1列的预取单元读取其右侧行相邻的处理引擎单元中的图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,这些图像数据为从(1,1,1,2d+1)至(1,1,pn,pm+d)的高pn宽pm-d的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的处理引擎单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取pn个图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,其中从特征图缓存器读取的图像数据为从(1,1,1,pm+d+1)至(1,1,pn,pm+d+1)一列pn个数据。同时,从第d行至第pn-1行的预取单元读取其下侧列相邻的处理引擎单元中的图像数据,将这些图像数据分别存储于每个预取单元的编号为c02的列预取寄存器中,这些图像数据为从(1,1,d+1,d+1)至(1,1,pn,pm+d)的高pn-d宽pm的矩形区域中的数据。其中下侧列相邻是指,编号为(a.b)的预取单元,其下侧列相邻的处理引擎单元编号为(a+1,b)。
第d+3个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第d+1个周期读取的,坐标从(1,1,1,1+d)至(1,1,pn,pm+d)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第3组卷积核中第1个通道第1行的第2个数据,坐标为(3,1,1,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p03的数据相累加,保存在每个处理引擎单元内部寄存器p03中。
第d+3个时钟周期,从第d-1列至第pm-1列的预取单元读取其右侧行相邻的预取单元中的图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,这些图像数据为从(1,1,1,2d+1)至(1,1,pn,pm+d+1)的高pn宽pm-d+1的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的预取单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取pn个图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,其中从特征图缓存器读取的图像数据为从(1,1,1,pm+d+2)至(1,1,pn,pm+d+2)一列pn个数据。同时,从第d-1行至第pn-2行的预取单元读取其下侧列相邻的预取单元中的图像数据,将这些图像数据分别存储于每个预取单元的编号为c02的列预取寄存器中,这些图像数据为从(1,1,d+1,d+1)至(1,1,pn,pm+d)的高pn-d宽pm的矩形区域中的数据。其中下侧列相邻是指,编号为(a.b)的预取单元,其下侧列相邻的处理引擎单元编号为(a+1,b)。
第d+4至2d个时钟周期,重复上述第d+3个时钟周期的操作。
第1通道第1行第3至k2个卷积核,依照第d+1至2d个时钟周期的方式进行计算,所用时钟周期数为(k2-2)*d。
第1通道第2行第1个卷积核计算:
第k2*d+1个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列中,第1至pn-d行处理引擎单元使用从第1通道第1行第1个卷积核计算时预取单元保存在编号为c01的列预取寄存器中的,从(1,1,d+1,1)至(1,1,pn,pm)的高pn-d宽pm的图像数据,其第pn-d+1行至pn-1行则从特征图缓冲器读取第1幅图像的第1个输入通道,坐标为从(1,1,pn+1,1)至(1,1,pn+d,pm),一共d*pm个图像数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第1组卷积核中第1个通道第2行的第1个数据,坐标为(1,1,2,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p01中。
第k2*d+2个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第k2*d+1个周期从特征图缓存器读取的坐标从(1,1,1+d,1)至(1,1,pn+d,pm)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第2组卷积核中第1个通道第2行的第1个数据,坐标为(2,1,2,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p02中。
第k2*d+2个时钟周期,从第d列至第pm-1列的预取单元读取其右侧行相邻的处理引擎单元中的图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,这些图像数据为从(1,1,1+d,d+1)至(1,1,pn+d,pm)的高pn宽pm-d的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的处理引擎单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取pn个图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,其中从特征图缓存器读取的图像数据为从(1,1,1+d,pm+1)至(1,1,pn+d,pm+1)一列pn个数据。同时,从第d行至第pn-1行的预取单元读取其下侧列相邻的处理引擎单元中的图像数据,将这些图像数据分别存储于每个预取单元的编号为c01的列预取寄存器中,这些图像数据为从(1,1,2d+1,1)至(1,1,pn+d,pm)的高pn-d宽pm的矩形区域中的数据。其中下侧列相邻是指,编号为(a.b)的预取单元,其下侧列相邻的处理引擎单元编号为(a+1,b)。
第k2*d+3个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第k2*d+1个周期从特征图缓存器读取的坐标从(1,1,1+d,1)至(1,1,pn+d,pm)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第3组卷积核中第1个通道第2行的第1个数据,坐标为(3,1,2,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p03中。
第k2*d+3个时钟周期,从第d-1列至第pm-1列的预取单元读取其右侧行相邻的预取单元中的图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,这些图像数据为从(1,1,1+d,d+1)至(1,1,pn+d,pm+1)的高pn宽pm-d+1的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的预取单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取pn个图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,其中从特征图缓存器读取的图像数据为从(1,1,1+d,pm+2)至(1,1,pn+d,pm+2)一列pn个数据。同时,从第d-1行至第pn-2行的预取单元读取其下侧列相邻的预取单元中的图像数据,将这些图像数据分别存储于每个预取单元的编号为c01的列预取寄存器中,这些图像数据为从(1,1,2d+1,1)至(1,1,pn+d,pm)的高pn-d宽pm的矩形区域中的数据。其中下侧列相邻是指,编号为(a.b)的预取单元,其下侧列相邻的处理引擎单元编号为(a+1,b)。
第k2*d+4至k2*d+d个时钟周期,重复上述第k2*d+3个时钟周期的操作。
第1通道第2行第2个卷积核计算:
第k2*d+d+1个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列中,第1至pn-d行处理引擎单元使用从第1通道第1行第2个卷积核计算时预取单元保存在编号为c02的列预取寄存器中的,从(1,1,d+1,d+1)至(1,1,pn,pm+d)的高pn-d宽pm的图像数据。其第pn-d+1行至pn-1行的第1列至第pm-d列的处理引擎单元,从其右侧行相邻的预取单元的行预取寄存器中,读取从(1,1,pn+1,d+1)至(1,1,pn+d,pm)的高d宽pm-d的图像数据。其第pn-d+1行至pn-1行的第pm-d+1列至第pm列的处理引擎单元,则从特征图缓冲器读取第1幅图像的第1个输入通道,坐标为从(1,1,pn+1,pm+1)至(1,1,pn+d,pm+d),一共d*d个图像数据。此时,处理引擎单元阵列中pn*pm个处理引擎单元的图像数据,应为第1幅图像的第1个输入通道,坐标为从(1,1,1+d,1+d)至(1,1,pn+d,pm+d)的高pn宽pm的矩形区域中的数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第1组卷积核中第1个通道第2行的第2个数据,坐标为(1,1,2,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p01的数据相累加,保存在每个处理引擎单元内部寄存器p01中。
第k2*d+d+2个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第k2*d+d+1个周期读取的,坐标从(1,1,1+d,1+d)至(1,1,pn+d,pm+d)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第2组卷积核中第1个通道第2行的第2个数据,坐标为(2,1,2,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p02的数据相累加,保存在每个处理引擎单元内部寄存器p02中。
第k2*d+d+2个时钟周期,从第d列至第pm-1列的预取单元读取其右侧行相邻的处理引擎单元中的图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,这些图像数据为从(1,1,1+d,2d+1)至(1,1,pn+d,pm+d)的高pn宽pm-d的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的处理引擎单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取pn个图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,其中从特征图缓存器读取的图像数据为从(1,1,1+d,pm+d+1)至(1,1,pn+d,pm+d+1)一列pn个数据。同时,从第d行至第pn-1行的预取单元读取其下侧列相邻的处理引擎单元中的图像数据,将这些图像数据分别存储于每个预取单元的编号为c02的列预取寄存器中,这些图像数据为从(1,1,2d+1,d+1)至(1,1,pn+d,pm+d)的高pn-d宽pm的矩形区域中的数据。其中下侧列相邻是指,编号为(a.b)的预取单元,其下侧列相邻的处理引擎单元编号为(a+1,b)。
第k2*d+d+3个时钟周期,包含pn*pm个处理引擎单元的处理引擎单元阵列继续使用第k2*d+d+1个周期读取的,坐标从(1,1,1+d,1+d)至(1,1,pn+d,pm+d)的pn*pm个图像数据作为计算数据。包含pn*pm个处理引擎单元的引擎阵列同时从卷积核缓存器读取第3组卷积核中第1个通道第2行的第2个数据,坐标为(3,1,2,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果与每个处理引擎单元内部寄存器p03的数据相累加,保存在每个处理引擎单元内部寄存器p03中。
第k2*d+d+3个时钟周期,从第d-1列至第pm-1列的预取单元读取其右侧行相邻的预取单元中的图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,这些图像数据为从(1,1,1+d,2d+1)至(1,1,pn+d,pm+d+1)的高pn宽pm-d+1的矩形区域中的数据。其中右侧行相邻是指,编号为(a,b)的预取单元,其右侧行相邻的预取单元编号为(a,b+1)。第pm列的预取单元从特征图缓存器中读取pn个图像数据,将这些图像数据分别存储于每个预取单元的行预取寄存器中,其中从特征图缓存器读取的图像数据为从(1,1,1+d,pm+d+2)至(1,1,pn+d,pm+d+2)一列pn个数据。同时,从第d-1行至第pn-2行的预取单元读取其下侧列相邻的预取单元中的图像数据,将这些图像数据分别存储于每个预取单元的编号为c02的列预取寄存器中,这些图像数据为从(1,1,2d+1,d+1)至(1,1,pn+d,pm+d)的高pn-d宽pm的矩形区域中的数据。其中下侧列相邻是指,编号为(a.b)的预取单元,其下侧列相邻的处理引擎单元编号为(a+1,b)。
第k2*d+d+4至k2*d+2d个时钟周期,重复上述第k2*d+d+3个时钟周期的操作。
第1通道第2行第3至k2个卷积核,依照第k2*d+d+1至k2*d+2d个时钟周期的方式进行计算,所用时钟周期数为(k2-2)*d。
第1通道第3行至第k1行,共(k1-2)*k2个卷积核,依照第k2*d+1至k2*d*2个时钟周期的方式进行计算,所用时钟周期数为(k1-2)*k2*d。
第k1*k2*d个时钟周期,神经网络处理器完成卷积核第1至d组、第1通道、第1行至第k1行,共k1*k2*d个卷积核的计算,在每个处理引擎单元内部编号为p01至p0d的d个内部寄存器,存储了共pn*pm*d个计算结果。
从第k1*k2*d+1至k1*k2*d*2个时钟周期,神经网络处理器从输入图像编号(1,2,1,1)的数据开始,重复上述第1至第k1*k2*d个时钟周期的操作,计算第2输入通道的数据。在第k1*k2*d*2个时钟周期时,神经网络处理器完成卷积核第1至d组、第2通道、第1行至第k1行,共k1*k2*d个卷积核的计算,在每个处理引擎单元内部编号为p01至p0d的d个内部寄存器,存储了共pn*pm*d个计算结果。在每个处理引擎单元内部,将第2输入通道的d个计算结果分别与第1输入通道的d个计算结果相累加,最终得到pn*pm*d个计算结果。
从第k1*k2*d*2+1至k1*k2*d*x3个时钟周期,神经网络处理器重复上述第k1*k2*d+1至k1*k2*d*2个时钟周期的操作,计算第3至x3输入通道的数据。在第k1*k2*d*x3个时钟周期时,神经网络处理器完成卷积核第1至d组、第1至x3通道、第1行至第k1行,共k1*k2*d*x3个卷积核的计算,在每个处理引擎单元内部编号为p01至p0d的d个内部寄存器,存储了共pn*pm*d个计算结果。处理引擎单元内每个编号为p01至p0d的内部寄存器,存储的都是第1输入通道至第x3输入通道的累加结果。上述计算结果为编号从(1,1,1,1)至(1,d,pn,pm)的输出特征图数据。
处理引擎单元阵列将这pn*pm*d个计算结果,存储至特征图缓存器,完成1轮空洞卷积计算。
神经网络处理器从输入图像编号(1,1,pn+1,pm+1)的数据开始,重复上述第1至第k1*k2*d*x3个时钟周期的操作,进行第2轮空洞卷积计算,得到编号从(1,1,pn+1,pm+1)至(1,d,pn*2,pm*2)的输出特征图数据。处理引擎单元阵列将这pn*pm*d个计算结果,存储至特征图缓存器,完成2轮空洞卷积计算。
将高为x1、宽为x2、输入通道数为x3、图片个数大小为b输入图像全部处理完成,空洞卷积计算过程完成,在特征图缓存器中,得到高为y1、宽为y2、输出通道数为y3、图片个数大小为b的输出特征图数据。
本申请实施例提供的复杂预取实现方式,相比于现有的无预取实现方式,数据重用率提高到了65%,能量消耗减少为原先的56%。
图22为本申请在执行空洞卷积时,实施例五、六、七所示的不同预取模式在不同的卷积核尺寸,膨胀率,处理引擎单元阵列尺寸下的数据重用率(re-usage rate)的比较结果。其中不同预取模式的数据重用率计算使用公式如图23。公式中r表示数据重用率,k1表示卷积核长,k2表示卷积核高,pn表示处理引擎单元阵列的行数,pm表示处理引擎单元阵列的列数,d表示空洞卷积膨胀率。可以看出随着卷积核尺寸,膨胀率和处理引擎单元阵列尺寸的增加,数据重用率得到了大幅度上涨,在卷积核大小为5×5,膨胀率为24,处理引擎单元阵列大小为64×64时,本申请执行空洞卷积简单预取模式的数据重用率达到了97.9%,行列预取模式的数据重用率达到了98.3%,复杂预取模式的数据重用率达到了99.0%。
实施例八
本申请实施例在实施例一至实施例七任一实施例的基础上,对执行一般卷积操作的具体处理方式进行介绍。
具体而言,参见图16,示出了子预取控制器做一般卷积预取模式的一种操作方法的示例。一般卷积预取模式的整体流程为:
刚上电时,子预取控制器处于空闲状态,当接收开始信号之后进入初始状态;
初始状态时,子预取控制器会控制各预取单元从特征图缓冲器里预取第一次卷积操作所需要的图像数据,预取的数量可参见实施例八的后续描述,当预取结束后子预取控制器会接收到装载信号,随后进入无预取行操作状态,此时子预取控制器控制各处理引擎单元的预取单元从卷积核缓冲器中取得计算所需的卷积核数据,并进行计算;
无预取行操作状态时,子预取控制器接收下一行信号之后进入无预取列操作状态,此时子预取控制器控制各处理引擎单元从下侧相邻处理引擎单元取得数据;
无预取列操作状态时,子预取控制器接收到现在行信号后又返回无预取行操作状态,继续对图像的某一行数据进行计算或者现在窗口内的图像数据全部计算完毕,接收到下一个窗口命令进入到填充状态,此时子预取控制器控制各处理引擎单元从特征图缓冲器内取得下一个窗口的图像数据;又或者接收到有预取现在行操作信号后进入有预取行操作状态。
有预取行操作状态时,子预取控制器控制除第一列处理引擎单元外的其他处理引擎单元对应的预取单元预取计算下一个窗口时所需要的数据。预取的时机和数量可参见实施例八的后续描述。子预取控制器在分别接收到无预取现在行、无预取下一行、有预取下一行命令之后,可以分别进入无预取行操作状态、无预取列操作状态、有预取列操作状态。
无预取行操作状态时,子预取控制器控制处理引擎单元阵列继续计算同窗口剩余数据。
而有预取列操作状态时,子预取控制器控制各处理引擎单元对应的预取单元预取其下侧处理引擎单元的特征图数据以供同一窗口下一列计算时使用。在有预取列操作状态时,子预取控制器接收到下一个窗口命令之后可以进入填充状态。
在子预取控制器控制处理引擎单元阵列处理一般卷积操作时,在无预取行操作状态和无预取列操作状态,都不会进入交错操作状态,而只有在处理空洞卷积操作时,无预取行操作状态和无预取列操作状态接收到下一个卷积核操作时,才会进入到交错操作状态。
如此在多个状态之间反复,直到填充状态接收到完成命令之后进入结束状态,而结束状态接收到完成命令之后,又返回到空闲状态。
本申请实施例中,同样以对图5所示的图像和图6所示的一般卷积核采用三行三列共9个处理引擎单元所组成的处理引擎单元阵列进行卷积操作为例简单介绍上述方法执行一般卷积预取模式的运算思路。
如图14所示,深色框表明图像数据是从相邻的处理引擎单元得到的可复用数据,浅色框表明图像数据是访问存储器读取得到的非复用数据,黑色框表明图像数据是预取单元预先访问存储器读取到的数据。在没有预取单元时,每一次卷积计算的第一个周期(cycle 1、cycle 5、cycle 9、cycle 13)会访问存储器读取一次新图像数据,随着神经网络规模的增加,每一次读取新数据操作会都对存储器的带宽要求非常大。若是结合上述实施例三,使用预取单元的方式,在做卷积计算之前,会预取第一次卷积操作需要的图像数据(x12,x13,x22,x23,x32,x33),在卷积计算的第一个周期(cycle 1)时,除了处理引擎PE11需要读取新数据之外,其余的处理引擎(PE12~PE33)都可以直接使用预取单元里的图像数据。同时,每一次卷积计算的第二个周期开始(cycle 2,cycle 6,cycle 14),都会执行预取读取下一个卷积计算需要的图像数据。整个卷积计算结束之后,相比于不使用预取的一般卷积操作,使用预取的实施例将会大大减少卷积计算对存储器的带宽要求。
下面将具体介绍如何将上述方法执行一般卷积的过程应用到更一般的情况。
如图9、图10、图11所示,神经网络处理器拥有pn行pm列共pn*pm个处理引擎单元所组成的处理引擎单元阵列。所处理的输入图像高为x1、宽为x2、输入通道数为x3、图片个数为b,共x1*x2*x3*b个数据,一般卷积核高为k1、宽为k2、通道数为x3、组数为y3,共k1*k2*x3*y3个数据,所得到的输出特征图高为y1、宽为y2、输出通道数为y3、个数为b。将处理引擎单元按(行,列)编号为(1,1)至(pn,pm),输入图像数据按(图像个数,通道数,图像高,图像宽)标记为从(1,1,1,1)至(b,x3,x1,x2)的张量,将空洞卷积核按(卷积核个数,卷积核通道数,卷积核高,卷积核宽)标注为从(1,1,1,1)至(y3,x3,k1,k2)的张量。将输出特征图按(图片个数,卷积核个数,特征图高,特征图宽)标注为从(1,1,1,1)至(b,y3,y1,y2)的张量。神经网络处理器拥有pn行pm列共pn*pm个预取单元,编号为(1,1)至(pn,pm)。可选的神经网络处理器不包含第1列预取单元,即编号(1,1)至(pn,1)的预取单元。
卷积计算开始前,存在pn个预周期,在第一个预周期时,处理引擎单元阵列的第一行的第二列至第pm列会从特征图缓冲器预取坐标从(1,1,1,2)至(1,1,1,pm)一共pm-2+1个图像数据,其余列不预取;在第二个预周期时,处理引擎单元阵列的第二行的第二列至第pm列会从特征图缓冲器预取坐标从(1,1,2,2)至(1,1,2,pm)一共pm-2+1个图像数据,其余列不预取;在第三个预周期时,处理引擎单元阵列的第三行的第二列至第pm列会从特征图缓冲器预取坐标从(1,1,3,2)至(1,1,3,pm)一共pm-2+1个图像数据,其余列不预取;重复以上步骤,直至图像坐标从(1,1,1,2)至(1,1,pn,pm),一共(pn)*(pm-1)个数据被完全预取。
第一组卷积核的第一个通道卷积核计算:
在pn个预周期结束后,正好开始卷积计算。在第一个时钟周期,处理引擎单元阵列的第一列会从特征图缓冲器读取坐标从(1,1,1,1)至(1,1,pn,1)一共pn个图像数据,其余列使用之前预周期时预取的坐标从(1,1,1,2)至(1,1,pn,pm)一共(pn)*(pm-1)个图像数据;同时,包含pn*pm个处理引擎单元的引擎阵列从卷积核缓存器读取第1组卷积核中第1个通道第1行的第1个数据,坐标为(1,1,1,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p01中。
在第二个时钟周期,处理引擎单元阵列的第一列至第pm-1列本着相邻处理单元数据可以传递的原则会使用第一周期时处理引擎单元阵列的第二列至pm列坐标从(1,1,1,2)至(1,1,pn,pm)一共(pn)*(pm-1)个图像数据。处理引擎单元阵列的第pm列会从特征图缓冲器中读取坐标从
(1,1,1,pm+1)至(1,1,pn,pm+1)一共pn图像数据。同时,包含pn*pm个处理引擎单元的引擎阵列从卷积核缓存器读取第1组卷积核中第1个通道第1行的第2个数据,坐标为(1,1,1,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p02中。
重复以上过程直至图像坐标从(1,1,1,1)至(1,1,pn+k1-1,pm+k2-1)一共(pn+k1-1)*(pm+k2-1)个数据,第一组卷积核的第一个通道全部计算完成。
与此同时,在计算第一组卷积核的第一个通道中的k1*k2-pn+1周期开始,处理引擎单元阵列的第二列到第pm列会从特征图缓冲器中预取第一组卷积核的第二个通道卷积操作需要的图像数据。图像数据和计算第一组卷积核的第一个通道卷积核计算时一样,在第k1*k2-pn+1个预周期时,处理引擎单元阵列的第一行的第二列至第pm列会从特征图缓冲器预取坐标从(1,1,1,2)至(1,1,1,pm)一共pm-2+1个图像数据,其余列不预取;在第k1*k2-pn+2个预周期时,处理引擎单元阵列的第二行的第二列至第pm列会从特征图缓冲器预取坐标从(1,1,2,2)至(1,1,2,pm)一共pm-2+1个图像数据,其余列不预取;在第k1*k2-pn+3个预周期时,处理引擎单元阵列的第三行的第二列至第pm列会从特征图缓冲器预取坐标从(1,1,3,2)至(1,1,3,pm)一共pm-2+1个图像数据,其余列不预取;重复以上步骤,在第k1*k2时钟周期,图像坐标从(1,1,1,2)至(1,1,pn,pm),一共(pn)*(pm-1)个数据被完全预取。
第一组卷积核的第二个通道的卷积核计算:
在第k1*k2+1个时钟周期,处理引擎单元阵列的第一列会从特征图缓冲器读取坐标从(1,2,1,1)至(1,2,pn,1)一共pn个图像数据,其余列使用之前预周期时预取的坐标从(1,2,1,2)至(1,2,pn,pm)一共(pn)*(pm-1)个图像数据;同时,包含pn*pm个处理引擎单元的引擎阵列从卷积核缓存器读取第1组卷积核中第2个通道第1行的第1个数据,坐标为(1,2,1,1)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p01中。
在第k1*k2+2个时钟周期,处理引擎单元阵列的第一列至第pm-1列本着相邻处理单元数据可以传递的原则会使用第k1*k2+1周期时处理引擎单元阵列的第二列至pm列坐标从(1,2,1,2)至(1,2,pn,pm)一共(pn)*(pm-1)个图像数据。处理引擎单元阵列的第pm列会从特征图缓冲器中读取坐标从(1,2,1,pm+1)至(1,2,pn,pm+1)一共pn图像数据。同时,包含pn*pm个处理引擎单元的引擎阵列从卷积核缓存器读取第1组卷积核中第2个通道第1行的第2个数据,坐标为(1,2,1,2)。每个处理引擎单元将读取的图像数据和卷积核数据进行卷积计算,计算结果保存在每个处理引擎单元内部寄存器p02中。
重复以上过程直至图像坐标从(1,2,1,1)至(1,2,pn+k1-1,pm+k2-1)一共(pn+k1-1)*(pm+k2-1)个数据,第一组卷积核的第二个通道全部计算完成。
同理,重复以上过程至卷积核从(1,1,1,1)到(1,x3,k1,k2)一共x3个卷积核的全部卷积计算做完,表示第一组卷积核的全部通道卷积计算完成。
此时,图像的卷积计算范围将会发生改动,从(1,1,1,pm+1)至(1,x3,pn,pm+pn)一共pn*pm*x3个图像数据作为新的图像数据参与一组卷积核的卷积计算。将高位x1,宽为x2,输入通道数为x3的图片全部计算过一次之后,表明第一个图片的第一组卷积核计算全部完成。随后切换下一个卷积核组,重新执行以上步骤,最终将高为x1、宽为x2、输入通道数为x3、图片个数大小为b输入图像全部处理完成,一般卷积计算过程完成,在特征图缓存器中,得到高为y1、宽为y2、输出通道数为y3、图片个数大小为b的输出特征图数据。
图24为一般卷积的预取模式时特征图缓冲器吞吐量效果图。纵轴为特征图缓冲器吞吐量大小,横轴为时钟周期。图中的正斜线“/”和横线阴影部分为神经网络处理器执行一般卷积操作的特征图缓冲器数据吞吐量,可以看到每隔一定时钟周期,具体为每隔一个图像数据窗口,子预取控制器会从特征图缓冲器读取大量的数据(正斜线加上横线阴影部分),此时特征图缓冲器的吞吐量最大,给神经网络处理器造成带宽负担。而执行一般卷积的预取模式后,高吞吐量周期的部分数据(虚线框内横线阴影部分部分)被分摊到其他时钟周期(图中虚线框外的反斜线“\”阴影部分),极大地减少了每个新窗口图像数据读取的带宽需求。
本申请实施例提供对于一般卷积的实现方式,相比于现有的无预取实现方式,每次读取图像数据的带宽需求减少到了12.5%。
实际使用中,还可以采用本申请的技术方案执行一般卷积,继续如图16所示,本申请实施例执行一般卷积的整体流程为:
刚上电时,子预取控制器处于空闲状态,当接受到开始信号之后进入到初始状态;
初始状态时,子预取控制器接受装载信号后进入无预取行操作状态,此时子预取控制器控制各处理引擎单元从特征图缓冲器和卷积核缓冲器中取得一个窗口计算所需的数据,并对第一行进行计算。
当一行特征图数据计算完毕之后,子预取控制器收到下一行命令进入到无预取列操作状态,此时对特征图数据的下一行进行计算。
当此行特征图数据还有剩余时,子预取控制器会接收到现在行命令又回到无预取行操作状态。
重复无预取行列操作状态直至一个窗口的数据全部计算完成,子预取控制器接收到下一个窗口命令之后进入到填充状态。此时子预取控制器控制各处理引擎单元从特征图缓冲器和卷积核缓冲器中取得下一个窗口计算所需的数据,并对新窗口第一行进行计算。
同理,重复以上步骤,直至所有取得的窗口数据等于特征图数据时,表示整个特征图计算完成,填充状态接收到完成命令后进入结束状态,而结束状态接收到完成命令后,又返回到空闲状态。
实施例九
本申请实施例在实施例一至实施例八中任一实施例的基础上,提供了一种子预取控制器根据接收的主预取控制器的指令来控制处理引擎单元阵列执行卷积操作的可行方式。
具体而言,子预取控制器接收的主预取控制器的指令中包含用于指示卷积类型和/或预取模式的域,其中卷积类型是指空洞卷积、一般卷积等卷积类型,预取模式是指上述实施例中所示的简单预取模式、行列预取模式、复杂预取模式、一般卷积的预取模式等。
那么,在步骤S110中,通过预取单元PFx,y根据子预取控制器从接收到的指令的对应的域中确定的卷积类型和/或预取模式,获取预定数据,并将获取到的预定数据存储至预取单元PFx,y;
在步骤S120中,通过预定的处理引擎单元根据子预取控制器从接收到的指令的对应的域中确定的卷积类型和/或预取模式,从预取单元PFx,y获取预定数据进行卷积操作。
本申请实施例中,子预取控制器从接收到的指令基于指令集架构,该指令集包含用于指明扩张率(Dalation rate)或采样率的域。以扩张率为例,图17示出了本申请实施例中使用的指令集的一个示例,需要说明的是,指令集结构可以根据实际需求修改,并不限定于本申请实施例中示出的形式,例如,可以通过改变各个域的位置得到新的指令集结构。指令集结构中存在用于指示卷积类型和/或预取模式的域,其中,指示卷积类型和/或预取模式的域可以是分开的两个域,也可以是多个比特合并成的一个域,还可以是独立编码的两个相邻域。
在一种实现方式中,如图17所示,卷积操作时,子预取控制器会读取第2域(Reg2)输入地址中的数据,并控制处理引擎单元与预取单元在存储器中找到对应地址的图像数据;并且子预取控制器会读取在第6域(Reg6)卷积核地址中的数据,并控制处理引擎单元与预取单元在存储器中找到对应地址的卷积核数据进行卷积计算,并控制处理引擎单元与预取单元将结果存入第0域(Reg0)输出地址所指的存储器地址中。关于输入图像的信息位于第3域到第5域(Reg3~Reg5),关于卷积核的信息位于第1域(Reg1)、第7域(Reg7)与第8域(Reg8),关于卷积操作的信息位于第9域到第11域(Reg9~Reg11)。
该示例中,操作码部分表示本次操作的模式,操作的模式包括以下至少之一:一般卷积预取模式、空洞卷积的简单预取模式、空洞卷积的行列预取模式、和空洞卷积的复杂预取模式。作为示例地,操作码值为0x00时,表示为一般卷积的预取模式;操作码值为0x01时,表示为空洞卷积的简单预取模式;操作码为0x02时,表示为空洞卷积的行列预取模式;操作码为0x03时,表示为空洞卷积的复杂预取模式,其余值都表示为一般卷积模式。第0域(Reg0)为输出地址,表示通过本发明的神经网络处理器计算之后的结果的存储地址;第1域(Reg1)为输出通道数,表示通过本发明的神经网络处理器计算结果的通道个数;第2域(Reg2)为输入地址,表示将要通过本发明的神经网络处理器计算的图像数据的存储器地址;第3域(Reg3)为输入通道数,表示将要通过本发明的神经网络处理器计算的数据的通道个数;第4域(Reg4)为输入宽,表示将要通过本发明的神经网络处理器计算的数据的宽度;第5域(Reg5)为输入高,表示将要通过本发明的神经网络处理器计算的数据的高度;第6域(Reg6)为卷积核地址,表示将要进行卷积计算的卷积核数据的存储器地址;第7域(Reg7)为卷积核宽,表示将要通过本发明的神经网络处理器计算的卷积核的宽度;第8域(Reg8)为卷积核高,表示将要通过本发明的神经网络处理器计算的卷积核的高度;第9域(Reg9)为步长,表示将要通过本发明的神经网络处理器计算的卷积核的移动步长;第10域(Reg10)为填充,表示将要通过本发明的神经网络处理器计算的卷积计算是否使用填充操作(Padding);第11域(Reg11)为扩张率,表示将要通过本发明的神经网络处理器计算的卷积计算使用多大的扩张率:若卷积为一般卷积,扩张率固定为1,若扩张率>1,则表示此卷积为空洞卷积且扩张率等于第11域设定的数值。
图21为本申请实施例的操作图(Operation),表示了实施例进行卷积操作时的操作顺序。如图21所示,在做卷积操作之前,会获取卷积所需的信息:图像长度(image_length),图像高度(image_height),图像通道数(image_channel_number),卷积核长度(kernel_length),卷积核高度(kernel_height),卷积核通道数(kernel_channel_number),步长(stride),填充(padding),输出通道数(output_channel_number),膨胀率(dilation rate),存储器中图像所在地址(image_address),存储器中卷积核所在地址(kernel_address),存储器中卷积结果存储地址(output_address);获取这些信息后,子预取控制器会控制处理引擎单元阵列从存储器中获取数据:图像数据image_data(图像长度x图像高度x图像通道数)和卷积核数据kernel_data(卷积核长度x卷积核高度x卷积核通道数);随后处理引擎单元阵列会使用图像数据,卷积核数据,步长(stride),填充(padding),输出通道数(output_channel_number),膨胀率(dilation rate)作为参数进行卷积计算;计算结束之后,子预取控制器会控制处理引擎单元阵列把计算结果(conv_result)储存到存储器中卷积结果存储地址(output_address)中。本申请实施例中,子预取控制器会根据指令集来配置处理引擎单元阵列来处理空洞卷积或者一般卷积,根据不同的预取模式配置不同的预取时间。
作为示例地,扩张率在寄存器图中的一个示例如图18所示,比特表示了扩张率从x到y在寄存器中所占有的比特数;类型表示扩张率的读写类型,本示例举例为可读可写;描述表示了对扩张率的详细描述;初始值表示在初始化(Reset)之后使用的默认值,本示例举例为0。
图19为本申请执行扩张率为3,卷积核大小等于3×3(长×宽)时的空洞卷积的简单预取模式的实施例时序图。结合图4,当通道计数器不等于0且有限状态机状态为行操作状态时,有限状态机的状态从行操作状态转入交错操作状态;当通道计数器不等于0且有限状态机状态为填充状态时,有限状态机的状态从填充状态转入交错操作状态。在交错操作状态,当通道计数器等于0且行计数器不等于0时,交错操作状态转入行操作状态;当通道计数器等于0,行计数器等于0且列计数器不等于0时,状态转入填充状态。
对于通道计数器,当下一个状态为行操作或者填充操作时重置(Reset),重置初始值为扩张率减1,当下一个状态为交错操作时,计数器开始递减。
对于行计数器,当下一个状态为填充时重置,重置初始值为卷积核宽减1,当下一个状态为行操作时,计数器开始递减。
对于列计数器,在初始化状态时重置,重置初始值为卷积核高减1,当下一个状态为填充时,列计数器开始递减。
当有限状态机的状态为交错操作状态时,行预取寄存器读取预取数据。如果行预取寄存器为处理引擎单元阵列中最右侧的行预取寄存器,则预取数据来自特征图缓冲器;如果行预取寄存器不是处理引擎单元阵列中最右侧的行预取寄存器,则预取数据来自其右侧行相邻的处理引擎单元或预取单元,如果有限状态机上一个状态为行操作或填充状态,则预取数据来自其右侧行相邻的处理引擎单元,如果有限状态机上一个状态不是行操作或填充状态,则预取数据来自其右侧行相邻的预取单元。
当有限状态机的状态为填充状态时,处理引擎单元读取特征图缓冲器中的图像数据,同时读取卷积核缓冲器中的卷积核数据,并执行计算。当有限状态机的状态为行操作状态时,处理引擎单元读取右侧行相邻的预取单元中的图像数据,同时读取卷积核缓冲器中的卷积核数据,并执行计算。当有限状态机的状态为交错操作状态时,处理引擎单元使用上一时钟周期的图像数据,仅读取卷积核缓冲器中的卷积核数据,并执行计算。
图20为本发明执行扩张率为3,卷积核大小等于3×3(长×宽)时的空洞卷积的行列预取模式和复杂预取模式的实施例时序图。结合图4,当通道计数器不等于0时,有限状态机状态为行操作状态时,行操作状态转入交错操作状态;有限状态机状态为填充状态时,填充状态转入交错操作状态;有限状态机状态为列操作状态时,列操作状态转入交错操作状态。在交错操作状态,当通道计数器等于0且行计数器不等于0时,交错操作状态转入行操作状态;当通道计数器等于0,行计数器等于0且列计数器不等于0时,状态转入列操作状态。
对于通道计数器,当下一个状态为行操作或者列操作或者填充操作时重置(Reset),重置初始值为扩张率减1,当下一个状态为交错操作时,计数器开始递减。
对于行计数器,当下一个状态为填充或列操作时重置,重置初始值为卷积核宽减1,当下一个状态为行操作时,计数器开始递减。
对于列计数器,在初始化状态时重置,重置初始值为卷积核高减1,当下一个状态为列操作时,列计数器开始递减。
在本申请实施例执行行列预取时:
当有限状态机的状态为交错操作状态时,行预取寄存器读取预取数据。如果行预取寄存器为处理引擎单元阵列中最右侧的行预取寄存器,则预取数据来自特征图缓冲器;如果行预取寄存器不是处理引擎单元阵列中最右侧的行预取寄存器,则预取数据来自其右侧行相邻的处理引擎单元或预取单元,如果有限状态机上一个状态为行操作或列操作或填充状态,则预取数据来自其右侧行相邻的处理引擎单元,如果有限状态机上一个状态不是行操作或列操作或填充状态,则预取数据来自其右侧行相邻的预取单元。
当有限状态机的状态为交错操作状态,且行计数器为卷积核宽度减1,且列计数器不为0时,列预取寄存器读取预取数据。列预取寄存器的数据来自其下侧列相邻的处理引擎单元或预取单元,如果有限状态机上一个状态为列操作或填充状态,则预取数据来自其下侧列相邻的处理引擎单元,如果有限状态机上一个状态不是列操作或填充状态,则预取数据来自其下侧列相邻的预取单元。
当有限状态机的状态为填充状态时,处理引擎单元读取特征图缓冲器中的图像数据,同时读取卷积核缓冲器中的卷积核数据,并执行计算。当有限状态机的状态为行操作状态时,处理引擎单元读取右侧行相邻的预取单元中的图像数据,同时读取卷积核缓冲器中的卷积核数据,并执行计算。当有限状态机的状态为列操作状态时,处理引擎单元读取下侧列相邻的预取单元中的图像数据,同时读取卷积核缓冲器中的卷积核数据,并执行计算。当有限状态机的状态为交错操作状态时,处理引擎单元使用上一时钟周期的图像数据,仅读取卷积核缓冲器中的卷积核数据,并执行计算。
在本申请实施例执行复杂预取时:
结合图4,当有限状态机的状态为交错操作状态时,且列计数器为卷积核高度减1时,行预取寄存器读取预取数据。如果行预取寄存器为处理引擎单元阵列中最右侧的行预取寄存器,则预取数据来自特征图缓冲器;如果行预取寄存器不是处理引擎单元阵列中最右侧的行预取寄存器,则预取数据来自其右侧行相邻的处理引擎单元或预取单元,如果有限状态机上一个状态为行操作或列操作或填充状态,则预取数据来自其右侧行相邻的处理引擎单元,如果有限状态机上一个状态不是行操作或列操作或填充状态,则预取数据来自其右侧行相邻的预取单元。
当有限状态机的状态为交错操作状态,且列计数器不为0时,列预取寄存器读取预取数据。列预取寄存器的数据来自其下侧列相邻的处理引擎单元或预取单元,如果有限状态机上一个状态为行操作或列操作或填充状态,则预取数据来自其下侧列相邻的处理引擎单元,如果有限状态机上一个状态不是行操作或列操作或填充状态,则预取数据来自其下侧列相邻的预取单元。
当有限状态机的状态为填充状态时,处理引擎单元读取特征图缓冲器中的图像数据,同时读取卷积核缓冲器中的卷积核数据,并执行计算。当有限状态机的状态为行操作状态时,且列计数器为卷积核高度减1时,处理引擎单元读取右侧行相邻的预取单元中的图像数据,同时读取卷积核缓冲器中的卷积核数据,并执行计算。当有限状态机的状态为列操作状态时,或有限状态机的状态为行操作状态且列计数器不为卷积核高度减1时,处理引擎单元读取下侧列相邻的预取单元中的图像数据,同时读取卷积核缓冲器中的卷积核数据,并执行计算。当有限状态机的状态为交错操作状态时,处理引擎单元使用上一时钟周期的图像数据,仅读取卷积核缓冲器中的卷积核数据,并执行计算。
实施例十
本申请实施例提供了一种基于神经网络的处理装置,如图15所示,该处理装置包括由至少一个处理引擎单元以及与处理引擎单元一一对应连接的预取单元组成的处理引擎单元阵列;
预取单元PFx,y1510用于获取预定数据并进行存储,其中,预取单元PFx,y1510为处理引擎单元阵列n*m中的任一预取单元,n、m、x和y为正整数,1≤x≤n,1≤y≤m;
预定的处理引擎单元1520用于从预取单元PFx,y1510获取预定数据进行卷积操作。
可选地,在处理引擎单元阵列中,
预定的处理引擎单元1520为与预取单元PFx,y1510对应连接的处理引擎单元PEx,y;或
预定的处理引擎单元1520为与预取单元PFx,y1510对应连接的处理引擎单元PEx,y相邻的处理引擎单元PEx-1,y或处理引擎单元PEx,y-1。
可选地当预定的处理引擎单元1520为处理引擎单元PEx-1,y或处理引擎单元PEx,y-1时,预取单元PFx,y1510具体用于以下任一情形:
预取单元PFx,y1510从处理引擎单元PEx+1,y获取预定数据并进行存储;
预取单元PFx,y1510从存储器读取预定数据并进行存储。
可选地,第一时钟周期内,处理引擎单元PEx+1,y具体用于对预定数据进行卷积操作;
第二时钟周期内,预取单元PFx,y1510具体用于从处理引擎单元PEx+1,y获取预定数据并进行存储;
第三时钟周期内,处理引擎单元PEx-1,y或处理引擎单元PEx,y-1具体用于从预取单元PFx,y1510获取预定数据进行卷积操作;
其中,第一时钟周期先于第二时钟周期,第二时钟周期先于第三时钟周期,第一时钟周期、第二时钟周期和第三时钟周期为卷积操作的周期。
可选地,当预定的处理引擎单元1520为处理引擎单元PEx-1,y或处理引擎单元PEx,y-1时,预取单元PFx,y1510获具体用于以下任一情形:
预取单元PFx,y1510从处理引擎单元PEx,y+1获取预定数据并进行存储;
预取单元PFx,y1510从存储器读取预定数据并进行存储。
可选地,第一时钟周期内,处理引擎单元PEx,y+1具体用于对预定数据进行卷积操作;
第二时钟周期内,预取单元PFx,y1510具体用于从处理引擎单元PEx,y+1获取预定数据并进行存储;
第三时钟周期内,处理引擎单元PEx-1,y或处理引擎单元PEx,y-1具体用于从预取单元PFx,y1510获取预定数据进行卷积操作;
其中,第一时钟周期先于第二时钟周期,第二时钟周期先于第三时钟周期,第一时钟周期、第二时钟周期和第三时钟周期为卷积操作的周期。
可选地,预取单元PFx-2,y或预取单元PFx-1,y-1用于从处理引擎单元PEx-1,y获取预定数据并进行存储;
处理引擎单元PEx-3,y用于从预取单元PFx-2,y、或处理引擎单元PEx-2,y-1从预取单元PFx-2,y、或处理引擎单元PEx-1,y-2从预取单元PFx-1,y-1、或处理引擎单元PEx-2,y-1从预取单元PFx-1,y-1获取预定数据进行卷积操作;
本申请实施例中,在处理引擎单元阵列中连续执行上述步骤对预定数据进行复用,直至处理引擎单元阵列边缘的处理引擎单元获取预定数据进行卷积操作;
其中,处理引擎单元阵列边缘的处理引擎单元包括以下任一项:
位于处理引擎单元阵列中第一行的处理引擎单元;
位于处理引擎单元阵列中第一列的处理引擎单元;
位于处理引擎单元阵列中第二行的处理引擎单元;
位于处理引擎单元阵列中第二列的处理引擎单元。
可选地,预取单元PFx-1,y-1或预取单元PFx,y-2用于从处理引擎单元PEx,y-1获取预定数据并进行存储;
处理引擎单元PEx-2,y-1用于从预取单元PFx-1,y-1、或处理引擎单元PEx-1,y-2从预取单元PFx-1,y-1、或处理引擎单元PEx,y-3从预取单元PFx,y-2、或处理引擎单元PEx-1,y-2从预取单元PFx,y-2获取预定数据进行卷积操作;
本申请实施例中,在处理引擎单元阵列中连续执行上述步骤对预定数据进行复用,直至处理引擎单元阵列边缘的处理引擎单元获取预定数据进行卷积操作;
其中,处理引擎单元阵列边缘的处理引擎单元包括以下任一项:
位于处理引擎单元阵列中第一行的处理引擎单元;
位于处理引擎单元阵列中第一列的处理引擎单元;
位于处理引擎单元阵列中第二行的处理引擎单元;
位于处理引擎单元阵列中第二列的处理引擎单元。
可选地,第四时钟周期内,预取单元PFx,y1510具体用于从存储器读取预定数据并进行存储;
第五时钟周期内,处理引擎单元PEx-1,y或处理引擎单元PEx,y-1用于从预取单元PFx,y1510获取预定数据进行卷积操作;
其中,第四时钟周期先于第五时钟周期,第四时钟周期和第五时钟周期为卷积操作的周期。
可选地,当预定的处理引擎单元1520为处理引擎单元PEx,y时,预取单元PFx,y1510具体用于从存储器读取预定数据并进行存储;
可选地,第六时钟周期内,预取单元PFx,y1510具体用于从存储器读取预定数据并进行存储;
第七时钟周期内,处理引擎单元PEx,y具体用于从预取单元PFx,y1510获取预定数据进行卷积操作;
其中,第六时钟周期为先于第七时钟周期的卷积操作周期;或者,
第六时钟周期为卷积操作前的预定前置周期。
可选地,本申请实施例提供的神经网络处理器包括与处理引擎单元一一对应连接的子预取控制器,以及与各个子预取控制器相连的主预取控制器;
子预取控制器用于接收主预取控制器的指令;
预取单元PFx,y1510具体用于根据子预取控制器接收到的指令获取预定数据并进行存储;和/或,
预定的处理引擎单元1520具体用于根据子预取控制器接收到的指令从预取单元PFx,y1510获取预定数据进行卷积操作。
可选地,子预取控制器接收的主预取控制器的指令中包含用于指示卷积类型和/或预取模式的域;
预取单元PFx,y1510具体用于根据子预取控制器从接收到的指令的对应的域中确定的卷积类型和/或预取模式,获取预定数据并进行存储;和/或,
预定的处理引擎单元1520具体用于根据子预取控制器从接收到的指令的对应的域中确定的卷积类型和/或预取模式,从预取单元PFx,y获取预定数据进行卷积操作。
本申请实施例所提供的基于神经网络的处理装置,可以为神经网络处理器、神经网络处理器上的特定硬件或者基于神经网络处理器运行的软件或固件等,也可以为神经网络处理器所在的芯片、神经网络处理器所在的芯片上的特定硬件或者基于该芯片运行的软件或固件等,还可以是神经网络处理器所在电子设备,例如,手机、AR设备、VR设备、或MR设备等,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,设备实施例部分未提及之处,可参考前述方法实施例中相应内容,在此不再赘述。
本申请实施例提供的基于神经网络的处理装置,采用引入预取单元,通过预取单元获取预定数据并进行存储;通过预定的处理引擎单元从预取单元获取预定数据进行卷积操作,使得卷积操作过程中,神经网络处理器中的大部分处理引擎单元无需直接从外部存储器重新读取数据,从而降低对存储器带宽的要求,并达到减少神经网络处理器能量消耗的目的。
本申请实施例还提供了一种电子设备,其包括:处理器和存储器,存储器存储有至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现实施例一至实施例九任一实施例所示的方法。
需要说明的是,实际应用中,该电子设备的结构并不构成对本申请实施例的限定。
其中,处理器可以是CPU,通用处理器,DSP,ASIC,FPGA或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
存储器可以是ROM或可存储静态信息和指令的其他类型的静态存储设备,RAM或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM、CD-ROM或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
本申请实施例还提供了一种计算机可读存储介质,该计算机存储介质用于存储计算机指令,当其在计算机上运行时,使得计算机可以执行实施例一至实施例九任一实施例所示的方法。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述仅是本申请的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (15)
1.一种基于神经网络处理器执行卷积操作的方法,其特征在于,所述神经网络处理器包括由至少一个处理引擎单元以及与处理引擎单元一一对应连接的预取单元组成的处理引擎单元阵列;所述方法包括:
通过预取单元PFx,y获取预定数据,并将获取到的预定数据存储至预取单元PFx,y,其中,预取单元PFx,y为处理引擎单元阵列n*m中的任一预取单元,n、m、x和y为正整数,1≤x≤n,1≤y≤m;
通过预定的处理引擎单元从预取单元PFx,y获取所述预定数据进行卷积操作。
2.根据权利要求1所述的方法,其特征在于,在处理引擎单元阵列中,
所述预定的处理引擎单元为与预取单元PFx,y对应连接的处理引擎单元PEx,y;或
所述预定的处理引擎单元为与预取单元PFx,y对应连接的处理引擎单元PEx,y相邻的处理引擎单元PEx-1,y或处理引擎单元PEx,y-1。
3.根据权利要求2所述的方法,其特征在于,当预定的处理引擎单元为处理引擎单元PEx-1,y或处理引擎单元PEx,y-1时,通过预取单元PFx,y获取预定数据,包括以下任一情形:
通过预取单元PFx,y从处理引擎单元PEx+1,y获取预定数据;
通过预取单元PFx,y从处理引擎单元PEx,y+1获取预定数据;
通过预取单元PFx,y从存储器读取预定数据。
4.根据权利要求3所述的方法,其特征在于,通过预取单元PFx,y从处理引擎单元PEx+1,y获取预定数据,并将获取到的预定数据存储至预取单元PFx,y之前,包括:
第一时钟周期内,通过处理引擎单元PEx+1,y对预定数据进行卷积操作;
通过预取单元PFx,y从处理引擎单元PEx+1,y获取预定数据,并将获取到的预定数据存储至预取单元PFx,y,包括:
第二时钟周期内,通过预取单元PFx,y从处理引擎单元PEx+1,y获取预定数据,并将获取到的预定数据存储至预取单元PFx,y;
通过处理引擎单元PEx-1,y或通过处理引擎单元PEx,y-1从预取单元PFx,y获取所述预定数据进行卷积操作,包括:
第三时钟周期内,通过处理引擎单元PEx-1,y或通过处理引擎单元PEx,y-1从预取单元PFx,y获取所述预定数据进行卷积操作;
其中,第一时钟周期先于第二时钟周期,第二时钟周期先于第三时钟周期,第一时钟周期、第二时钟周期和第三时钟周期为卷积操作的周期。
5.根据权利要求3所述的方法,其特征在于,通过预取单元PFx,y从处理引擎单元PEx,y+1获取预定数据,并将获取到的预定数据存储至预取单元PFx,y之前,包括:
第一时钟周期内,通过处理引擎单元PEx,y+1对预定数据进行卷积操作;
通过预取单元PFx,y从处理引擎单元PEx,y+1获取预定数据,并将获取到的预定数据存储至预取单元PFx,y,包括:
第二时钟周期内,通过预取单元PFx,y从处理引擎单元PEx,y+1获取预定数据,并将获取到的预定数据存储至预取单元PFx,y;
通过处理引擎单元PEx-1,y或通过处理引擎单元PEx,y-1从预取单元PFx,y获取所述预定数据进行卷积操作,包括:
第三时钟周期内,通过处理引擎单元PEx-1,y或通过处理引擎单元PEx,y-1从预取单元PFx,y获取所述预定数据进行卷积操作;
其中,第一时钟周期先于第二时钟周期,第二时钟周期先于第三时钟周期,第一时钟周期、第二时钟周期和第三时钟周期为卷积操作的周期。
6.根据权利要求4或5所述的方法,其特征在于,还包括:
通过预取单元PFx-2,y从处理引擎单元PEx-1,y获取预定数据,并将获取到的预定数据存储至预取单元PFx-2,y,或通过预预取单元PFx-1,y-1从处理引擎单元PEx-1,y获取预定数据,并将获取到的预定数据存储至预取单元PFx-1,y-1;
通过处理引擎单元PEx-3,y从预取单元PFx-2,y、或通过处理引擎单元PEx-2,y-1从预取单元PFx-2,y、或通过处理引擎单元PEx-1,y-2从预取单元PFx-1,y-1、或通过处理引擎单元PEx-2,y-1从预取单元PFx-1,y-1获取所述预定数据进行卷积操作;
通过处理引擎单元阵列连续执行上述步骤对预定数据进行复用,直至通过处理引擎单元阵列边缘的处理引擎单元获取所述预定数据进行卷积操作;
其中,处理引擎单元阵列边缘的处理引擎单元包括以下任一项:
位于处理引擎单元阵列中第一行的处理引擎单元;
位于处理引擎单元阵列中第一列的处理引擎单元;
位于处理引擎单元阵列中第二行的处理引擎单元;
位于处理引擎单元阵列中第二列的处理引擎单元。
7.根据权利要求4或5所述的方法,其特征在于,还包括:
通过预取单元PFx-1,y-1从处理引擎单元PEx,y-1获取预定数据,并将获取到的预定数据存储至预取单元PFx-1,y-1,或通过预取单元PFx,y-2从处理引擎单元PEx,y-1获取预定数据,并将获取到的预定数据存储至预取单元PFx,y-2;
通过处理引擎单元PEx-2,y-1从预取单元PFx-1,y-1、或通过处理引擎单元PEx-1,y-2从预取单元PFx-1,y-1、或通过处理引擎单元PEx,y-3从预取单元PFx,y-2、或通过处理引擎单元PEx-1,y-2从预取单元PFx,y-2获取所述预定数据进行卷积操作;
通过处理引擎单元阵列连续执行上述步骤对预定数据进行复用,直至通过处理引擎单元阵列边缘的处理引擎单元获取所述预定数据进行卷积操作;
其中,处理引擎单元阵列边缘的处理引擎单元包括以下任一项:
位于处理引擎单元阵列中第一行的处理引擎单元;
位于处理引擎单元阵列中第一列的处理引擎单元;
位于处理引擎单元阵列中第二行的处理引擎单元;
位于处理引擎单元阵列中第二列的处理引擎单元。
8.根据权利要求3所述的方法,其特征在于,通过预取单元PFx,y从存储器读取预定数据,并将获取到的预定数据存储至预取单元PFx,y,包括:
第四时钟周期内,通过预取单元PFx,y从存储器读取预定数据,并将获取到的预定数据存储至预取单元PFx,y;
通过预定的处理引擎单元从预取单元PFx,y获取所述预定数据进行卷积操作,包括:
第五时钟周期内,通过处理引擎单元PEx-1,y或通过处理引擎单元PEx,y-1从预取单元PFx,y获取所述预定数据进行卷积操作;
其中,第四时钟周期先于第五时钟周期,第四时钟周期和第五时钟周期为卷积操作的周期。
9.根据权利要求2所述的方法,其特征在于,当预定的处理引擎单元为处理引擎单元PEx,y时,通过预取单元PFx,y获取预定数据,包括:
通过预取单元PFx,y从存储器读取预定数据。
10.根据权利要求9所述的方法,其特征在于,通过预取单元PFx,y从存储器读取预定数据,并将获取到的预定数据存储至预取单元PFx,y,包括:
第六时钟周期内,通过预取单元PFx,y从存储器读取预定数据,并将获取到的预定数据存储至预取单元PFx,y;
通过处理引擎单元PEx,y从预取单元PFx,y获取所述预定数据进行卷积操作,包括:
第七时钟周期内,通过处理引擎单元PEx,y从预取单元PFx,y获取所述预定数据进行卷积操作;
其中,第六时钟周期为先于第七时钟周期的卷积操作周期;或者,
第六时钟周期为卷积操作前的预定前置周期。
11.根据权利要求1-10任一项所述的方法,其特征在于,所述神经网络处理器包括与处理引擎单元一一对应连接的子预取控制器,以及与各个子预取控制器相连的主预取控制器;所述方法还包括:
通过子预取控制器接收主预取控制器的指令;
通过预取单元PFx,y获取预定数据,并将获取到的预定数据存储至预取单元PFx,y,包括:
通过预取单元PFx,y根据子预取控制器接收到的所述指令获取预定数据,并将获取到的预定数据存储至预取单元PFx,y;和/或,
通过预定的处理引擎单元从预取单元PFx,y获取所述预定数据进行卷积操作,包括:
通过预定的处理引擎单元根据子预取控制器接收到的所述指令从预取单元PFx,y获取所述预定数据进行卷积操作。
12.根据权利要求11所述的方法,其特征在于,子预取控制器接收的主预取控制器的指令中包含用于指示卷积类型和/或预取模式的域;
所述通过预取单元PFx,y根据子预取控制器接收到的所述指令获取预定数据,并将获取到的预定数据存储至预取单元PFx,y,包括:
通过预取单元PFx,y根据子预取控制器从接收到的所述指令的对应的域中确定的卷积类型和/或预取模式,获取预定数据,并将获取到的预定数据存储至预取单元PFx,y;和/或,
所述通过预定的处理引擎单元根据子预取控制器接收到的所述指令从预取单元PFx,y获取所述预定数据进行卷积操作,包括:
通过预定的处理引擎单元根据子预取控制器从接收到的所述指令的对应的域中确定的卷积类型和/或预取模式,从预取单元PFx,y获取所述预定数据进行卷积操作。
13.一种基于神经网络的处理装置,其特征在于,所述处理装置包括由至少一个处理引擎单元以及与处理引擎单元一一对应连接的预取单元组成的处理引擎单元阵列;
预取单元PFx,y用于获取预定数据并进行存储,其中,预取单元PFx,y为处理引擎单元阵列n*m中的任一预取单元,n、m、x和y为正整数,1≤x≤n,1≤y≤m;
预定的处理引擎单元用于从预取单元PFx,y获取所述预定数据进行卷积操作。
14.一种电子设备,其特征在于,其包括:
处理器和存储器,所述存储器存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1-12任一所述的方法。
15.一种计算机可读存储介质,其特征在于,所述计算机存储介质用于存储计算机指令,当其在计算机上运行时,使得计算机可以执行上述权利要求1-12中任一项所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810542215 | 2018-05-30 | ||
CN2018105422154 | 2018-05-30 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110555520A true CN110555520A (zh) | 2019-12-10 |
Family
ID=68736210
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810847533.1A Pending CN110555520A (zh) | 2018-05-30 | 2018-07-27 | 执行卷积操作的方法、相应的处理装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110555520A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113379047A (zh) * | 2021-05-25 | 2021-09-10 | 北京微芯智通科技合伙企业(有限合伙) | 一种实现卷积神经网络处理的系统及方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833422A (zh) * | 2010-03-08 | 2010-09-15 | 成都市华为赛门铁克科技有限公司 | 磁盘阵列的数据处理方法及设备 |
US20150019840A1 (en) * | 2013-07-15 | 2015-01-15 | Texas Instruments Incorporated | Highly Integrated Scalable, Flexible DSP Megamodule Architecture |
CN104484471A (zh) * | 2014-12-31 | 2015-04-01 | 天津南大通用数据技术股份有限公司 | 一种高性能数据存储引擎的实现方法 |
CN104915322A (zh) * | 2015-06-09 | 2015-09-16 | 中国人民解放军国防科学技术大学 | 一种卷积神经网络硬件加速方法及其axi总线ip核 |
CN105242909A (zh) * | 2015-11-24 | 2016-01-13 | 无锡江南计算技术研究所 | 一种基于多版本代码生成的众核循环分块方法 |
US20160188337A1 (en) * | 2014-12-27 | 2016-06-30 | Intel Corporation | Hardware apparatuses and methods to prefetch a multidimensional block of elements from a multimensional array |
CN107066239A (zh) * | 2017-03-01 | 2017-08-18 | 智擎信息系统(上海)有限公司 | 一种实现卷积神经网络前向计算的硬件结构 |
-
2018
- 2018-07-27 CN CN201810847533.1A patent/CN110555520A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833422A (zh) * | 2010-03-08 | 2010-09-15 | 成都市华为赛门铁克科技有限公司 | 磁盘阵列的数据处理方法及设备 |
US20150019840A1 (en) * | 2013-07-15 | 2015-01-15 | Texas Instruments Incorporated | Highly Integrated Scalable, Flexible DSP Megamodule Architecture |
US20160188337A1 (en) * | 2014-12-27 | 2016-06-30 | Intel Corporation | Hardware apparatuses and methods to prefetch a multidimensional block of elements from a multimensional array |
CN104484471A (zh) * | 2014-12-31 | 2015-04-01 | 天津南大通用数据技术股份有限公司 | 一种高性能数据存储引擎的实现方法 |
CN104915322A (zh) * | 2015-06-09 | 2015-09-16 | 中国人民解放军国防科学技术大学 | 一种卷积神经网络硬件加速方法及其axi总线ip核 |
CN105242909A (zh) * | 2015-11-24 | 2016-01-13 | 无锡江南计算技术研究所 | 一种基于多版本代码生成的众核循环分块方法 |
CN107066239A (zh) * | 2017-03-01 | 2017-08-18 | 智擎信息系统(上海)有限公司 | 一种实现卷积神经网络前向计算的硬件结构 |
Non-Patent Citations (4)
Title |
---|
EIMAN EBRAHIMI ET AL.: "Coordinated control of multiple prefetchers in multi-core systems", 《2009 42ND ANNUAL IEEE/ACM INTERNATIONAL SYMPOSIUM ON MICROARCHITECTURE (MICRO)》, pages 316 - 326 * |
WENXIN QU ET AL.: "Memory system prefetching for multi-core and Multi-Threading architecture", 《2010 3RD INTERNATIONAL CONFERENCE ON ADVANCED COMPUTER THEORY AND ENGINEERING(ICACTE)》, pages 526 - 530 * |
张军阳等: "二维矩阵卷积的并行计算方法", 《浙江大学学报(工学版)》, vol. 52, no. 03, pages 515 - 523 * |
阎强: "卷积神经网络处理器的设计与实现", 《中国优秀硕士学位论文全文数据库信息科技辑》, no. 02, pages 140 - 170 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113379047A (zh) * | 2021-05-25 | 2021-09-10 | 北京微芯智通科技合伙企业(有限合伙) | 一种实现卷积神经网络处理的系统及方法 |
CN113379047B (zh) * | 2021-05-25 | 2024-04-05 | 北京微芯智通科技合伙企业(有限合伙) | 一种实现卷积神经网络处理的系统及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108171317B (zh) | 一种基于soc的数据复用卷积神经网络加速器 | |
CN107657581B (zh) | 一种卷积神经网络cnn硬件加速器及加速方法 | |
KR102492477B1 (ko) | 행렬 곱셈기 | |
KR101474478B1 (ko) | 로컬 및 글로벌 데이터 공유 | |
CN110738316B (zh) | 基于神经网络的操作方法、装置及电子设备 | |
CN111310904A (zh) | 一种用于执行卷积神经网络训练的装置和方法 | |
US11734788B2 (en) | Task execution in a SIMD processing unit with parallel groups of processing lanes | |
CN102509071B (zh) | 光流计算系统和方法 | |
CA2929403C (en) | Multi-dimensional sliding window operation for a vector processor | |
WO2019184888A1 (zh) | 一种基于卷积神经网络的图像处理的方法和装置 | |
CN113222130A (zh) | 一种基于fpga的可重构卷积神经网络加速器 | |
CN109146065A (zh) | 二维数据的卷积运算方法及装置 | |
EP3217289A2 (en) | System and method for preventing cache contention | |
CN114461978B (zh) | 数据处理方法、装置、电子设备及可读存储介质 | |
CN110555520A (zh) | 执行卷积操作的方法、相应的处理装置及电子设备 | |
CN115878188B (zh) | 一种基于sve指令集的池化层函数的高性能实现方法 | |
CN112905526B (zh) | 一种多种类型卷积的fpga实现方法 | |
CN112433773B (zh) | 可重构处理器的配置信息记录方法及装置 | |
CN111860772B (zh) | 一种用于执行人工神经网络pooling运算的装置和方法 | |
CN101370143B (zh) | 图像的运动估计方法及装置 | |
CN117291240B (zh) | 卷积神经网络加速器及电子设备 | |
CN112860597A (zh) | 一种神经网络运算的系统、方法、装置及存储介质 | |
US20230252600A1 (en) | Image size adjustment structure, adjustment method, and image scaling method and device based on streaming architecture | |
CN109427071A (zh) | 一种全搜索块匹配方法和装置 | |
CN112256431B (zh) | 代价聚合方法及装置、存储介质、终端 |
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 |