TWI722684B - 關於影像處理器複雜傳遞函數之電腦實施之方法及非暫時性電腦儲存媒體及採用影像處理器之運算裝置 - Google Patents
關於影像處理器複雜傳遞函數之電腦實施之方法及非暫時性電腦儲存媒體及採用影像處理器之運算裝置 Download PDFInfo
- Publication number
- TWI722684B TWI722684B TW108143270A TW108143270A TWI722684B TW I722684 B TWI722684 B TW I722684B TW 108143270 A TW108143270 A TW 108143270A TW 108143270 A TW108143270 A TW 108143270A TW I722684 B TWI722684 B TW I722684B
- Authority
- TW
- Taiwan
- Prior art keywords
- input
- output
- local
- execution channel
- image processor
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T3/00—Geometric image transformations in the plane of the image
- G06T3/40—Scaling of whole images or parts thereof, e.g. expanding or contracting
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/12—Bounding box
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/52—Parallel processing
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Image Processing (AREA)
Abstract
本發明揭示用於在一影像處理器上支援複雜傳遞函數之方法、系統及設備,包含編碼於電腦儲存媒體上之電腦程式。該等方法中之一者包含藉由一影像處理器之每一執行通道使用一移位暫存器陣列遍歷一各別局域支援區,並將在該遍歷期間遇到之輸入像素儲存至該影像處理器之本機記憶體中。每一執行通道根據一複雜傳遞函數自該影像處理器之該本機記憶體獲得一或多個輸入像素。每一執行通道針對核心程式使用根據該複雜傳遞函數自該本機記憶體獲得之一或多個輸入像素來運算一各別輸出像素。
Description
此說明書係關於影像處理器。
影像處理器係可程式化的特定領域之並行處理裝置,其經設計以利用影像資料之二維空間局部性。影像處理器經設計以高效地程序現有影像資料,此將其與圖形處理單元(GPU)區分開,圖形處理單元經設計以首先自一內部表示產生影像。
影像處理器經設計以利用二維空間局部性來高效率、低功率、並行地執行工作負載。當輸出資料在輸入資料中之一位置取决於鄰近資料或者位於輸入資料之位置附近時,一運算任務具有二維空間局部性。舉例而言,一3×3模糊濾波器可使用輸入影像資料之一9像素正方形區中之資料來運算正方形區之中心處之一像素之一輸出值。在此說明書中,產生一輸出像素所需之輸入區被稱為一輸入支援區。由於輸出值使用來自鄰近像素之資料,因此此實例性模糊濾波器具有空間局部性。影像處理器亦可用於在其他域中高效能地並行執行工作負載,包含電腦視覺、目標辨識、神經網路及其他機器學習任務。
將一影像處理器程式化通常需要撰寫並編譯一核心程式,然後影像處理器之複數個執行通道中之每一者同時執行該核心程式。每一
執行通道自身係可執行指令且將資料儲存於一或多個暫存器中之一組件。
某些影像處理器藉由將一執行通道陣列耦合至一移位暫存器陣列來利用空間局部性。每一執行通道可藉由將移位暫存器陣列內之輸入資料移位而非執行記憶體存取來存取其核心程式所需之資料。在概念上講,此可被視為將位於一執行通道陣列下方之一影像資料陣列移位。舉例而言,一執行通道可藉由反覆地讀取按照以下蛇形掃描次序移位之資料來存取運算一模糊濾波器所需之資料:兩個像素向左、一個像素向下、兩個像素向右、一個像素向下、及兩個像素向左。
實施影像處理演算法之諸多核心程式係藉由按照一固定的遍歷圖案系統性地逐步通過一輸入影像以讀取產生每一輸出像素所需之一輸入支援區來執行。在此說明書中,一傳遞函數係界定一輸出像素之一位置與根據一特定核心程式產生輸出像素之一值所需之一輸入支援區之一位置之間的一關係的一功能。換言之,一傳遞函數定義一特定輸出像素之輸入。
諸多影像處理演算法使用依賴於全域整數倍位移之簡單傳遞函數,這意味著無論輸出像素之位置如何,同一整數倍位移適用於所有輸出像素。對於此簡單傳遞函數而言,一輸入像素在輸入支援區中之位置可使用距輸出像素位置(x,y)之簡單整數倍位移來表達,例如使用以下形式之傳遞函數:f(x,y)=(x+x_offset,y+y_offset)。對於此等簡單傳遞函數而言,所有輸出像素的x_offset之值及y_offset之值皆相同。
然而,某些影像處理演算法具有一複雜傳遞函數,該複雜傳遞函數係無法以全域整數倍位移來表達之一傳遞函數。非整數倍縮放係一複雜傳遞函數之一個實例。舉例而言,若按照1.3倍縮放一影像,則無
法以全域整數倍位移來表達傳遞函數。
某些複雜傳遞函數亦可根據影像中之輸出像素之位置來變化輸入支援區之大小及位置。舉例而言,對於經設計以校正相機鏡頭失真之一影像處理演算法而言,影像邊緣(例如,失真最嚴重處)上之輸出像素將依賴於在大小及位移兩者上皆比用於運算位於影像中心(失真最不嚴重)附近之輸出像素之輸入支援區大的輸入支援區。因此,此等種類之影像處理演算法通常必須由一CPU執行,這不節能且比直接在一影像處理器上執行慢;或必須由一專門設計之單獨硬體裝置執行,這會導致晶片設計更複雜、更大且更昂貴。
自定義一複雜傳遞函數之一核心程式產生輸出程式碼,該輸出程式碼在一影像處理器中執行時會使得該影像處理器根據該複雜傳遞函數執行操作。此准許直接藉由一影像處理器自身執行核心程式,而不依賴於藉由一CPU或一GPU執行傳遞函數。
在此說明書中,一複雜傳遞函數係不使用全域整數倍位移之一傳遞函數。換言之,一複雜傳遞函數係使用非整數倍位移、取决於輸出像素位置或輸入支援區之位移中之一或多者的一傳遞函數,輸入支援區之大小取决於輸出像素位置。
複雜傳遞函數可用於運算各種影像失真演算法。使用複雜傳遞函數之失真函數之實例包含(例如)縮放運算、旋轉操作、鏡頭失真校正程序及影像對準程序。
因此,在以下實例中,使用一複雜傳遞函數來定義影像資料之一變換之一核心程式將被稱為一失真函數。然而,同一技術亦可用於
與產生影像資料或使影像資料失真不相關之其他應用。
在此說明書中,一移位暫存器陣列係一硬體裝置,其在邏輯上將移位暫存器布置成二維布局,以使得移位暫存器可僅花費一單個時脈循環即可將資料彼此移位。移位暫存器陣列通常被實施為一環或一圓環,以使得可在一或多個維度上將移位暫存器陣列之一個邊緣之資料直接移位至移位暫存器陣列之另一邊緣。
可實施本說明書中所闡述之標的物之特定實施例以實現以下優點中之一或多者。由於可在影像處理器自身上通過軟體來執行失真函數,因此影像處理器不必具有專用於執行失真函數之一單獨硬體組件。此既減小影像處理器之大小又降低製造影像處理器之成本。另外,使用此說明書中所闡述之方法,影像處理器可使用移位暫存器陣列及執行通道陣列執行運算來比一CPU更高效地執行複雜傳遞函數。使用本機記憶體來暫時地儲存輸入支援區也會減小將必須由一CPU執行之晶片外記憶體存取。相對於一CPU而言,此進一步提高在影像處理器中執行複雜傳遞函數之速度及能量效率。另外,使用一影像處理器而非一CPU來運算複雜傳遞函數使得效能更可預測。此乃因使用CPU會用到快取記憶體,快取記憶體之效能根據工作負載而變化,這使更難以提前預測效能。
附圖及下文的說明中陳述本說明書中之標的物之一或多個實施方案之細節。根據說明、圖式及申請專利範圍將明白標的物之其他特徵、態樣及優點。
100:程序
110:操作
120:操作
130:操作
140:操作
160:輸出像素
162:輸入支援像素/輸入像素
170:輸入影像/輸入影像區
180:輸出影像/輸出影像區
210:操作
220:操作
230:操作
240:操作
300:程序
310:操作
320:操作
330:操作
410:輸入影像
420:輸出影像
430:移位暫存器陣列/二維移位暫存器陣列
480:輸入像素
481:輸入像素
500:模板處理器/影像處理器
501:資料運算單元
502:純量處理器
503:純量記憶體庫/純量記憶體
504:輸入/輸出單元
505:執行通道陣列
506:二維移位暫存器陣列/移位暫存器陣列
507_1:隨機存取記憶體庫
507_2:隨機存取記憶體庫
507_3:隨機存取記憶體庫
509:程式控制器
513:像素/輸出像素
601:資料運算單元
605:執行通道陣列/執行通道
606:二維移位暫存器陣列
607_1:隨機存取記憶體庫/隨機存取記憶體
607_2:隨機存取記憶體庫/隨機存取記憶體
607_R:隨機存取記憶體庫/隨機存取記憶體
609:「環圈」暫存器/環圈/環圈區
圖1A係執行一失真函數之一實例性程序之一流程圖。
圖1B圖解說明一核心程式之一般操作。
圖2係用於運算一局域定界框之一實例性程序之一流程圖。
圖3係運算一線性記憶體位址之一實例性程序之一流程圖。
圖4圖解說明對一輸入影像執行之一實例性失真函數。
圖5係一實例性模板處理器之一圖表。
圖6係一實例性資料運算組件之一圖表。
在各個圖式中,相似元件符號及名稱指示相似元件。
圖1A係用於產生一輸出程式之一實例性程序100之一流程圖,該輸出程式允許一影像處理器執行具有一複雜傳遞函數之一失真函數。可藉由任何已恰當程式化之電腦系統(例如,藉由用於一影像處理器的一編譯器、一組譯器或一程式最佳化器)來執行實例性程序100。為方便起見,將按照藉由一或多個電腦之一已恰當程式化之系統執行來闡述實例性程序100。
系統接收定義一失真函數之一輸入程式(110)。可以可定義一失真函數之任何恰當的程式設計語言來撰寫該輸入程式之程式碼。舉例而言,程式碼可係一高階程式設計語言,例如C或Halide;一中間語言表示;或一低階程式設計語言,例如組譯碼。通常,失真函數係產生各自依賴於一輸入支援區之輸出值(例如,取决於輸入像素之一輸入支援區之輸出像素)之一函數。失真函數可具有定義一輸出值之位置與輸入支援區之每一輸入值之間的關係之一複雜傳遞函數。
考量以下在表1中之實例性輸入核心程式。輸入核心程式以一高階C型偽碼撰寫。
表1中之核心程式在行9上具有稱為「scale_img」之一失真函數,該失真函數藉由將一輸出寫入至由二維「輸出」緩衝器界定之一輸出影像區來按比例放大由二維「輸入」緩衝器界定之一影像區。scale_img失真函數之操作方式係求來自輸入區之兩個樣本之平均值並將該平均值寫入至輸出區。
核心程式亦定義兩個傳遞函數:行1上之f(x)及行5上之g(y)。此等傳遞函數之效果係影像之x值按比例放大1.06且將y值按比例放大1.4。由於此等傳遞函數其取决於輸入座標且其依賴於非整數倍位移,因此其係複雜傳遞函數。因此,可不使用全域整數倍位移來運算scale_img。
圖1B圖解說明核心程式之一般操作。輸出影像中之每一輸
出像素值依賴於來自輸入影像之兩個輸入像素。舉例而言,輸出影像180中之輸出像素160依賴於輸入影像170中之兩個輸入支援像素162。且輸出像素之位置與輸入像素之位置之間的關係由傳遞函數f(x)及g(y)定義。
在某些實施方案中,針對該程式之一編譯器考量將成為一複雜傳遞函數的一緩衝器索引之表達式中出現之任何函數。舉例而言,在行13上,「輸入」緩衝器之索引表達式皆包含函數呼叫。因此,此可觸發編譯器產生用以處置複雜傳遞函數之程式碼,但不會對是否使用全域整數倍位移來實施傳遞函數做出任何判定。
事實上,在此說明書中所闡述之技術允許一輸入程式任意地使用緩衝器索引之表達式中出現之複雜傳遞函數。此使得能夠直接在影像處理器上執行一巨大複雜影像陣列處理及其他應用,而無需來自一CPU或一GPU之支援。
由於f(x)中定義之整數除法,像素512及513使得f(x)(及f(x)+1)之相同值。因此,使用全域整數倍位移將不可能獲得運算一影像
處理器之核心程式所需之正確資料,該影像處理器具有循規蹈矩地執行之一執行通道。換言之,不具有自一任意記憶體位移載入之機制之一執行通道陣列將無法獲得用於核心程式之校正值。
因此,系統可產生允許影像處理器處置包含此等複雜傳遞函數之此核心程式的額外程式碼。
如圖1A中所展示,系統產生使得影像處理器將輸入影像之一全域輸入支援區載入至移位暫存器陣列中之程式碼(120)。全域輸入支援區係輸入影像的運算一特定輸出區塊之輸出像素值所需之一區。通常,輸出區塊係影像處理器之執行通道陣列之大小。換言之,每一執行通道可運算輸出區塊中之一輸出像素值,但當運算邊緣及隅角之值時,比所有執行通道少的執行通道即可產生一實際輸出值。
在判定將載入之資料時,可使用傳遞函數來運算全域輸入支援區之一全域定界框。此程序涉及運算定界框之第一隅角之位置及亦運算定界框之大小。
為運算位置,所產生之程式碼可使用輸出區塊之隅角之座標作為至傳遞函數之輸入。在某些實施方案中,針對所處理之每一輸出區塊,影像處理器在所保留暫存器中維持該輸出區塊之一個隅角(例如,左上角)之座標。以下實例性程式碼段使得一影像處理器使用所保留暫存器sx及sy作為去往傳遞函數之輸入來運算全域定界框之一隅角://Use transfer function to compute corner of global bounding box //(sx,sy)=position of the top-left corner of the output block 3:mul.b16 st0<-sx,3840;4:shr.b16 st1<-st0,12;
5:mul.b16 st2<-sy,2896;6:shr.b16 st3<-st2,12;行3及5分別將sx及sy乘以實例性傳遞函數中所規定之縮放因數。行4及6上之右移指令有效地除以4096,如實例性傳遞函數中所規定。
可藉由影像處理器在運行時間或藉由編譯器在編譯時間運算全域定界框之大小。編譯器可運算全域定界框之大小不會發生變化之傳遞函數之全域定界框之大小。舉例而言,對於實例性縮放運算而言,由於定界框之大小對於所有的輸出區塊而言皆相同,因此編譯器可使用傳遞函數在編譯時間時運算全域支援區之正確大小。為使影像處理器運算定界框之大小,編譯器可產生程式碼,該程式碼使得影像處理器使用傳遞函數運算全域定界框之一第二隅角且使用所運算的定界框之第一隅角及第二隅角來運算大小。在判定全域定界框之位置及大小之後,程式碼使得影像處理器將全域支援區載入至移位暫存器陣列中。
系統產生程式碼,該程式碼遍歷局域支援區以用於每一輸出像素之局域定界框儲存於一本機記憶體庫中(130)。每一局域定界框包含運算一特定輸出像素所需之輸入支援區且可能包含其他像素。換言之,局域定界框可大於輸入支援區,但其始終包含輸入支援區所需之所有像素。每一局域定界框亦係全域支援區之一子區。一局域定界框可根據特定失真函數而係一單個像素或一組像素。
編譯器可針對某些傳遞函數運算局域定界框之大小,例如輸入支援區之大小始終相同之傳遞函數。然而,若局域定界框之大小取决於輸出像素之位置,則編譯器可產生使得每一執行通道根據傳遞函數運算
其自己的局域定界框之一大小的程式碼。將參考圖2更詳細地闡述此程序。
所產生之程式碼使得每一執行通道遍歷由局域定界框界定之輸入支援區。在每一位置處,每一執行通道可將輸入像素值儲存於耦合至該執行通道之一本機記憶體庫中。
表3圖解說明在執行此程序之後圖1B中之實例之記憶體內容之一實例。出於說明性目的,表3含有以x表示之輸入像素位置,但實際上將儲存實際像素值。
如所展示,x之每一值儲存與局域定界框之大小對應之三個值。在此情形中,局域定界框之大小係3,其比兩像素輸入支援區之大小多1。換言之,系統可在x及y兩者上自輸入支援區之大小舍進,以使得程序可在本機記憶體中擷取運算輸出像素所需之所有輸入像素。因此,像素512及513兩者儲存輸入像素480及481之資料,但係輸入像素480及481在不同的各別位移處之資料。
在某些實施方案中,一組中之多個執行通道共用同一本機記憶體庫,此意味著每組中一次僅一個執行通道可對本機記憶體庫進行讀取或寫入。因此,編譯器可產生用於遍歷局域定界框之程式碼,以針對共用一本機記憶體庫之執行通道將遍歷且對記憶體之寫入串列化。
然後,系統產生程式碼,該程式碼使得影像處理器使用儲存於本機記憶體庫中之資料運算失真函數(140)。通常,每一執行通道可使用傳遞函數來運算每一輸入支援像素之一維位移以載入儲存於本機記憶體中之輸入支援像素,從而運算失真函數。為此,每一執行通道可執行程式碼,以使用傳遞函數來運算可用於將每一輸入像素自記憶體載入至局域暫存器空間中之一位移。下文將參考圖3更詳細地闡述此程序。對於共用一記憶體庫之執行通道而言,編譯器可將記憶體存取串列化,以使得每一執行通道可存取運算用於失真函數之輸出像素所需之資料。
然後,執行通道陣列中之執行通道可根據失真函數使用載入至執行通道之局域暫存器空間中之資料來運算一各別輸出像素。舉例而言,為實現縮放功能,一執行通道可使用複數個輸入像素作為樣本且可例如使用雙線性取樣來運算將輸入像素平均化之一單個輸出像素。
圖2係用於運算一輸出像素之一輸入支援區之一局域定界框之一實例性程序之一流程圖。為清晰地表示,將闡述由一影像處理器執行由用於上文參考圖1所闡述之一特定失真函數之一編譯器產生之指令來執行實例性程序。
每一執行通道判定輸入支援區中之每一輸入像素之一位置(210)。換言之,每一執行通道使用其輸出像素之座標作為去往傳遞函數之輸入以運算支援區中之所有輸入像素之位置。
每一執行通道運算其自身之位置與先前步驟判定之每一輸入像素之位置之間的一局域最大距離(220)。換言之,每一執行通道判定哪一輸入像素在x方向及y方向上最遠離輸出像素位置。影像處理器可將所運算之局域最大距離儲存於移位暫存器中、在輸入像素位置處。在某些實
施方案中,每一執行通道亦運算在x及y上之一局域最小距離,這可減小需要遍歷之支援區之大小。
影像處理器運算全域最大距離(230)。為自一組所運算之局域最大距離當中判定全域最大距離,影像處理器可判定哪一執行通道在x方向及y方向上具有最高局域最大值,且視情况判定哪一執行通道在x方向及y方向上具有最低局域最小值。在某些實施方案中,影像處理器可藉由執行平行縮減判定此等值,例如尋找最小值及尋找最大值操作。共同擁有之美國專利申請案第15/201,269號中闡述適合於使用具有一執行通道陣列及一移位暫存器陣列之一影像處理器執行平行縮減之技術,該美國專利申請案併入本案供參考。
此程序可涉及引導影像處理器之控制流程之純量執行通道與執行通道陣列中之執行通道中之每一者之間的某些協調。舉例而言,在運算出在x及y上之全域最大距離之後,純量通道可將全域最大距離分佈至執行通道陣列中之每一執行通道。
每一執行通道使用全域最大距離來界定用於進行輸入支援區遍歷之一局域定界框(240)。另外,每一執行通道可視情况使用全域最小距離來界定用於進行輸入支援區遍歷之局域定界框。
圖3係運算用於將局域定界框自本機記憶體庫載入至移位暫存器陣列中之線性位址之一實例性程序300之一流程圖。可藉由移位暫存器陣列及執行通道陣列執行實例性程序300。
用於一輸出像素之執行通道運算全域支援區之基礎位置(亦即,全域支援區之最遠隅角)與執行通道需要存取之輸入像素之位置之間的距離(310)。執行通道在x維度及y維度兩者上執行此運算。
執行通道自先前步驟之結果減去其自身之位置(320)。該結果係一x位移及一y位移,例如輸入像素位置與輸出像素位置之間在每一維度上之一移位距離。
執行通道將一個位移乘以局域定界框之一寬度,並將該結果與在另一維度上之位移相加(330)。若該程序經組態以以列主布局儲存資料,則執行通道可將局域定界框之寬度乘以x-位移並加上y-位移。另一方面,若使用行主布局,則執行通道可將局域定界框之寬度乘以y-位移並加上x-位移。
該結果係所期望輸入像素在耦合至執行通道之本機記憶體庫中之線性位址。然後,執行通道可將在位址處之資料載入至執行通道中,且執行通道可使用該資料來運算輸出像素。
圖4圖解說明影像處理器對一輸入影像410執行之一實例性失真函數。具體而言,失真函數係一縮放因數為1.5之一縮放運算。亦即,當影像處理器對輸入影像410執行失真函數時,所得輸出影像係輸入影像410之1.5倍。為簡單起見,輸入影像410係僅具有一單列像素之一維影像。實際上,處理器通常對二維影像進行操作。
輸入影像410具有18個像素,該18個像素被標記為自0至17之間的有序輸入座標。輸出影像420具有27個像素,該27個像素被標記為自0至26之有序輸出座標。輸出影像420具有27個像素此乃因27等於18之1.5倍。輸出影像420中之每一像素基於輸入影像410中之一單個像素。具體而言,輸出座標N處之輸出像素係輸入座標(N/1.5)處之輸入像素。舉例而言,由於忽略任何餘數,26除以縮放因數1.5等於17,因此輸出座標26處之輸出像素係輸入座標17處之輸入像素。類似地,由於忽略任何餘數,
25除以1.5等於16,因此輸出座標25處之輸出像素係輸入座標16處之輸入像素。
在某些情形中,毗鄰輸出像素基於同一輸入像素。舉例而言,與輸出座標25處之輸出像素一樣,由於忽略任何餘數,24除以1.5亦等於16,因此輸出座標24之輸出像素基於輸入座標16處之輸入像素。換言之,輸出影像420中之輸出像素與其所依據的輸入影像410中之輸入像素的距離並不均勻。並未為了處理此類型之影像處理演算法而將在此說明書中所闡述之影像處理器最佳化。
因此,為執行縮放運算,影像處理器之編譯器可產生特殊程式碼。第一,編譯器產生判定一輸出像素區塊所依據之一全域輸入像素支援區的程式碼。輸出影像420具有兩個區塊:一第一區塊具有輸出座標為0至15之輸出像素,且一第二區塊具有輸出座標為16至26之輸出像素。在此實例中,假定影像處理器具有16個執行通道,且因此,其可一次運算一個輸出區塊。此外,假定影像處理器已運算出第一區塊中之輸出像素,亦即輸出座標為0至15之輸出像素。
為運算輸出座標為16至26之輸出像素,編譯器必須產生程式碼,該程式碼判定彼等輸出像素所依據之輸入像素(亦即,全域支援區)並將全域支援區載入至移位暫存器陣列中。如上文所述,輸出座標26處之輸出像素基於輸入座標17處之輸入像素。與此同時,由於忽略任何餘數,16除以縮放因數1.5等於10,因此第二輸出區塊中之第一輸出像素(亦即,輸出座標16處之輸出像素)基於輸入座標10處之輸入像素。因此,輸出座標16至26處之輸出像素取决於輸入座標10至17處之輸入像素。圖4中之箭頭繪示第二輸出區塊中之每一輸出像素所依據之特定輸入像素。
影像處理器將輸入像素自輸入座標10至17載入至影像處理器之移位暫存器陣列430中。重要的是,將來自輸入座標10之輸入像素載入至專用於執行通道位置之移位暫存器中,第二區塊中之初始輸出像素(16)將在該執行通道位置運算。當計算移位距離時,此位置用作一參考座標。此後,將輸入像素依序載入至移位暫存器陣列中。由於存在11個不同的輸出像素且僅存在8不同的輸入像素而彼等輸出像素基於該8不同的輸入像素,因此某些移位暫存器係空的。
通常,編譯器接下來將產生程式碼,該程式碼使得影像處理器針對每一輸出像素運算一局域定界框,且使得影像處理器將局域定界框內之資料儲存於耦合至將運算輸出像素之執行通道陣列之一本機記憶體庫中。然後,當需要執行通道來運算輸出像素時,影像處理器可將局域定界框資料自本機記憶體庫載入至執行通道中。
另一選擇係,編譯器可產生指令,該等指令使得移位暫存器執行將正確資料立即移動至執行通道中而完全繞過本機記憶體庫的一系列移位及選擇。當失真函數簡單時,例如當失真函數係一縮放運算時,此方法更高效。
將正確資料移位至將計算一輸出像素之執行通道中涉及判定輸出像素與輸出像素所依據之輸入像素之間的一移位距離。該移位距離由方程式定義:距離=(輸入像素座標-輸入參考座標-通道位置)
對於輸出座標26處之輸出像素而言,如下進行此運算:(17-10-10)=-3
亦即,輸入像素座標係17,輸入參考座標係10,且運算輸
出像素之通道位置係10(26-16)。結果係-3,這意味著輸入像素必須向右移位3個位置。此對應於圖4中所圖解說明之形象結果。上文所闡述之運算與參考圖3之步驟310及320所闡述之運算相同,唯上文之運算僅在一個維度上執行除外。編譯器可產生以相同方式計算輸出像素中之每一者之移位量之指令。
圖5圖解說明一實例性模板處理器之組件。一模板處理器係可由一影像處理器使用以實施上文所闡述之技術之一處理組件之一實例。一影像處理器可具有一或多個模板處理器,該一或多個模板處理器可經程式化以依序協調地實現一處理任務之不同階段。共同擁有之美國專利申請案第14/694,828號、第14/694,815號、第14/694,806號、第14/960,334號、第15/352,260號中更詳細地闡述可利用模板處理器之其他適合的架構,上述美國專利申請案並入本案供參考。
如圖5中所展示,一模板處理器500包含一資料運算單元501、一純量處理器502、一相關聯純量記憶體庫503及一I/O單元504。資料運算單元501包含一執行通道陣列505、一個二維移位暫存器陣列506及單獨的隨機存取記憶體庫507_1至507_R,該等單獨的隨機存取記憶體庫507_1至507_R各自與二維執行通道陣列506之各別列或各別行相關聯。
I/O單元504負責將自影像處理器之一表單產生器接收到之資料輸入表單載入至資料運算單元501中,且將資料輸出表單自影像處理器儲存至表單產生器中。將輸入資料表單載入至資料運算單元501中可包含將一接收表單剖析成影像資料之列或行,並將影像資料之列或行載入至二維移位暫存器陣列506中或載入至執行通道陣列之列/行之各別記憶體庫507中。若輸入表單被首先載入至記憶體庫507中,則在操作該表單資料
之前,執行通道陣列505內之個別執行通道然後可在適當時(例如按照一載入指令)將表單資料自隨機存取記憶體庫507載入至二維移位暫存器陣列506之各別部分中。在將一資料表單直接自一表單產生器或自記憶體507載入至移位暫存器陣列506完成之後,執行通道陣列505中之執行通道可操作該資料且最終將已完成資料作為一表單直接寫回至表單產生器或寫回至隨機存取記憶體庫507中。若是寫回至隨機存取記憶體庫507中,則I/O單元504可自隨機存取記憶體庫507提取資料以形成一輸出表單,然後可將該輸出表單轉送至表單產生器。
純量處理器502包含一程式控制器509,程式控制器509可自純量記憶體503讀取模板處理器之程式碼之指令並將該等指令發布給執行通道陣列505中之執行通道。在某些實施方案中,將一單個同一指令廣播至執行通道陣列505內之所有執行通道以由資料運算單元501執行一單個指令、多個資料型行為。在某些實施方案中,自純量記憶體503讀取並發布至執行通道陣列505中之執行通道的指令之指令格式包含每指令包含一個以上運算碼的一超長指令字(VLIW)類型格式。在另一實施例中,VLIW格式包含一ALU運算碼,其引導每一執行通道之ALU執行一數學函數;及一記憶體運算碼,其引導一特定執行通道或一組執行通道之一記憶體操作。
每一執行通道係具有能夠執行一指令之一或多個執行單元之一組件,例如可執行一指令之邏輯電路。一執行通道可包含超越執行單元之額外類處理器功能性。舉例而言,除一或多個執行單元之外,一執行通道亦可包含將一接收指令解碼之邏輯電路;或者在多個似MIMD設計之情形中,包含提取一指令並將一指令解碼之邏輯電路。關於似MIMD方
法,可利用(例如)執行通道陣列505中之每一執行通道內之一程式控制器在各種替代實施例中實施一分散式方法。
一執行通道陣列505、一程式控制器509及二維移位暫存器陣列506之組合為各種各樣之可程式化功能提供一可廣泛可調且可組態之硬體平台。舉例而言,由於個別執行通道能夠執行各種各樣的功能且能夠容易地存取靠近二維移位暫存器陣列506中之任何輸出位置之輸入影像資料,因此應用軟體開發者可產生具有各種各樣不同的功能能力以及尺寸(例如,模板大小)的核心程式。
除用作由執行通道陣列505操作之影像資料之一資料儲存器之外,隨機存取記憶體庫507亦可保存一或多個查找表。在各種實施例中,純量記憶體503內亦可例示一或多個純量查找表。一純量查找涉及依據相同的索引將相同資料值自同一查找表傳遞至執行通道陣列505內之執行通道中之每一者。VLIW指令格式可包含一純量運算碼,該純量運算碼引導由純量處理器在一純量查找表中執行之一查找操作。規定搭配運算碼使用之索引可係一立即運算元或可自某些其他資料儲存位置提取。自純量記憶體503內中一純量查找表進行之一查找可涉及在同一時脈循環期間將相同資料值廣播至執行通道陣列505內之所有執行通道。
圖6圖解說明一實例性資料運算單元601。如圖6中所展示,資料運算單元601包含在邏輯上位於二維移位暫存器陣列606「上方」之一執行通道陣列605。如上文所論述,在各種實施例中,將由一表單產生器提供之一影像資料表單載入至二維移位暫存器陣列606中。然後,執行通道可自二維移位暫存器陣列606操作表單資料。
執行通道陣列605與移位暫存器陣列606相對於彼此而位置
固定。然而,執行通道可戰略性地且協調地移位移位暫存器陣列606內之資料以使得執行通道陣列605中之每一執行通道直接存取不同的輸入資料。如此,每一執行通道判定所產生之輸出表單中之一不同位置的輸出值。自圖6之架構應明瞭,由於執行通道陣列605包含垂直毗鄰之執行通道以及水平毗鄰之執行通道,因此重叠模板區不僅可垂直地布置而且可水平地布置。
資料運算單元601之某些明顯的架構特徵包含尺寸比執行通道陣列605寬之移位暫存器陣列406。亦即,在執行通道陣列605外側存在一「環圈」暫存器609。儘管根據實施方案而將環圈609展示為存在於執行通道陣列605之兩側上,但該環圈可存在於執行通道陣列605之更少(一個)或更多(三個或四個)側上。當將資料移位於執行通道605「下方時」,環圈609用於為溢出執行通道陣列605之邊界的資料提供「溢出」空間。舉一簡單情形,當處理模板之最左側像素時,位於執行通道陣列605之右邊緣中心上之一5x5模板可再向右需要四個環圈暫存器位置。為使圖式簡明,圖6將環圈右側之暫存器圖解說明為僅具有水平移位連接且將環圈底側之暫存器圖解說明為僅具有垂直移位連接,而在一某些實施方案中,任一側(右側、底側)上之暫存器將既具有水平連接亦具有垂直連接。
由耦合至陣列中之每一列及/或每一行之隨機存取記憶體庫607或隨機存取記憶體庫607之一些部分提供額外溢出空間,例如,一隨機存取記憶體庫可被指派為執行通道陣列605的在列方向上跨越4個執行通道且在行方向上跨越2個執行通道之一「區」。為簡單起見,此說明書之某些部分主要論述基於列及/或行之分配方案。在此,若一執行通道之
核心程式操作需要該執行通道處理在二維移位暫存器陣列606之外的某些影像處理常式可能需要的像素值,則影像資料平面能夠進一步例如自環圈區609溢出至一隨機存取記憶體庫607中。舉例而言,考量一6x6模板,在該6x6模板中,在執行通道陣列之右邊緣上,硬體包含僅具有位於一執行通道右側之四個儲存元件之一環圈區。在此情形中,需要將資料遠離環圈609之右邊緣進一步向右移位以完全處理該模板。然後,被移位於環圈區609之外的資料將溢出至隨機存取記憶體607。
可以數字電子電路、以有形體現之電腦軟體、韌體或硬體、以電腦硬體、包含本說明書中所揭示之的結構及其結構等效物或者以上述各項中之一或多者的組合來實施本說明書中所闡述之標的物及功能操作的實施例。可將本說明書中所闡述之標的物之實施例實施為一或多個電腦程式,亦即編碼於一有形非暫時性儲存媒體上以供資料處理設備執行或用以控制資料處理設備之操作的一或多個電腦程式指令模組。電腦儲存媒體可係一機器可讀儲存裝置、一機器可讀儲存基板、一隨機存取或串列存取記憶體裝置或者上述各項中之一或多者之一組合。另一選擇係或另外,可將程式指令編碼於一人工產生之傳播信號上,例如一機器產生之電信號、光學信號或電磁信號,產生該人工產生之傳播信號以對資訊進行編碼以供傳輸至適合的接收設備以由一資料處理設備執行。
術語「資料處理設備」係指資料處理硬體且囊括用於處理資料的所有種類之設備、裝置及機器,例如包含可程式化處理器、電腦或多個處理器或電腦。設備亦可係或進一步包含特殊用途邏輯電路,例如一FPGA(現成可程式化閘陣列)或一ASIC(特殊應用積體電路)。除硬體之外,所述設備可視情况包含為電腦程式建立執行環境之程式碼,例如構成
處理器韌體、一協定堆棧、一資料庫管理系統、作業系統或上述各項中之一或多者之組合的程式碼。
可以任何形式之程式設計語言(包含編譯語言或解譯語言或宣告語言或程序性語言)來撰寫一電腦程式(亦可被稱為或所闡述為一程式、軟體、一軟體應用程式、一app、一模組、一軟體模組、一指令碼或程式碼),且可以任何形式(包含部署為一獨立程式或一模組、組件、子常式或適合於用於一運算環境中之其他單元)來部署該電腦程式。一程式可以但不必對應於一檔案系統中之一檔案。一程式可儲存於保存其他程式或資料(例如,儲存於標記語言文檔中之一或多個指令碼)之一檔案之一部分中、儲存於專用於所討論程式之單個檔案中、或儲存於多個協調的檔案(例如,儲存一或多個模組、子程式或程式碼的若干部分的檔案)中。一電腦程式可經部署以在一個電腦上或在位於一個位點處或跨越多個位點分布且藉由通信網路互連之多個電腦上來執行。
一或多個電腦之一系統經組態以執行特定操作或動作意味著該系統上已安裝了在操作中使得系統執行操作或動作的軟體、韌體、硬體或者其一組合。一或多個電腦程式經組態以執行特定操作或動作意味著一或多個程式包含在由資料處理設備執行時使得該設備執行操作或動作之指令。
可由執行一或多個電腦程式之一或多個可程式化電腦執行本說明書中所闡述之程序及邏輯流程,以通過對輸入資料進行操作並產生輸出來執行功能。亦可由特殊用途邏輯電路(例如,一FPGA或一ASIC)或由特殊用途邏輯電路與一或多個程式化電腦之一組合來執行程序及邏輯流程。
適合於執行一電腦程式之電腦可基於一般用途微處理器或特殊用途微處理器或基於這兩者、或者基於任何其他種類的中央處理單元。一般而言,一中央處理單元將自一唯讀記憶體或一隨機存取記憶體或兩者接收指令及資料。一電腦的基本元件是用於實行或執行指令之一中央處理單元及用於儲存指令及資料之一或多個記憶體裝置。所述處理器及記憶體可由專用邏輯電路補充或並入於專用邏輯電路中。一般而言,一電腦亦將包含用於儲存資料之一或多個大容量儲存裝置(例如,磁碟、磁光碟或光碟),或者以操作方式耦合以自該等大容量儲存裝置接收資料或向其傳送資料或既接收又傳送資料。然而,一電腦不必具有此類裝置。此外,一電腦可嵌入於另一裝置中,例如一行動電話、一個人數位助理(PDA)、一行動音訊或視訊播放器、一遊戲機、一全球定位系統(GPS)接收器或一可攜式儲存裝置(例如,一通用串列匯流排(USB)快閃磁碟機)。
適合於儲存電腦程式指令及資料之電腦可讀媒體包含所有形式之非揮發性記憶體、媒體及記憶體裝置,例如包含:半導體記憶體裝置(例如,EPROM、EEPROM及快閃記憶體裝置);磁碟(例如,內部硬磁碟或可裝卸磁碟);磁光碟;以及CD ROM及DVD-ROM碟。
為與使用者互動,本說明書中所闡述之標的物之實施例可實施於具有一顯示裝置(例如,CRT(陰極射線管)或LCD(液晶顯示器)監視器)、一鍵盤及指向裝置(例如,一滑鼠或軌跡球)或一存在靈敏顯示器或者其他表面的一電腦上,該顯示裝置用於為使用者顯示資訊,使用者可藉由其他表面將輸入提供至電腦。亦可使用其他種類之裝置來與使用者互動;舉例而言,提供給使用者之回饋可係任何形式之感觀回饋(例如觸覺回饋);且可以任何形式(包含聲音、語音或觸覺輸入)來接收來自使用者
之輸入。另外,一電腦可藉由向使用者所使用之一裝置發送文檔及自該裝置接收文檔而與使用者互動;舉例而言,藉由回應於自使用者之裝置上之web瀏覽器接收到之請求而將網頁發送至該web瀏覽器。此外,一電腦可藉由將文字訊息或其他形式之訊息發送至運行一傳訊應用之一個人裝置(例如,一智慧型電話)且自使用者接收返回之回應性訊息來與一使用者互動。
在此說明書中所闡述之標的物之特定實施例可用於緊凑的或電池供電之裝置中,諸如智慧型電話、平板電腦或可攜式電腦,以實現以下各別優點中之一或多者。由於可以軟體形式在影像處理器自身上執行失真函數,因此影像處理器不必具有專用於執行失真函數的一單獨硬體組件。此減小既能影像處理器之大小亦能降低影像處理器之製造成本。另外,使用在此說明書中所闡述之方法,影像處理器可藉由使用移位暫存器陣列及執行通道陣列執行運算來比一CPU更高效地執行複雜傳遞函數。使用本機記憶體來暫時地儲存輸入支援區亦會減少通常必須在一CPU中執行之晶片外記憶體存取。此相對於一CPU而進一步提高在影像處理器中執行複雜傳遞函數之速度及能量效率。
除上文所闡述之實施例之外,以下實施例亦具創新性:實施例1係一種方法,其包括:接收定義如何依據一輸入影像區運算一輸出影像區之一核心程式,其中該核心程式定義規定如何運算一或多個輸入像素之位置之一複雜傳遞函數,運算該輸出影像區中之每一輸出像素需要該一或多個輸入像素;及自該核心程式產生輸出程式碼,該輸出程式碼在由具有一執行通道陣列及一個二維移位暫存器陣列之一影像處理器執行時使得該影像處理器
執行包括以下各項之操作:將該輸入影像區內之資料載入至該二維移位暫存器陣列中;運算獲得輸入像素所需之一局域支援區大小,運算每一各別輸出像素需要該等輸入像素;藉由每一執行通道使用該二維移位暫存器陣列來遍歷(130)具有該所運算之局域支援區大小之一各別局域支援區,並將在該遍歷期間遇到之輸入像素儲存至該影像處理器之本機記憶體中;藉由每一執行通道根據該複雜傳遞函數自該影像處理器之該本機記憶體獲得一或多個輸入像素;及藉由每一執行通道根據該複雜傳遞函數使用自該本機記憶體獲得之一或多個輸入像素來根據該核心程式運算一各別輸出像素。
實施例2係根據實施例1之方法,其進一步包括:藉由每一執行通道根據該傳遞函數運算自該本機記憶體獲得該一或多個輸入像素所需之一資料位移,以針對該執行通道運算一各別輸出像素;及藉由每一執行通道使用該所運算之位移來自該本機記憶體載入該一或多個輸入像素。
實施例3係根據實施例1至2中任一者之方法,其中將該輸入影像區內之資料載入至該二維移位暫存器陣列中包括:運算依據該輸入影像區運算該輸出影像區所需之一全域支援區;及將該全域支援區內之資料載入至該二維移位暫存器陣列中。
實施例4係根據實施例1至3中任一者之方法,其中該本機記憶體具有一維直接定址。
實施例5係根據實施例1至4中任一者之方法,藉由每一執行通道使用該二維移位暫存器陣列遍歷一各別局域支援區包括:藉由每一執行通道基於該輸出像素與運算該輸出像素所需之每一輸入像素之間的一最大距離來運算一局域定界框之一各別大小;及遍歷該局域定界框。
實施例6係根據實施例5之所述方法,其進一步包括運算(230)該最大距離,該運算該最大距離包含使用該二維移位暫存器陣列對藉由每一執行通道所運算之各別局域最大值執行一平行縮減。
實施例7之根據實施例1至6中任一項之方法,其進一步包括:判定該核心程式具有包含一函數呼叫之一緩衝器索引;及作為回應,使用具有複雜傳遞函數之核心程式所特有之一程序來產生該輸出程式碼。
實施例8係根據實施例1至7中任一者之方法,其進一步包括運算根據該核心程式運算該輸出區所需之一全域支援區,該運算該全域支援區包含藉由執行該複雜傳遞函數並將該輸出區之一或多個隅角之一或多對座標提供至該複雜傳遞函數來運算該全域支援區之一或多個隅角。
實施例9係一種系統,其包括:一或多個電腦以及儲存指令之一或多個儲存裝置,該等指令在由該一或多個電腦執行時使得該一或多個電腦執行實施例1至8中任一者之方法。
實施例10係一種編碼有一電腦程式之電腦儲存媒體,該程式包括指令,該等指令在由資料處理設備執行時使得該資料處理設備執行實施例1至8中任一者之方法。
實施例11係一種由具有一影像處理器之一運算裝置執行之方法,該影像處理器包括一執行通道陣列及一個二維移位暫存器陣列,其中該影像處理器經組態以執行指令以執行由一核心程式定義之操作從而依據一輸入影像區產生一輸出影像區,該核心程式具有一複雜傳遞函數,其中該方法包括:將該輸入影像區內之資料載入至該二維移位暫存器陣列中;運算獲得輸入像素所需之一局域支援區大小,運算每一各別輸出像素需要該等輸入像素;藉由每一執行通道使用該二維移位暫存器陣列遍歷具有該所運算之局域支援區大小之一各別局域支援區,並將在該遍歷期間遇到之輸入像素儲存至該影像處理器之本機記憶體中;藉由每一執行通道根據該複雜傳遞函數自該影像處理器之該本機記憶體獲得一或多個輸入像素;及藉由每一執行通道根據該複雜傳遞函數使用自該本機記憶體獲得之一或多個輸入像素來針對該核心程式運算一各別輸出像素。
實施例12係根據技術方案11所述之方法,其進一步包括:藉由每一執行通道根據該傳遞函數運算自該本機記憶體獲得該一或多個輸入像素以所需之一資料位移,以針對該執行通道運算一各別輸出像素;及藉由每一執行通道使用該所運算之位移來自該本機記憶體載入該一或多個輸入像素。
實施例13係根據實施例11至12中任一者之方法,其中將該輸入影像區內之資料載入至該二維移位暫存器陣列中包括:
運算依據自該輸入影像區運算該輸出影像區所需之一全域支援區;及將該全域支援區內之資料載入至該二維移位暫存器陣列中。
實施例14係根據實施例11至13中任一者之方法,其中該本機記憶體具有一維直接定址。
實施例15係根據實施例11至14中任一者之方法,其中藉由每一執行通道使用該二維移位暫存器陣列來遍歷一各別局域支援區包括:藉由每一執行通道基於該輸出像素與運算該輸出像素所需之每一輸入像素之間的一最大距離來運算一局域定界框之一各別大小;及遍歷該局域定界框。
實施例16係根據實施例13之方法,其進一步包括運算該最大距離,該運算該最大距離包含使用該二維移位暫存器陣列對由每一執行通道所運算之各別局域最大值執行一平行縮減。
實施例17係根據實施例11至16中任一者之方法,其中該等指令係自包含一緩衝器索引之一輸入程式產生,該緩衝器索引包含一函數呼叫,且其中該等指令係使用具有複雜傳遞函數之核心程式所特有之一程序產生。
實施例18係根據實施例11至17中任一者之方法,其進一步包括運算針對該核心程式運算該輸出區所需之一全域支援區,該運算該全域支援區包含藉由執行該複雜傳遞函數並將該輸出區之一或多個隅角之一或多對座標提供至該複雜傳遞函數來運算該全域支援區之一或多個隅角。
實施例19係一種採用一影像處理器之運算裝置,該影像處理器包括一執行通道陣列及一個二維移位暫存器陣列,其中該影像程序經
組態以執行實施例11至18中任一者之方法。
實施例20係一種編碼有一電腦程式之電腦儲存媒體,該程式包括可操作指令,該等可操作指令在由包括一執行通道陣列及一個二維移位暫存器陣列之一影像處理器執行時使得該影像處理器執行實施例11至18中任一者之方法。
雖然本說明書含有諸多具體實施方案細節,但這些細節不應被解釋限制本發明內容之範疇或本發明所主張內容之範疇,而是應被解釋闡述可為特定發明之特定實施例所特有之特徵。本說明書中在單獨實施例之內容脈絡中所闡述之一些特徵亦可以組合方式實施於一單個實施例中。反之,在一單個實施例之內容脈絡中所闡述之各種特徵亦可單獨地或以任何適合子組合形式實施於多個實施例中。此外,儘管上文可將特徵闡述為以一些組合形式起作用且甚至最初主張如此,但來自一所主張組合之一或多個特徵在某些情形中可自該組合被去除,且該所主張組合可針對一子組合或一子組合之變化形式。
類似地,雖然在圖式中按照特定次序繪示操作,但不應將此理解為需要按照所展示之特定次序或按照順序次序執行此等操作,亦不應理解為執行所有所圖解說明之操作來實現所期望結果。在一些情况下,多任務及並行處理可係有利的。此外,不應將在上文所闡述之實施例中之各種系統模組及組件的分離理解為在所有實施例中皆需要此分離,且應理解,通常可將所闡述之程式組件及系統一起集成於一單個軟體產品中或封裝至多個軟體產品中。
已闡述了標的物之特定實施例。其他實施例處於以下申請專利範圍之範疇內。舉例而言,可按照不同次序來執行申請專利範圍中所
引用之動作,且仍實現所期望結果。舉例而言,附圖中所繪示之程序不一定需要所展示之特定次序或順序次序來實現所期望結果。在某些情形下,多任務及並行處理可係有利的。
500:模板處理器/影像處理器
501:資料運算單元
502:純量處理器
503:純量記憶體庫/純量記憶體
504:輸入/輸出單元
505:執行通道陣列
506:二維移位暫存器陣列/移位暫存器陣列
507_1:隨機存取記憶體庫
507_2:隨機存取記憶體庫
507_3:隨機存取記憶體庫
509:程式控制器
Claims (20)
- 一種電腦實施之方法,其包括:接收(110)定義如何依據一輸入影像區(170;410)運算一輸出影像區(180;420)之一核心(kernel)程式,其中該核心程式定義規定如何運算一或多個輸入像素(162)之位置之一複雜傳遞函數(complex transfer function),運算該輸出影像區中之每一輸出像素(160)需要該一或多個輸入像素(162);及自該核心程式產生輸出程式碼,該輸出程式碼在由具有一執行通道(execution lane)陣列(505;605)及一個二維移位暫存器(shift-register)陣列(430;506;606)之一影像處理器(500)執行時使得該影像處理器執行包括以下各項之操作:將該輸入影像區內之資料載入(120)至該二維移位暫存器陣列中;運算獲得輸入像素所需之一局域支援區大小,運算每一各別輸出像素需要該等輸入像素;藉由每一執行通道使用該二維移位暫存器陣列來遍歷(traversing)(130)具有該所運算之局域支援區大小之一各別局域支援區,並將在該遍歷期間遇到之輸入像素儲存至該影像處理器之本機記憶體(local memory)中;藉由每一執行通道根據該複雜傳遞函數自該影像處理器之該本機記憶體獲得一或多個輸入像素;及藉由每一執行通道使用根據該複雜傳遞函數自該本機記憶體獲得之一或多個輸入像素(480、481)來針對該核心程式運算(140)一各別 輸出像素(513)。
- 如請求項1之電腦實施之方法,其進一步包括:藉由每一執行通道根據該複雜傳遞函數運算自該本機記憶體獲得該一或多個輸入像素所需之一資料位移,以針對該執行通道運算一各別輸出像素;及藉由每一執行通道使用該所運算之位移來自該本機記憶體載入該一或多個輸入像素。
- 如請求項1或請求項2之電腦實施之方法,其中將該輸入影像區內之資料載入至該二維移位暫存器陣列中包括:運算依據該輸入影像區運算該輸出影像區所需之一全域支援區;及將該全域支援區內之資料載入至該二維移位暫存器陣列中。
- 如請求項1或請求項2之電腦實施之方法,其中該本機記憶體具有一維直接定址。
- 如請求項1或請求項2之電腦實施之方法,其中藉由每一執行通道使用該二維移位暫存器陣列遍歷一各別局域支援區包括:藉由每一執行通道基於該輸出像素與運算該輸出像素所需之每一輸入像素之間的一最大距離來運算(240)一局域定界框之一各別大小;及遍歷該局域定界框。
- 如請求項5之電腦實施之方法,其進一步包括運算(230)該最大距離,該運算該最大距離包含使用該二維移位暫存器陣列來對藉由每一執行通道所運算之各別局域最大值執行一平行縮減。
- 如請求項1或請求項2之電腦實施之方法,其進一步包括:判定該核心程式具有包含一函數呼叫之一緩衝器索引;及作為回應,使用具有複雜傳遞函數之核心程式所特有之一程序來產生該輸出程式碼。
- 如請求項1或請求項2之電腦實施之方法,其進一步包括運算針對該核心程式運算該輸出影像區所需之一全域支援區,該運算該全域支援區包含藉由執行該複雜傳遞函數並將該輸出影像區之一或多個隅角之一或多對座標提供至該複雜傳遞函數來運算該全域支援區之一或多個隅角。
- 一種採用一影像處理器(500)之運算裝置,該影像處理器包括一執行通道陣列(505;605)及一個二維移位暫存器陣列(403;506;606),其中該影像處理器經組態以執行指令以執行由一核心程式定義之操作來依據一輸入影像區(170;410)產生一輸出影像區(180;420),該核心程式具有一複雜傳遞函數,其中該等操作包括:將該輸入影像區內之資料載入(120)至該二維移位暫存器陣列中;運算獲得輸入像素(162)所需之一局域支援區大小,運算每一各別輸出像素(160)需要該等輸入像素(162);藉由每一執行通道使用該二維移位暫存器陣列遍歷(130)具有該所運 算之局域支援區大小之一各別局域支援區,並將在該遍歷期間遇到之輸入像素儲存至該影像處理器之本機記憶體中;藉由每一執行通道根據該複雜傳遞函數自該影像處理器之該本機記憶體獲得一或多個輸入像素;及藉由每一執行通道使用根據該複雜傳遞函數自該本機記憶體獲得之一或多個輸入像素(480、481)來針對該核心程式運算(140)一各別輸出像素(513)。
- 如請求項9之運算裝置,其中該等操作進一步包括:藉由每一執行通道根據該複雜傳遞函數運算自該本機記憶體獲得該一或多個輸入像素所需之一資料位移,以針對該執行通道運算一各別輸出像素;及藉由每一執行通道使用該所運算之位移來自該本機記憶體載入該一或多個輸入像素。
- 如請求項9或請求項10之運算裝置,其中將該輸入影像區內之資料載入至該二維移位暫存器陣列中包括:運算依據該輸入影像區運算該輸出影像區所需之一全域支援區;及將該全域支援區內之資料載入至該二維移位暫存器陣列中。
- 如請求項9或請求項10之運算裝置,其中該本機記憶體具有一維直接定址。
- 如請求項9或請求項10之運算裝置,其中藉由每一執行通道使用該二維移位暫存器陣列來遍歷一各別局域支援區包括:藉由每一執行通道基於該輸出像素與運算該輸出像素所需之每一輸入像素之間的一最大距離來運算(240)一局域定界框之一各別大小;及遍歷該局域定界框。
- 如請求項13之運算裝置,其中該等操作進一步包括運算(230)該最大距離,該運算該最大距離包含使用該二維移位暫存器陣列來對由每一執行通道所運算之各別局域最大值執行一平行縮減。
- 如請求項9或請求項10之運算裝置,其中該等指令係自包含一緩衝器索引之一輸入程式產生,該緩衝器索引包含一函數呼叫,且其中該等指令係使用具有複雜傳遞函數之核心程式所特有之一程序產生。
- 如請求項9或請求項10之運算裝置,其中該等操作進一步包括運算針對該核心程式運算該輸出影像區所需之一全域支援區,該運算該全域支援區包含藉由執行該複雜傳遞函數並將該輸出影像區之一或多個隅角之一或多對座標提供至該複雜傳遞函數來運算該全域支援區之一或多個隅角。
- 一或多種編碼有電腦程式指令之非暫時性電腦儲存媒體,該等電腦程式指令在由包括一執行通道陣列(505;605)及一個二維移位暫存器陣列(430;506;606)之一影像處理器(500)執行時使得該影像處理器執行由一核心程式定義之操作以依據一輸入影像區(170;410)產生一輸出影像區 (180;420),該核心程式具有一複雜傳遞函數,其中該等操作包括:將該輸入影像區內之資料載入至該二維移位暫存器陣列中;運算(120)獲得輸入像素(162)所需之一局域支援區大小,運算每一各別輸出像素(160)需要該等輸入像素(162);藉由每一執行通道使用該二維移位暫存器陣列遍歷(130)具有該所運算之局域支援區大小之一各別局域支援區,並將在該遍歷期間遇到之輸入像素儲存至該影像處理器之本機記憶體中;藉由每一執行通道根據該複雜傳遞函數自該影像處理器之該本機記憶體獲得一或多個輸入像素;及藉由每一執行通道使用根據該複雜傳遞函數自該本機記憶體獲得之一或多個輸入像素(480、481)來針對該核心程式運算(140)一各別輸出像素(513)。
- 如請求項17之一或多種非暫時性電腦儲存媒體,其中該等操作進一步包括:藉由每一執行通道根據該複雜傳遞函數運算自該本機記憶體獲得該一或多個輸入像素以所需之一資料位移,以針對該執行通道運算一各別輸出像素;及藉由每一執行通道使用該所運算之位移來自該本機記憶體載入該一或多個輸入像素。
- 如請求項17或請求項18之一或多種非暫時性電腦儲存媒體,其中將該輸入影像區內之資料載入至該二維移位暫存器陣列中包括: 運算依據該輸入影像區運算該輸出影像區所需之一全域支援區;及將該全域支援區內之資料載入至該二維移位暫存器陣列中。
- 如請求項17或請求項18之一或多種非暫時性電腦儲存媒體,其中藉由每一執行通道使用該二維移位暫存器陣列遍歷一各別局域支援區包括:藉由每一執行通道基於該輸出像素與運算該輸出像素所需之每一輸入像素之間的一最大距離來運算(240)一局域定界框之一各別大小;及遍歷該局域定界框。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US16/273,663 | 2019-02-12 | ||
| US16/273,663 US10552939B1 (en) | 2019-02-12 | 2019-02-12 | Image processor complex transfer functions |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| TW202030695A TW202030695A (zh) | 2020-08-16 |
| TWI722684B true TWI722684B (zh) | 2021-03-21 |
Family
ID=68966035
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW108143270A TWI722684B (zh) | 2019-02-12 | 2019-11-27 | 關於影像處理器複雜傳遞函數之電腦實施之方法及非暫時性電腦儲存媒體及採用影像處理器之運算裝置 |
Country Status (3)
| Country | Link |
|---|---|
| US (2) | US10552939B1 (zh) |
| TW (1) | TWI722684B (zh) |
| WO (1) | WO2020167360A1 (zh) |
Families Citing this family (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2019168739A1 (en) * | 2018-02-27 | 2019-09-06 | Google Llc | Large lookup tables for an image processor |
Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9769356B2 (en) * | 2015-04-23 | 2017-09-19 | Google Inc. | Two dimensional shift array for image processor |
| TW201802727A (zh) * | 2016-07-01 | 2018-01-16 | 谷歌有限責任公司 | 在可程式化二維影像處理器上之卷積神經網路 |
| TW201830329A (zh) * | 2016-02-26 | 2018-08-16 | 美商谷歌有限責任公司 | 用於影像處理器之編譯器管理記憶體 |
| TW201902215A (zh) * | 2017-05-15 | 2019-01-01 | 美商谷歌有限責任公司 | 影像處理器輸入輸出單元 |
Family Cites Families (9)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6016152A (en) | 1997-08-01 | 2000-01-18 | Avid Technology, Inc. | Apparatus and method for non-uniform image scaling |
| US7782334B1 (en) | 2005-09-13 | 2010-08-24 | Nvidia Corporation | Pixel shader-based data array resizing |
| JP5874721B2 (ja) | 2013-12-25 | 2016-03-02 | コニカミノルタ株式会社 | 画像処理装置、画像補正方法、及び、プログラム |
| US9772852B2 (en) | 2015-04-23 | 2017-09-26 | Google Inc. | Energy efficient processor core architecture for image processor |
| US9965824B2 (en) | 2015-04-23 | 2018-05-08 | Google Llc | Architecture for high performance, power efficient, programmable image processing |
| US10291813B2 (en) | 2015-04-23 | 2019-05-14 | Google Llc | Sheet generator for image processor |
| US9830150B2 (en) | 2015-12-04 | 2017-11-28 | Google Llc | Multi-functional execution lane for image processor |
| US10313641B2 (en) | 2015-12-04 | 2019-06-04 | Google Llc | Shift register with reduced wiring complexity |
| US20180005346A1 (en) * | 2016-07-01 | 2018-01-04 | Google Inc. | Core Processes For Block Operations On An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register |
-
2019
- 2019-02-12 US US16/273,663 patent/US10552939B1/en active Active
- 2019-11-26 WO PCT/US2019/063421 patent/WO2020167360A1/en not_active Ceased
- 2019-11-27 TW TW108143270A patent/TWI722684B/zh active
-
2020
- 2020-01-31 US US16/779,257 patent/US10853908B2/en active Active
Patent Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9769356B2 (en) * | 2015-04-23 | 2017-09-19 | Google Inc. | Two dimensional shift array for image processor |
| US20170310855A1 (en) * | 2015-04-23 | 2017-10-26 | Google Inc. | Two Dimensional Shift Array for Image Processor |
| TW201830329A (zh) * | 2016-02-26 | 2018-08-16 | 美商谷歌有限責任公司 | 用於影像處理器之編譯器管理記憶體 |
| TW201802727A (zh) * | 2016-07-01 | 2018-01-16 | 谷歌有限責任公司 | 在可程式化二維影像處理器上之卷積神經網路 |
| TW201902215A (zh) * | 2017-05-15 | 2019-01-01 | 美商谷歌有限責任公司 | 影像處理器輸入輸出單元 |
Also Published As
| Publication number | Publication date |
|---|---|
| WO2020167360A1 (en) | 2020-08-20 |
| US10853908B2 (en) | 2020-12-01 |
| TW202030695A (zh) | 2020-08-16 |
| US10552939B1 (en) | 2020-02-04 |
| US20200258190A1 (en) | 2020-08-13 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| KR102278658B1 (ko) | 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처 | |
| JP6821715B2 (ja) | 二次元実行レーンアレイおよび二次元シフトレジスタを有する画像プロセッサのためのブロック処理 | |
| US10216487B2 (en) | Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure | |
| CN107430760B (zh) | 用于图像处理器的二维移位阵列 | |
| CN107133908B (zh) | 用于图像处理器的编译器管理存储器 | |
| JP6837084B2 (ja) | 二次元実行レーンアレイおよび二次元シフトレジスタを有する画像プロセッサ上でのブロック処理のためのコアプロセス | |
| US10685423B2 (en) | Determination of per line buffer unit memory allocation | |
| CN107563952A (zh) | 可编程二维图像处理器上的卷积神经网络 | |
| TWI690850B (zh) | 非暫時性之電腦儲存媒體、運算系統及由一或多個電腦執行之方法 | |
| US11915338B2 (en) | Loading apparatus and method for convolution with stride or dilation of 2 | |
| US20240386260A1 (en) | Hardware accelerator optimized group convolution based neural network models | |
| JP6820428B2 (ja) | マルチコア画像プロセッサ上のアプリケーションソフトウェアの構成 | |
| TWI722684B (zh) | 關於影像處理器複雜傳遞函數之電腦實施之方法及非暫時性電腦儲存媒體及採用影像處理器之運算裝置 | |
| TWI794423B (zh) | 用於影像處理器之大查找表 | |
| US12026801B2 (en) | Filter independent L1 mapping of convolution data into general purpose register |


