TW202247049A - 基於卷積運算的資料處理方法及電路 - Google Patents
基於卷積運算的資料處理方法及電路 Download PDFInfo
- Publication number
- TW202247049A TW202247049A TW111107980A TW111107980A TW202247049A TW 202247049 A TW202247049 A TW 202247049A TW 111107980 A TW111107980 A TW 111107980A TW 111107980 A TW111107980 A TW 111107980A TW 202247049 A TW202247049 A TW 202247049A
- Authority
- TW
- Taiwan
- Prior art keywords
- convolution
- data
- input data
- convolution operation
- size
- Prior art date
Links
Images
Landscapes
- Complex Calculations (AREA)
Abstract
本發明實施例提供一種基於卷積運算的資料處理方法及電路。在方法中,提供分享記憶體架構,提供分批或重複資料的卷積運算,提供資料儲存到多記憶體的分配機制,並提供有符號的填充機制。藉此,可提供彈性且有效率的卷積運算機制及架構。
Description
本發明是有關於一種資料處理機制,且特別是有關於一種基於卷積運算的資料處理方法及電路。
神經網路是人工智慧(Artificial Intelligence,AI)中的一個重要主題,並是透過模擬人類腦細胞的運作來進行決策。值得注意的是,人類腦細胞中存在著許多神經元(Neuron),且這些神經元會透過突觸(Synapse)來互相連結。各神經元可經由突觸接收訊號,且此訊號經轉化後的輸出會再傳導到另一個神經元。各神經元的轉化能力不同,且人類透過前述訊號傳遞與轉化的運作,可形成思考與判斷的能力。神經網路即是依據前述運作方式來得到對應能力。
在神經網路的運作中,輸入向量與對應突觸的權重進行卷積運算,從而擷取特徵。值得注意的是,輸入值及權重值的數量可能很多,但現有架構針對大數量的資料通常會遭遇到較高功耗、較常等待時間及較多空間用量等問題。
有鑑於此,本發明實施例提供一種基於卷積運算的資料處理方法及電路,可提供更有效率的資料配置。
本發明實施例的基於卷積運算的資料處理方法包括(但不僅限於)下列步驟:提供總和暫存器。依據總和暫存器的大小讀取數個卷積核(kernel)中的卷積核組。卷積核組中的那些卷積核的數量相同於總和暫存器的大小。將輸入資料與第一卷積核組的卷積運算結果透過先入先出(First Input First Output,FIFO)暫存在總和暫存器。
本發明實施例的基於卷積運算的資料處理電路包括(但不僅限於)一個或更多個記憶體及處理器。記憶體用以儲存程式碼。處理器耦接記憶體。處理器經配置用以載入且執行程式碼以執行下列步驟:提供總和暫存器。依據總和暫存器的大小讀取數個卷積核中的卷積核組。卷積核組中的那些卷積核的數量相同於總和暫存器的大小。將輸入資料與第一卷積核組的卷積運算結果透過先入先出暫存在總和暫存器。
基於上述,依據本發明實施例的基於卷積運算的資料處理方法及電路,可分批形成且處理多組卷積核組,從而有效地利用記憶體空間,並可提升運算效率。
為讓本發明的上述特徵和優點能更明顯易懂,下文特舉實施例,並配合所附圖式作詳細說明如下。
圖1是依據本發明一實施例的資料處理電路100的元件方塊圖。請參照圖1,資料處理電路100包括(但不僅限於)一個或更多個記憶體110及處理器150。
記憶體110可以是靜態或動態隨機存取記憶體(Random Access Memory,RAM)、唯讀記憶體(Read-Only Memory,ROM)、快閃記憶體(Flash Memory)、寄存器(Register)、組合邏輯電路(Combinational Circuit)或上述元件的組合。在一實施例中,記憶體110用於乘積累加運算(Multiply Accumulate,MAC)或卷積運算所用的輸入資料、卷積核(kernel)、權重、激勵(activation)運算、池化(pooling)運算及/或其他神經網路運算所用的數值。在其他實施例中,應用者可依據實際需求而決定記憶體110所儲存資料的類型。在一實施例中,記憶體110用以儲存程式碼、軟體模組、組態配置、資料或檔案,並待後續實施例詳述。
處理器150耦接記憶體110。處理器150可以是由多工器、加法器、乘法器、編碼器、解碼器、或各類型邏輯閘中的一者或更多者所組成的電路,並可以是中央處理單元(Central Processing Unit,CPU)、圖形處理單元(Graphic Processing unit,GPU),或是其他可程式化之一般用途或特殊用途的微處理器(Microprocessor)、數位信號處理器(Digital Signal Processor,DSP)、可程式化控制器、現場可程式化邏輯閘陣列(Field Programmable Gate Array,FPGA)、特殊應用積體電路(Application-Specific Integrated Circuit,ASIC)、神經網路加速器或其他類似元件或上述元件的組合。在一實施例中,處理器150經配置用以執行資料處理電路100的所有或部份作業,且可載入並執行記憶體110所儲存的各軟體模組、程式碼、檔案及資料。在一些實施例中,處理器150的運作可透過軟體實現。
在一實施例中,處理器150包括一個或更多個處理元件(Processing Element,PE)151。這些處理元件151經組態執行相同或不同指令規定的操作。例如,卷積運算、矩陣運算或其他運算。
下文中,將搭配資料處理電路100中的各項元件或電路說明本發明實施例所述之方法。本方法的各個流程可依照實施情形而隨之調整,且並不僅限於此。
圖2是依據本發明一實施例的資料處理方法-儲存配置的流程圖。請參照圖2,處理器150依據數個記憶體110中的第一記憶體的單一位址(下文稱這記憶體110的某一個位址為第一位址)的儲存空間大小將輸入資料中的第一部分資料儲存在記憶體110中。具體而言,每次待處理的輸入資料的大小不一定相同。舉例而言,圖3是依據本發明一實施例的輸入資料D1的示意圖。請參照圖3,輸入資料D1的大小/尺寸為寬x*高y*通道數z。即,輸入資料D1包括x*y*z個元素。若以座標系為例,則輸入資料D1中在通道數z為零的那些元素的座標可標示為:
表(1)
須說明的是,表(1)所示的寬x及高y的數值僅作為範例說明,且通道數z可能是8、16、32或其他數值。此外,輸入資料可能是用於後續卷積運算或其他運算所用的感測值、影像、檢測數據、特徵圖(feature map)、卷積核(kernel)、或權重,並可視應用者的實際需求而自行變更其內容。
x0,y0 | x1,y0 | x2,y0 | x3,y0 | x4,y0 | x5,y0 | x6,y0 | x7,y0 |
x0,y1 | x1,y1 | x2,y1 | x3,y1 | x4,y1 | x5,y1 | x6,y1 | x7,y1 |
x0,y2 | x1,y2 | x2,y2 | x3,y2 | x4,y2 | x5,y2 | x6,y2 | x7,y2 |
x0,y3 | x1,y3 | x2,y3 | x3,y3 | x4,y3 | x5,y3 | x6,y3 | x7,y3 |
x0,y4 | x1,y4 | x2,y4 | x3,y4 | x4,y4 | x5,y4 | x6,y4 | x7,y4 |
x0,y5 | x1,y5 | x2,y5 | x3,y5 | x4,y5 | x5,y5 | x6,y5 | x7,y5 |
x0,y6 | x1,y6 | x2,y6 | x3,y6 | x4,y6 | x5,y6 | x5,y6 | x5,y6 |
值得注意的是,資料儲存在記憶體110的位置可能會影響後續存取資料的效率及空間使用率。在本發明實施例中,這第一部分資料的大小不大於第一位址的儲存空間大小。換句而言,處理器150將輸入資料依據單一位址所提供的儲存空間大小來拆分出多個部分資料,並將輸入資料中的部分資料儲存在記憶體110中。此處部分資料代表輸入資料中的部分或全部。
在一實施例中,處理器150比較輸入資料的通道數量與第一位址的儲存空間大小。各記憶體110包括一個或更多個記憶體位址(例如,前述第一位址),且各記憶體位址提供一定的儲存空間大小供資料儲存。舉例而言,圖4是依據本發明一實施例的多記憶體的儲存空間的示意圖。請參照圖4,假設資料處理電路100包括記憶體M1~M8,且各記憶體M1~M8的單一位址的寬度W(即,儲存空間)為32位元。
圖5A是依據本發明一實施例的多記憶體的儲存配置的示意圖。請參照圖4及圖5A,假設輸入資料的大小為7×7×8,則處理器150比較通道數(即,8)及第一位址的寬度(即,32),並得出比較結果為寬度為四倍的通道數。
圖5B是依據本發明一實施例的多記憶體的儲存配置的示意圖。請參照圖4及圖5B,假設輸入資料的大小為7×7×16,則處理器150比較通道數(即,16)及第一位址的寬度(即,32),並得出比較結果為寬度為兩倍的通道數。
圖5C是依據本發明一實施例的多記憶體的儲存配置的示意圖。請參照圖4及圖5C,假設輸入資料的大小為7×7×64,則處理器150比較通道數(即,64)及第一位址的寬度(即,32),並得出比較結果為通道數為兩倍的寬度。
處理器150可依據通道數量與第一位址的儲存空間大小的比較結果決定第一部分資料所包括的輸入資料的元素的元素數量。在一實施例中,若處理器150決定比較結果為通道數量未大於第一位址的儲存空間大小,則進一步決定通道數量與元素數量的乘積未大於第一位址的儲存空間大小。
以圖5A為例,單一地址的寬度為四倍的通道數。因此,元素數量可以是4、3、2或1。以4個元素為例,記憶體M1的地址n(正整數)儲存輸入資料中的通道1~8且座標為(x0,y0)(以表(1)的座標系為例)、(x1,y0)、(x2,y0)及(x3,y0)的元素。以圖5B為例,寬度為兩倍的通道數。因此,元素數量可以是2或1。以2個元素為例,地址n儲存輸入資料中的通道1~8且座標為(x1,y0)及(x1,y0)的元素。由此可知,第一位址儲存輸入資料中的相同座標的多個通道的元素,且本發明實施例是以單一元素的所有通道優先分配。
在另一實施例中,若處理器150決定比較結果為通道數量大於第一位址的儲存空間大小,則進一步決定第一部分資料所包括的元素數量為一。由於單一位址的儲存空間大小不足以儲存單一元素的所有通道,因此處理器150可拆分通道。
以圖5C為例,單一地址的通道數為兩倍的寬度。因此,元素數量是1,且處理器150將32個通道拆分成第1~16通道及第17~32通道。地址n儲存輸入資料中的通道1~32且座標為(x0,y0)的元素。
請參照圖2,處理器150依據那些記憶體110中的第二記憶體的單一地址(下文稱這記憶體110的某一個位址為第二位址)的儲存大小將輸入資料中的第二部分資料儲存在第二記憶體中(步驟S230)。具體而言,這第二部分資料的大小不大於第二位址的儲存空間大小。值得注意的是,第一位址所儲存的第一部分資料在任一通道的輸入資料的二維座標中的座標與第二位址所儲存的第二部分資料的座標不同。即,處理器150繼續處理輸入資料中尚未被儲存的其他資料。同理地,在一實施例中,處理器150比較輸入資料的通道數量與第二位址的儲存空間大小,並依據通道數量與第二位址的儲存空間大小的比較結果決定第二部分資料所包括的輸入資料的元素的元素數量。
在一實施例中,若處理器150決定比較結果為通道數量未大於第二位址的儲存空間大小,則進一步決定通道數量與元素數量的乘積未大於第二位址的儲存空間大小。以圖5A及4個元素為例,記憶體M2的地址n儲存輸入資料中的通道1~8且座標為(x4,y0)、(x5,y0)、(x6,y0)及(x7,y0)的元素(因座標(x0,y0)、(x1,y0)、(x2,y0)及(x3,y0)已儲存在記憶體M1,故依照順序分配)。以圖5B且2個元素為例,記憶體M2的地址n儲存輸入資料中的通道1~8且座標為(x2,y0)及(x3,y0)的元素。
在另一實施例中,若處理器150決定比較結果為通道數量大於第二位址的儲存空間大小,則進一步決定第二部分資料所包括的元素數量為一。以圖5C為例且元素數量是1,記憶體M2的地址n儲存輸入資料中的通道1~32且座標為(x1,y0)的元素。此外,依此類推,處理器150可分配其他部分資料至其他記憶體M3~M8。
在一實施例中,處理器150可依據第一記憶體的第三位址(不同於第一位址)的儲存空間大小將輸入資料中的第三部分資料儲存在第一記憶體的第三位址中。這第三部分資料的大小不大於第三位址的儲存空間大小。此外,第三位址所儲存的第三部分資料在任一通道的輸入資料的二維座標中的座標與第一位址所儲存的第一部分資料的座標可能相同或不同。
以圖5C為例,記憶體M1的地址n儲存座標為(x0,y0)的元素,記憶體M1的地址n+1儲存座標為(x1,y1)的元素,且記憶體M1的地址n+7儲存座標為(x0,y0)的元素。在一些實施例中,第三部分資料所包括的通道可能不同第一部分資料所包括的通道。以圖5C為例,記憶體M1的地址n儲存座標為(x1,y1)且通道1~32的元素,且地址n+7儲存座標為(x1,y1)且通道33~64的元素。
藉此,本發明實施例可充分地運用記憶體110中的儲存空間。
圖6是依據本發明一實施例的資料處理方法-填充擴展的流程圖。請參照圖6,處理器150依據填充(padding)模式擴展輸入資料,以產生擴展的輸入資料(步驟S610)。具體而言,在一些應用情境中(例如,資料經卷積運算、或保持邊界資訊的需求),需要擴展輸入資料的大小,並可透過填充資料來達成需求。填充模式可以是反射鏡像(reflect mirror)模式或對稱鏡像(symmetric mirror)模式。
舉例而言,輸入資料如表(2)所示:
表(2)
若經反射鏡像模式填充,則可得出:
表(3)
若經對稱鏡像模式填充,則可得出:
表(4)
1 | 2 | 3 |
4 | 5 | 6 |
2 | 1 | 1 | 2 | 3 | 3 | 2 |
2 | 1 | 1 | 2 | 3 | 3 | 2 |
5 | 4 | 4 | 5 | 6 | 6 | 5 |
5 | 4 | 4 | 2 | 6 | 6 | 5 |
6 | 5 | 4 | 5 | 6 | 5 | 4 |
3 | 2 | 1 | 2 | 3 | 2 | 1 |
6 | 5 | 4 | 5 | 6 | 5 | 4 |
3 | 2 | 1 | 2 | 3 | 2 | 1 |
處理器150對擴展的輸入資料中的多個元素提供二維座標系的座標(步驟S630)。具體而言,以輸入資料在單一通道下的寬與高而言,這些元素可形成一個矩陣。若為這矩陣的各元素提供一個座標,則可採用二維座標系。二維座標系的橫向軸對應於輸入資料的寬,且座標系的縱向軸對應於輸入資料的高。此外,軸上的任一整數值對應到輸入資料的一個或更多個元素。
在一實施例中,處理器150可設定未擴展的輸入資料的座標在第一維度(即,橫向軸)介於0至w且在第二維度(即,縱向軸)介於0至h。w為未擴展的輸入資料的寬,且h為未擴展的輸入資料的高。此外,處理器150可設定擴展的輸入資料中的不屬於未擴展的輸入資料的座標在第一維度小於零或大於w且在第二維度小於零或大於h。
舉例而言,圖7A是依據本發明一實施例的輸入資料的示意圖。請參照圖7A,寬為3且高為6的輸入資料的座標(x,y)中x為0~3且y為0~6。圖7B是依據本發明一實施例的經填充的輸入資料(即,擴展的輸入資料)的示意圖。請參照圖7B,假設處理器150對輸入資料的上面、下面、左邊及右邊向外各填充兩個元素,擴展的輸入資料的座標(x,y)中x為-2~5且y為-2~8。由此可知,被填充的元素的座標在x或y座標小於零、x座標大於w或y座標大於h。值得注意的是,負值需要有符號數來表示,但有符號數不利於儲存或呼叫。
請參照圖6,處理器150依據位置資訊讀取擴展的輸入資料中的那些元素(步驟S650)。具體而言,位置資訊包括未擴展的輸入資料的大小及擴展的輸入資料中的那些元素的座標。例如,位置資訊為(w,h,c,x,y),其中w為輸入資料的寬,h為輸入資料的高,c為輸入資料的通道,x為某一元素在二維坐標系中的橫向軸的座標,且y為這元素在二維坐標系中的縱向軸的座標。輸入資料被儲存在記憶體110中。若欲讀取輸入資料中的特定元素,則處理器150可依據這位置資訊存取這元素。
與採用有符號數的座標不同之處,若位置資訊中的某一個元素的座標在這二維座標系中位於未擴展的輸入資料之外,則處理器150依據填充模式轉換位置資訊中的座標。值得注意的是,位置資訊中的座標皆映射至未擴展的輸入資料的座標。也就是說,位置資訊中代表元素位置的座標皆可對應至正值。
以表(3)及表(4)為例,經填充的元素的數值皆相同於未擴展的輸入資料中的某一個元素的數值。因此,經填充的元素的座標可由未擴展的輸入資料中具有相同數值的元素的座標代替。
在一實施例中,假設未擴展的輸入資料的寬為w且高為h,則處理器150可決定位置資訊所對應的某一元素的座標在第一維度是否小於零或大於w,並/或決定位置資訊所對應的這元素的座標在第二維度是否小於零或大於h。若這座標在第一維度小於零或大於w或在第二維度小於零或大於h,則處理器150判斷這元素是屬於擴展的輸入資料。相反而言,這座標在第一維度未小於零或未大於w或在第二維度未小於零或未大於h,則處理器150判斷這元素是屬於未擴展的輸入資料。
針對座標轉換,在一實施例中,填充模式為反射鏡像模式。若處理器150決定位置資訊所對應的某一元素的座標在第一維度小於零,則進一步將這元素在第一維度的第一座標轉變成第一座標的絕對值。以數學式表示為:
…(1)
其中ABS()代表絕對值。
若處理器150決定這位置資訊所對應的這元素的座標在第一維度大於w,則進一步將這元素的第一座標轉變成第一座標加一與兩倍w的差值(或是w減去第一座標、w與1的差值取絕對值所得之值)。以數學式表示為:
…(6)
若處理器150決定這位置資訊所對應的這元素的座標在第二維度大於h,則進一步將這元素的第二座標轉變成第二座標加一與兩倍h的差值(或是h減去第二座標、h與1的差值取絕對值所得之值)。以數學式表示為:
…(8)
由此可知,處理器150可依據填充模式決定位置資訊所指示的元素的數值為未擴展的輸入資料中一者。藉此,只要未擴展的輸入資料的大小及填充模式的類型,即可存取擴展的輸入資料的元素。
在一實施例中,為了有效率地存取記憶體110所儲存的資料,本發明實施例更提出了分享記憶體的架構。圖8是依據本發明一實施例的共享記憶體的示意圖。請參照圖8,處理器150可將一個或更多個記憶體110組合成一個記憶體庫(bank)(例如,記憶體庫Bk
0~Bk
m-1(m為正整數)。各記憶體庫Bk
0~Bk
m-1設有仲裁器(arbiter)Arb。
在一實施例中,仲裁器Arb用以判斷指令CMD所指示的儲存位置。以圖8為例,假設圖中所示8個指令CMD分別是用於讀取資料(例如,前述輸入資料或卷積核/權重)的一個或更多個元素(例如,所欲讀取資料rch0~rch3)以及寫入資料的一個或更多個元素(例如,所欲寫入資料wch0~wch3)。在一實施例中,指令CMD可包括指示元素的座標的位置資訊。例如,表(1)所示的二維坐標系或結合通道的三維坐標系的座標。在一實施例中,指令CMD可更包括輸入資料的大小。例如,輸入資料的寬、高及/或通道。在一實施例中,指令CMD可更包括填充模式。
在一實施例中,各仲裁器Arb依據指令CMD的位置資訊判斷所指示元素是否在所屬的記憶體庫Bk
0~Bk
m-1內。若所指示的元素在所屬的記憶體庫Bk
0~Bk
m-1內,則這仲裁器Arb對所屬的記憶體庫Bk
0、Bk
1、…或Bk
m-1發出讀取或寫入指令,以讀取或寫入這元素。若所指示的元素不在所屬的記憶體庫Bk
0~Bk
m-1內,則這仲裁器Arb忽略這指令CMD或禁能/不發出這元素的讀取/寫入指令。
以圖8為例,受仲裁器Arb判斷讀取輸入資料的一個或更多個元素rch0~rch3的指令CMD,即可讀取出這些元素rch0~rch3的資料DATA(例如,所讀取的資料rch0_rdata~rch3_rdata)。
在一實施例中,各仲裁器Arb依據指令CMD的位置資訊排序指令CMD。仲裁器Arb所收到的兩個或更多個指令CMD可能都存取相同元素。而仲裁器Arb可排序這些指令CMD。
在一實施例中,指令CMD及資料DATA依據先入先出(FIFO)機制輸入或輸出指令CMD或資料DATA。先入先出暫存器可將第一個進入其內的指令CMD或資料DATA第一個被移出,第二個進入其內的指令CMD或資料DATA第二個被移出,其餘順序依次類推。藉此,可提供資料存取的效率。
圖9是依據本發明一實施例的資料處理方法-運算配置的流程圖。請參照圖9,處理器150提供總和暫存器(步驟S910)。具體而言,處理器150或處理元件151可能經組態有特定大小的運算量。例如,單次運算量為3×3×32。須說明的是,這運算量可能因規格或應用需求而不同,且本發明實施例不加以限制。此外,總和暫存器是用於儲存處理器150或處理元件151運算後所輸出的資料。然而,總和暫存器的大小可依據應用者的需求而變更,本發明實施例不加以限制。
值得注意的是,所需運算的資料量可能超過運算量。例如,圖10是依據本發明一實施例的卷積運算的示意圖。請參照圖10,輸入資料Pixel的大小為3×3×128,卷積核WT的大小為3×3×128,且總共有128個卷積核K1~K128。圖中所示1~9代表輸入資料Pixel中的一個通道的第1~9元素,或是卷積核WT中的一個通道的第1~9元素。此外,圖中所示ch1~32(即,ch1~ch32)代表第1~第32通道,ch33~64(即,ch33~ch64)代表第33~第64通道,其餘依此類推。假設進行3×3×32的卷積運算(例如,輸出暫存器OT僅提供3×3×32的輸出量),則無法單次完成所有3×3×128的輸入資料Pixel與128個卷積核K1~K128的卷積運算。因此,可透過分批運算來實現大量資料運算。
處理器150依據總和暫存器的大小讀取多個卷積核中的第一卷積核組(步驟S930)。具體而言,這第一卷積核組中的那些卷積核的數量相同於總和暫存器的大小。以圖10為例,若卷積運算為3×3×32且總和暫存器的大小為64,則第一卷積核組可包括卷積核K1~K64的通道ch1~ch32。
處理器150將輸入資料與第一卷積核組的第一卷積運算結果透過先入先出(First Input First Output,FIFO)暫存在總和暫存器(步驟S950)。具體而言,處理器150可執行第i通道(i為正整數)的3×3卷積運算並將運算結果儲存在總和暫存器,接著執行第i+1通道的3×3卷積運算並將運算結果儲存在總和暫存器,其餘依此類推。
舉例而言,圖11是依據本發明一實施例的卷積運算的示意圖。請參照圖11,第一卷積核組為卷積核K1~K64的通道ch1~ch32。處理器150對第1通道的輸入資料Pixel與卷積核K1~K64分別執行3×3的卷積運算,並分別輸出運算結果至總和暫存器SB。接著,處理器150對第2通道的輸入資料Pixel與卷積核K1~K64分別執行3×3的卷積運算,並分別輸出運算結果至總和暫存器SB。其餘通道的運算依此類推,且於此不再贅述。
在一實施例中,輸入資料包括第四部分資料及第五部分資料,第四部分資料與該第五部分資料的所屬通道不同。第一卷積核組包括第一部份核心及第二部份核心,且第一部分核心與第二部分核心的所屬通道不同。此外,第一卷積運算結果僅是基於第一部分資料及第一部份核心。
以圖11為例,第四部份資料為輸入資料Pixel的通道ch1~ch32,且第五部分資料為輸入資料Pixel的通道ch33~ch64。第一部分核心為卷積核K1~K64的通道ch1~ch32,且第二部分核心為卷積核K1~K64的通道ch33~ch64。而第一卷積運算結果是輸入資料Pixel的通道ch1~ch32與卷積核K1~K64的通道ch1~ch32的運算結果。
接著,處理器150依據總和暫存器的大小讀取第一卷積核組合中的第二部份核心。以圖11為例,處理器150自記憶體110讀取卷積核K1~K64的通道ch33~ch64。
此外,處理器150自總和暫存器讀取第一卷積運算結果以圖11為例,處理器150自總和暫存器SB讀取輸入資料Pixel的通道ch1~ch32與卷積核K1~K64的通道ch1~ch32的運算結果。
處理器150將第二部份資料與第二部份核心的第二卷積運算結果與來自總和暫存器的第一卷積運算結果的總和透過先入先出暫存在總和暫存器。以圖11為例,處理器150將輸入資料Pixel的通道ch1~ch32與卷積核K1~K64的通道ch1~ch32的運算結果與輸入資料Pixel的通道ch33~ch64與卷積核K1~K64的通道ch33~ch64的運算結果加總,並將加總的總和依照通道順序且先入先出地儲存在總和暫存器SB。
接著,處理器150執行輸入資料Pixel的通道ch65~ch96與卷積核K1~K64的通道ch65~ch96的卷積運算並儲存運算結果在總和暫存器,依此類推直到輸入資料Pixel的所有通道ch1~ch128皆已運算。
另一方面,處理器150依據總和暫存器的大小讀取那些卷積核中的第二卷積核組。由於總和暫存器的大小小於所有卷積核的數量,因此需要對多個卷積核組分批運算。相似地,這第二卷積核組中的那些卷積核的數量相同於總和暫存器的大小,且第二卷積核組中的那些卷積核不同於第一卷積核組中的那些卷積核。
舉例而言,圖12是依據本發明一實施例的卷積運算的示意圖。請參照圖11及圖12,與圖11的卷積核K1~K64不同之處在於,第二卷積核組包括卷積核K65~K128。
處理器150將輸入資料與第二卷積核組的第三卷積運算結果透過先入先出暫存在總和暫存器。以圖12為例,處理器150先針對卷積核K65~K128的通道ch1~ch32進行卷積運算並儲存運算結果在總和暫存器。接著,處理器150針對卷積核K65~K128的通道ch33~ch64進行卷積運算。其餘運算依此類推,於此不再贅述。
須說明的是,本發明實施例的分批運算可提供更加彈性的運算架構。在一實施例中,可提供並行運算。以圖11及圖12為例,兩圖所示的實施例都是針對相同的輸入資料Pixel。此時,處理器150可提供另一個或更多個總和暫存器。相似地,處理器150可依據另一個或其他總和暫存器的大小讀取第一卷積核組,並將將輸入資料與第一卷積核組的第四卷積運算結果透過先入先出暫存在另一個或其他總和暫存器。針對相同輸入資料,處理器150可複製輸入資料或輸出相同的輸入資料給不同卷積運算使用。
舉例而言,圖13是依據本發明一實施例的並行運算的示意圖。請參照圖13,多個相同的輸入資料Pixel1~Pixelj(j為正整數)可分別且並行地與相同的卷積核K1~K128運算。其中,輸入資料Pixel1與卷積核K1~K64的通道ch1~ch32運算,輸入資料Pixelj與卷積核K1~K64的通道ch1~ch32運算,其餘依此類推。
在一實施例中,處理器150提供兩個或更多個處理元件151。處理器150可對這些處理元件151提供讀取的第一卷積核組。也就是說,某一個卷積運算結果是透過某一個處理元件151決定,且另一個卷積運算結果是透過另一個處理元件151決定。以圖13為例,假設j為2,某一個處理元件151對輸入資料Pixel1與卷積核K1~K64的通道ch1~ch32進行卷積運算,(同時)另一個處理元件151對輸入資料Pixelj與卷積核K1~K64的通道ch1~ch32進行卷積運算。
藉此,多個輸入資料可與相同卷積核並行運算,具有(部分先入先出深度)時間來載入輸入資料,各輸入資料可分配給一個處理元件151,且可視需求方便地延展至更多處理元件151。
值得注意的是,本發明更可依據卷積核的大小提供不同的運算分配機制。其中,圖9所示為分批運算的實施例。在一實施例中,處理器150可判斷某一個或更多個卷積核的大小是否小於卷積運算的運算量。以圖11為例,卷積運算是3×3×32的運算量。各卷積核K1~K128的大小為3×3×128。因此,各卷積核K1~K128的大小未小於卷積運算的運算量。
又例如,圖14是依據本發明一實施例的資料重複的示意圖。請參照圖14,卷積運算仍是3×3×32的運算量,且輸入資料Pixel的大小為3×3×8。各卷積核K1~K64的大小為3×3×8。因此,各卷積核K1~K64的大小小於卷積運算的運算量。再例如,圖15是依據本發明一實施例的資料重複的示意圖。請參照圖15,卷積運算仍是3×3×32的運算量,且輸入資料Pixel的大小為3×3×16。各卷積核K1~K64的大小為3×3×16。因此,各卷積核K1~K64的大小小於卷積運算的運算量。
若卷積核的大小未小於卷積運算的運算量,則處理器150可依據前述實施例(如圖9~圖13)分批運算。若處理器150判斷卷積核的大小小於卷積運算的運算量,則可重複提供輸入資料供那些卷積核進行卷積運算。其中,輸入資料的重複數量相同於倍數。這倍數是將運算量作為被除數且各卷積核的大小作為除數所得的商數。
以圖14為例,運算量為各卷積核K1~K64的大小的4倍。即,倍數為4。此時,處理器150可同時將四筆相同的輸入資料Pixel分別與卷積核K1~K4運算並輸出運算結果,或將四筆相同的輸入資料Pixel分別與卷積核K61~K64運算並輸出運算結果,其餘依此類推。
以圖15為例,運算量為各卷積核K1~ K64的大小的2倍。即,倍數為2。此時,處理器150可同時將四筆相同的輸入資料Pixel分別與卷積核K1~K2運算並輸出運算結果,或將四筆相同的輸入資料Pixel分別與卷積核K63~K62運算並輸出運算結果,其餘依此類推。
圖16是依據本發明一實施例的整體資料處理的流程圖。請參照圖16,在一實施例中,處理器150可讀取訊框(frame)設定(步驟S1610)。例如,設定為(w,h,c,p),其中w為輸入資料的寬,h為輸入資料的高,c為輸入資料的通道,p為填充模式。依據填充模式,處理器150可使用有符號訊框(步驟S1620)。例如,處理器150判斷設定有特定填充模式。處理器150可形成未擴展的輸入資料(步驟S1630),並擴展輸入資料(步驟S1640)。如圖7A擴展成圖8B的資料。處理器150可使用位置資訊讀取儲存在記憶體110或圖8的記憶體庫Bk
0~Bk
m-1中的部分資料(步驟S1650),並可推送所讀取的資料至特定處理元件151進行乘加運算或卷積運算(步驟S1660)。須說明的是,步驟S1610~S1660的詳細運作可分別參酌圖2~圖15的說明,於此不再贅述。
綜上所述,在本發明實施例的基於卷積運算的資料處理方法及電路中,提供分享記憶體架構,提供分批或重複資料的卷積運算,提供資料儲存到多記憶體的分配機制,並提供有符號的填充機制。藉此,可提供彈性且有效率的卷積運算機制及架構。
雖然本發明已以實施例揭露如上,然其並非用以限定本發明,任何所屬技術領域中具有通常知識者,在不脫離本發明的精神和範圍內,當可作些許的更動與潤飾,故本發明的保護範圍當視後附的申請專利範圍所界定者為準。
100:資料處理電路
110、M1~M8:記憶體
150:處理器
151:處理元件
S210~S230、S610~S650、S910~S950、S1610~S1660:步驟
x:寬
y:高
z:通道數
D1、Pixel、Pixel1~:Pixelj輸入資料
W:寬度
x0~x6、y0~y6:座標
n:正整數
CMD:指令
Arb:仲裁器
Bk
0~Bk
m-1:記憶體庫
DATA:資料
rch0~rch3:所欲讀取資料
wch0~wch3:所欲寫入資料
rch0_rdata~rch3_rdata:所讀取的資料
WT、K1~K128:卷積核
ch1~ch128:通道
OT:輸出暫存器
SB:總和暫存器
圖1是依據本發明一實施例的資料處理電路的元件方塊圖。
圖2是依據本發明一實施例的資料處理方法-儲存配置的流程圖。
圖3是依據本發明一實施例的輸入資料的示意圖。
圖4是依據本發明一實施例的多記憶體的儲存空間的示意圖。
圖5A是依據本發明一實施例的多記憶體的儲存配置的示意圖。
圖5B是依據本發明一實施例的多記憶體的儲存配置的示意圖。
圖5C是依據本發明一實施例的多記憶體的儲存配置的示意圖。
圖6是依據本發明一實施例的資料處理方法-填充擴展的流程圖。
圖7A是依據本發明一實施例的輸入資料的示意圖。
圖7B是依據本發明一實施例的經填充的輸入資料的示意圖。
圖8是依據本發明一實施例的共享記憶體的示意圖。
圖9是依據本發明一實施例的資料處理方法-運算配置的流程圖。
圖10是依據本發明一實施例的卷積運算的示意圖。
圖11是依據本發明一實施例的卷積運算的示意圖。
圖12是依據本發明一實施例的卷積運算的示意圖。
圖13是依據本發明一實施例的並行運算的示意圖。
圖14是依據本發明一實施例的資料重複的示意圖。
圖15是依據本發明一實施例的資料重複的示意圖。
圖16是依據本發明一實施例的整體資料處理的流程圖。
S910~S950:步驟
Claims (18)
- 一種基於卷積運算的資料處理方法,包括: 提供一總和暫存器; 依據該總和暫存器的大小讀取多個卷積核(kernel)中的一第一卷積核組,其中該第一卷積核組中的該些卷積核的數量相同於該總和暫存器的大小;以及 將一輸入資料與該第一卷積核組的一第一卷積運算結果透過一先入先出(First Input First Output,FIFO)暫存在該總和暫存器。
- 如請求項1所述的基於卷積運算的資料處理方法,其中該輸入資料包括一第一部分資料及一第二部分資料,該第一部分資料與該第二部分資料的所屬通道不同,該第一卷積核組包括一第一部份核心及一第二部份核心,該第一部分核心與該第二部分核心的所屬通道不同,該第一卷積運算結果僅是基於該第一部分資料及該第一部份核心,且將該第一卷積運算結果暫存在該總和暫存器的步驟之後,更包括: 依據該總和暫存器的大小讀取該第一卷積核組合中的該第二部份核心; 自該總和暫存器讀取該第一卷積運算結果;以及 將該第二部份資料與該第二部份核心的一第二卷積運算結果與來自該總和暫存器的該第一卷積運算結果的一總和透過該先入先出暫存在該總和暫存器。
- 如請求項1所述的基於卷積運算的資料處理方法,其中將該第一卷積運算結果暫存在該總和暫存器的步驟之後,更包括: 依據該總和暫存器的大小讀取該些卷積核中的一第二卷積核組,其中該第二卷積核組中的該些卷積核的數量相同於該總和暫存器的大小,且該第二卷積核組中的該些卷積核不同於該第一卷積核組中的該些卷積核;以及 將該輸入資料與該第二卷積核組的一第三卷積運算結果透過該先入先出暫存在該總和暫存器。
- 如請求項1所述的基於卷積運算的資料處理方法,更包括: 提供一第二總和暫存器; 依據該第二總和暫存器的大小讀取該第一卷積核組,其中第一卷積核組中的該些卷積核的數量相同於該第二總和暫存器的大小;以及 將一第二輸入資料與該第一卷積核組的一第四卷積運算結果透過該先入先出暫存在該第二總和暫存器。
- 如請求項4所述的基於卷積運算的資料處理方法,更包括: 提供一第一處理元件(Processing Element,PE)及一第二處理元件; 對該第一處理元件及該第二處理元件提供讀取的該第一卷積核組,其中該第一卷積運算結果是透過該第一處理元件決定,且該第四卷積運算結果是透過該第二處理元件決定。
- 如請求項1所述的基於卷積運算的資料處理方法,更包括: 判斷一該卷積核的大小小於一卷積運算的運算量;以及 重複提供該輸入資料供該些卷積核進行卷積運算。
- 如請求項1所述的基於卷積運算的資料處理方法,更包括: 依據一位置資訊自至少一記憶體中的一者讀取該輸入資料,其中該位置資訊包括該輸入資料的大小及該輸入資料中的至少一元素的座標。
- 如請求項7所述的基於卷積運算的資料處理方法,更包括: 反應於一該元素的座標位於該輸入資料的大小之外,依據一填充(padding)模式決定該元素的數值為該輸入資料中一者。
- 如請求項7所述的基於卷積運算的資料處理方法,其中該至少一記憶體包括多個記憶體,且該資料處理方法更包括: 依據每一該記憶體的單一位址的儲存空間大小將該輸入資料中的多個第三部分資料儲存在該些記憶體中,其中每一位址上的至少一該第三部分資料在任一通道的該輸入資料的二維座標中的座標不同,且一該位址儲存該輸入資料中的相同座標的多個通道的元素。
- 一種基於卷積運算的資料處理電路,包括: 至少一記憶體,用以儲存一程式碼;以及 一處理器,耦接至少一記憶體,並經配置用以載入且執行該程式碼以執行: 提供一總和暫存器; 依據該總和暫存器的大小讀取多個卷積核中的一第一卷積核組,其中該第一卷積核組中的該些卷積核的數量相同於該總和暫存器的大小;以及 將一輸入資料與該第一卷積核組的一第一卷積運算結果透過一先入先出暫存在該總和暫存器。
- 如請求項10所述的基於卷積運算的資料處理電路,其中該輸入資料包括一第一部分資料及一第二部分資料,該第一部分資料與該第二部分資料的所屬通道不同,該第一卷積核組包括一第一部份核心及一第二部份核心,該第一部分核心與該第二部分核心的所屬通道不同,該第一卷積運算結果僅是基於該第一部分資料及該第一部份核心,且該處理器更經配置用以: 依據該總和暫存器的大小讀取該第一卷積核組合中的該第二部份核心; 自該總和暫存器讀取該第一卷積運算結果;以及 將該第二部份資料與該第二部份核心的一第二卷積運算結果與來自該總和暫存器的該第一卷積運算結果的一總和透過該先入先出暫存在該總和暫存器。
- 如請求項10所述的基於卷積運算的資料處理電路,其中該處理器更經配置用以: 依據該總和暫存器的大小讀取該些卷積核中的一第二卷積核組,其中該第二卷積核組中的該些卷積核的數量相同於該總和暫存器的大小,且該第二卷積核組中的該些卷積核不同於該第一卷積核組中的該些卷積核;以及 將該輸入資料與該第二卷積核組的一第三卷積運算結果透過該先入先出暫存在該總和暫存器。
- 如請求項10所述的基於卷積運算的資料處理電路,其中該處理器更經配置用以: 提供一第二總和暫存器; 依據該第二總和暫存器的大小讀取該第一卷積核組,其中第一卷積核組中的該些卷積核的數量相同於該第二總和暫存器的大小;以及 將一第二輸入資料與該第一卷積核組的一第四卷積運算結果透過該先入先出暫存在該第二總和暫存器。
- 如請求項13所述的基於卷積運算的資料處理電路,其中該處理器更經配置用以: 提供一第一處理元件及一第二處理元件; 對該第一處理元件及該第二處理元件提供讀取的該第一卷積核組,其中該第一卷積運算結果是透過該第一處理元件決定,且該第四卷積運算結果是透過該第二處理元件決定。
- 如請求項10所述的基於卷積運算的資料處理電路,其中該處理器更經配置用以: 判斷一該卷積核的大小小於一卷積運算的運算量;以及 重複提供該輸入資料供該些卷積核進行卷積運算。
- 如請求項10所述的基於卷積運算的資料處理電路,其中該處理器更經配置用以: 依據一位置資訊自該至少一記憶體中的一者讀取該輸入資料,其中該位置資訊包括該輸入資料的大小及該輸入資料中的至少一元素的座標。
- 如請求項16所述的基於卷積運算的資料處理電路,其中該處理器更經配置用以: 反應於一該元素的座標位於該輸入資料的大小之外,依據一填充模式決定該元素的數值為該輸入資料中一者。
- 如請求項16所述的基於卷積運算的資料處理電路,其中該至少一記憶體包括多個記憶體,且該處理器更經配置用以: 依據每一該記憶體的單一位址的儲存空間大小將該輸入資料中的多個第三部分資料儲存在該些記憶體中,其中每一位址上的至少一該第三部分資料在任一通道的該輸入資料的二維座標中的座標不同,且一該位址儲存該輸入資料中的相同座標的多個通道的元素。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210375356.8A CN114692073A (zh) | 2021-05-19 | 2022-04-11 | 基于卷积运算的数据处理方法及电路 |
US17/718,333 US20220374494A1 (en) | 2021-05-19 | 2022-04-12 | Data processing method and circuit based on convolution computation |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202163190252P | 2021-05-19 | 2021-05-19 | |
US63/190,252 | 2021-05-19 | ||
US202163224845P | 2021-07-22 | 2021-07-22 | |
US63/224,845 | 2021-07-22 |
Publications (1)
Publication Number | Publication Date |
---|---|
TW202247049A true TW202247049A (zh) | 2022-12-01 |
Family
ID=85793803
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW111107980A TW202247049A (zh) | 2021-05-19 | 2022-03-04 | 基於卷積運算的資料處理方法及電路 |
Country Status (1)
Country | Link |
---|---|
TW (1) | TW202247049A (zh) |
-
2022
- 2022-03-04 TW TW111107980A patent/TW202247049A/zh unknown
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11693657B2 (en) | Methods for performing fused-multiply-add operations on serially allocated data within a processing-in-memory capable memory device, and related memory devices and systems | |
CN109919311B (zh) | 生成指令序列的方法、执行神经网络运算的方法和装置 | |
Bavikadi et al. | A review of in-memory computing architectures for machine learning applications | |
CN111542826A (zh) | 支持模拟协处理器的数字架构 | |
US12118454B2 (en) | Neural network accelerator using logarithmic-based arithmetic | |
CN110415157B (zh) | 一种矩阵乘法的计算方法及装置 | |
WO2022037257A1 (zh) | 卷积计算引擎、人工智能芯片以及数据处理方法 | |
US20220374495A1 (en) | Data processing method and circuit based on convolution computation | |
US10762425B2 (en) | Learning affinity via a spatial propagation neural network | |
US10684824B2 (en) | Stochastic rounding of numerical values | |
US20210397932A1 (en) | Methods of performing processing-in-memory operations, and related devices and systems | |
US20240311626A1 (en) | Asynchronous accumulator using logarithmic-based arithmetic | |
US20210056446A1 (en) | Inference accelerator using logarithmic-based arithmetic | |
Chen et al. | BRAMAC: Compute-in-BRAM Architectures for Multiply-Accumulate on FPGAs | |
JP7427001B2 (ja) | 行列数学命令セットのタイリングアルゴリズム | |
CN114692073A (zh) | 基于卷积运算的数据处理方法及电路 | |
TWI799169B (zh) | 基於卷積運算的資料處理方法及電路 | |
CN113536222A (zh) | 系统局部字段矩阵更新的方法、系统和存储介质 | |
CN114267391A (zh) | 机器学习硬件加速器 | |
TW202247049A (zh) | 基於卷積運算的資料處理方法及電路 | |
US20220374494A1 (en) | Data processing method and circuit based on convolution computation | |
US20230289398A1 (en) | Efficient Matrix Multiply and Add with a Group of Warps | |
US20220374493A1 (en) | Data processing method and circuit based on convolution computation | |
US20230153604A1 (en) | Performing simulations using machine learning | |
JP2020080048A (ja) | 並列処理装置およびプログラム |