CN113269298A - 卷积神经网络运算装置及其运算的方法 - Google Patents

卷积神经网络运算装置及其运算的方法 Download PDF

Info

Publication number
CN113269298A
CN113269298A CN202010160647.6A CN202010160647A CN113269298A CN 113269298 A CN113269298 A CN 113269298A CN 202010160647 A CN202010160647 A CN 202010160647A CN 113269298 A CN113269298 A CN 113269298A
Authority
CN
China
Prior art keywords
convolution
data
output
value
sub
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
Application number
CN202010160647.6A
Other languages
English (en)
Inventor
张国强
罗贤君
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Industrial Technology Research Institute ITRI
Original Assignee
Industrial Technology Research Institute ITRI
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Industrial Technology Research Institute ITRI filed Critical Industrial Technology Research Institute ITRI
Publication of CN113269298A publication Critical patent/CN113269298A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Neurology (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)
  • Error Detection And Correction (AREA)

Abstract

一种卷积神经网络运算装置,包括双向运算模组及数据调度器。双向运算模组包括多个双向输出运算器、多个行输出累加器、及多个列输出累加器。双向输出运算器各具有行输出端口与列输出端口。这些行输出累加器是耦接到这些行输出端口,这些列输出累加器是耦接到对应的这些列输出端口。数据调度器用以提供输入数据的多个数值和多个卷积核的多个卷积数值至这些双向输出运算器。在第一运算模式时,这些双向输出运算器通过这些列输出端口,输出运算结果至对应的这些列输出累加器。在第二运算模式时,这些双向输出运算器通过这些行输出端口输出运算结果至这些行输出累加器。

Description

卷积神经网络运算装置及其运算的方法
技术领域
本公开是有关于一种卷积神经网络运算装置及运用此运算装置执行卷积神经网络运算的方法。
背景技术
CNN模型的运算,几乎以卷积运算的运算量和传输数据量来决定运算的时间。近年发展的趋势在追求精准以外,亦要降低卷积运算的运算量与数据传输量。CNN运算同时具备高平行度与高相依性这两种矛盾但是又实际上共存的特性,如何在硬件中加速上述的CNN模型运算量,乃是本领域的重要课题。
CNN运算有六个维度,包括输入的长、宽、与通道,以及卷积权重核心参数(亦即“卷积核”)的长、宽、与通道。高“平行度”发生在输入的通道方向的数据和卷积核的通道方向的数据的乘法运算,此乘法运算需要大量的平行化的乘法与加法阵列来进行处理。而高“相依性”则发生在输入的长与宽的方向的数据,和卷积核的长与宽的方向的数据的乘法运算;此乘法运算则需要设计特殊的数据输入顺序,以运用平行的乘法与加法阵列来进行处理。
然而,重要的各种CNN模型各有其特色,使得高效率的操作难以达成。第一种情况是,当需处理通道维度不同的运算时,会造成运算装置设计效能不佳。例如,Resnet和MobileNet这两种模型,Resnet具备很深(64~2048)的通道数量,但是MobileNet同时具备很深(例如64~512)的通道数量和很浅(例如1)的通道数量,且MobileNet浅通道运算方法(depth-wise)与传统卷积运算不同。传统卷积运算输入与输出的深度维度无相关,而depth-wise卷积运算输入与输出的深度维度须相同。这两种CNN模型使用的卷积核的尺寸具有3x3和1x1两种型态。
对于浅的通道数量而言,在公知设计架构中,会使用3x3=9个乘法器作为单位阵列,来加速长宽为3x3的卷积核的处理。这样的架构适合浅的通道数量的运算处理,但是遇到深的通道数量和1x1的卷积核时,则会有使用率不佳的问题。对于深的通道数量而言,在公知设计架构中,是使用32~64个乘法器来处理深的通道数量的乘法和累加计算。但是这样的架构于浅的通道数量的相关运算中,使用率将会不佳。
另一种情况是卷积核的长与宽的维度不同,而造成运算装置设计效能不佳。以上述的Resnet、MobileNet这两个模型来对比Inception模型,Resnet、MobileNet的卷积核长宽具有1x1和3x3两种类型,但是Inception模型则有多种不同卷积核长宽,包含1x7、7x1、1x3、3x1等。
对于包含1x7、7x1、1x3、3x1等卷积核类型来说,公知设计架构是使用3x3=9个乘法器作为单位阵列,来加速长宽为3x3的卷积核的运算处理。这样的架构适合于3x3的卷积核,但是遇到1x7、7x1、1x3、3x1等的卷积核时,则有使用率不佳的问题。
因此,如何规划CNN运算硬件运算装置架构,能于深与浅不同的通道数量、长与宽不同的卷积核的卷积运算中,均能得到良好的硬件使用效率,是重要的议题。
发明内容
根据本公开的第一方面,提出一种卷积神经网络运算装置,包括双向运算模组与数据调度器。双向运算模组包括多个双向输出运算器、多个行输出累加器、及多个列输出累加器。双向输出运算器各具有行输出端口与列输出端口。这些行输出累加器是耦接到这些行输出端口。这些列输出累加器是耦接到对应的这些列输出端口。数据调度器用以提供输入数据的多个数据数值和多个卷积核的多个卷积数值至这些双向输出运算器。其中,在第一运算模式时,这些双向输出运算器通过这些列输出端口输出运算结果至对应的这些列输出累加器。在第二运算模式时,这些双向输出运算器通过这些行输出端口输出运算结果至这些行输出累加器。
根据本公开的另一方面,提出一种执行卷积神经网络运算的方法,包括下列步骤。提供双向运算模组,双向运算模组包括多个双向输出运算器、多个行输出累加器、及多个列输出累加器。这些双向输出运算器各具有行输出端口与列输出端口。这些行输出累加器是耦接到这些行输出端口。这些列输出累加器是耦接到对应的这些列输出端口。通过数据调度器提供输入数据的多个数据数值和多个卷积核的多个卷积数值至这些双向输出运算器。在第一运算模式时,这些双向输出运算器通过这些列输出端口输出运算结果至对应的这些列输出累加器。在第二运算模式时,这些双向输出运算器通过这些行输出端口输出运算结果至这些行输出累加器。
为了对本公开的上述及其他方面有更佳的了解,下文特举实施例,并配合附图详细说明如下:
附图说明
图1示出一种卷积神经网络运算装置处理深与浅维度卷积时的示意图。
图2A示出本公开实施例的卷积神经网络运算装置方块图。
图2B示出图2A的卷积神经网络运算装置的详细实施方式的示例的方块图。
图3示出图2A中运算装置的双向运算模组的方块图。
图4示出图2A中运算装置的单向运算模组的方块图。
图5A~5B示出图2A中本公开实施例执行卷积运算的详细流程图。
图6A~6C示出本公开实施例执行浅维度卷积运算的示意图。
图7A~7E图示出本公开实施例执行深维度卷积运算的示意图。
图8A示出本公开另一实施例的卷积神经网络运算装置方块图。
图8B示出图8A的卷积神经网络运算装置的详细实施方式的示例的方块图。
图9A示出本公开又一实施例的卷积神经网络运算装置方块图。
图9B示出图9A的卷积神经网络运算装置的详细实施方式的示例的方块图。
具体实施方式
以表一所示的MobileNet CNN模型运算为例,此模型包含下列顺序排列的不同深度卷积运算,此模型特色之一是深维度卷积运算和浅维度卷积运算是交错进行的。如表一所示,第1、3、5、7、9、11和13层等奇数层卷积运算的深度KC分别是32、64、128、128、256、256和512层,而第2、4、6、8、10、12层等偶数层卷积运算的深度都是1层(depth-wise,DW),且运算方法与传统卷积运算不同,传统卷积运算输入与输出的深度维度无相关,而depth-wise卷积运算输入与输出的深度维度须相同。
Figure BDA0002405652320000041
表一MobileNet模型卷积运算层级
请参照图1,其示出一种公知卷积神经网络运算装置的架构示意方块图,包括数据调度器101与运算模组阵列103。运算模组阵列103具有多个单向运算模组105,每个单向运算模组105是包含多个单向输出乘法器。兹以运算模组阵列103具有8个单向运算模组105,每个单向运算模组105是包含8个单向输出乘法器P1为例做说明,则运算模组阵列103总共包含64个乘法器P1(1)~P1(64)。当进行公知卷积运算,例如MobileNet第三层时,数据调度器会给予每一列的乘法器,相同的8个输入数据IM数值,依照深度维度排列,即P1(1)=P1(9)=…=P1(57),P1(2)=P1(10)…=P1(58),…,P1(8)=P1(16)=…P1(64);同时,数据调度器会给予每一列的乘法器,不同的8个卷积核KR、每个卷积核有8个数值,依照深度维度排列,所以共有64个数值。以上行为即是共用输入数据IM,计算8个不同卷积核KR的结果。另一方面,当进行MobileNet第二层深度为1的浅维度(depth-wise)卷积运算时,因为对于输入数据深度维度数据须分离,且输入数据不可共用,即P1(1)≠P1(9)≠…≠P1(57),不同在公知卷积运算对于输入数据深度维度数据须加和,故使用公知的数据调度器时和卷积神经网络运算装置的架构时,在第一个时钟周期中,每一个单向运算模组105的8个乘法器中,只有P1(1)一个乘法器能被分配到卷积运算工作,另外63个乘法器保持闲置。在第二个时钟周期中,仍然只有P1(1)乘法器会被分配到卷积运算工作,另外63个乘法器保持闲置。以此类推,显示此种卷积神经网络运算装置在进行具有大量的浅维度(depth-wise)卷积运算的CNN模型运算时(例如:MobileNet模型),其运算装置的乘法器硬件使用效率会大幅降低,如此会显著地增加完成浅维度CNN运算所需时间。
考量避免闲置硬件与增加运算效率的问题,本公开的实施例提出一种卷积神经网络(Convolutional Neural Network)运算装置。卷积神经网络运算装置包括双向运算模组(Operation Module)与数据调度器(Data Scheduler)。双向运算模组包括多个双向输出运算器、多个行输出累加器、及多个列输出累加器。这些双向输出运算器各具有行输出端口与列输出端口。这些行输出累加器是耦接到这些行输出端口。这些列输出累加器是耦接到对应的这些列输出端口。数据调度器用以提供输入数据(例如是输入图像(Image))的多个数据数值(例如是多个图像数值)和多个卷积核(Kernel)的多个卷积数值至这些双向输出运算器。其中,在第一运算模式时,数据调度器给予该第一种运算模式所需的数据顺序,使这些双向输出运算器通过这些列输出端口输出运算结果至对应的这些列输出累加器,处理浅维度(depth-wise)卷积运算。在第二运算模式时,数据调度器给予该第二种运算模式所需的数据顺序,使这些双向输出运算器通过这些行输出端口输出运算结果至对应的这些行输出累加器,处理深维度卷积运算。
依照本公开的实施例,更提出一种执行卷积神经网络运算的方法,包括下列步骤。第一步骤,从卷积运算维度参数决定使用第一运算模式或第二运算模式;第二步骤,分别将上述卷积运算维度参数给予数据调度器;第三步骤,由数据调度器传输数据给双向运算模组中的双向输出运算器。在第一运算模式时,这些双向输出运算器通过这些列输出端口输出运算结果至对应的这些列输出累加器。在第二运算模式时,这些双向输出运算器通过这些行输出端口输出运算结果至这些行输出累加器。
上述的这些双向输出运算器例如包括MR个双向输出乘法器P2(1)~P2(MR)。这些列输出累加器包括MR个列输出累加器ACC(1)~ACC(MR)。当卷积神经网络运算装置设定在第一运算模式时,MR个双向输出乘法器中的第i个双向输出乘法器P2(i)在第一时钟周期内输出第一子卷积运算结果,在第二时钟周期内输出第二子卷积运算结果。第i个列输出累加器ACC(i)加和第一子卷积运算结果和第二子卷积运算结果。兹进一步详细说明如下。
请参照图2A,是示出本公开实施例的卷积神经网络运算装置的方块图。此卷积神经网络运算装置可依据多个卷积核KR,对输入数据IM执行卷积神经网络运算。卷积神经网络运算装置200包括数据调度器203与运算模组阵列205。运算模组阵列205具有MC个运算模组,MC为正整数,代表每列的乘法器数目(Multiplier Per Column)。MC个运算模组至少包含双向运算模组209(Bidirectional Operation Module)。每个双向运算模组209是包含MR个双向输出乘法器(Bidirectional Multiplier),每个单向运算模组207(UnidirectionalOperation Module)是包含MR个单向输出乘法器(Unidirectional Multiplier),MR为正整数,MR代表每行的乘法器数目(Multiplier Per Row)。如图2A所示,在本实施例中,是以MC=8,MR=8为例做说明,然本实施例不限于此。运算模组阵列205具有8个运算模组,例如第1个至第7个运算模组均为单向运算模组207,第8个运算模组则为双向运算模组209。在本实施例中,是以一个运算模组为双向运算模组209为例做说明,然本实施例不限于此。第1个单向运算模组207包含8个单向输出乘法器P1(1)~P1(8),第2个单向运算模组207包含8个单向输出乘法器P1(9)~P1(16),以此类推,第7个单向运算模组207包含8个单向输出乘法器P1(49)~P1(56),第8行的双向运算模组209包含8个双向输出乘法器P2(1)~P2(8)。
当数据调度器203接收输入数据IM和多个卷积核KR后,可依据不同运算模式,将输入数据IM的多个数据数值和这些卷积核KR的多个卷积数值,输出分配给8个运算模组以进行卷积运算。如图2A所示,当运算装置设定在第一运算模式时,可从列输出累加器ACC(1)~ACC(8)得到第一卷积结果RSTA(1)~RSTA(8)。当运算装置设定在第二运算模式时,可自行输出累加器ACR(1)~ACR(8)得到第二卷积结果RSTB(1)~RSTB(8)。其中,同一列的输出乘法器所接收的输入数据IM的数据数值例如为相同。
请参照图2B,是示出图2A的卷积神经网络运算装置的详细实施方式的示例的方块图。数据调度器203是可由多种方式实施。例如,数据调度器203可包括数据维度判断与控制单元202、第一维度数据流控制数据调度单元(例如是浅维度数据流控制数据调度单元204)、第二维度数据流控制数据调度单元(例如是深维度数据流控制数据调度单元206)、多工器208及数据馈入单元210。浅维度数据流控制数据调度单元204是受控于数据维度判断与控制单元202,并在第一运算模式(例如是浅维度运算模式)下根据输入数据的多个数据数值和多个卷积核的多个卷积数值输出对应的第一数据数值数据流与第一卷积数值数据流。深维度数据流控制数据调度单元206是受控于数据维度判断与控制单元202,并在第二运算模式(例如是深维度运算模式)下根据输入数据IM的多个数据数值和多个卷积核的多个卷积数值输出对应的第二数据数值数据流与第二卷积数值数据流。多工器208是与浅维度数据流控制数据调度单元204与深维度数据流控制数据调度单元206耦接,用以在第一运算模式下输出第一数据数值数据流与第一卷积数值数据流,并在第二运算模式下输出第二数据数值数据流与第二卷积数值数据流。而数据馈入单元210则是与多工器208耦接,用以在第一运算模式下输出第一数据数值数据流与第一卷积数值数据流至多个双向输出乘法器P2(例如是双向输出乘法器P2(1)~P2(8)),并在第二运算模式下输出第二数据数值数据流与第二卷积数值数据流至多个双向输出乘法器P2(例如是双向输出乘法器P2(1)~P2(8))。数据调度器203还可包括数据馈入单元212。数据馈入单元212则在第二运算模式(例如是深维度运算模式)下根据输入数据的多个数据数值和多个卷积核的多个卷积数值,输出适用于7行的单向输出乘法器P1的数据数值数据流与卷积数值数据流至7行的单向输出乘法器P1。
请参照图3,是示出图2A中运算装置中的第8个运算模组,亦即双向运算模组209的示例的详细方块图。双向运算模组209包含MR个双向输出乘法器P2(1)~P2(MR)、行输出累加器ACR(m)、和MR个列输出累加器ACC(1)~ACC(MR),m为介于1~MC的正整数。在本实施例中是以MR=8,m=8为例来做说明,然本实施例不限于此。在本实施例中,双向运算模组209有行输出累加器ACR(8)、8个列输出累加器ACC(1)~ACC(8)和8个双向输出乘法器P2(1)~P2(8)。8个双向输出乘法器P2(1)~P2(8)各别具有行输出端口25与列输出端口27。
如图3所示,行输出累加器ACR(8)耦接至8个双向输出乘法器P2(1)~P2(8)的8个行输出端口25。当进行卷积运算时,行输出累加器ACR(8)可先加和第一时钟周期内的8个双向输出乘法器P2(1)~P2(8)的乘法运算所得到的8个子乘积,并将此总和作为原始第二卷积结果RSTB(8)。之后,再把下一个时钟周期的8个双向输出乘法器P2(1)~P2(8)的乘法运算所得到的8个子乘积进行加和,并将此加和后的总和与原始第二卷积结果RSTB(8)相加,以得到更新后的第二卷积结果RSTB(8)。之后的多个时钟周期内是重复上述的将8个子乘积加和,并将此总和与更新后的第二卷积结果RSTB(8)相加,以得到再次更新后的第二卷积结果RSTB(8)。8个列输出累加器ACC(1)~ACC(8)各别耦接到对应的8个双向输出乘法器P2(1)~P2(8)的8个列输出端口27其中之一。以第1个列输出累加器ACC(1)为例来做说明,列输出累加器ACC(1)是耦接到双向输出乘法器P2(1)的列输出端口27。当进行卷积运算时,列输出累加器ACC(1)先把第一时钟周期内对应的1个双向输出乘法器P2(1)运算所得到的子乘积作为原始第一卷积结果RSTA(1),再把稍后各个时钟周期的双向输出乘法器P2(1)的子乘积与此原始第一卷积结果RSTA(1)逐次相加,最后得到更新后的第一卷积结果RSTA(1)。
请参照图4,是示出图2A中运算装置中的第1~7个运算模组其中的1个单向运算模组207的示例的方块图。每个单向运算模组207包含MR个单向输出乘法器P1(1)~P1(MR)、多个行输出累加器ACR(m),m为介于1~MC的正整数。在本实施例中,是以MR=8,MC=8,m=1为例来做说明,然本实施例不限于此。本实施例是以每个单向运算模组207具8个单向输出乘法器P1(1)~P1(8)为例做说明。8个单向输出乘法器P1(1)~P1(8)中的每一个各别具有行输出端口25。如图4所示,在第1个单向运算模组207中,行输出累加器ACR(1)耦接至8个单向输出乘法器P1(1)~P1(8)的8个行输出端口25。当进行卷积运算时,行输出累加器ACR(1)先加和第一时钟周期内的8个单向输出乘法器P1(1)~P1(8)运算所得到8个子乘积,并将此总和作为原始第二卷积结果RSTB(1)。之后,再把各个时钟周期的8个单向输出乘法器P1(1)~P1(8)运算所得到8个子乘积的总和与此原始第二卷积结果RSTB(1)逐次相加,最后得到更新后的第二卷积结果RSTB(1)。
请参照图5A~5B,是示出本实施例的执行卷积神经网络运算的方法的示例的详细流程图,此流程相关参数包含:(a)输入数据IM的高度、宽度和深度是分别为输入数据高度H、输入数据宽度W与输入数据深度IC;(b)这些卷积核KR的高度、宽度和深度是分别为卷积核高度KH、卷积核宽度KW、和卷积核深度KC;以及(c)这些卷积运算结果的高度、宽度和深度分别为卷积输出高度OH、卷积输出宽度OW和卷积输出深度OC。MR为正整数,代表每行的乘法器数目,MC为正整数,代表每列的乘法器数目。
在图5B中,在流程步骤522中,首先判断是否进入第一运算模式。例如,是以卷积核深度KC是否大于等于特定值来判断。此特定值例如为每行的乘法器数目MR。当卷积核深度KC小于此特定值时,卷积神经网络运算装置200被设定在第一运算模式,第一运算模式例如为浅维度运算模式,此时执行流程步骤502~520。当判定卷积核的深度KC大于等于此特定值时,卷积神经网络运算装置200被设定在第二运算模式,第二运算模式例如为深维度运算模式,此时执行流程步骤524~548。
在步骤502中,令循环参数X1=0。接着,执行步骤504,令循环参数X2=0。之后,执行步骤506,令循环参数X3=0。接着,执行步骤508,列输出累加器ACC(i)将目前的时钟周期内对应的1个双向输出乘法器P2(i)乘积和原始第一卷积结果RSTA(i)相加,以得到更新后的第一卷积结果RSTA(i),i为1至MR范围间的正整数。
接着,执行步骤510,将循环参数X3之值加1。之后,执行步骤512,判断循环参数X3是否等于卷积核高度KH x卷积核宽度KW。若是,则执行步骤514;若否,则回到步骤508。在步骤514中,将循环参数X2的值加1。之后,执行步骤516,判断循环参数X2是否等于卷积输出宽度OWx卷积输出高度OH。若是,则进入步骤518;若否,则回到步骤506。在步骤518中,将循环参数X1之值加1。接着,进步步骤520,判断循环参数X1是否等于卷积输出深度OC/每行的乘法器数目MR。若是,则结束本流程;若否,则回到步骤504。
在步骤524中,令循环参数Y1=0。接着,执行步骤526,令循环参数Y2=0。之后,执行步骤528,令循环参数Y3=0。接着,执行步骤530,令循环参数Y4=0。之后,进入步骤532,行输出累加器ACR(m)将目前的时钟周期内的MR个乘法器的乘积和原始第二卷积结果RSTB(m)相加,以得到更新后的第二卷积结果RSTB(m),m为介于1至MC范围间的正整数。接着,执行步骤534,将循环参数Y4之值加1。之后,进入步骤536,判断循环参数Y4是否等于输入数据深度IC/每行的乘法器数目MR。若是,则进入步骤538;若否,则回到步骤532。在步骤538,将循环参数Y3之值加1。之后,执行步骤540,判断循环参数Y3是否等于卷积核宽度KW x卷积核高度KH。若是,则进入步骤542;若否,则回到步骤530。在步骤542中,将循环参数Y2之值加1。接着进入步骤544,判断循环参数Y2是否等于卷积输出宽度OW x卷积输出高度OH。若是,则进入步骤546;若否,则回到步骤528。在步骤546,将循环参数Y1之值加1。接着,进入步骤548,判断循环参数Y1是否等于卷积输出深度OC/每列的乘法器数目MC。若是,则结束本流程;若否,则回到步骤526。
在实施例中,对应于浅维度运算模式,流程步骤502~520共具有三层次的循环,由内而外分别为与循环参数X3相关的包含步骤508-512的第一循环、与循环参数X2相关的包含步骤506-516的第二循环、以及与循环参数X1相关的包含步骤504-520的第三循环。这三层次循环共同重复执行步骤508。在步骤508中,列输出累加器ACC(i)将目前的时钟周期内对应的1个双向输出乘法器P2(i)乘积和原始第一卷积结果RSTA(i)相加,以得到更新后的第一卷积结果RSTA(i),i为1至MR范围间的正整数。亦即第一卷积结果RSTA(i)等于列输出累加器ACC(i)先把第一时钟周期内对应1个双向输出乘法器P2(i)运算所得到的子乘积作为原始第一卷积结果RSTA(i),再把稍后各个时钟周期的双向输出乘法器P2(i)的子乘积与此原始第一卷积结果RSTA(i)逐次相加,最后得到更新后的第一卷积结果RSTA(i)。
跳出这三层次循环的判断准则分别为:(1)步骤512,当循环参数X3=卷积核高度KH x卷积核宽度KW时,亦即重复执行第一循环KH x KW次后,跳出第一循环;(2)步骤516,当循环参数X2=卷积输出宽度OWx卷积输出高度OH时,亦即重复执行第二循环OWxOH次后,跳出第二循环;以及(3)步骤520,当循环参数X1=卷积输出深度OC/每行的乘法器数目MR时,亦即重复执行第三循环OC/MR次后,跳出第三循环。
在实施例中,对应于深维度运算模式,流程步骤524~548共具有四层次循环,由内而外分别为与循环参数Y4相关的包含步骤532-536的第四循环、与循环参数Y3相关的包含步骤530-540的第五循环、与循环参数Y2相关的包含步骤528-544的第六循环、和与循环参数Y1相关的包含步骤526-548的第七循环。这四层次循环共同重复执行步骤532。在步骤532中,行输出累加器ACR(m)将目前的时钟周期内的MR个乘法器的乘积和原始第二卷积结果RSTB(m)相加,以得到更新后的第二卷积结果RSTB(m),m为介于1至MC范围间的正整数。亦即第二卷积结果是等于行输出累加器ACR(m)先加和第一时钟周期内位于对应第m运算模组中的MR个乘法器运算所得到MR个子乘积,将将此总和作为原始第二卷积结果RSTB(m),再把之后各个时钟周期的MR个乘法器运算所得到MR个子乘积的总和与此原始第二卷积结果RSTB(m)逐次相加,最后得到更新后的第二卷积结果RSTB(m)。
跳出这四层次循环的判断准则分别为:(1)步骤536,当循环参数Y4=输入数据深度IC/每行的乘法器数目MR时,亦即重复执行第四循环IC/MR次后,跳出第四循环;(2)步骤540,当循环参数Y3=卷积核宽度KW x卷积核高度KH时,亦即重复执行第五循环KW x KH次后,跳出第五循环;(3)步骤544,当循环参数Y2=卷积输出宽度OW x卷积输出高度OH时,亦即重复执行第六循环OW x OH次后,跳出第六循环;以及(4)步骤548,当循环参数Y1=卷积输出深度OC/每列的乘法器数目MC时,亦即重复执行第一循环OC/MC次后,跳出第七循环。
请参照第6A~6B图,其示出本公开实施例执行浅维度卷积运算的示意图。图6A是示出本实施例卷积神经网络运算装置200执行第一运算模式,亦即浅维度卷积时的示例的示意图。图6A是显示了在单层深度(depth-wise,DW)卷积神经网络运算中,相关运算数据的三维尺寸和数量。输入数据IM的高度、宽度和深度表示为输入数据宽度W x输入数据高度Hx输入数据深度IC,本例是以WxHxIC例如等于5x6x4为例做说明。四个卷积核K(1)~K(4)的宽度、高度和深度分别表示为卷积核宽度KW x卷积核高度KH x卷积核深度KC,本例是以KWxKHxKC例如等于3x3x1为例做说明。输出卷积结果的高度、宽度和深度表示为卷积输出宽度OW x卷积输出高度OH x卷积输出深度OC,本例是以OWxOHxOC例如等于4x5x4为例做说明。因为单层深度DW卷积神经网络运算的卷积核深度KC=1,小于每行的乘法器数目MR=8,因此卷积神经网络运算装置200被设定在第一运算模式,亦即浅维度运算模式,并执行流程步骤502~520来进行卷积运算。
请参照图6B,当卷积神经网络运算装置200设定在第一运算模式,亦即浅维度运算模式时,数据调度器203是将各个卷积核所需要进行的相关卷积运算的卷积数值分配给第8行双向运算模组209中的其中一个双向输出乘法器P2(i)来进行卷积运算,i为1至MR范围间的正整数,并由列输出端口27输出给对应的列输出累加器ACC(i)进行累加。因为在图6A中所示的例子中,卷积运算只会使用到4个卷积核,故浅维度运算模式所会使用到的运算模组阵列205的部分电路是如图6B所示的粗方框部分,包含前4个双向输出乘法器P2(1)~P2(4)与前4个列输出累加器ACC(1)~ACC(4)。而运算模组阵列205第1行至第7行的单向运算模组207因为不会被使用到,可以选择性地进入省电模式,以节省电能消耗。
对应图5A的流程图的第一循环,在X3=0的第一次循环中,亦即在第一时钟周期内,数据调度器203在各个卷积核KR的高度KH和宽度KW所定义的平面上选取第一位置的第一卷积数值,并在输入数据IM的高度H和宽度W所定义的平面上选取对应第一位置的第一数据数值,数据调度器203将第一卷积数值与第一数据数值输出至1个双向输出乘法器P2(i),执行步骤508以得到第一子卷积运算结果,i为1至MR范围间的正整数。
图6A~6B是本实施例中数据调度器203将第一卷积数值与第一数据数值输出至1个双向输出乘法器P2(i)的示例,然本实施例并不限于限。在X3=0的第一次循环中,亦即在第一时钟周期内,数据调度器203执行:(a)输入数据IM的数据数值A1与第一个卷积核K(1)的卷积数值E1分配到第8行的第1个双向输出乘法器P2(1)中进行卷积运算;(b)输入数据IM的数据数值B1与第二个卷积核K(2)的卷积数值F1分配到第8行的第2个双向输出乘法器P2(2)中进行卷积运算;(c)输入数据IM的数据数值C1与第三个卷积核K(3)的卷积数值G1分配到第8行的第3个双向输出乘法器P2(3)中进行卷积运算;以及(d)输入数据IM的数据数值D1与第四个卷积核K(4)的卷积数值H1分配到第8行的第4个双向输出乘法器P2(4)中进行卷积运算。当第一时钟周期结束时,前4个列输出累加器ACC(1)~ACC(4)各别累加对应的4个双向输出乘法器P2(1)~P2(4)其中之一在第一时钟周期内输出第一子卷积运算结果。举例来说,第1个列输出累加器ACC(1)总和初始值为0,第1个双向输出乘法器P2(1)在第一时钟周期内输出第一子卷积运算结果,第1个列输出累加器ACC(1)将总和初始值加上第一子卷积运算结果。如此当第一时钟周期结束时,第1个列输出累加器ACC(1)所暂存的原始第一卷积结果RSTA(1)等于此第一子卷积运算结果。以此类推。第4个列输出累加器ACC(4)总和初始值为0,第4个双向输出乘法器P2(4)在第一时钟周期内输出另一子卷积运算结果,第4个列输出累加器ACC(4)将总和初始值加上此另一子卷积运算结果。如此当第一时钟周期结束时,第4个列输出累加器ACC(4)所暂存的原始第一卷积结果RSTA(4)等于此另一子卷积运算结果。
在X3=1时,图5A流程第一循环执行第二次时,亦即在第二时钟周期内,数据调度器203在卷积核的高度KH和宽度KW所定义的平面上选取第二位置的第二卷积数值,并在输入数据IM的高度H和宽度W所定义的平面上选取对应第二位置的第二数据数值,数据调度器203将第二卷积数值与第二数据数值输出至第i个双向输出乘法器P2(i)以得到第二子卷积运算结果,第二位置不同于第一位置。其中,第二位置是为第一位置平移q个步距单位后的位置,q为正整数。例如平移1个步距单位或2个步距单位之后的位置,本发明不限于此。
如图6A~6B所示,在X3=1的第二次循环中,亦即在第二时钟周期内,数据调度器203执行:(a)将输入数据IM的数据数值A2与第一个卷积核K(1)的卷积数值E2分配到第8行的第1个双向输出乘法器P2(1)中进行卷积运算;(b)输入数据IM的数据数值B2与第二个卷积核K(2)的卷积数值F2分配到第8行的第2个双向输出乘法器P2(2)中进行卷积运算;(c)输入数据IM的数据数值C2与第三个卷积核K(3)的卷积数值G2分配到第8行的第3个双向输出乘法器P2(3)中进行卷积运算;(d)输入数据IM的数据数值D2与第四个卷积核K(4)的卷积数值H2分配到第8行的第4个双向输出乘法器P2(4)中进行卷积运算。当第二时钟周期结束时,前4个列输出累加器ACC(1)~ACC(4)各别累加对应的4个双向输出乘法器P2(1)~P2(4)其中之一在第二时钟周期内输出的第二子卷积运算结果。例如,当第一时钟周期结束时,第1个列输出累加器ACC(1)所暂存的原始第一卷积结果RSTA(1)等在第一子卷积运算结果,而第1个双向输出乘法器P2(1)在第二时钟周期内输出第二子卷积运算结果,第1个列输出累加器ACC(1)将原始第一卷积结果RSTA(1)加上第二子卷积运算结果。如此当第二时钟周期结束时,第1个列输出累加器ACC(1)是储存更新后的第一卷积结果RSTA(1),此更新后的第一卷积结果RSTA(1)等于加和第一子卷积运算结果和第二子卷积运算结果所得到的总和。以此类推,当第一时钟周期结束时,第4个列输出累加器ACC(4)所暂存的原始第一卷积结果RSTA(4)等于另一子卷积运算结果,而第4个双向输出乘法器P2(4)在第二时钟周期内输出再一子卷积运算结果,第4个列输出累加器ACC(4)将原始第一卷积结果RSTA(4)加上再一子卷积运算结果。如此当第二时钟周期结束时,第4个列输出累加器ACC(4)是储存更新后的第一卷积结果RSTA(4),此更新后的第一卷积结果RSTA(4)等于加和原始第一卷积结果RSTA(4)和又一子卷积运算结果所得到的总和。
如图6A所示,4个卷积核K(1)~K(4)的宽度和高度分别为宽KWx高KH=3x3,故各个卷积核各有9个卷积数值;如此经过9个时钟周期运算后,(a)第1个列输出累加器ACC(1)储存第一个卷积核K(1)的9个卷积数值E1~E9与对应位置的数据数值A1~A9的9次子卷积运算结果的总和,列输出累加器ACC(1)此时可以输出卷积输出点Z1的卷积运算结果;(b)第2个列输出累加器ACC(2)储存第二个卷积核K(2)的9个卷积数值F1~F9与对应位置的数据数值A1~A9的9次子卷积运算结果的总和,列输出累加器ACC(2)此时可以输出卷积输出点Z2的卷积运算结果;(c)第3个列输出累加器ACC(3)储存第三个卷积核K(3)的9个卷积数值G1~G9与对应位置的数据数值A1~A9的9次子卷积运算结果的总和,列输出累加器ACC(3)此时可以输出卷积输出点Z3的卷积运算结果;(d)第4个列输出累加器ACC(4)储存第四个卷积核K(4)的9个卷积数值H1~H9与对应位置的数据数值A1~A9的9次子卷积运算结果的总和,列输出累加器ACC(4)此时可以输出卷积输出点Z4的卷积运算结果。如此第一循环已经执行卷积核宽度KW x卷积核高度KH次,满足流程步骤512的X3=卷积核宽度KW x卷积核高度KH,而跳出第一循环。
第二循环是针对不同位置的卷积输出结果进行卷积运算,例如:图6A中,卷积输出结果的卷积输出宽度OW和卷积输出高度OH为4x5,亦即共有20个卷积输出点。如图6A所示,第二循环执行第一次时,是由输入数据IM的第一数据数值立体方块cube1与第一卷积核K(1)进行卷积运算,得到第1个卷积输出点Z1,此第一数据数值立体方块cube1包含数据数值A1~A9。如图6C所示,第二循环执行第二次时,是由输入数据IM的第二数据数值立体方块cube2与第一卷积核K(1)进行卷积运算后,得到第5个卷积输出点Z5,此第二数据数值立体方块cube2包含数据数值A2~A3、A5~A6、A8~A9、A10~A12。于每次第二循环中,数据调度器203把此3x3数据数值立体方块向右或向下移动一个步距单位,选取输入数据IM上不同位置的3x3数据数值立体方块来与第一卷积核K(1)进行卷积运算,而得到1个卷积输出点。当第二循环执行卷积输出宽度OWx卷积输出高度OH次,亦即重复执4x5=20次后,数据调度器203已经选取20个不同位置的3x3数据数值立体方块,完成20个卷积输出点,满足流程步骤516的X2=卷积输出宽度OWx卷积输出高度OH的条件,而跳出第二循环。
第三循环是选择不同卷积核进行卷积运算。在图7A中,卷积输出深度OC=4,每行的乘法器数目MR=8,故卷积输出深度OC/每行的乘法器数目MR小于等于1,亦即第三循环执行1次即可。如此第一循环重复执行9次,第二循环重复执行4x5=20次,第三循环执行1次,总共需要9x20x1=180个循环,亦即本实施例卷积神经网络运算装置200运算经过180个时钟周期后,可完成图6A的浅维度卷积运算。
请参照图7A,是示出本实施例卷积神经网络运算装置200执行第二运算模式,亦即深维度卷积的示意图。如图7A所示,传统深维度卷积神经网络运算中,相关运算数据的三维尺寸和数量。其中输入数据IM的高度、宽度和深度表示为输入数据宽度W x输入数据高度Hx输入数据深度IC,例如为5x6x128。256个卷积核的高度、宽度和深度表示为卷积核宽度KWx卷积核高度KH x卷积核深度KC,例如为3x3x128。256个卷积核包括第一卷积核K(1)、第二卷积核K(2)…第256卷积核K(256)。第一卷积核K(1)具有卷积核深度方向KC(1),第二卷积核K(2)具有卷积核深度方向KC(2)。输出卷积结果的高度、宽度和深度表示为卷积输出宽度OW x卷积输出高度OH x卷积输出深度OC,例如为4x5x256。因为卷积核深度KC=128,大于每行的乘法器数目MR=8,故卷积神经网络运算装置200被设定在第二运算模式,亦即深维度运算模式,执行图5B流程步骤524~548来进行卷积运算。
请参照图7B,当卷积神经网络运算装置200设定在第二运算模式,亦即深维度运算模式时,深维度运算模式所会使用到的运算模组阵列205电路是图7B所示的粗方框部分,所有8个运算模组中的64个乘法器(包括56个单向输出乘法器P1(1)~P1(56)与8个双向输出乘法器P2(1)~P2(8))与行输出累加器ACR(1)~ACR(8)都会参与卷积运算工作。并由64个乘法器(包括56个单向输出乘法器P1(1)~P1(56)与8个双向输出乘法器P2(1)~P2(8))各自的行输出端口25输出给对应的行输出累加器ACR(1)~ACR(8)其中之一。行输出累加器ACR(m)先加和第一时钟周期内8个乘法器乘积而得到原始第二卷积结果RSTB(8),m为1至MC范围间的正整数。行输出累加器ACR(m)之后再加和第二时钟周期内8个乘法器乘积与原始第二卷积结果RSTB(m),而得到更新后的第二卷积结果RSTB(m)。
以下是以第1个双向运算模组207为例说明,然本实施例不限于限。当卷积神经网络运算装置200设定在第二运算模式时,8个单向输出乘法器P1(1)~P1(8)是通过各自的行输出端口25输出运算结果。例如,第1个单向输出乘法器P1(1)在第一时钟周期内输出第1子卷积运算结果O1(1),在第二时钟周期内输出第2子卷积运算结果O1(2)。第2个双向输出乘法器P1(2)在第一时钟周期内输出第3子卷积运算结果O1(3),在第二时钟周期内输出第4子卷积运算结果O1(4)。以此类推,第8个双向输出乘法器P1(8)在第一时钟周期内输出第207子卷积运算结果O1(15),在第二时钟周期内输出第16子卷积运算结果O1(16)。当第一时钟周期结束时,行输出累加器ACR(1)先加和第1子卷积运算结果O1(1)、第3子卷积运算结果O1(3)...与第15子卷积运算结果O1(15)等8个子卷积运算结果,而得到原始第二卷积结果RSTB(1)。当第二时钟周期结束时,行输出累加器ACR(1)再加和第2子卷积运算结果O1(2)、第4子卷积运算结果O1(4)...与第16子卷积运算结果O1(16)等8个子卷积运算结果以及此原始第二卷积结果RSTB(1)而得到更新后的第二卷积结果RSTB(1)。
兹将第1个单向运算模组207的详细操作进一步说明如下。如图7A~7B所示,对应图5B流程的第四循环,在Y4=0的第一次运算中,亦即在第一时钟周期内,数据调度器203执行:(a)沿着第一卷积核K(1)的深度方向KC(1)上选取第1位置,并取得第1位置的第1卷积数值E1,并沿着输入数据IM的深度IC的方向上选取对应第1位置的第1数据数值A1,数据调度器203将第1卷积数值E1与第1数据数值A1传递给第1个单向输出乘法器P1(1)以得到第1子卷积运算结果O1(1);(b)沿着第一卷积核K(1)的深度方向KC(1)上选取第2位置,并取得第2位置的第2卷积数值E2,并沿着输入数据IM的深度IC的方向上选取对应第2位置的第2数据数值A2,数据调度器203将第2卷积数值E2与第2数据数值A2传递给第2个单向输出乘法器P1(2)以得到第3子卷积运算结果O1(3);(c)以此类推,沿着第一卷积核K(1)的深度方向KC(1)上选取第8位置,并取得第8位置的第8卷积数值E8,并沿着输入数据IM的深度IC的方向上选取对应第8位置的第8数据数值A8,数据调度器203将第8卷积数值E8与第8数据数值A8传递给第8个单向输出乘法器P1(8)以得到第15子卷积运算结果O1(15)。如此在第一时钟周期内,数据调度器203沿着第一卷积核K(1)的深度方向KC(1)上共选取8个位置而取得8个卷积数值E1~E8,同时取得输入数据IM对应位置的8个数据数值A1~A8,而分别交由8个单向输出乘法器P1(1)~P1(8)进行卷积运算而得到8个子卷积运算结果O1(1)、O1(3)...O1(15),并通过各自的行输出端口25输出给行输出累加器ACR(1)。当第一时钟周期结束时,行输出累加器ACR(1)加和8个子卷积运算结果O1(1)、O1(3)...O1(15)而得到原始第二卷积结果RSTB(1)。
在Y4=1时,图5B流程第四循环执行第二次运算时,亦即在第二时钟周期内,数据调度器203执行:(a)沿着第一卷积核K(1)的深度方向KC(1)上选取第9位置,并取得第9位置的第9卷积数值E9,并沿着输入数据IM的深度IC的方向上选取对应第9位置的第9数据数值A9,数据调度器203将第9卷积数值E9与第9数据数值A9传递给第1个单向输出乘法器P1(1)以得到第2子卷积运算结果O1(2);(b)沿着第一卷积核K(1)的深度方向KC(1)上选取第10位置,并取得第10位置的第10卷积数值E10,并沿着输入数据IM的深度IC的方向上选取对应第10位置的第10数据数值A10,数据调度器203将第10卷积数值E10与第10数据数值A10传递给第2个单向输出乘法器P1(2)以得到第4子卷积运算结果O1(4);(c)以此类推,沿着第一卷积核K(1)的深度方向KC(1)上选取第16位置,并取得第16位置的第16卷积数值E16,并沿着输入数据IM的深度IC的方向上选取对应第16位置的第16数据数值A16,数据调度器203将第16卷积数值E16与第16数据数值A16传递给第8个单向输出乘法器P1(8)以得到第16子卷积运算结果O1(16)。在第二时钟周期内,数据调度器203沿着第一卷积核K(1)的深度方向KC(1)上共选取8个位置而取得8个卷积数值E9~E16,同时取得输入数据IM对应位置的8个数据数值A9~A16,而分别交由8个单向输出乘法器P1(1)~P1(8)进行卷积运算而得到第2时钟周期的8个子卷积运算结果O1(2)、O1(4)...O1(16),并通过各自的行输出端口25输出给行输出累加器ACR(1)。当第二时钟周期结束时,行输出累加器ACR(1)加和8个子卷积运算结果O1(2)、O1(4)...O1(16)和第一时钟周期得到的原始第二卷积结果RSTB(1),而得到更新后的第二卷积结果RSTB(1)。
请参照图7A~7B,运算模组阵列205中的其他运算模组阵列(第2个~第7个的单向运算模组207、第8个的双向运算模组17)也进行和上述第1个单向运算模组207相同的运算,只是对应到不同的卷积核。例如第2个单向运算模组207运算可以是:在第一时钟周期内,数据调度器203执行(a)沿着第二卷积核K(2)的深度方向KC(2)上选取第1位置,并取得第1位置的第1卷积数值F1,并沿着输入数据IM的深度IC的方向上选取对应第1位置的第1数据数值A1,数据调度器203将第1卷积数值F1与第1数据数值A1传递给第9个单向输出乘法器P1(9)以得到第1子卷积运算结果O2(1);(b)沿着第二卷积核K(2)的深度方向KC(2)上选取第2位置,并取得第2位置的第2卷积数值F2,并沿着输入数据IM的深度IC的方向上选取对应第2位置的第2数据数值A2,数据调度器203将第2卷积数值F2与第2数据数值A2传递给第10个单向输出乘法器P1(10)以得到第3子卷积运算结果O2(3);(c)以此类推,沿着第二卷积核K(2)的深度方向KC(2)上选取第8位置,并取得第8位置的第8卷积数值F8,并沿着输入数据IM的深度IC的方向上选取对应第8位置的第8数据数值A8,数据调度器203将第8卷积数值E8与第8数据数值A8传递给第16个单向输出乘法器P1(16)以得到第15子卷积运算结果O2(15)。如此在第一时钟周期内,数据调度器203沿着第二卷积核K(2)的深度方向KC(2)上共选取8个位置而取得8个卷积数值F1~F8,同时取得输入数据IM对应位置的8个数据数值A1~A8,而分别交由8个单向输出乘法器P1(9)~P1(16)进行卷积运算而得到8个子卷积运算结果O2(1)、O2(3)...O2(15),并通过各自的行输出端口25输出给行输出累加器ACR(2)。当第一时钟周期结束时,行输出累加器ACR(2)加和8个子卷积运算结果O2(1)、O2(3)...O2(15)而得到原始第二卷积结果RSTB(2)。
在Y4=1时,图5B流程第四循环执行第二次时,亦即在第二时钟周期内,数据调度器203执行:(a)沿着第二卷积核K(2)的深度方向KC(2)上选取第9位置,并取得第9位置的第9卷积数值F9,并沿着输入数据IM的深度IC的方向上选取对应第9位置的第9数据数值A9,数据调度器203将第9卷积数值E9与第9数据数值A9传递给第9个单向输出乘法器P1(9)以得到第2子卷积运算结果O2(2);(b)沿着第二卷积核K(2)的深度方向KC(2)上选取第10位置,并取得第10位置的第10卷积数值F10,并沿着输入数据IM的深度IC的方向上选取对应第10位置的第10数据数值A10,数据调度器203将第10卷积数值E10与第10数据数值A10传递给第10个单向输出乘法器P1(10)以得到第4子卷积运算结果O2(4);(c)以此类推,沿着第二卷积核K(2)的深度方向KC(2)上选取第16位置,并取得第16位置的第16卷积数值F16,并沿着输入数据IM的深度IC的方向上选取对应第16位置的第16数据数值A16,数据调度器203将第16卷积数值F16与第16数据数值A16传递给第16个单向输出乘法器P1(16)以得到第16子卷积运算结果O2(16)。在第二时钟周期内,数据调度器203沿着第二卷积核K(2)的深度方向KC(2)上共选取8个位置而取得8个卷积数值F9~F16,同时取得输入数据IM对应位置的8个数据数值A9~A16,而分别交由8个单向输出乘法器P1(9)~P1(16)进行卷积运算而得到第2时钟周期的8个子卷积运算结果O2(2)、O2(4)...O2(16),并通过各自的行输出端口25输出给行输出累加器ACR(2)。当第二时钟周期结束时,行输出累加器ACR(2)加和8个子卷积运算结果O2(2)、O2(4)...O2(16)和第一时钟周期得到的原始第二卷积结果RSTB(2),而得到更新后的第二卷积结果RSTB(2)。
请参照图7A,此256个卷积核K(1)~K(256)的卷积核深度KC为128,而每次第四循环最多能进行每行乘法器数目MR个卷积运算。在本实施例中,每次第四循环最多能进行8个卷积运算。当第四循环执行输入数据深度IC/每行乘法器数目MR(=128/8)次后,亦即第四循环执行16次后,(a)第1个行输出累加器ACR(1)储存第一个卷积核K(1)的128个卷积数值E1~E128与对应位置的数据数值A1~A128的128次子卷积运算结果的总和,行输出累加器ACR(1)此时可以得到输出累加器ACR(1)的暂存值。(b)第2个行输出累加器ACR(2)储存第二个卷积核K(2)的128个卷积数值F1~F128与对应位置的数据数值A1~A128的128次子卷积运算结果的总和,行输出累加器ACR(2)此时可以得到输出累加器ACR(2)的暂存值;(c)以此类推,第8个行输出累加器ACR(8)储存第八个卷积核K(8)于KC(8)深度方向上的128个卷积数值与对应位置的数据数值A1~A128的128次子卷积运算结果的总和,行输出累加器ACR(8)此时可以得到输出累加器ACR(2)的暂存值。此时第四循环已经重复执行16次,满足Y4=输入数据深度IC/每行乘法器数目MR=128/8=16,满足流程步骤536而跳出第四循环。
第五循环是要完成各个卷积核高度KH和宽度KW所定义的平面上所有的卷积运算。如图7A所示,第五循环执行第一次时,是输入数据IM的第三数据数值立体方块cube3与第一卷积核K(1)的第四卷积数值立体方块cube4进行卷积运算,此第一数据数值立体方块cube1包含数据数值A1~A128,此第四卷积数值立体方块cube4包含卷积数值E1~E128,行输出累加器ACR(m)得到一输出累加器ACR(m)的暂存值。如第7C图所示,第五循环执行第二次时,数据调度器203把上述两个1x128立体方块cube3与cube4均向右移动一个步距单位得到立体方块cube5与cube6(亦可为平移2个步距单位或3个步距单位,本公开并不限于此),由输入数据IM的第五数据数值立体方块cube5与第一卷积核K(1)的第六卷积数值立体方块cube6进行卷积运算,此第五数据数值立体方块cube5包含数据数值A129~A256,此第六卷积数值立体方块cube6包含卷积数值E129~E256,行输出累加器ACR(m)将第五循环执行第二次所得卷积运算结果和输出累加器ACR(m)的暂存值相加而得到更新后的输出累加器ACR(m)的暂存值。以此类推,在每次第五循环中,数据调度器203把此两个1x128立体方块向右或向下移动一个步距单位,选取输入数据IM上不同位置的1x128数据数值立体方块与第一卷积核K(1)上不同位置的1x128卷积数值立体方块进行卷积运算,行输出累加器ACR(m)将第五循环各次执行所得卷积运算结果和输出累加器ACR(m)的暂存值相加而得到更新后的输出累加器ACR(m)的暂存值。各个卷积核的宽高分别例如为宽KWx高KH=3x3,当循环参数Y3=卷积核宽度KWx卷积核高度KH=9时,亦即第五循环重复执行9次后,数据调度器203已经选取卷积核K(1)的9个不同位置的1x128立体方块,完成和输入数据IM的卷积运算,行输出累加器ACR(m)将更新后的输出累加器ACR(m)的暂存值作为1个卷积输出点Z1输出,并跳出第五循环。
第六循环是针对不同位置的卷积输出结果进行卷积运算,如图7D所示,第六循环执行第一次时,是输入数据IM的第七数据数值立体方块cube7与第一卷积核K(1)进行卷积运算,得到1个卷积输出点Z1,此第七数据数值立体方块cube7包含3x3x128个数据数值。如第7E图所示,第六循环执行第二次时,数据调度器203把此输入数据IM的3x3x128立体方块向右移动一个步距单位,是由输入数据IM的第八数据数值立体方块cube8与第一卷积核K(1)进行卷积运算,得到1个卷积输出点Z257。如此在每次第六循环中,数据调度器203把此3x3x128立体方块向右或向下移动一个步距单位,选取输入数据IM上不同位置的3x3x128数据数值立体方块来与第一卷积核K(1)进行卷积运算。如图7A所示,本实施例的卷积输出结果的卷积输出宽度OW为4,而卷积输出高度OH为5,因此第六循环需执行20次(=卷积输出宽度OWx卷积输出高度OH),亦即数据调度器203已经选取20个不同位置的3x3x128数据数值立体方块,行输出累加器ACR(m)输出完成20个卷积输出点后,满足流程步骤544而跳出第六循环。
第七循环是针对不同卷积核进行卷积运算;在图7A中,卷积输出深度OC为256,而第七循环每次最多可同时处理8个卷积核(=每列乘法器数目MC)。如此当循环参数Y1=卷积输出深度OC/每列乘法器数目MC时,亦即第七循环重复执行256/8=32次后,跳出第七循环。
如此第四循环需重复执行128/8=16次,第五循环需重复执行3x3=9次,第六循环需重复执行4x5=20次,第七循环需重复执行256/8=32次,总共需要执行16x9x20x32=92160次个循环,亦即本实施例卷积神经网络运算装置200运算经过92160个时钟周期可完成图7A的深维度卷积运算。
请参照图8A,是示出本公开卷积神经网络运算装置200的另一实施例,同样地,可依据多个卷积核KR,对输入数据IM执行卷积神经网络运算。卷积神经网络运算装置200包括数据调度器801与运算模组阵列803。运算模组阵列803具有MC个运算模组,MC为正整数代表每列的乘法器数目。在此MC个运算模组中包含两个双向运算模组17。每个双向运算模组17是包含MR个双向输出乘法器,每个单向运算模组207是包含MR个单向输出乘法器,MR为正整数,代表每行的乘法器数目。
如图8A所示,在另一实施例中,是以MC=8,MR=8为例来做说明,但另一实施例不以此为限。运算模组阵列803具有8个运算模组,其中前6个运算模组均为单向运算模组207,而第7-8个运算模组是为双向运算模组17。每个单向运算模组207包含8个单向输出乘法器,故前6个单向运算模组207共包含48个单向输出乘法器P1(1)~P1(48)。每个双向运算模组17包含8个双向输出乘法器,故第7-8个双向运算模组17共包含16个双向输出乘法器P2(1)~P2(16)。
当运算装置设定在浅维度运算模式时,类似图6A~6B所示实施例的数据分配方式,是将各个卷积核所需要进行的相关卷积运算分配给第7行~第8行双向运算模组17中的其中一个双向输出乘法器P2(i)来进行卷积运算,i为1至MR范围间的正整数,并由双向输出乘法器P2(i)的列输出端口27输出给对应的列输出累加器ACC(i)进行累加,可自列输出累加器ACC(i)得到第一卷积结果RSTA(i)。运算模组阵列803之前6行的单向运算模组207因为不会被使用到,可以选择性地进入省电模式,以节省电能消耗。
当运算装置设定于深维度运算模式时,类似图7A~7B所示实施例的数据分配方式,运算模组阵列803中所有8个运算模组中的64个乘法器(包括48个单向输出乘法器P1(1)~P1(48)与16个双向输出乘法器P2(1)~P2(16))都会被分配到部分卷积运算工作,并由64个乘法器(包括48个单向输出乘法器P1(1)~P1(48)与16个双向输出乘法器P2(1)~P2(16))各自的行输出端口25输出给对应的行输出累加器ACR(m),m为1至MC范围间的正整数。行输出累加器ACR(m)先加和第一时钟周期内所耦接的8个乘法器运算所得到8个子乘积的总和作为原始第二卷积结果RSTB(i),再把稍后各个时钟周期的8个乘法器运算所得到8个子乘积的总和与此原始第二卷积结果RSTB(i)相加,最后得到更新后的第二卷积结果RSTB(i)。
请参照图8B,是示出图8A的卷积神经网络运算装置的详细实施方式的示例的方块图。数据调度器801是可由多种方式实施。例如,数据调度器801可包括数据维度判断与控制单元802、第一维度数据流控制数据调度单元(例如是浅维度数据流控制数据调度单元804)、第二维度数据流控制数据调度单元(例如是深维度数据流控制数据调度单元806)、多工器808、数据馈入单元810。数据调度器801的操作类似在图2B之数据调度器203的操作,不同之处在于数据调度器801中的各单元是以2行的双向输出乘法器P2(例如是双向输出乘法器P2(1)~P2(16))来决定所要输出的数据流。亦即,浅维度数据流控制数据调度单元804在第一运算模式(例如是浅维度运算模式)下,根据输入数据的多个数据数值和多个卷积核的多个卷积数值,输出适用于2行的双向输出乘法器P2的第一数据数值数据流与第一卷积数值数据流,并通过多工器808与数据馈入单元810输出至多个双向输出乘法器P2(例如是双向输出乘法器P2(1)~P2(16))。数据馈入单元812则在第二运算模式(例如是深维度运算模式)下根据输入数据的多个数据数值和多个卷积核的多个卷积数值,输出适用于6行的单向输出乘法器P1的数据数值数据流与卷积数值数据流至6行的单向输出乘法器P1。
请参照图9A,是示出本公开卷积神经网络运算装置200的又一实施例,图示相同标号部分电路元件同实施例不再赘述。运算模组阵列903具有MC个运算模组,且MC个运算模组全部都为双向运算模组17,MC为正整数,代表每列的乘法器数目。每个双向运算模组17是包含MR个双向输出乘法器,MR为正整数,代表每列的乘法器数目。如图9A所示,在又一实施例中,是以MC=8,MR=8为例来做说明,但另一实施例不以此为限。运算模组阵列903具有8个运算模组,所有8个运算模组是为双向运算模组17。每个双向运算模组17包含8个双向输出乘法器,故8个双向运算模组17共包含64个双向输出乘法器P2(1)~P2(64)。
当运算装置设定于浅维度运算模式时,类似图6A~6B所示的实施例的数据分配方式,是将各个卷积核所需要进行的相关卷积运算分配给所有8行双向运算模组17中的其中一个双向输出乘法器P2(i)来进行卷积运算,i为1至MR范围间的正整数,并由双向输出乘法器P2(i)的列输出端口27输出给对应的列输出累加器ACC(i)进行累加,可自列输出累加器ACC(i)得到第一卷积结果RSTA(i)。运算模组阵列205所有的双向运算模组17都会参与处理到部分卷积运算。
当运算装置设定于深维度运算模式时,类似图7A~7B所示的实施例的数据分配方式,运算模组阵列903中所有8个运算模组中的64个乘法器都会参与处理到部分卷积运算,并由64个乘法器各自的行输出端口25输出给对应的行输出累加器ACR(m),m为1至MC范围间的正整数。行输出累加器ACR(m)先加和第一时钟周期内所耦接的8个乘法器运算所得到8个子乘积的总和作为原始第二卷积结果RSTB(i),再把稍后各个时钟周期的8个乘法器运算所得到8个子乘积的总和与此原始第二卷积结果RSTB(i)相加,最后得到更新后的第二卷积结果RSTB(i)。
请参照图9B,是示出图9A的卷积神经网络运算装置的详细实施方式的示例的方块图。数据调度器901是可由多种方式实施。例如,数据调度器901可包括数据维度判断与控制单元902、第一维度数据流控制数据调度单元(例如是浅维度数据流控制数据调度单元904)、第二维度数据流控制数据调度单元(例如是深维度数据流控制数据调度单元906)、多工器908、数据馈入单元910。数据调度器901的操作类似在图2B的数据调度器203的操作,不同之处在于数据调度器901中的各单元是以8行的双向输出乘法器P2(例如是双向输出乘法器P2(1)~P2(64))来决定所要输出的数据流。亦即,浅维度数据流控制数据调度单元904在第一运算模式(例如是浅维度运算模式)下,根据输入数据的多个数据数值和多个卷积核的多个卷积数值,输出适用于8行的双向输出乘法器P2的第一数据数值数据流与第一卷积数值数据流,并通过多工器908与数据馈入单元910输出至多个双向输出乘法器P2(例如是双向输出乘法器P2(1)~P2(64))。
本公开卷积神经网络运算装置,在运算模组阵列中使用双向运算模组,在双向运算模组中采用单输入双输出方向的乘法器,并且搭配数据调度器在深维度运算和浅维度运算两种模式下不同的数据流分配,使卷积神经网络运算装置能有效兼顾深、浅维度的卷积运算。本公开的实施例可保持原本深维度卷积运算时乘法器高使用效率,且同时可以达成浅维度卷积运算时的可选择性地让未参与运算的单向行乘法器和行输出累加器进入省电模式以节省电能,并大幅提高乘法器的使用效率。例如,以图1所示的8X8公知架构运算单层深度(depth-wise,DW)卷积神经网络运算时,仅有1/64的乘法器使用率,而使用图9A的架构则可达到64/64的乘法器使用率。
综上所述,虽然本公开已以实施例公开如上,然其并非用以限定本公开。本公开所属技术领域中具有通常知识者,在不脱离本公开的精神和范围内,当可作各种的更动与润饰。因此,本公开的保护范围当视后附的权利要求书所界定者为准。
【符号说明】
200:卷积神经网络运算装置
IM:输入数据
KR、K(1)~K(4):卷积核
RSTA(1)~RSTA(8):第一卷积结果
RSTB(1)~RSTB(8):第二卷积结果
101、203、801、901:数据调度器
103、205、803、903:运算模组阵列
207、105:单向运算模组
P1(1)~P1(56):单向输出乘法器
17:双向运算模组
P2(1)~P2(64):双向输出乘法器
25:行输出端口
27:列输出端口
ACR(1)~ACR(8):行输出累加器
ACC(1)~ACC(8):列输出累加器
502~548:流程步骤
Cube1~Cube8:立体方块
202、802、902:数据维度判断与控制单元
204、804、904:浅维度数据流控制数据调度单元
206、806、906:深维度数据流控制数据调度单元
208、808、908:多工器
210、212、810、812、910:数据馈入单元

Claims (22)

1.一种卷积神经网络运算装置,包括:
双向运算模组,包括多个双向输出运算器、多个行输出累加器、及多个列输出累加器,所述多个双向输出运算器各具有行输出端口与列输出端口,所述多个行输出累加器是耦接到所述多个行输出端口,所述多个列输出累加器是耦接到对应的所述多个列输出端口;以及
数据调度器,用以提供输入数据的多个数值和多个卷积核的多个卷积数值至所述多个双向输出运算器;
其中,在第一运算模式时,所述多个双向输出运算器通过所述多个列输出端口,输出运算结果至对应的所述多个列输出累加器,在第二运算模式时,所述多个双向输出运算器通过所述多个行输出端口输出运算结果至所述多个行输出累加器。
2.根据权利要求1所述的卷积神经网络运算装置,所述多个双向输出运算器包括MR个双向输出乘法器P2(1)~P2(MR),所述多个列输出累加器包括MR个列输出累加器ACC(1)~ACC(MR),当该卷积神经网络运算装置设定于所述第一运算模式时,所述MR个双向输出乘法器中的第i个双向输出乘法器P2(i)在第一时钟周期内输出第一子卷积运算结果,在第二时钟周期内输出第二子卷积运算结果,所述第i个列输出累加器ACC(i)加和所述第一子卷积运算结果和所述第二子卷积运算结果,i为1至MR范围间的正整数。
3.根据权利要求2所述的卷积神经网络运算装置,其中所述输入数据的高度、宽度、深度是分别为高度H、宽度W、深度IC,各所述多个卷积核的高度、宽度、深度是分别为高度KH、宽度KW、深度KC,当所述输入数据的深度KC小于特定值时,所述卷积神经网络运算装置设定于所述第一运算模式,所述第一运算模式为浅维度运算模式。
4.根据权利要求3所述的卷积神经网络运算装置,其中当所述卷积神经网络运算装置设定于所述浅维度运算模式时,在所述第一时钟周期内,所述数据调度器在所述卷积核的高度KH和宽度KW所定义的平面上选取第一位置的第一卷积数值,并在所述输入数据的高度H和宽度W所定义的平面上选取对应所述第一位置的第一数据数值,所述数据调度器将所述第一卷积数值与所述第一数据数值输出至所述第i个双向输出乘法器P2(i)以得到所述第一子卷积运算结果。
5.根据权利要求4所述的卷积神经网络运算装置,其中当所述卷积神经网络运算装置设定在所述浅维度运算模式时,在所述第二时钟周期内,所述数据调度器在所述卷积核的高度KH和宽度KW所定义的平面上选取第二位置的第二卷积数值,并在所述输入数据的高度H和宽度W所定义的平面上选取对应所述第二位置的第二数据数值,所述数据调度器将所述第二卷积数值与所述第二数据数值输出至所述第i个双向输出乘法器P2(i)以得到所述第二子卷积运算结果,所述第二位置不同于所述第一位置。
6.根据权利要求5所述的卷积神经网络运算装置,其中,所述第二位置是为第一位置平移q个步距单位后的位置,q为正整数。
7.根据权利要求2所述的卷积神经网络运算装置,其中当所述卷积神经网络运算装置设定在所述第二运算模式时,所述MR个双向输出乘法器P2(1)~P2(MR)通过各自的所述行输出端口输出运算结果,所述MR个双向输出乘法器中的第j个双向输出乘法器P2(j)在第三时钟周期内输出第三子卷积运算结果,在第四时钟周期内输出第四子卷积运算结果,所述MR个双向输出乘法器中的第k个双向输出乘法器P2(k)在所述第三时钟周期内输出第五子卷积运算结果,在所述第四时钟周期内输出第六子卷积运算结果,所述多个行输出累加器加和所述第三子卷积运算结果、所述第四子卷积运算结果、所述第五子卷积运算结果和所述第六子卷积运算结果,j和k各自为1至MR范围间的正整数。
8.根据权利要求7所述的卷积神经网络运算装置,其中所述输入数据的高度、宽度、深度是分别为高度H、宽度W、深度IC,各所述多个卷积核的高度、宽度、深度是分别为高度KH、宽度KW、深度KC,所述多个卷积核包括第一卷积核K(1),当各所述多个卷积核的深度KC大于等于特定值时,所述卷积神经网络运算装置设定在所述第二运算模式,所述第二运算模式为深维度运算模式。
9.根据权利要求8所述的卷积神经网络运算装置,其中当所述卷积神经网络运算装置设定在所述深维度运算模式时,在所述第三时钟周期内,所述数据调度器沿着所述第一卷积核K(1)的深度方向KC上选取第三位置,并取得所述第三位置的第三卷积数值,并沿着所述输入数据的深度IC的方向上选取对应所述第三位置的第三数据数值,所述数据调度器将所述第三卷积数值与所述第三数据数值传递给所述第j个双向输出乘法器P2(j)以得到所述第三子卷积运算结果,所述数据调度器并沿着所述第一卷积核K(1)的深度方向KC上选取第四位置,并取得所述第四位置的第四卷积数值,并沿着所述输入数据的深度IC的方向上选取对应所述第四位置的第四数据数值,所述数据调度器将所述第四卷积数值与所述第四数据数值传递给所述第k个双向输出乘法器P2(k)以得到所述第四子卷积运算结果,所述多个行输出累加器加和所述第三子卷积运算结果与所述第四子卷积运算结果而得到暂存运算结果,所述第三位置不同于所述第四位置。
10.根据权利要求9所述的卷积神经网络运算装置,其中当所述卷积神经网络运算装置设定在所述深维度运算模式时,在所述第四时钟周期内,所述数据调度器沿着所述第一卷积核K(1)的深度方向KC上选取第五位置,并取得所述第五位置的第五卷积数值,并沿着所述输入数据的深度IC的方向上选取对应所述第五位置的第五数据数值,所述数据调度器将所述第四卷积数值与所述第五数据数值传递给所述第j个双向输出乘法器P2(j)以得到所述第五子卷积运算结果,所述数据调度器并沿着所述第一卷积核K(1)的深度方向KC上选取第六位置,并取得所述第六位置的第六卷积数值,并沿着所述输入数据的深度IC的方向上选取对应所述第六位置的第六数据数值,所述数据调度器将所述第六卷积数值与所述第六数据数值传递给所述第k个双向输出乘法器P2(k)以得到所述第六子卷积运算结果,所述多个行输出累加器加和所述第五子卷积运算结果、所述第六子卷积运算结果与所述暂存运算结果,所述第五位置不同于所述第六位置。
11.根据权利要求1所述的卷积神经网络运算装置,其中,所述数据调度器还包括:
数据维度判断与控制单元;
第一维度数据流控制数据调度单元,是受控于所述数据维度判断与控制单元,并在第一运算模式下根据所述输入数据的所述多个数据数值和所述多个卷积核的所述多个卷积数值输出对应的第一数据数值数据流与第一卷积数值数据流;
第二维度数据流控制数据调度单元,是受控于所述数据维度判断与控制单元,并在第二运算模式下根据所述输入数据的所述多个数据数值和所述多个卷积核的所述多个卷积数值输出对应的第二数据数值数据流与第二卷积数值数据流;
多工器,是与所述第一维度数据流控制数据调度单元与所述第二维度数据流控制数据调度单元耦接,用以在所述第一运算模式下输出所述第一数据数值数据流与所述第一卷积数值数据流,并在所述第二运算模式下输出所述第二数据数值数据流与所述第二卷积数值数据流;以及
数据馈入单元,是与所述多工器耦接,用以在所述第一运算模式下输出所述第一数据数值数据流与所述第一卷积数值数据流至所述多个双向输出运算器,并在所述第二运算模式下输出所述第二数据数值数据流与所述第二卷积数值数据流至所述多个双向输出运算器。
12.一种执行卷积神经网络运算的方法,包括:
提供双向运算模组,所述双向运算模组包括多个双向输出运算器、多个行输出累加器、及多个列输出累加器,所述多个双向输出运算器各具有行输出端口与列输出端口,所述多个行输出累加器是耦接到所述多个行输出端口,所述多个列输出累加器是耦接到对应的所述多个列输出端口;
通过数据调度器提供输入数据的多个数据数值和多个卷积核的多个卷积数值至所述多个双向输出运算器;
在第一运算模式时,所述多个双向输出运算器通过所述多个列输出端口输出运算结果至对应的所述多个列输出累加器;以及
在第二运算模式时,所述多个双向输出运算器通过所述多个行输出端口输出运算结果至所述多个行输出累加器。
13.根据权利要求12所述的方法,所述多个双向输出运算器包括MR个双向输出乘法器P2(1)~P2(MR),所述多个列输出累加器包括MR个列输出累加器ACC(1)~ACC(MR),当所述卷积神经网络运算装置设定在所述第一运算模式时,所述MR个双向输出乘法器中的第i个双向输出乘法器P2(i)在第一时钟周期内输出第一子卷积运算结果,在第二时钟周期内输出第二子卷积运算结果,所述第i个列输出累加器ACC(i)加和所述第一子卷积运算结果和所述第二子卷积运算结果,i为1至MR范围间的正整数。
14.根据权利要求13所述的方法,其中所述输入数据的高度、宽度、深度是分别为高度H、宽度W、深度IC,各所述多个卷积核的高度、宽度、深度是分别为高度KH、宽度KW、深度KC,当各所述多个卷积核的深度KC小于特定值时,所述卷积神经网络运算装置设定在所述第一运算模式,所述第一运算模式为浅维度运算模式。
15.根据权利要求14所述的方法,其中当所述卷积神经网络运算装置设定在所述浅维度运算模式时,在所述第一时钟周期内,所述数据调度器在所述卷积核的高度KH和宽度KW所定义的平面上选取第一位置的第一卷积数值,并在所述输入数据的高度H和宽度W所定义的平面上选取对应所述第一位置的第一数据数值,所述数据调度器将所述第一卷积数值与所述第一数据数值输出至所述第i个双向输出乘法器P2(i)以得到所述第一子卷积运算结果。
16.根据权利要求15所述的方法,其中当所述卷积神经网络运算装置设定在所述浅维度运算模式时,在所述第二时钟周期内,所述数据调度器在所述卷积核的高度KH和宽度KW所定义的平面上选取第二位置的第二卷积数值,并在所述输入数据的高度H和宽度W所定义的平面上选取对应所述第二位置的第二数据数值,所述数据调度器将所述第二卷积数值与所述第二数据数值输出至所述第i个双向输出乘法器P2(i)以得到所述第二子卷积运算结果,所述第二位置不同于所述第一位置。
17.根据权利要求16所述的方法,其中,所述第二位置是为第一位置平移q个步距单位后的位置,q为正整数。
18.根据权利要求13所述的方法,其中当所述卷积神经网络运算装置设定在所述第二运算模式时,所述MR个双向输出乘法器P2(1)~P2(MR)通过各自的所述行输出端口输出运算结果,所述MR个双向输出乘法器中的第j个双向输出乘法器P2(j)在第三时钟周期内输出第三子卷积运算结果,在第四时钟周期内输出第四子卷积运算结果,所述MR个双向输出乘法器中的第k个双向输出乘法器P2(k)在所述第三时钟周期内输出第五子卷积运算结果,在所述第四时钟周期内输出第六子卷积运算结果,所述多个行输出累加器加和所述第三子卷积运算结果、所述第四子卷积运算结果、所述第五子卷积运算结果和所述第六子卷积运算结果,j和k各自为1至MR范围间的正整数。
19.根据权利要求18所述的方法,其中所述输入数据的高度、宽度、深度是分别为高度H、宽度W、深度IC,各所述多个卷积核的高度、宽度、深度是分别为高度KH、宽度KW、深度KC,所述多个卷积核包括第一卷积核K(1),当各所述多个卷积核的深度KC大于等于特定值时,则所述卷积神经网络运算装置设定在所述第二运算模式,所述第二运算模式为深维度运算模式。
20.根据权利要求19所述的方法,其中当所述卷积神经网络运算装置设定在所述深维度运算模式时,在所述第三时钟周期内,所述数据调度器沿着所述第一卷积核K(1)的深度方向KC上选取第三位置,并取得所述第三位置的第三卷积数值,并沿着所述输入数据的深度IC的方向上选取对应所述第三位置的第三数据数值,所述数据调度器将所述第三卷积数值与所述第三数据数值传递给所述第j个双向输出乘法器P2(j)以得到所述第三子卷积运算结果,所述数据调度器并沿着所述第一卷积核K(1)的深度方向KC上选取第四位置,并取得所述第四位置的第四卷积数值,并沿着所述输入数据的深度IC的方向上选取对应所述第四位置的第四数据数值,所述数据调度器将所述第四卷积数值与所述第四数据数值传递给所述第k个双向输出乘法器P2(k)以得到所述第四子卷积运算结果,所述多个行输出累加器加和所述第三子卷积运算结果与所述第四子卷积运算结果而得到暂存运算结果。
21.根据权利要求20所述的方法,其中当所述卷积神经网络运算装置设定在所述深维度运算模式时,在所述第四时钟周期内,所述数据调度器沿着所述第一卷积核K(1)的深度方向KC上选取第五位置,并取得所述第五位置的第五卷积数值,并沿着所述输入数据的深度IC的方向上选取对应所述第五位置的第五数据数值,所述数据调度器将所述第四卷积数值与所述第五数据数值传递给所述第j个双向输出乘法器P2(j)以得到所述第五子卷积运算结果,所述数据调度器并沿着所述第一卷积核K(1)的深度方向KC上选取第六位置,并取得所述第六位置的第六卷积数值,并沿着所述输入数据的深度IC的方向上选取对应所述第六位置的第六数据数值,所述数据调度器将所述第六卷积数值与所述第六数据数值传递给所述第k个双向输出乘法器P2(k)以得到所述第六子卷积运算结果,所述多个行输出累加器加和所述第五子卷积运算结果、所述第六子卷积运算结果与所述暂存运算结果。
22.根据权利要求12所述的方法,还包括:
在第一运算模式下根据所述输入数据的所述多个数据数值和所述多个卷积核的所述多个卷积数值输出对应的第一数据数值数据流与第一卷积数值数据流至多工器;
在第二运算模式下根据所述输入数据的所述多个数据数值和所述多个卷积核的所述多个卷积数值输出对应的第二数据数值数据流与第二卷积数值数据流至所述多工器;
在所述第一运算模式下,所述多工器输出所述第一数据数值数据流与所述第一卷积数值数据流至数据馈入单元,在所述第二运算模式下,所述多工器输出所述第二数据数值数据流与所述第二卷积数值数据流至所述数据馈入单元;以及
在所述第一运算模式下,所述数据馈入单元输出所述第一数据数值数据流与所述第一卷积数值数据流至所述多个双向输出运算器,并在所述第二运算模式下,所述数据馈入单元输出所述第二数据数值数据流与所述第二卷积数值数据流至所述多个双向输出运算器。
CN202010160647.6A 2020-02-15 2020-03-10 卷积神经网络运算装置及其运算的方法 Pending CN113269298A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
TW109104865 2020-02-15
TW109104865A TWI733334B (zh) 2020-02-15 2020-02-15 卷積神經網路運算裝置及其運算的方法

Publications (1)

Publication Number Publication Date
CN113269298A true CN113269298A (zh) 2021-08-17

Family

ID=77227581

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010160647.6A Pending CN113269298A (zh) 2020-02-15 2020-03-10 卷积神经网络运算装置及其运算的方法

Country Status (3)

Country Link
US (1) US11423292B2 (zh)
CN (1) CN113269298A (zh)
TW (1) TWI733334B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI828185B (zh) * 2022-06-09 2024-01-01 大陸商星宸科技股份有限公司 三維卷積運算裝置與三維卷積運算方法

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080069356A (ko) * 2007-01-23 2008-07-28 한국과학기술원 컨벌루셔널 터보 코드에서 사용되는 인터리버의 인터리브드 주소 발생기, 그 방법 및 씨티씨에서 사용되는 인터리버
KR20180050928A (ko) * 2016-11-07 2018-05-16 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치
CN108805266A (zh) * 2018-05-21 2018-11-13 南京大学 一种可重构cnn高并发卷积加速器
CN109656623A (zh) * 2019-03-13 2019-04-19 北京地平线机器人技术研发有限公司 执行卷积运算操作的方法及装置、生成指令的方法及装置
CN109740732A (zh) * 2018-12-27 2019-05-10 深圳云天励飞技术有限公司 神经网络处理器、卷积神经网络数据复用方法及相关设备
KR20190051697A (ko) * 2017-11-07 2019-05-15 삼성전자주식회사 뉴럴 네트워크의 디컨벌루션 연산을 수행하는 장치 및 방법
TW201931215A (zh) * 2017-12-28 2019-08-01 大陸商北京中科寒武紀科技有限公司 集成電路芯片裝置及相關產品
CN110188869A (zh) * 2019-05-05 2019-08-30 北京中科汇成科技有限公司 一种基于卷积神经网络算法的集成电路加速计算的方法及系统

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5138695A (en) 1989-10-10 1992-08-11 Hnc, Inc. Systolic array image processing system
US8583896B2 (en) 2009-11-13 2013-11-12 Nec Laboratories America, Inc. Massively parallel processing core with plural chains of processing elements and respective smart memory storing select data received from each chain
US9159020B2 (en) 2012-09-14 2015-10-13 International Business Machines Corporation Multiplexing physical neurons to optimize power and area
CN104077233B (zh) 2014-06-18 2017-04-05 百度在线网络技术(北京)有限公司 多通道卷积层处理方法和装置
US10049322B2 (en) * 2015-05-21 2018-08-14 Google Llc Prefetching weights for use in a neural network processor
US20160379109A1 (en) 2015-06-29 2016-12-29 Microsoft Technology Licensing, Llc Convolutional neural networks on hardware accelerators
CN111651202B (zh) 2016-04-26 2023-09-22 中科寒武纪科技股份有限公司 一种用于执行向量逻辑运算的装置
US11042795B2 (en) * 2016-06-13 2021-06-22 The Regents Of The University Of Michigan Sparse neuromorphic processor
US10802992B2 (en) 2016-08-12 2020-10-13 Xilinx Technology Beijing Limited Combining CPU and special accelerator for implementing an artificial neural network
KR20180034853A (ko) 2016-09-28 2018-04-05 에스케이하이닉스 주식회사 합성곱 신경망의 연산 장치 및 방법
CN108073977A (zh) 2016-11-14 2018-05-25 耐能股份有限公司 卷积运算装置及卷积运算方法
US10394929B2 (en) * 2016-12-20 2019-08-27 Mediatek, Inc. Adaptive execution engine for convolution computing systems
CN107704922B (zh) 2017-04-19 2020-12-08 赛灵思公司 人工神经网络处理装置
CN107341544B (zh) 2017-06-30 2020-04-10 清华大学 一种基于可分割阵列的可重构加速器及其实现方法
US10713214B1 (en) * 2017-09-27 2020-07-14 Habana Labs Ltd. Hardware accelerator for outer-product matrix multiplication
US10915297B1 (en) * 2017-11-15 2021-02-09 Habana Labs Ltd. Hardware accelerator for systolic matrix multiplication
CN108241890B (zh) 2018-01-29 2021-11-23 清华大学 一种可重构神经网络加速方法及架构
US11487845B2 (en) * 2018-11-28 2022-11-01 Electronics And Telecommunications Research Institute Convolutional operation device with dimensional conversion
EP3671748A1 (en) * 2018-12-21 2020-06-24 IMEC vzw In-memory computing for machine learning
EP3674982A1 (en) * 2018-12-27 2020-07-01 IMEC vzw Hardware accelerator architecture for convolutional neural network
US11675998B2 (en) * 2019-07-15 2023-06-13 Meta Platforms Technologies, Llc System and method for performing small channel count convolutions in energy-efficient input operand stationary accelerator
US11120101B2 (en) * 2019-09-27 2021-09-14 Arm Limited Matrix multiplication system and method
US11568200B2 (en) * 2019-10-15 2023-01-31 Sandisk Technologies Llc Accelerating sparse matrix multiplication in storage class memory-based convolutional neural network inference
US11194549B2 (en) * 2019-10-25 2021-12-07 Arm Limited Matrix multiplication system, apparatus and method
CN111325321B (zh) * 2020-02-13 2023-08-29 中国科学院自动化研究所 基于多神经网络融合的类脑计算系统及指令集的执行方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080069356A (ko) * 2007-01-23 2008-07-28 한국과학기술원 컨벌루셔널 터보 코드에서 사용되는 인터리버의 인터리브드 주소 발생기, 그 방법 및 씨티씨에서 사용되는 인터리버
KR20180050928A (ko) * 2016-11-07 2018-05-16 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치
KR20190051697A (ko) * 2017-11-07 2019-05-15 삼성전자주식회사 뉴럴 네트워크의 디컨벌루션 연산을 수행하는 장치 및 방법
TW201931215A (zh) * 2017-12-28 2019-08-01 大陸商北京中科寒武紀科技有限公司 集成電路芯片裝置及相關產品
CN108805266A (zh) * 2018-05-21 2018-11-13 南京大学 一种可重构cnn高并发卷积加速器
CN109740732A (zh) * 2018-12-27 2019-05-10 深圳云天励飞技术有限公司 神经网络处理器、卷积神经网络数据复用方法及相关设备
CN109656623A (zh) * 2019-03-13 2019-04-19 北京地平线机器人技术研发有限公司 执行卷积运算操作的方法及装置、生成指令的方法及装置
CN110188869A (zh) * 2019-05-05 2019-08-30 北京中科汇成科技有限公司 一种基于卷积神经网络算法的集成电路加速计算的方法及系统

Also Published As

Publication number Publication date
TW202133053A (zh) 2021-09-01
US20210256359A1 (en) 2021-08-19
TWI733334B (zh) 2021-07-11
US11423292B2 (en) 2022-08-23

Similar Documents

Publication Publication Date Title
US11301546B2 (en) Spatial locality transform of matrices
JP7166389B2 (ja) ニューラルネットワークにおけるビット直列計算についてのシステム及び集積回路
CN107145939B (zh) 一种低计算能力处理设备的计算机视觉处理方法及装置
CA3124369A1 (en) Neural network processor
CN111898733B (zh) 一种深度可分离卷积神经网络加速器架构
CN104461449B (zh) 基于向量指令的大整数乘法实现方法及装置
CN111008003B (zh) 数据处理器、方法、芯片及电子设备
CN112395092B (zh) 数据处理方法及人工智能处理器
CN107491416A (zh) 适用于任意维数卷积需求的可重构计算结构及计算调度方法和装置
CN110362293B (zh) 乘法器、数据处理方法、芯片及电子设备
CN110673823B (zh) 乘法器、数据处理方法及芯片
CN113269298A (zh) 卷积神经网络运算装置及其运算的方法
CN110414672B (zh) 卷积运算方法、装置及系统
Matsunaga et al. Multi-operand adder synthesis on FPGAs using generalized parallel counters
CN110554854A (zh) 数据处理器、方法、芯片及电子设备
CN111160542A (zh) 集成电路芯片装置及相关产品
US11256979B2 (en) Common factor mass multiplication circuitry
CN112424745B (zh) 在mac电路中使用不同核对一组数据执行连续mac运算
US7958179B2 (en) Arithmetic method and device of reconfigurable processor
KR102167211B1 (ko) 합성곱 계층의 선택적 데이터 처리 방법 및 이를 이용한 뉴럴 프로세서
CN116151334A (zh) 一种基于多通道脉动阵列的神经网络加速器
CN110688087B (zh) 数据处理器、方法、芯片及电子设备
JP2023542261A (ja) 複数のアキュムレータを有するシストリックアレイセル
CN113628093A (zh) 一种加速图像处理的方法、系统、设备及存储介质
JP7230744B2 (ja) 畳込み演算方法及び演算処理装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination