TW201905730A - 替代迴圈限制 - Google Patents
替代迴圈限制Info
- Publication number
- TW201905730A TW201905730A TW107120722A TW107120722A TW201905730A TW 201905730 A TW201905730 A TW 201905730A TW 107120722 A TW107120722 A TW 107120722A TW 107120722 A TW107120722 A TW 107120722A TW 201905730 A TW201905730 A TW 201905730A
- Authority
- TW
- Taiwan
- Prior art keywords
- loop
- nesting
- nest
- limit
- tensor
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 19
- 230000004044 response Effects 0.000 claims abstract 6
- 238000004364 calculation method Methods 0.000 description 35
- 238000013528 artificial neural network Methods 0.000 description 27
- 238000004590 computer program Methods 0.000 description 7
- 239000011159 matrix material Substances 0.000 description 6
- 238000006073 displacement reaction Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000010801 machine learning Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 230000004913 activation Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000003321 amplification Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 238000003199 nucleic acid amplification method Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
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/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
- G06F8/452—Loops
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- 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/044—Recurrent networks, e.g. Hopfield 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/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Medical Informatics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Neurology (AREA)
- Devices For Executing Special Programs (AREA)
- Complex Calculations (AREA)
Abstract
本發明描述用於存取一N維張量之方法、系統及設備。在一些實施方案中,一種方法包括對於一第一巢套迴圈之一或多個第一反覆中之各者,執行巢套在該第一巢套迴圈內之一第二巢套迴圈的反覆,直至達到用於該第二巢套迴圈之一第一迴圈界限。針對該第一巢套迴圈之該一或多個第一反覆的該第二巢套迴圈之反覆的一數目回應於該第二巢套迴圈具有超過運算系統之一硬體屬性之一值的反覆之一總數而受限於該第一迴圈界限。在該第一巢套迴圈之一倒數第二個反覆已完成之後,針對該第一巢套迴圈之一最終反覆執行該第二巢套迴圈之一或多個反覆,直至達到一替代迴圈界限。
Description
本說明書大體上係關於使用包括多個運算單元之特殊用途運算單元執行機器學習運算。
神經網路係機器學習模型,其採用一或多層模型以為接收之輸入產生輸出,例如分類。一些神經網路包括除外層以外之一或多個隱藏層。各隱藏層之輸出被用作至網路中之下一層,亦即該網路之下一隱藏層或輸出層的輸入。網路之各層根據各別參數集合之當前值,自接收之輸入產生輸出。
一些神經網路包括一或多個廻旋神經網路層。各廻旋神經網路層具有相關聯的一組核函數。核函數可表示為權重輸入之矩陣結構。各廻旋層使用核函數以處理至該層之輸入。至該層之一組輸入亦可被表示為矩陣結構。
根據本說明書中所描述之標的物之一新穎態樣,一種用於存取N
維張量之方法包括,對於第一巢套迴圈之一或多個第一反覆中之各者,執行巢套在第一巢套迴圈內之第二巢套迴圈之反覆,直至達到用於第二巢套迴圈之第一迴圈界限。針對該第一巢套迴圈之該一或多個第一反覆的該第二巢套迴圈的之反覆的數目回應於第二巢套迴圈具有超過運算系統之硬體屬性之值的反覆之總數而受限於第一迴圈界限。在該第一巢套迴圈之一倒數第二個反覆已完成之後,可針對該第一巢套迴圈之一最終反覆執行該第二巢套迴圈之一或多個反覆,直至達到一替代迴圈界限,其中該替代迴圈界限小於該第一迴圈界限。
此等及其他實施方案可各自任選地包括以下特徵中之一或多者。一些態樣可包括回應於判定該第一巢套迴圈之該倒數第二個反覆已完成而針對第一巢套迴圈之最終反覆而用替代界限取代第一迴圈界限。
在一些態樣中,硬體屬性之值包括運算系統之個別運算單元的數目。各個別運算單元可包括運算塊(compute tile)、處理器或數學單元。
執行巢套在該第一巢套迴圈內之一第二巢套迴圈之反覆直至達到用於該第二巢套迴圈之一第一迴圈界限可包括使用該等運算單元並行地執行該第二巢套迴圈之各反覆。各運算單元可執行該第二巢套迴圈之一各別反覆。
在一些態樣中,該替代迴圈界限係基於由該第二巢套迴圈之反覆之總數除以運算單元之數目產生的餘數值。包括該第一巢套迴圈及該第二巢套迴圈之一組巢套迴圈可包括巢套在該第一巢套迴圈與該第二巢套迴圈之間的一或多個迴圈,且該第二巢套迴圈可巢套在另一迴圈內。該第二巢套迴圈可直接巢套在該第一巢套迴圈內,而無任何其他迴圈巢套在該第一巢套迴圈與該第二巢套迴圈之間。
本說明書中所描述之標的物可實施於特定實施例中以便實現以下優勢中之一或多者。藉由使用多個運算單元,例如,多個運算塊、多個處理器或多個數學單元並行地執行機器學習運算,運算速度及效率增加,允許在更短時間量中執行更複雜機器學習運算。用於巢套迴圈之可調迴圈界限允許即使在反覆之數目並非個別運算單元之數目或其他硬體屬性之倍數時,亦可並行處理巢套迴圈之反覆。可設定用於內迴圈之迴圈界限,使得內迴圈之反覆數目等於除巢套內迴圈之外迴圈之最終反覆以外的全部個別運算單元之數目。此允許內迴圈之各反覆對於外迴圈之各反覆並行執行,例如同時執行。此外,對於除最後反覆之外之全部外迴圈,對於外迴圈之各反覆利用各個別運算單元,其導致更快及更高效之運算。藉由對於外迴圈之最終反覆而用替代迴圈界限取代內迴圈,可減小執行內迴圈之反覆所需要之指令數目,允許更少記憶體裝置及/或更多可用記憶體。
此態樣及其他態樣之其他實施方案包括對應系統、設備及電腦程式,其經組態以執行經編碼於電腦儲存裝置上的方法之動作。一或多個電腦之系統可憑藉已安裝之該系統上、在操作中致使該系統執行該等動作之軟體、韌體、硬體或其組合如此組態。一或多個電腦程式可憑藉具有在由資料處理設備實行時,致使該設備執行該等動作之指令之方式組態。
在隨附圖式及以下描述中闡述本說明書中所描述的標的物之一或多個實施方案之細節。標的物之的其他潛在性特徵、態樣及優勢將自實施方式、圖式簡單說明及申請專利範圍變得顯而易見。
本說明書中所描述之標的物係關於使用替代迴圈限制以並行處理巢套迴圈之反覆,例如,使用包括多個運算單元之硬體運算系統。各運算單元可被實施為運算塊、處理器或數學單元。多個運算單元可經組態以加速神經網路之推斷工作負荷及/或以加速用於判定用於張量元素之記憶體位址之運算。硬體運算系統之各運算單元係整裝的,且可獨立地實行多層神經網路之指定層需要的運算。
具有多個層之神經網路可用於運算推斷。舉例而言,在指定輸入時,神經網路可對於該輸入運算一推斷。神經網路藉由處理經由神經網路之層中之各者之輸入運算此推斷。特定言之,神經網路之層各自具有各別組之權重。各層接收輸入,且根據用於該層之該組權重處理輸入以產生輸出。
因此,為自接收之輸入運算推斷,神經網路接收該輸入且經由神經網路層中之各者處理該輸入,以便產生該推斷,其中自一神經網路層之輸出作為輸入被提供至下一個神經網路層。至神經網路層之資料輸入,例如,至神經網路之輸入,抑或序列中低於該層之層至神經網路層之輸出,可被稱作至該層之啟用輸入(activation input)。
本說明書中所描述之技藝可藉由遍及多個運算單元,例如,多個運算塊、多個處理器或多個數學單元分配張量運算,執行用於張量元素之記憶體位址之運算。記憶體位址之運算可包括基於張量狀態元素判定記憶體位址位移,及將該位移相加至用於該等張量元素之基礎位址。
張量係多維幾何主體,且實例多維幾何主體包括矩陣及資料陣列。大體而言,軟體算法由一或多個運算塊實行,以藉由處理巢套迴圈以遍歷N維張量而執行張量運算。在一實例運算程序中,各迴圈可負責遍歷N維張量之特定維度。對於指定之張量建構,運算塊可需要存取特定張量之元素,以實行與該張量相關之一或多個內積運算。在神經網路層內執行之運算程序可包括輸入張量之放大,其包括具包括權重之參數張量的輸入啟用。該運算包括在一或多個循環上將輸入啟用乘以權重,且跨越諸多循環執行乘積之累加。運算在由記憶體結構提供之輸入啟用乘以另一記憶體結構提供之參數或權重時進行。由於張量被儲存於記憶體中,因此一組張量索引可需要被轉換為一組記憶體位址,以自記憶體擷取張量之正確元素。大體而言,運算塊之張量遍歷單元實行控制操作,其提供與張量相關之各維度之索引及索引元素被遍歷之順序,以執行運算。張量運算在放大結果被寫至輸出匯流排且儲存於記憶體中時結束。
運算塊(或多個運算塊)內之多個數學單元可能並行執行用於N維張量之記憶體位址運算。舉例而言,可對巢套迴圈之最內迴圈的各反覆執行運算。執行張量運算之各迴圈被稱為「張量運算迴圈」且可未必總是最內迴圈。用於此等反覆之運算可使用數學單元並行執行。
遍歷巢套迴圈中之張量需要元素之記憶體位址值之運算,以載入或儲存元素之對應資料值。舉例而言,三維張量之元素可表示藉由神經網路分類之一影像之特徵。第一維度(Z)可表示圖像之寬度,第二維度(Y)可表示圖像之高度,及第三維度(X)可表示圖像中之像素之RGB值。為對圖像進行分類,各RBG值可乘以廻旋層之過濾值,以產生啟用映射。
巢套迴圈可用於判定用於存取張量之各RBG值之記憶體位址。巢套迴圈可包括用於張量之各維度的迴圈。舉例而言,外迴圈(z
)可用於遍歷Z維度(圖像之寬度),中間迴圈(y
)可用於遍歷Y維度(圖像之高度),及內迴圈(x
)可用於遍歷X維度(各像素之三個RGB值)。在內迴圈之各反覆處,對於由外迴圈z及中間迴圈y
值表示之圖像的特定像素的三個RGB值中之一者判定記憶體位址。舉例而言,可在z
=0及y
=0時,在內迴圈x
的第一反覆期間判定用於由Z=0及Y=0表示的圖像之像素之R值的記憶體位址(例如,z
=0;y
=0;x
=0)。類似地,當z
=5且y
=2時,可以在內迴圈x
的第三次反覆期間確定由Z=5及Y=2表示之圖像之像素的G值的記憶體位址(例如z
=5;y
=2;x
=2)。
記憶體位址運算可使用多個運算單元並行執行。舉例而言,若存在三個運算單元,則可並行判定特定像素之各RGB值之記憶體位址值。第一運算單元可判定用於像素之R值之記憶體位址,第二運算單元可判定用於像素之G值之記憶體位址,及第三運算單元可判定像素之B值之記憶體位址。在對於RGB值判定記憶體位址之後,處理單元可使用記憶體位址存取值,且將該值乘以過濾值。
在一些情況下,張量運算迴圈之反覆之數目可超出運算單元之數目。在此類情況下,張量運算迴圈之反覆可劃分成巢套張量運算迴圈之外迴圈的多個並行反覆。舉例而言,對應於張量運算迴圈之N維張量之維度可包括128元素,及運算系統可包括64個運算單元。在此實例中,張量運算迴圈包括128個反覆,其可劃分成兩個64外迴圈反覆,使得64運算在外迴圈之兩個反覆中之各者並行執行。在此實例中,前64個反覆可以分佈在運算單元當中。在完成前64個反覆之後,後64個反覆可分佈在運算單元當中。
在一些情況下,張量運算迴圈反覆之數目可能不為運算單元之數目之準確倍數。舉例而言,對應於張量運算迴圈之維度可包括160元素,且運算系統可具有64個運算單元。在此實例中張量運算迴圈包括160反覆,其可劃分成兩個64外迴圈反覆及32之第三外迴圈反覆。為調整第三外迴圈反覆之張量運算迴圈之反覆數目,在外迴圈之第二反覆之後,例如,在外迴圈之最終反覆之前,用於張量運算迴圈之迴圈界限可自64改變至32。
圖1係實例運算系統102加速張量運算所處的環境100之方塊圖。舉例而言,運算系統102可加速與深度神經網路(deep neural network;DNN)相關之運算。運算系統102包括控制器105及多個個別運算塊112A至112-Z。控制器105經組態以實行關於運算系統102內之張量運算之一或多個指令。儘管未展示,但控制器105可包括用於儲存及存取關於在運算系統102內發生之運算之多種資料的資料記憶體,及用於儲存可由控制器105之一或多個處理器實行之一或多個機器可讀指令的指令記憶體。
控制器105可自主機130接收輸入132,例如,指令、經編譯程式等。在運算系統102執行張量運算之後,控制器105可提供輸出134至主機。舉例而言,輸出134可為用於張量元素之記憶體位址。控制器105可經由主機介面(未圖示)自主機130接收輸入132及提供輸出134至該主機。
控制器105可經由一或多個資料通信路徑(例如一或多個匯流排)來與運算塊112-A至112-Z通信。類似地,運算塊112-A至112-Z可經由一或多個匯流排彼此通信。具有多個運算塊之實例運算系統描述於題為「神經網路運算塊(Neural Network Compute Tile)」且在2016年10月27日申請之美國專利申請案第15/335,769號中,該申請案據此係以全文引用的方式併入。
各運算塊112-A至112-Z包括處理單元114、資料儲存媒體116及張量遍歷單元120。儲存媒體116儲存運算系統102內之資訊。在一些實施方案中,儲存媒體116係一或多個揮發性記憶體單元。在一些其他實施方案中,儲存媒體116係一或多個非揮發性記憶體單元。儲存媒體116亦可為另一形式之電腦可讀媒體,諸如軟碟裝置、硬碟裝置、光碟裝置,或磁帶裝置、快閃記憶體或其他類似的固態記憶體裝置,或裝置之陣列,包括呈儲存區域網路或其他組態之裝置。當由處理單元114實行時,指令致使處理單元114執行一或多個任務。
處理單元114可包括一或多個處理器及/或一或多個有限狀態機(finite-state machine;FSM)。處理單元114可能實行自控制器105接收之指令。舉例而言,處理單元114可使用張量遍歷單元120實行用於運算張量元素的記憶體位址(或記憶體位址位移)之指令。對於包括FSM之處理單元,FSM可能自張量遍歷單元120查詢用於張量元素之記憶體位址。
大體而言,張量遍歷單元120判定與一或多個張量相關之狀態。在一些實施方案中,狀態可包括迴圈界限值、目前迴圈索引變數值、用於判定記憶體位址值之部份位址位移值,及/或用於處置支路迴圈界限之程式計數器值。張量遍歷單元120可被實施為特殊應用積體電路。
張量遍歷單元120轉換張量索引為記憶體位址。舉例而言,張量遍歷單元120可轉換一組N維張量索引為一維位址空間。張量遍歷單元120可藉由使張量元素之記憶體位址為元素之維度索引之組合(例如,線性的組合),執行此種轉換。
張量遍歷單元120可包括一或多個張量狀態元件122及一或多個數學單元124。舉例而言,運算塊112-A之張量遍歷單元120包括四個數學單元124-A至124-D。其他運算塊之其他張量遍歷單元可包括其他數目之數學單元。張量狀態元素122中之各者可為儲存元件,例如暫存器或任何適合之儲存電路。各數學單元124可包括一或多個算術邏輯單元(arithmetic logic unit;ALU)及/或一或多個硬體加法器。數學單元124可用於例如基於儲存於張量狀態元件中之值,運算記憶體位址或張量元素之記憶體位址位移值。使用張量遍歷單元判定記憶體位址之實例技藝描述於2016年10月27日申請的美國專利申請案第15/335,769號,標題為「神經網路運算塊」,及2016年2月3日申請的美國專利申請案第15/014,265號,標題為「存取多維張量中之資料」中。控制器105可使用運算塊112-A至112-Z協調張量運算。舉例而言,控制器105可接收指令以判定用於張量元素之記憶體位址。控制器105可使用巢套迴圈執行張量運算。
各迴圈可負責遍歷N維張量之各別維度。多維張量可為矩陣或多維矩陣。舉例而言,2維張量係矩陣,同時3維張量係由多個二維矩陣構成之三維矩陣。N維張量之各維度可包括一或多個元素,其中各元素可儲存各別資料值。舉例而言,張量在程式中可為變數,其中該變數可具有三維。第一維度可具有三百元素的長度,第二維度可具有一千元素的長度,而第三維度可具有二十元素的長度。當然,各維度中其他數目之元素係可能的。
遍歷巢套迴圈中之張量可包括元素之記憶體位址值之運算,以載入或儲存元素之對應資料值。for迴圈係巢套迴圈之一實例,其中三個迴圈索引變數(例如,i、j及k)追蹤之三個迴圈可經巢套以遍歷三維張量。在神經網路中,元素值可在與張量相關之一或多個內積運算中使用。舉例而言,元素值可乘以對應參數或權重。可依次遍歷張量之元素,使用巢套之for迴圈以存取元素及使用元素之值執行一或多個運算。繼續三維張量實例,外部for迴圈可用於遍歷變數i追蹤之迴圈,中間for迴圈迴圈可用於遍歷變數j追蹤之迴圈,而內部for迴圈可用於遍歷變數k追蹤之迴圈。在此實例中,存取中第一元素可為(i=0,j=0,k=0),第二元素可為(i=0,j=0,k=1),等等。運算塊112-A至112-Z之張量遍歷單元120可用於使用巢套迴圈依次判定元素記憶體位址,使得處理單元可存取元素值及使用元素值執行該一或多個運算。亦可類似地使用巢套for迴圈存取權重或參數值。張量遍歷單元120亦可用於判定運算中使用之權重或參數及/或運算之輸出之位址,其可被用作至神經網路之隱藏層之輸入。
舉例而言,如美國專利申請案第15/014,265號中所描述,張量狀態元件122可包括一組張量索引元素、一組張量界限元素及一組維度倍增元素。各群組元素可經佈置為具有M列N行之2D陣列。一組之各列可表示用於張量之張量索引資訊。一組之各行可能表示關於張量之巢套迴圈索引變數值的資訊(例如,張量索引值、張量界限值或維度乘數值)。舉例而言,張量索引元素之2-D陣列中之一行可能表示變數i之張量索引資訊,一行可能表示變數j之張量索引資訊,而一行可能表示變數k之張量索引資訊。
各張量索引元素可能追蹤巢套迴圈中之迴圈之巢套迴圈變數。舉例而言,一張量索引元素可被指配以追蹤巢套迴圈索引變數i,一張量索引元素可被指配以追蹤巢套迴圈索引變數j,及一張量索引元素可被指配以追蹤巢套迴圈索引變數k。各張量界限元素在張量索引元素中具有對應元素。各張量界限元素可表示與張量相關之巢套迴圈索引變數值的張量界限資訊。舉例而言,一張量界限元素可表示巢套迴圈索引變數i之張量界限資訊,一張量界限元素可表示巢套迴圈索引變數j之張量界限資訊,而一張量界限元素可表示巢套迴圈索引變數k之張量界限資訊。
各維度乘數元素可能表示張量索引元素中之對應元素與之相乘之乘數。為判定元素之記憶體位址,張量遍歷單元120可藉由將儲存於巢套迴圈索引變數之張量索引元素中之值乘以巢套迴圈索引變數之乘數,判定各巢套迴圈索引變數之記憶體位址位移。張量遍歷單元120可隨後將全部相乘之乘積相加在一起,以判定對應於經存取之元素之記憶體位址。
張量遍歷單元120可在巢套迴圈之內迴圈之各反覆之後更新張量索引元素。對於內迴圈之各反覆,張量遍歷單元120可更新迴圈之張量索引元素,例如,藉由增加內迴圈之張量索引元素。若更新後的內迴圈之張量索引元素等於儲存於內迴圈之張量界限元素中之值,則張量索引元素可被重設,及用於巢套內迴圈之下一個外迴圈之張量索引元素可被更新。如上文所述,張量遍歷單元120可隨後藉由將張量索引元素乘以其對應乘數,且相加乘積,判定對應於內迴圈之此反覆之下一個元素之記憶體位址。
控制器105可藉由反覆程式之巢套迴圈協調張量運算,及對於一或多種迴圈之各反覆,例如,巢套迴圈之最內(或其他)迴圈之各反覆執行運算。為加速張量運算,控制器105可使用多個運算單元並行執行張量運算中之至少一些。運算單元可為個別運算塊或個別數學單元。舉例而言,控制器105可請求運算塊112-A執行第一張量運算,及同時請求運算塊112-B執行第二張量運算。在另一實例中,控制器105可請求運算塊112-A執行特定張量之張量運算。張量遍歷單元120可隨後使用數學單元124-A至124-D並行執行張量運算。
當迴圈之索引變數等於(或超過)迴圈界限時,迴圈大致完成。舉例而言,迴圈可被編程為「for(i
=0;i
<3;i
++)」,其中i
係索引變數,界限為3。此實例迴圈包括三個反覆(i
=0、i
=1及i
=2)。若索引變數等於3,則迴圈結束而不經運算。當使用多個運算單元執行並行運算(例如,使用多個運算塊112或多個數學單元124)時,控制器105可每當運算被指配給運算單元時反覆索引變數,及在指配迴圈之另一反覆至另一運算單元之前比較索引變數與界限。
在一些實施方案中,由控制器105實行之程式之巢套迴圈可具有已基於運算系統102之屬性而判定之迴圈界限。舉例而言,一或多個迴圈之迴圈界限可基於運算系統102之運算塊112-A至112-Z之數目,或張量遍歷單元120之數學單元之數目而判定。
在一些實施方案中,編譯器136編譯用於執行張量之張量運算的程式。編譯器136可經組態以基於包括於張量之一或多個維度中的元素之數目及/或運算系統102之運算單元之數目判定一或多個迴圈之迴圈界限。用於迴圈之迴圈界限係迴圈之索引值等於迴圈界限時迴圈完成之數字。換言之,用於迴圈之迴圈界限可能等於迴圈反覆之數目。
編譯器136可經組態以建立一或多個張量運算迴圈(執行張量運算之迴圈)之外迴圈,及判定外迴圈之一或多個迴圈界限。建立之外迴圈可用於劃分張量運算迴圈之反覆為外迴圈之多個反覆。舉例而言,運算系統102可包括64個運算單元(例如,運算塊或數學單元),及張量運算迴圈可包括128個反覆。在此實例中,運算系統102能夠並行執行64個張量運算。為並行執行64個張量運算,張量運算迴圈之128個反覆可被劃分成各自包括張量運算迴圈之64個反覆之兩個外迴圈反覆。舉例而言,外迴圈之第一反覆可包括張量運算迴圈之反覆1至64。外迴圈之第二反覆可包括張量運算迴圈之反覆65至128。以此方式,使用運算系統之64個運算單元中之各者並行執行外迴圈之第一反覆之64個張量運算(例如,每塊一運算,及使用64個運算單元並行執行外迴圈之第二反覆之64個張量運算。
編譯器136可能判定是否應建立外迴圈,及若應建立,則在經編譯程式中建立外迴圈。在一些實施方案中,當張量運算迴圈相較於將實行程式之運算系統102之運算單元之數目具有更多反覆時,編譯器136僅建立外迴圈(除經編譯之程式中之任何外迴圈以外)。若張量運算迴圈相較於運算單元之數目具有更多反覆,則編譯器136可建立外迴圈以劃分張量運算迴圈之反覆為多個外迴圈反覆。
編譯器136亦可基於執行張量運算之迴圈之反覆之數目,及/或將實行程式之運算系統102之運算單元之數目,判定用於建立之外迴圈之迴圈界限。若反覆之數目係運算單元之數目之倍數,則張量運算迴圈之反覆之數目可等於對應於迴圈之維度中之元素之數目。編譯器136可能以張量運算迴圈反覆之數目除以運算單元之數目,運算單元之數目代表使用該等運算單元可並行執行之最高數目反覆。舉例而言,若張量運算迴圈反覆之數目係128,運算單元之數目係64,則用於建立之外迴圈的迴圈界限可為二(128/64)。因此,在此實例中,外迴圈之第一反覆將包括張量運算迴圈之64個並行反覆,及外迴圈之第二反覆將包括張量運算迴圈之64個並行反覆。如下文所論述,若除法導致餘數,則用於外迴圈之迴圈界限可遞增一。
編譯器136亦可基於張量運算迴圈反覆之數目及將實行程式之運算系統102運算單元之數目判定張量運算迴圈之一或多個迴圈界限。若張量運算迴圈反覆之數目係運算單元之數目之準確倍數,則用於張量運算迴圈之迴圈界限可等於為張量運算迴圈建立之外迴圈之各反覆之運算單元之數目。舉例而言,若張量運算迴圈具有120反覆,運算系統包括60運算單元,則用於張量運算迴圈之迴圈界限可為60,外迴圈之迴圈界限可為2。在此實例中,外迴圈之第一反覆將包括張量運算迴圈之60反覆(例如,並行反覆),及外迴圈之第二反覆將包括張量運算迴圈之60反覆。
若張量運算迴圈反覆之數目並非運算單元之數目之準確倍數,則編譯器136可為張量運算迴圈判定兩個或超過兩個迴圈界限。舉例而言,編譯器136可藉由張量運算迴圈反覆之數目除以運算單元之數目。由於反覆之數目不為準確倍數,因此,此除法之結果將包括一餘數值。舉例而言,反覆之數目可為160,運算單元之數目可為50。在此實例中,編譯器136可以反覆之數目(160)除以運算單元之數目(50)以獲取商3及餘數10。編譯器136可設定用於張量運算迴圈之第一迴圈界限等於運算單元之數目(例如,50),及張量運算迴圈之替代迴圈界限等於餘數(例如,10)。在程式實行期間,替代迴圈界限可用於外迴圈之最終反覆張量運算迴圈,及第一迴圈界限可用於外迴圈之各其他反覆。繼續先前實例,外迴圈應具有4之迴圈界限,此係因為160/50=3且具10之餘數,且用於外迴圈之迴圈界限基於餘數遞增一。對於外迴圈之前三個反覆,用於張量運算迴圈之迴圈界限應為50。因此,對於外迴圈前三個反覆中之各者,張量運算迴圈之50反覆將並行執行,導致執行150反覆。對於外迴圈之最後反覆,用於張量運算迴圈之迴圈界限應為10,導致張量運算迴圈之全部160反覆在外迴圈之四個反覆中執行。
經編譯程式可包括指令,其致使控制器105之處理器在外迴圈倒數第二個反覆已完成之後及外迴圈最終反覆執行之前,自第一迴圈界限改變用於張量運算迴圈界限至替代迴圈界限。以此方式,用於替代迴圈界限之迴圈界限被用作外迴圈最終反覆之張量運算迴圈之迴圈界限,其被建立以劃分張量運算迴圈之反覆為多個外迴圈反覆。
在一些實施方案中,編譯器136可建立張量運算迴圈之外迴圈為巢套張量運算迴圈之立即外迴圈,亦即,外迴圈與張量運算迴圈之間未巢套其他迴圈。在一些實施方案中,編譯器136可建立外迴圈為其中巢套張量運算迴圈之巢套迴圈最外迴圈,亦即,外迴圈不巢套在另一迴圈內。藉由在巢套迴圈之最外迴圈處建立外迴圈,使用巢套迴圈判定之記憶體位址及張量遍歷單元120更連續地對準張量元素。舉例而言,在不調整用於最終反覆之迴圈界限情況下,可判定迴圈反覆之記憶體位址,其中將不儲存資料,導致浪費記憶體空間。迴圈之最後反覆之替代限制允許張量遍歷單元僅為張量元素判定記憶體位址,而無需使用額外的指令。
圖2說明使用多個運算單元210遍歷張量205之實例巢套迴圈215及220。各個別運算單元210可為運算塊或數學單元。在此實例中,張量205係三維張量,其具有X維度、Y維度及Z維度。X維度長度為160元素,Y維度長度為30元素,及Z維度長度為100元素,儘管張量205未按比例繪製。張量205中之各元素可儲存神經網路運算中使用之各別資料值。
大體而言,張量可使用巢套迴圈215遍歷。在此實例中,使用內迴圈遍歷X維度,使用中間迴圈遍歷Y維度,及使用外側迴圈遍歷Z維度。對於內迴圈之各反覆,對於對應於內迴圈反覆之x、y及z值之張量元素運算出記憶體位址。
多個運算單元210可為運算系統之部分,例如,各運算單元210可與圖1之運算塊112-A至112-Z或圖1之數學單元124相同或相似。在此實例中運算系統包括64個運算單元,但其他數目之運算單元係可能的。運算單元210可能例如使用巢套迴圈220,並行執行張量205之張量運算。
編譯器(例如圖1之編譯器136)可基於包括巢套迴圈215之程式(或代表巢套迴圈215之程式碼)及將實行程式之運算系統之運算單元210之數目,產生巢套迴圈220。舉例而言,編譯器可判定應建立外迴圈以劃分張量運算迴圈之反覆(在此實例中為X維度之迴圈)為多個外迴圈反覆。
為判定是否應建立外迴圈,編譯器可比較各張量運算迴圈反覆之數目與運算系統之硬體屬性。舉例而言,硬體屬性可為運算單元210之數目或運算系統可並行執行之運算之總數。若張量運算迴圈之迴圈反覆之數目超過硬體屬性值,則編譯器可建立外迴圈。在此實例中,X維度迴圈之反覆數目(160)超過運算單元之數目(64)。因此,編譯器以藉由索引變數「i」建立外迴圈。
編譯器亦可基於張量運算迴圈之反覆數目及硬體屬性值(例如,運算單元之數目)判定用於外迴圈之迴圈界限。舉例而言,編譯器可藉由將張量運算迴圈之反覆之數目(160)除以運算單元之數目(64),導致2伴隨餘數32,判定該界限。如上文所述外界限可為任何餘數遞增1。因此,在此實例中外迴圈界限係3。
編譯器亦可基於張量運算迴圈之反覆數目及硬體屬性值,判定張量運算迴圈之一或多個迴圈界限。若張量運算迴圈之反覆數目並不超出硬體屬性值,則用於張量運算迴圈之迴圈界限可等於反覆之數目。若張量運算迴圈反覆之數目係硬體屬性之準確倍數,則用於張量運算迴圈之迴圈界限可等於硬體屬性值。若張量運算迴圈之反覆數目超過硬體屬性值,但不為硬體屬性值之準確倍數,則張量運算迴圈可具有用於除迴圈之最終反覆之外之全部的第一迴圈界限,及用於迴圈最終反覆之替代迴圈界限。第一迴圈界限可等於硬體屬性值,及替代迴圈界限可等於張量運算迴圈反覆之數目除以硬體屬性值之後之餘數。
在此實例中,張量運算迴圈反覆之數目(160)超過運算單元之數目(64),但不為運算單元數目之準確倍數。因此,用於X維度之第一迴圈界限係64,及替代界限係32 (160/64=2,伴隨餘數32)。對於外迴圈(迴圈i
)之最初兩個反覆,用於X維度迴圈之迴圈界限將為64。對於外迴圈最終反覆,用於X維度之迴圈界限將為32。
對於外迴圈之第一反覆,可使用64個運算單元並行判定張量之64記憶體位址。舉例而言,第一運算單元可為z=0;y=0;x=0判定記憶體位址;第二運算單元可為z=0;y=0;x=1判定記憶體位址;…第六十四運算單元可為z=0;y=0;x=63運算記憶體位址。對於外迴圈之最後反覆,64個運算單元中之32可用於判定內迴圈之最後32反覆。
圖3係說明用於執行張量運算之實例程序300的流程圖。程序300可由一或多個電腦之系統,例如圖1之運算系統102執行。
對於第一巢套迴圈之一或多個第一反覆中之各者,該系統執行巢套在第一巢套迴圈內之第二巢套迴圈之反覆,直至達到用於第二巢套迴圈之第一迴圈界限(302)。舉例而言,第二巢套迴圈可為張量運算(例如,記憶體位址運算之內積運算)作為程式之部分執行之迴圈。
第一迴圈可為外迴圈,其例如由編譯包括第一及第二巢套迴圈之程式的編譯器建立。舉例而言,編譯器可識別張量運算迴圈,判定是否建立用於張量運算迴圈之外迴圈,及若建立,則判定用於建立之外迴圈及/或張量運算迴圈之一或多個迴圈界限。
編譯器可基於第二巢套迴圈之反覆之總數(例如,對應於第二迴圈之張量之維度中的元素之總數)及該系統之運算單元之數目而判定用於第二巢套迴圈之第一迴圈界限。舉例而言,若第二迴圈之反覆之總數小於運算單元之數目,則第一迴圈界限可等於第二巢套迴圈之反覆之總數。若第二巢套迴圈之反覆之總數係運算單元之數目之準確倍數,則第一迴圈界限可等於反覆之數目。若第二巢套迴圈之反覆之總數大於運算單元之數目,但並非運算單元之準確倍數,則編譯器可將第一迴圈界限設定為運算單元之數目,且判定等於第二巢套迴圈之反覆之總數除以運算單元之數目之餘數的替代迴圈界限。
在此實例中,假設第二巢套迴圈反覆之總數大於運算單元之數目,且第二巢套迴圈反覆之總數不為運算單元之數目之準確倍數。因此,在此實例中,用於該第一巢套迴圈之該一或多個第一疊代之該第二巢套迴圈的多種疊代之數目回應於具有超過該運算單元之一硬體屬性值之一總疊代數目的該第二巢套迴圈而受限於該第一迴圈界限。
該系統可並行執行第二巢套迴圈之反覆。舉例而言,如上文所述,用於第二巢套迴圈之第一迴圈界限可被判定,使得第二巢套迴圈反覆之數目並不超出運算單元之數目。在此實例中,用於第一巢套迴圈之一或多個第一反覆中之各者之第二迴圈之各反覆可並行執行。隨著該系統分配第二巢套迴圈反覆至運算單元,該系統可為第二迴圈反覆索引變數。當索引變數等於第一迴圈界限時,第二迴圈已完成。
該系統判定第一迴圈之倒數第二個(即,相鄰於最後)反覆是否已完成(304)。舉例而言,該系統可比較第一迴圈之索引變數與用於第一迴圈之迴圈界限。若迴圈界限與索引變數之間的差值係指定數目(例如,1),則該系統可判定第一迴圈之倒數第二個反覆尚未完成。舉例而言,具索引變數「i
」之迴圈可包括三個反覆。在此實例中,迴圈可被編程為「for (i
=0;i
<3)」或「for (i
=1;i
<4)」。
在第一實例中,迴圈界限係3,迴圈之最終反覆對於i
=2執行,及迴圈之倒數第二個反覆對於i
=1執行。大體而言,索引變數通常在迴圈反覆執行時或其剛剛執行之後被遞增。在此實例中,若在迴圈反覆執行之後索引變數係2,則執行之反覆係倒數第二個反覆。因此,若界限(3)與索引變數之間的差值等於1,則迴圈之倒數第二個反覆係完成之反覆。
類似地,在第二實例中,迴圈界限係4,迴圈之最終反覆對於i
=3執行,及迴圈之倒數第二個反覆對於i
=2執行。在此實例中,若迴圈反覆執行之後索引變數係3,則執行之反覆係倒數第二個反覆。因此,若界限(3)與索引變數之間的差值等於1,則迴圈之倒數第二個反覆係完成之反覆。若第一迴圈之倒數第二個反覆尚未完成,則該系統返回至操作302,以為對應於更新後的索引變數值之第一巢套迴圈下一個反覆執行第二巢套迴圈之反覆。
若第一迴圈之倒數第二個反覆已完成,則該系統而用替代界限(而非第一迴圈界限)取代第二迴圈(308)。舉例而言,該系統可使用替代界限以用於第一巢套迴圈之最終反覆的第二巢套迴圈。
該系統為第一巢套迴圈之最終反覆執行第二巢套迴圈之一或多個反覆,直至達到替代迴圈界限(310)。舉例而言,若剩餘第二巢套迴圈之多個反覆,則該系統可使用多個運算單元並行執行反覆。
本說明書中所描述之標的物及功能性操作之實施例可實施於數位電子電路中、有形地實施之電腦軟體或韌體中、包括在本說明書中所揭示之結構及其結構等效物的電腦硬體中,或它們中之一或多種的組合中。本說明書中所描述之標的物之實施例可被實施為一或多個電腦程式,亦即,經編碼於有形的非暫態程式載體上,以藉由資料處理設備實行或以控制其操作之電腦程式指令的一或多個模組。替代地或另外,程式指令可經編碼於人工產生之傳播信號,例如機器產生之電氣、光學或電磁信號上,其經產生以編碼資訊以用於傳輸至適合之接收器設備以用於由資料處理設備實行。電腦儲存媒體可為機器可讀存儲裝置、機器可讀儲存基板、隨機或串行存取記憶體裝置,或它們之一或多種之組合。
本說明書中所描述之處理及邏輯流程可藉由執行一或多個電腦程式之一或多個可編程電腦實行,以藉由操作輸入資料及產生輸出執行功能。處理及邏輯流程亦可由特殊用途邏輯電路,例如,FPGA (場可程式化閘陣列)、ASIC (特殊應用積體電路)或GPGPU (通用圖形處理單元)執行,且設備亦可被實施為以上電路。
適用於實行電腦程式之電腦包括,藉助於實例,可基於一般或特殊用途微處理器或其兩者,或任何其他種類之中央處理單元。通常,中央處理單元將自唯讀記憶體或隨機存取記憶體或其兩者接收指令及資料。電腦之必需元件係用於執行或實行指令之中央處理單元,及用於儲存指令及資料之一或多個記憶體裝置。一般而言,電腦亦將包括或以操作方式耦接,以自用於儲存資料之一或多個大容量儲存裝置,例如,磁碟、磁光碟或光碟,接收資料,或將資料轉移至一或多個大容量儲存裝置,或二者皆有。然而,電腦無需具有此類裝置。此外,電腦可嵌入於另一裝置中,例如行動電話、個人數位助理(personal digital assistant;PDA)、行動音訊或視訊播放器、遊戲主機、全球定位系統(Global Positioning System;GPS)接收器或攜帶型儲存裝置,例如,通用串列匯流排(universal serial bus;USB)隨身碟,在此僅列舉一些。
適合於儲存電腦程式指令及資料之電腦可讀媒體包括所有形式之非揮發性記憶體、媒體及記憶體裝置,包括(藉助於實例)半導體記憶裝置,例如EPROM、EEPROM及快閃記憶體裝置;磁碟,例如內部硬碟或可移除式磁碟;磁光碟;及CD-ROM及DVD-ROM磁碟。處理器及記憶體可由特殊用途邏輯電路補充或併入於其中。
儘管本說明書包含諸多特定實施方案細節,但此不應被認作任何本發明範疇或可能主張之內容之限制,而應認作可特定針對於特定發明之特定實施例之特徵的描述。在單獨實施例之上下文中描述於此說明書中之某些特徵亦可在單一實施例中以組合形式實施。相反地,在單個實施例之上下文中所述之各種特徵亦可分別在多個實施例中實施或以任何適合子組合來實施。此外,儘管上文可將特徵描述為以某些組合起作用且甚至最初按此來主張,但來自所主張組合之一或多個特徵在一些情況下可自該組合刪除,且所主張之組合可針對子組合或子組合之變化。
類似地,儘管在圖式中以特定次序來描繪操作,但不應將此理解為需要以所展示之特定次序或以按次序執行此等操作,或執行所有所說明之操作以達成合乎需要之結果。在某些情形下,多任務及並行處理可為有利的。此外,不應將在上述實施例中之各種系統組件之分離理解為需要在所有實施例中進行此分離,且應理解,所描述之程式組件及系統可大體上在單個軟體產品中整合在一起或經封裝至多個軟體產品中。
已描述標的物之特定實施例。其他實施例在以下申請專利範圍之範疇內。舉例而言,可以不同次序執行申請專利範圍中所述之動作且仍實現合乎需要的結果。作為一個實例,附圖中描繪之程序未必需要展示之特定次序,或依序次序,以實現期望之結果。在某些實施方案中,多任務及並行處理可為有利的。
100‧‧‧環境
102‧‧‧運算系統
105‧‧‧控制器
112-A‧‧‧運算塊
112-B‧‧‧運算塊
112-Z‧‧‧運算塊
114‧‧‧處理單元
116‧‧‧儲存媒體
120‧‧‧張量遍歷單元
122‧‧‧張量狀態元素
124-A‧‧‧數學單元
124-B‧‧‧數學單元
124-C‧‧‧數學單元
124-B‧‧‧數學單元
130‧‧‧主機
132‧‧‧輸入
134‧‧‧輸出
136‧‧‧編譯器
205‧‧‧張量
210‧‧‧運算單元
215‧‧‧巢套迴圈
220‧‧‧巢套迴圈
300‧‧‧用於執行張量運算之實例程序
302‧‧‧步驟
304‧‧‧步驟
308‧‧‧步驟
310‧‧‧步驟
圖1係實例運算系統加速張量運算的環境之方塊圖。
圖2說明用於使用倍數運算單元遍歷張量之實例巢套迴圈。
圖3係說明用於執行張量運算之實例程序的流程圖。
各種圖式中之相同附圖標號及標示指示相同元件。
Claims (19)
- 一種由一運算系統執行之用於存取一N 維張量之方法,其包含: 對於一第一巢套迴圈之一或多個第一反覆中之各者,執行巢套在該第一巢套迴圈內之一第二巢套迴圈之反覆,直至達到用於該第二巢套迴圈之一第一迴圈界限,其中針對該第一巢套迴圈之該一或多個第一反覆的該第二巢套迴圈之反覆的一數目回應於該第二巢套迴圈具有超過該運算系統之運算單元的一數目之一值的反覆之一總數而受限於該第一迴圈界限;及 在該第一巢套迴圈之一倒數第二個反覆已完成之後,針對該第一巢套迴圈之一最終反覆執行該第二巢套迴圈之一或多個反覆,直至達到一替代迴圈界限,其中該替代迴圈界限小於該第一迴圈界限。
- 如請求項1之方法,其進一步包含回應於判定該第一巢套迴圈之該倒數第二個反覆已完成而針對該第一巢套迴圈之該最終反覆而用替代界限取代該第一迴圈界限。
- 如請求項1之方法,其中各個別運算單元包含一運算塊、一處理器或一數學單元。
- 如請求項2之方法,其中: 執行巢套在該第一巢套迴圈內之一第二巢套迴圈之反覆直至達到用於該第二巢套迴圈之一第一迴圈界限包含使用該等運算單元並行地執行該第二巢套迴圈之各反覆;且 各運算單元執行該第二巢套迴圈之一各別反覆。
- 如請求項2之方法,其中該替代迴圈界限係基於由該第二巢套迴圈之反覆之該總數除以運算單元之該數目產生的一餘數值。
- 如請求項1之方法,其中包括該第一巢套迴圈及該第二巢套迴圈之一組巢套迴圈包括巢套在該第一巢套迴圈與該第二巢套迴圈之間的一或多個迴圈,且該第二巢套迴圈係巢套在另一迴圈內。
- 如請求項1之方法,其中該第二巢套迴圈係直接巢套在該第一巢套迴圈內,而無任何其他迴圈巢套在該第一巢套迴圈與該第二巢套迴圈之間。
- 一種用於存取一N 維張量之系統,該系統包含: 複數個個別運算單元; 一或多個處理器,其經組態以執行以下操作: 對於一第一巢套迴圈之一或多個第一反覆中之各者,執行巢套在該第一巢套迴圈內之一第二巢套迴圈之反覆,直至達到用於該第二巢套迴圈之一第一迴圈界限,其中針對該第一巢套迴圈之該一或多個第一反覆的該第二巢套迴圈之反覆的一數目回應於該第二巢套迴圈具有超過該等運算單元之一數目的反覆之一總數而受限於該第一迴圈界限;及 在該第一巢套迴圈之一倒數第二個反覆已完成之後,針對該第一巢套迴圈之一最終反覆執行該第二巢套迴圈之一或多個反覆,直至達到一替代迴圈界限,其中該替代迴圈界限小於該第一迴圈界限。
- 如請求項8之系統,其中該一或多個處理器經進一步組態以回應於判定該第一巢套迴圈之該倒數第二個反覆已完成而針對該第一巢套迴圈之該最終反覆而用替代界限取代該第一迴圈界限。
- 如請求項8之系統,其中各個別運算單元包含一運算塊、一處理器或一數學單元。
- 如請求項8之系統,其中: 執行巢套在該第一巢套迴圈內之一第二巢套迴圈之反覆直至達到用於該第二巢套迴圈之一第一迴圈界限包含使用該等運算單元並行地執行該第二巢套迴圈之各反覆;且 各運算單元執行該第二巢套迴圈之一各別反覆。
- 如請求項8之系統,其中該替代迴圈界限係基於由該第二巢套迴圈之反覆之該總數除以運算單元之該數目產生的一餘數值。
- 如請求項8之系統,其中包括該第一巢套迴圈及該第二巢套迴圈之一組巢套迴圈包括巢套在該第一巢套迴圈與該第二巢套迴圈之間的一或多個迴圈,且該第二巢套迴圈係巢套在另一迴圈內。
- 如請求項8之系統,其中該第二巢套迴圈係直接巢套在該第一巢套迴圈內,而無任何其他迴圈巢套在該第一巢套迴圈與該第二巢套迴圈之間。
- 一種用於存取一N 維張量之設備,該設備包含: 複數個個別運算單元,其各自運算用於張量元素之記憶體位址;及 一控制器,其經組態以藉由執行包含以下各者之操作將巢套迴圈之反覆指派至該等個別運算單元: 對於一第一巢套迴圈之一或多個第一反覆中之各者,執行巢套在該第一巢套迴圈內之一第二巢套迴圈之反覆,直至達到用於該第二巢套迴圈之一第一迴圈界限,其中針對該第一巢套迴圈之該一或多個第一反覆的該第二巢套迴圈之反覆的一數目回應於該第二巢套迴圈具有超過該等運算單元之一數目的反覆之一總數而受限於該第一迴圈界限,且其中該等運算單元中之一者針對該第二巢套迴圈之各反覆判定用於一張量元素之一記憶體位址;及 在該第一巢套迴圈之一倒數第二個反覆已完成之後,針對該第一巢套迴圈之一最終反覆執行該第二巢套迴圈之一或多個反覆,直至達到一替代迴圈界限,其中該替代迴圈界限小於該第一迴圈界限。
- 如請求項15之設備,其中該控制器經組態以執行其他操作,包含回應於判定該第一巢套迴圈之該倒數第二個反覆已完成而針對該第一巢套迴圈之該最終反覆而用替代界限取代該第一迴圈界限。
- 如請求項15之設備,其中各個別運算單元包含一運算塊、一處理器或一數學單元。
- 如請求項15之設備,其中: 執行巢套在該第一巢套迴圈內之一第二巢套迴圈之反覆直至達到用於該第二巢套迴圈之一第一迴圈界限包含使用該等運算單元並行地執行該第二巢套迴圈之各反覆;且 各運算單元執行該第二巢套迴圈之一各別反覆。
- 如請求項15之設備,其中該替代迴圈界限係基於由該第二巢套迴圈之反覆之該總數除以運算單元之該數目產生的一餘數值。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/627,022 | 2017-06-19 | ||
US15/627,022 US10248908B2 (en) | 2017-06-19 | 2017-06-19 | Alternative loop limits for accessing data in multi-dimensional tensors |
PCT/US2018/029796 WO2018236468A1 (en) | 2017-06-19 | 2018-04-27 | ALTERNATE LOOP LIMITS |
??PCT/US2018/029796 | 2018-04-27 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201905730A true TW201905730A (zh) | 2019-02-01 |
TWI672594B TWI672594B (zh) | 2019-09-21 |
Family
ID=62186548
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW107120722A TWI672594B (zh) | 2017-06-19 | 2018-06-15 | 用於存取n維張量之方法、系統及設備 |
TW108130504A TWI710974B (zh) | 2017-06-19 | 2018-06-15 | 用於基於一n維張量之張量元素執行運算之方法及系統,及相關的非暫時性電腦儲存媒體 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW108130504A TWI710974B (zh) | 2017-06-19 | 2018-06-15 | 用於基於一n維張量之張量元素執行運算之方法及系統,及相關的非暫時性電腦儲存媒體 |
Country Status (7)
Country | Link |
---|---|
US (2) | US10248908B2 (zh) |
EP (1) | EP3642708A1 (zh) |
JP (2) | JP7035080B2 (zh) |
KR (2) | KR102261768B1 (zh) |
CN (2) | CN116663604A (zh) |
TW (2) | TWI672594B (zh) |
WO (1) | WO2018236468A1 (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11321092B1 (en) * | 2017-11-08 | 2022-05-03 | Habana Labs Ltd. | Tensor-based memory access |
US10936942B2 (en) * | 2017-11-21 | 2021-03-02 | Google Llc | Apparatus and mechanism for processing neural network tasks using a single chip package with multiple identical dies |
US10373291B1 (en) * | 2018-01-31 | 2019-08-06 | Google Llc | Image transformation for machine learning |
CN109359732B (zh) | 2018-09-30 | 2020-06-09 | 阿里巴巴集团控股有限公司 | 一种芯片及基于其的数据处理方法 |
JP6832329B2 (ja) * | 2018-12-18 | 2021-02-24 | 富士通株式会社 | データ構造 |
US11748599B2 (en) * | 2019-02-21 | 2023-09-05 | Texas Instruments Incorporated | Super-tiling in neural network processing to enable analytics at lower memory speed |
EP3828698B1 (en) * | 2019-04-04 | 2022-07-20 | Cambricon Technologies Corporation Limited | Data processing method and apparatus, and related product |
US11354564B2 (en) * | 2019-06-27 | 2022-06-07 | Intel Corporation | Tuning of loop orders in blocked dense basic linear algebra subroutines |
CN114270319A (zh) * | 2019-10-07 | 2022-04-01 | 谷歌有限责任公司 | 在机器学习计算单元之间重新分配张量元素 |
CN114430838A (zh) * | 2019-12-19 | 2022-05-03 | 谷歌有限责任公司 | 使用神经网络加速器来处理连续输入 |
US11275671B2 (en) | 2020-07-27 | 2022-03-15 | Huawei Technologies Co., Ltd. | Systems, methods and media for dynamically shaped tensors using liquid types |
US11954580B2 (en) | 2020-09-16 | 2024-04-09 | Meta Platforms, Inc. | Spatial tiling of compute arrays with shared control |
US11704562B1 (en) | 2020-11-04 | 2023-07-18 | Meta Platforms, Inc. | Architecture for virtual instructions |
US11709783B1 (en) | 2020-11-11 | 2023-07-25 | Meta Platforms, Inc. | Tensor data distribution using grid direct-memory access (DMA) controller |
US11972349B1 (en) * | 2020-11-12 | 2024-04-30 | Meta Platforms, Inc. | Flexible compute array utilization in a tensor processor |
US12001893B1 (en) | 2020-12-28 | 2024-06-04 | Meta Platforms, Inc. | Distributed synchronization scheme |
US11922306B2 (en) | 2020-12-28 | 2024-03-05 | Meta Platforms, Inc. | Tensor controller architecture |
US11656854B2 (en) * | 2021-08-30 | 2023-05-23 | Huawei Technologies Co., Ltd. | Methods and devices for computing a memory size for software optimization |
US20230196081A1 (en) * | 2021-12-21 | 2023-06-22 | International Business Machines Corporation | Federated learning for training machine learning models |
CN115599442B (zh) * | 2022-12-14 | 2023-03-10 | 成都登临科技有限公司 | 一种ai芯片、电子设备及张量处理方法 |
Family Cites Families (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3102027B2 (ja) * | 1990-11-20 | 2000-10-23 | 日本電気株式会社 | ループ制御のネスティング管理機構 |
US5752037A (en) | 1996-04-26 | 1998-05-12 | Hewlett-Packard Company | Method of prefetching data for references with multiple stride directions |
US5958048A (en) * | 1996-08-07 | 1999-09-28 | Elbrus International Ltd. | Architectural support for software pipelining of nested loops |
US6374403B1 (en) | 1999-08-20 | 2002-04-16 | Hewlett-Packard Company | Programmatic method for reducing cost of control in parallel processes |
US6438747B1 (en) * | 1999-08-20 | 2002-08-20 | Hewlett-Packard Company | Programmatic iteration scheduling for parallel processors |
GB2359641B (en) * | 2000-02-25 | 2002-02-13 | Siroyan Ltd | Mapping circuitry and method |
US6952821B2 (en) * | 2002-08-19 | 2005-10-04 | Hewlett-Packard Development Company, L.P. | Method and system for memory management optimization |
US7107199B2 (en) * | 2002-10-31 | 2006-09-12 | Hewlett-Packard Development Company, L.P. | Method and system for the design of pipelines of processors |
US7047480B2 (en) * | 2002-11-12 | 2006-05-16 | Microsoft Corporation | Matrix multiplication in a Galois field for forward error correction |
US7225439B2 (en) * | 2003-03-21 | 2007-05-29 | Sun Microsystems, Inc. | Combining write-barriers within an inner loop with fixed step |
WO2005029318A2 (en) | 2003-09-19 | 2005-03-31 | University Of Delaware | Methods and products for processing loop nests |
CN100520714C (zh) * | 2005-01-25 | 2009-07-29 | Nxp股份有限公司 | 多线程处理器 |
US8806183B1 (en) * | 2006-02-01 | 2014-08-12 | Ixys Ch Gmbh | Blank bit and processor instructions employing the blank bit |
US8904155B2 (en) * | 2006-03-17 | 2014-12-02 | Qualcomm Incorporated | Representing loop branches in a branch history register with multiple bits |
US8438365B2 (en) * | 2006-10-06 | 2013-05-07 | Calos Fund Limited Liability Company | Efficient data loading in a data-parallel processor |
US20080141013A1 (en) | 2006-10-25 | 2008-06-12 | On Demand Microelectronics | Digital processor with control means for the execution of nested loops |
ATE463788T1 (de) * | 2007-06-26 | 2010-04-15 | Ericsson Telefon Ab L M | Datenverarbeitungseinheit für anweisungen in geschachtelten schleifen |
US8087012B2 (en) | 2007-08-21 | 2011-12-27 | International Business Machines Corporation | Eliminating maximum/minimum operations in loop bounds |
US8509162B2 (en) * | 2008-02-13 | 2013-08-13 | Qualcomm Incorporated | System and method for scheduling over multiple hops |
US20090327674A1 (en) * | 2008-06-27 | 2009-12-31 | Qualcomm Incorporated | Loop Control System and Method |
US20100122066A1 (en) * | 2008-11-12 | 2010-05-13 | Freescale Semiconductor, Inc. | Instruction method for facilitating efficient coding and instruction fetch of loop construct |
US20100274972A1 (en) * | 2008-11-24 | 2010-10-28 | Boris Babayan | Systems, methods, and apparatuses for parallel computing |
CA2684226A1 (en) * | 2009-10-30 | 2011-04-30 | Ibm Canada Limited - Ibm Canada Limitee | Eleminating redundant operations for common properties using shared real registers |
JP5402746B2 (ja) * | 2010-03-18 | 2014-01-29 | 富士通株式会社 | 最適化処理プログラム,最適化処理装置および最適化処理方法 |
US8683185B2 (en) * | 2010-07-26 | 2014-03-25 | International Business Machines Corporation | Ceasing parallel processing of first set of loops upon selectable number of monitored terminations and processing second set |
JP2012032986A (ja) * | 2010-07-30 | 2012-02-16 | Fujitsu Ltd | コンパイル方法及びプログラム |
US20140181171A1 (en) * | 2012-12-24 | 2014-06-26 | Pavel Dourbal | Method and system for fast tensor-vector multiplication |
US20140188961A1 (en) * | 2012-12-27 | 2014-07-03 | Mikhail Plotnikov | Vectorization Of Collapsed Multi-Nested Loops |
CN103218347B (zh) * | 2013-04-28 | 2016-01-20 | 清华大学 | 面向可重构阵列的多参数融合性能建模方法 |
US9087394B1 (en) * | 2014-02-13 | 2015-07-21 | Raycast Systems, Inc. | Computer hardware architecture and data structures for packet binning to support incoherent ray traversal |
US9875104B2 (en) * | 2016-02-03 | 2018-01-23 | Google Llc | Accessing data in multi-dimensional tensors |
US10175980B2 (en) | 2016-10-27 | 2019-01-08 | Google Llc | Neural network compute tile |
-
2017
- 2017-06-19 US US15/627,022 patent/US10248908B2/en active Active
-
2018
- 2018-04-27 KR KR1020197030429A patent/KR102261768B1/ko active IP Right Grant
- 2018-04-27 WO PCT/US2018/029796 patent/WO2018236468A1/en active Search and Examination
- 2018-04-27 CN CN202310558267.1A patent/CN116663604A/zh active Pending
- 2018-04-27 KR KR1020217016591A patent/KR102278661B1/ko active IP Right Grant
- 2018-04-27 EP EP18725366.1A patent/EP3642708A1/en active Pending
- 2018-04-27 JP JP2019556242A patent/JP7035080B2/ja active Active
- 2018-04-27 CN CN201880025248.XA patent/CN110520834B/zh active Active
- 2018-06-15 TW TW107120722A patent/TWI672594B/zh active
- 2018-06-15 TW TW108130504A patent/TWI710974B/zh active
-
2019
- 2019-03-08 US US16/297,091 patent/US10885434B2/en active Active
-
2022
- 2022-03-02 JP JP2022031840A patent/JP7279226B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
CN110520834A (zh) | 2019-11-29 |
JP7035080B2 (ja) | 2022-03-14 |
TWI672594B (zh) | 2019-09-21 |
TW201947466A (zh) | 2019-12-16 |
CN110520834B (zh) | 2023-05-23 |
JP2020524318A (ja) | 2020-08-13 |
KR20210068155A (ko) | 2021-06-08 |
JP7279226B2 (ja) | 2023-05-22 |
JP2022084674A (ja) | 2022-06-07 |
US10248908B2 (en) | 2019-04-02 |
US20180365561A1 (en) | 2018-12-20 |
WO2018236468A1 (en) | 2018-12-27 |
KR20190126887A (ko) | 2019-11-12 |
KR102261768B1 (ko) | 2021-06-07 |
US20190205756A1 (en) | 2019-07-04 |
CN116663604A (zh) | 2023-08-29 |
TWI710974B (zh) | 2020-11-21 |
EP3642708A1 (en) | 2020-04-29 |
KR102278661B1 (ko) | 2021-07-16 |
US10885434B2 (en) | 2021-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI672594B (zh) | 用於存取n維張量之方法、系統及設備 | |
KR102243036B1 (ko) | 가산기를 이용한 다차원 텐서의 데이터 액세스 | |
CN109324827B (zh) | 用于处理用于访问数据的指令的装置、方法和系统 | |
TWI627593B (zh) | 用於類神經網路計算的旋轉資料 | |
TWI678617B (zh) | 用於在使用加法器之多維張量中存取資料之系統、電腦實施方法及設備 | |
TWI777442B (zh) | 用於傳送資料之設備、方法及系統 | |
GB2567038B (en) | Accessing prologue and epilogue data |