TWI733334B - 卷積神經網路運算裝置及其運算的方法 - Google Patents

卷積神經網路運算裝置及其運算的方法 Download PDF

Info

Publication number
TWI733334B
TWI733334B TW109104865A TW109104865A TWI733334B TW I733334 B TWI733334 B TW I733334B TW 109104865 A TW109104865 A TW 109104865A TW 109104865 A TW109104865 A TW 109104865A TW I733334 B TWI733334 B TW I733334B
Authority
TW
Taiwan
Prior art keywords
convolution
output
data
value
bidirectional
Prior art date
Application number
TW109104865A
Other languages
English (en)
Other versions
TW202133053A (zh
Inventor
張國強
羅賢君
Original Assignee
財團法人工業技術研究院
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 財團法人工業技術研究院 filed Critical 財團法人工業技術研究院
Priority to TW109104865A priority Critical patent/TWI733334B/zh
Priority to CN202010160647.6A priority patent/CN113269298B/zh
Priority to US16/860,381 priority patent/US11423292B2/en
Application granted granted Critical
Publication of TWI733334B publication Critical patent/TWI733334B/zh
Publication of TW202133053A publication Critical patent/TW202133053A/zh

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)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (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運算硬體運算裝置架構,能於深與淺不同的通道數量、長與寬不同的卷積核心之卷積運算中,均能得到良好的硬體使用效率,是重要的議題。
根據本揭露之第一方面,提出一種卷積神經網路運算裝置,包括一雙向運算模組與一資料排程器。雙向運算模組包括多個雙向輸出運算器、多個列輸出累加器、及多個行輸出累加器。雙向輸出運算器各具有一列輸出埠與一行輸出埠。此些列輸出累加器係耦接到此些列輸出埠。此些行輸出累加器係耦接到對應的此些行輸出埠。資料排程器用以提供一輸入資料之多個資料數值和多個卷積核心之多個卷積數值至此些雙向輸出運算器。其中,於一第一運算模式時,此些雙向輸出運算器透過此些行輸出埠輸出運算結果至對應之此些行輸出累加器。於一第二運算模式時,此些雙向輸出運算器透過此些列輸出埠輸出運算結果至此些列輸出累加器。
根據本揭露之另一方面,提出一種執行卷積神經網路運算的方法,包括下列步驟。提供一雙向運算模組,雙向運算模組包括多個雙向輸出運算器、多個列輸出累加器、及多個行輸出累加器。此些雙向輸出運算器各具有一列輸出埠與一行輸出埠。此些列輸出累加器係耦接到此些列輸出埠。此些行輸出累加器係耦接到對應的此些行輸出埠。藉由一資料排程器提供一輸入資料之多個資料數值和多個卷積核心之多個卷積數值至此些雙向輸出運算器。於一第一運算模式時,此些雙向輸出運算器透過此些行輸出埠輸出運算結果至對應之此些行輸出累加器。於一第二運算模式時,此些雙向輸出運算器透過此些列輸出埠輸出運算結果至此些列輸出累加器。
為了對本揭露之上述及其他方面有更佳的瞭解,下文特舉實施例,並配合所附圖式詳細說明如下:
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:資料饋入單元
第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 109104865-A0305-02-0009-1
請參照第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(Unidirectional Operation 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輸入資料高度H x輸入資料深度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輸入資料高度H x輸入資料深度IC,例如為5x6x128。256個卷積核心的高度、寬度和深度表示為卷積核心寬度KW x卷積核心高度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:卷積核心
RSTA(1)~RSTA(8):第一卷積結果
RSTB(1)~RSTB(8):第二卷積結果
203:資料排程器
205:運算模組陣列
207:單向運算模組
P1(1)~P1(56):單向輸出乘法器
209:雙向運算模組
P2(1)~P2(8):雙向輸出乘法器
ACR(1)~ACR(8):列輸出累加器
ACC(1)~ACC(8):行輸出累加器

Claims (22)

  1. 一種卷積神經網路運算裝置,包括:一雙向運算模組,包括複數個雙向輸出運算器、複數個列輸出累加器、及複數個行輸出累加器,該些雙向輸出運算器各具有一列輸出埠與一行輸出埠,該些列輸出累加器係耦接到該些列輸出埠,該些行輸出累加器係耦接到對應的該些行輸出埠,該些雙向輸出運算器包括MR個雙向輸出乘法器P2(1)~P2(MR),MR為正整數;以及一資料排程器,用以提供一輸入資料之複數個數值和複數個卷積核心之複數個卷積數值至該些雙向輸出運算器;其中,於一第一運算模式時,該些雙向輸出運算器透過該些行輸出埠,輸出運算結果至對應之該些行輸出累加器,於一第二運算模式時,該些雙向輸出運算器透過該些列輸出埠輸出運算結果至該些列輸出累加器。
  2. 如申請專利範圍第1項所述之卷積神經網路運算裝置,該些行輸出累加器包括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. 一種執行卷積神經網路運算的方法,包括:提供一雙向運算模組,該雙向運算模組包括複數個雙向輸出運算器、複數個列輸出累加器、及複數個行輸出累加器,該些雙向輸出運算器各具有一列輸出埠與一行輸出埠,該些列輸出累加器係耦接到該些列輸出埠,該些行輸出累加器係耦接到對應的該些行輸出埠,該些雙向輸出運算器包括MR個雙向輸出乘法器P2(1)~P2(MR),MR為正整數;藉由一資料排程器提供一輸入資料之複數個資料數值和複數個卷積核心之複數個卷積數值至該些雙向輸出運算器;於一第一運算模式時,該些雙向輸出運算器透過該些行輸出埠輸出運算結果至對應之該些行輸出累加器;以及於一第二運算模式時,該些雙向輸出運算器透過該些列輸出埠輸出運算結果至該些列輸出累加器。
  13. 如申請專利範圍第12項所述之方法,該些行輸出累加器包括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項所述之方法,更包括:於一第一運算模式下根據該輸入資料之該些資料數值和該些卷積核心之該些卷積數值輸出對應之一第一資料數值資料流與一第一卷積數值資料流至一多工器;於一第二運算模式下根據該輸入資料之該些資料數值和該些卷積核心之該些卷積數值輸出對應之一第二資料數值資料流與一第二卷積數值資料流至該多工器; 於該第一運算模式下,該多工器輸出該第一資料數值資料流與該第一卷積數值資料流至一資料饋入單元,於該第二運算模式下,該多工器輸出該第二資料數值資料流與該第二卷積數值資料流至該資料饋入單元;以及於該第一運算模式下,該資料饋入單元輸出該第一資料數值資料流與該第一卷積數值資料流至該些雙向輸出運算器,並於該第二運算模式下,該資料饋入單元輸出該第二資料數值資料流與該第二卷積數值資料流至該些雙向輸出運算器。
TW109104865A 2020-02-15 2020-02-15 卷積神經網路運算裝置及其運算的方法 TWI733334B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
TW109104865A TWI733334B (zh) 2020-02-15 2020-02-15 卷積神經網路運算裝置及其運算的方法
CN202010160647.6A CN113269298B (zh) 2020-02-15 2020-03-10 卷积神经网络运算装置及其运算的方法
US16/860,381 US11423292B2 (en) 2020-02-15 2020-04-28 Convolutional neural-network calculating apparatus and operation methods thereof

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
TWI733334B true TWI733334B (zh) 2021-07-11
TW202133053A TW202133053A (zh) 2021-09-01

Family

ID=77227581

Family Applications (1)

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

Country Status (3)

Country Link
US (1) US11423292B2 (zh)
CN (1) CN113269298B (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 (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108805266A (zh) * 2018-05-21 2018-11-13 南京大学 一种可重构cnn高并发卷积加速器
CN109656623A (zh) * 2019-03-13 2019-04-19 北京地平线机器人技术研发有限公司 执行卷积运算操作的方法及装置、生成指令的方法及装置
TW201931215A (zh) * 2017-12-28 2019-08-01 大陸商北京中科寒武紀科技有限公司 集成電路芯片裝置及相關產品
CN110188869A (zh) * 2019-05-05 2019-08-30 北京中科汇成科技有限公司 一种基于卷积神经网络算法的集成电路加速计算的方法及系统

Family Cites Families (29)

* 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
KR100866929B1 (ko) * 2007-01-23 2008-11-04 (주)카이로넷 컨벌루셔널 터보 코드에서 사용되는 인터리버의 인터리브드 주소 발생기, 그 방법 및 씨티씨에서 사용되는 인터리버
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
CN107315568B (zh) 2016-04-26 2020-08-07 中科寒武纪科技股份有限公司 一种用于执行向量逻辑运算的装置
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 에스케이하이닉스 주식회사 합성곱 신경망의 연산 장치 및 방법
KR102631381B1 (ko) * 2016-11-07 2024-01-31 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치
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
KR20190051697A (ko) * 2017-11-07 2019-05-15 삼성전자주식회사 뉴럴 네트워크의 디컨벌루션 연산을 수행하는 장치 및 방법
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
CN109740732B (zh) * 2018-12-27 2021-05-11 深圳云天励飞技术有限公司 神经网络处理器、卷积神经网络数据复用方法及相关设备
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 (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW201931215A (zh) * 2017-12-28 2019-08-01 大陸商北京中科寒武紀科技有限公司 集成電路芯片裝置及相關產品
CN108805266A (zh) * 2018-05-21 2018-11-13 南京大学 一种可重构cnn高并发卷积加速器
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
CN113269298B (zh) 2024-07-12
CN113269298A (zh) 2021-08-17
US20210256359A1 (en) 2021-08-19
US11423292B2 (en) 2022-08-23

Similar Documents

Publication Publication Date Title
JP7166389B2 (ja) ニューラルネットワークにおけるビット直列計算についてのシステム及び集積回路
JP7245338B2 (ja) ニューラルネットワークプロセッサ
CN107145939B (zh) 一种低计算能力处理设备的计算机视觉处理方法及装置
CN107301456B (zh) 基于向量处理器的深度神经网络多核加速实现方法
CN106959937B (zh) 一种面向gpdsp的反卷积矩阵的向量化实现方法
CN110119809A (zh) 深度学习处理中乘法和累加运算的非对称量化
CN109086076A (zh) 神经网络处理装置及其执行向量点积指令的方法
US20210241071A1 (en) Architecture of a computer for calculating a convolution layer in a convolutional neural network
TW201824096A (zh) 執行卷積計算的系統及方法
TW202123093A (zh) 實行卷積運算的系統及方法
CN110163356A (zh) 一种计算装置及方法
CN117933314A (zh) 处理装置、处理方法、芯片及电子装置
CN107491416A (zh) 适用于任意维数卷积需求的可重构计算结构及计算调度方法和装置
WO2023065983A1 (zh) 计算装置、神经网络处理设备、芯片及处理数据的方法
TWI733334B (zh) 卷積神經網路運算裝置及其運算的方法
CN110766128A (zh) 卷积计算单元、计算方法及神经网络计算平台
Uruk et al. Two-machine flowshop scheduling with flexible operations and controllable processing times
CN107516131A (zh) 卷积计算的加速方法和装置、电子设备和存储介质
CN110414672B (zh) 卷积运算方法、装置及系统
CN111859270A (zh) 一种神经网络的卷积方法和装置
WO2023045638A1 (zh) 计算装置、利用计算装置实施卷积运算的方法及相关产品
CN113628093A (zh) 一种加速图像处理的方法、系统、设备及存储介质
JP6888073B2 (ja) チップ装置および関連製品
JP6888074B2 (ja) チップ装置および関連製品
CN110688087B (zh) 数据处理器、方法、芯片及电子设备