TWI690896B - 影像處理器、由其執行之方法、及非暫態機器可讀儲存媒體 - Google Patents
影像處理器、由其執行之方法、及非暫態機器可讀儲存媒體 Download PDFInfo
- Publication number
- TWI690896B TWI690896B TW107141459A TW107141459A TWI690896B TW I690896 B TWI690896 B TW I690896B TW 107141459 A TW107141459 A TW 107141459A TW 107141459 A TW107141459 A TW 107141459A TW I690896 B TWI690896 B TW I690896B
- Authority
- TW
- Taiwan
- Prior art keywords
- array
- register
- displacement
- shift register
- plane
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 238000006073 displacement reaction Methods 0.000 claims description 208
- 238000012545 processing Methods 0.000 claims description 132
- 230000015654 memory Effects 0.000 claims description 111
- 230000008569 process Effects 0.000 claims description 20
- 238000004590 computer program Methods 0.000 claims description 12
- 238000004364 calculation method Methods 0.000 claims description 7
- 238000003491 array Methods 0.000 claims description 5
- 238000012546 transfer Methods 0.000 claims description 5
- 239000011159 matrix material Substances 0.000 description 57
- 230000006870 function Effects 0.000 description 25
- 239000000872 buffer Substances 0.000 description 18
- 238000011161 development Methods 0.000 description 18
- 125000001475 halogen functional group Chemical group 0.000 description 17
- 238000004422 calculation algorithm Methods 0.000 description 13
- 238000013461 design Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 7
- 238000004088 simulation Methods 0.000 description 7
- 238000007726 management method Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 238000005192 partition Methods 0.000 description 4
- 230000009466 transformation Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 230000005574 cross-species transmission Effects 0.000 description 3
- 230000004927 fusion Effects 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 230000001186 cumulative effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 238000005096 rolling process Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000001131 transforming effect Effects 0.000 description 2
- PCTMTFRHKVHKIS-BMFZQQSSSA-N (1s,3r,4e,6e,8e,10e,12e,14e,16e,18s,19r,20r,21s,25r,27r,30r,31r,33s,35r,37s,38r)-3-[(2r,3s,4s,5s,6r)-4-amino-3,5-dihydroxy-6-methyloxan-2-yl]oxy-19,25,27,30,31,33,35,37-octahydroxy-18,20,21-trimethyl-23-oxo-22,39-dioxabicyclo[33.3.1]nonatriaconta-4,6,8,10 Chemical compound C1C=C2C[C@@H](OS(O)(=O)=O)CC[C@]2(C)[C@@H]2[C@@H]1[C@@H]1CC[C@H]([C@H](C)CCCC(C)C)[C@@]1(C)CC2.O[C@H]1[C@@H](N)[C@H](O)[C@@H](C)O[C@H]1O[C@H]1/C=C/C=C/C=C/C=C/C=C/C=C/C=C/[C@H](C)[C@@H](O)[C@@H](C)[C@H](C)OC(=O)C[C@H](O)C[C@H](O)CC[C@@H](O)[C@H](O)C[C@H](O)C[C@](O)(C[C@H](O)[C@H]2C(O)=O)O[C@H]2C1 PCTMTFRHKVHKIS-BMFZQQSSSA-N 0.000 description 1
- 125000004429 atom Chemical group 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011143 downstream manufacturing Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000008570 general process Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000007620 mathematical function Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000035515 penetration Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000007480 spreading Effects 0.000 description 1
- 230000006641 stabilisation Effects 0.000 description 1
- 238000011105 stabilization Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- 238000012800 visualization Methods 0.000 description 1
Images
Classifications
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- 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
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/16—Constructional details or arrangements
- G06F1/20—Cooling means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
- G06F15/8023—Two dimensional arrays, e.g. mesh, torus
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/94—Hardware or software architectures specially adapted for image or video understanding
- G06V10/955—Hardware or software architectures specially adapted for image or video understanding using specific electronic processors
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C19/00—Digital stores in which the information is moved stepwise, e.g. shift registers
- G11C19/28—Digital stores in which the information is moved stepwise, e.g. shift registers using semiconductor elements
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Human Computer Interaction (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Multimedia (AREA)
- Mathematical Physics (AREA)
- Image Processing (AREA)
Abstract
本發明描述一種方法,其包含:在具有一二維執行道陣列及一二維位移暫存器陣列之一影像處理器上,使用各下一迭代來使該二維位移暫存器陣列之多個列或行之一同時位移量加倍。該方法亦包含:在迭代之位移之間執行該二維執行道陣列之各自道內之一或多個指令。本發明描述另一種方法,其包含:在具有一二維執行道陣列及一二維位移暫存器陣列之一影像處理器上,在該二維位移暫存器陣列中之多個資料列或行之重複同時位移之間重複執行該執行道陣列之各自道內之一或多個指令,該一或多個指令選擇於一相同陣列位置之不同暫存器中之內容之間。
Description
本發明之領域大體上係針對影像處理,且更具體而言,本發明之領域係針對用於具有一二維執行道陣列及一二維位移暫存器之一影像處理器之區塊操作之核心處理。
影像處理通常涉及處理組織成一陣列之像素值。此處,一經空間組織之二維陣列捕獲影像之二維性(額外維度可包含時間(例如一二維影像序列)及資料類型(例如色彩))。在一典型情況中,陣列式像素值由已產生一靜態影像或一圖框序列以捕獲動態影像之一攝影機提供。傳統影像處理器通常陷入兩個極端之任一者上。 一第一極端在軟體程式在一通用處理器或類通用處理器(例如具有向量指令增強之一通用處理器)上執行時執行影像處理任務。儘管第一極端通常提供一高通用性應用軟體開發平台,但其使用與相關聯額外負擔(例如指令提取及解碼、晶片上及晶片外資料之處置、臆測執行)組合之細粒資料結構最終導致在程式碼之執行期間每單位資料消耗較大能量。 一第二相反極端將固定函數固線式電路應用於大很多之資料區塊。使用直接應用於自訂設計電路之較大(相對於細粒)資料區塊大幅減少每單位資料之電力消耗。然而,使用自訂設計之固定函數電路一般導致處理器能夠執行之任務集受限。因而,第二極端缺乏用途廣泛之程式化環境(其與第一極端相關聯)。 提供高通用性應用軟體開發機會及每單位資料之提高功率效率兩者的一技術平台仍為一有待找尋之解決方案。
本發明描述一種方法,其包含:在具有一二維執行道陣列及一二維位移暫存器陣列之一影像處理器上,使用各下一迭代來使該二維位移暫存器陣列之多個列或行之一同時位移量加倍。該方法亦包含:在迭代之位移之間執行該二維執行道陣列之各自道內之一或多個指令。本發明描述另一種方法,其包含:在具有一二維執行道陣列及一二維位移暫存器陣列之一影像處理器上,在該二維位移暫存器陣列中之多個資料列或行之重複同時位移之間重複執行該執行道陣列之各自道內之一或多個指令,該一或多個指令選擇於一相同陣列位置之不同暫存器中之內容之間。 本發明描述一種裝置,其包含用於在具有一二維執行道陣列及一二維位移暫存器陣列之一影像處理器上使用各下一迭代來使該二維位移暫存器陣列之多個列或行之一同時位移量加倍的構件。該裝置亦包含用於在迭代之位移之間執行該二維執行道陣列之各自道內之一或多個指令的構件。本發明描述另一種裝置,其包含用於在具有一二維執行道陣列及一二維位移暫存器陣列之一影像處理器上於該二維位移暫存器陣列中之多個資料列或行之重複同時位移之間重複執行該執行道陣列之各自道內之一或多個指令的構件,該一或多個指令選擇於一相同陣列位置之不同暫存器中之內容之間。
i. 引言 以下描述將描述關於一新影像處理技術平台之諸多實施例,該新影像處理技術平台提供使用較大資料區塊(例如下文將進一步描述之線群及圖表)之一用途廣泛應用軟體開發環境以提供改良功率效率。 1.0 應用軟體開發環境 a. 內核之應用及結構 圖1展示包含一虛擬影像處理環境101、實際影像處理硬體103及一編譯器102之一影像處理器技術平台之一高階圖,編譯器102用於將針對虛擬處理環境101所寫入之較高階碼轉譯成實際硬體103實體執行之目標碼。如下文將更詳細描述,虛擬處理環境101廣泛用於可開發且經調適以易於可視化一應用之組成程序的應用。在由開發者104完成程式碼開發計畫之後,編譯器102將寫入虛擬處理環境101內之程式碼轉譯成針對實際硬體103之目標碼。 圖2a展示寫入虛擬環境內之應用軟體可採用之結構及形式之一實例。如圖2a中所觀察,可預期程式碼處理輸入影像資料201之一或多個圖框以使某一總變換作用於輸入影像資料201。藉由操作程式碼202之一或多個內核(其操作由開發者表述之一編排序列之輸入影像資料)來實現變換。 例如,如圖2a中所觀察,藉由首先使用一第一內核K1處理各輸入影像來實現總變換。接著,由內核K2操作由內核K1產生之輸出影像。接著,由內核K3_1或K3_2操作由內核K2產生之輸出影像之各者。接著,由內核K4操作由內核K3_1/K3_2產生之輸出影像。內核K3_1及K3_2可為經設計以藉由在K3級(stage)處施加並行處理來加速總處理之相同內核,或可為不同內核(例如,內核K3_1操作一第一特定類型之輸入影像且內核K3_2操作一第二不同類型之輸入影像)。 因而,較大總影像處理序列可呈一影像處理管線或一有向非循環圖(DAG)之形式且開發環境可經配備以實際上對開發者呈現就此所開發之程式碼之一表示。內核可由一開發者個別地開發及/或可由供應任何基礎技術(諸如實際信號處理器硬體及/或其設計)之一實體及/或由一第三方(例如針對開發環境所寫入之內核軟體之一供應商)提供。因而,可預期,一基本開發環境將包含開發者依各種方式自由「掛鉤」以實現其較大開發計畫之總流程的一內核「程式庫(library)」。預期成為此一程式庫之部分的一些基本內核可包含用於提供以下基本影像處理任務之任何一或多者的內核:卷積、去除雜訊、色彩空間轉換、邊角偵測、銳化、白平衡、伽瑪校正、色調映射、矩陣乘法、影像配準、金字塔式建構、小波變換、分塊離散餘弦及傅立葉變換。 圖2b展示可由一開發者設想之一內核203之結構之一例示性繪圖。如圖2b中所觀察,內核203可被視為各操作一各自基礎處理器205之程式碼(「執行緒」) 204之若干並行執行緒,其中使各處理器205針對一輸出陣列206中之一特定位置(諸如內核產生之輸出影像中之一特定像素位置)。為簡單起見,圖2b中僅展示三個處理器及對應執行緒。在各種實施例中,所描繪之每個輸出陣列位置將自身具有專用處理器及對應執行緒。即,可對輸出陣列中之各像素分配一單獨處理器及執行緒。在替代方法中,一相同執行緒可產生不只是用於輸出像素之資料及/或兩個不同執行緒(例如,在特定受限情況中)可協作產生用於一相同輸出像素之資料。 如下文將更詳細描述,在各種實施例中,在實際基礎硬體中,執行道及對應執行緒之一陣列一齊操作(例如,依一似單指令多資料(SIMD)方式)以產生當前被處理之圖框之一「線群」之一部分之輸出影像資料。一線群係一影像圖框之一連續、可調大小區段。在各種實施例中,開發者可意識到硬體操作線群,或開發環境可呈現一抽象性,其中(例如)輸出圖框中之每個像素(例如由其自身之專用處理器及執行緒產生之一輸出圖框中之每個像素)存在一單獨處理器及執行緒。無論如何,在各種實施例中,開發者應瞭解,內核包含用於各輸出像素之一個別執行緒(無論輸出陣列是否被可視化為一整個輸出圖框或其之一區段)。 如下文將更詳細描述,在一實施例中,在虛擬環境中呈現給開發者之處理器205具有一指令集架構(ISA),其不僅支援標準(例如RISC)運算碼,且亦包含容許開發者藉由被執行之像素處理來容易地可視化設想像素之特殊格式化資料存取指令。結合傳統數學及程式控制運算碼之一整個ISA來容易地界定/可視化任何輸入陣列位置之能力允許一用途極廣程式化環境,其基本上容許一應用程式開發者理想地界定待對任何大小影像表面執行之任何所要函數。例如,理想地,任何數學運算可容易地經程式化以應用於任何模板大小。 關於資料存取指令,在一實施例中,虛擬處理器之ISA (「虛擬ISA」)包含一特殊資料載入指令及一特殊資料儲存指令。資料載入指令能夠自影像資料之一輸入陣列內之任何位置讀取。資料儲存指令能夠寫入至影像資料之輸出陣列內之任何位置。後一指令允許使相同處理器之多個執行個體易於專用於不同輸出像素位置(各處理器寫入至輸出陣列中之一不同像素)。因而,例如,可使模板大小本身(例如,表達為像素之一寬度及像素之一高度)成為一易於程式化特徵。進一步簡化處理操作之可視化,其中特殊載入指令及特殊儲存指令之各者具有一特殊指令格式,藉此目標陣列位置被簡單地指定為X座標及Y座標。 無論如何,藉由樣例化(instantiate)用於輸出陣列中之多個位置之各者的一單獨處理器,處理器可並行執行其各自執行緒,使得(例如)輸出陣列中之所有位置之各自值被同時產生。值得注意的是,諸多影像處理常式通常對相同輸出影像之不同像素執行相同操作。因而,在開發環境之一實施例中,各處理器被假定為相同的且執行相同執行緒程式碼。因此,虛擬化環境可被視為一類型之二維(2D) SIMD處理器,其由(例如)各鎖步執行相同碼之相同處理器之一2D陣列組成。 圖3展示處理一輸出陣列中之兩個不同像素位置之相同碼的兩個虛擬處理器之處理環境之一更詳細實例。圖3展示對應於被產生之一輸出影像的一輸出陣列304。此處,一第一虛擬處理器處理執行緒301之程式碼以在輸出陣列304之位置X1處產生一輸出值,且一第二虛擬處理器處理執行緒302之程式碼以在輸出陣列304之位置X2處產生一輸出值。此外,在各種實施例中,開發者應瞭解,輸出陣列304中之各像素位置(為簡單起見,圖3僅展示兩個像素位置)存在一單獨處理器及執行緒。然而,在各種實施例中,開發者僅需要開發用於一個處理器及執行緒之程式碼(由於機器之似SIMD性質)。 如此項技術中所知,通常藉由處理包含及包圍對應輸出像素位置之一輸入陣列之像素來判定一輸出像素值。例如,如自圖3可見,輸出陣列304之位置X1對應於輸入陣列303之位置E。因此,將經處理以判定輸出值X1之輸入陣列303像素值之模板將對應於輸入值ABCDEFGHI。類似地,將經處理以判定輸出值X2之輸入陣列像素之模板將對應於輸入值DEFGHIJKL。 圖3展示可分別用於計算輸出值X1及X2之一對執行緒301、302之對應虛擬環境程式碼之一實例。在圖3之實例中,兩對程式碼係相同的且平均化9個輸入陣列值之一模板以判定一對應輸出值。兩個執行緒之間的唯一差異係自輸入陣列調用之變數及被寫入之輸出陣列之位置。具體而言,寫入至輸出位置X1之執行緒操作模板ABCDEFGHI且寫入至輸出位置X2之執行緒操作模板DEFGHIJKL。 如自來自執行緒對301、302之各自程式碼可見,各虛擬處理器至少包含內部暫存器R1及R2且至少支援以下指令:1)自輸入陣列至R1中之一LOAD指令;2)自輸入陣列至R2中之一LOAD指令;3)加上R1及R2之內容且將結果放置於R2中之一ADD指令;4)將R2內之值除以立即運算元9之一DIV指令;及5)將R2之內容儲存至執行緒所針對之輸出陣列位置中之一STORE指令。此外,儘管圖3中僅描繪兩個輸出陣列位置及兩個執行緒及對應處理器,但可以想像,輸出陣列中之每個位置可被指派執行此等函數之一虛擬處理器及對應執行緒。在各種實施例中,為與處理環境之似SIMD性質保持一致,多個執行緒彼此獨立執行。即,虛擬處理器之間不存在執行緒間通信(一SIMD通道防止穿入另一SIMD通道)。 b. 虛擬處理器記憶體模型 在各種實施例中,虛擬處理器之一相關特徵係其記憶體模型。如此項技術中所瞭解,一處理器自記憶體讀取資料,操作該資料,且將新資料寫回記憶體中。一記憶體模型係一處理器具有之資料在記憶體中組織方式之視角或觀點。圖4a至圖4c係針對開發環境之虛擬處理器之記憶體模型之一實施例。出於例示之目的,使用僅涉及三個虛擬處理器及對應執行緒401之一簡化環境。如下文將更詳細描述,虛擬處理器之記憶體模型小心保存SIMD語義且同時對各虛擬處理器提供純量運算及專用中間值儲存空間。 如圖4a中所觀察,在一實施例中,基於被儲存之資訊之類型來將各虛擬處理器在其外操作之記憶體區域420組織成6個不同分區。具體而言,存在:1)一專用暫存記憶體區域402;2)一全域輸入資料陣列區域403;3)一全域輸出資料陣列區域404;4)一全域查找表資訊區域405;5)一全域原子統計區域406;及6)一全域常數表資訊區域407。 圖4a中所描繪之分區試圖可視化在與總處理環境之似SIMD性質保持一致之虛擬處理器之間共用或「全域化」之記憶體區域。同樣地,圖4a亦試圖可視化在虛擬處理器之間不共用或「專用」於一特定虛擬處理器之其他記憶體區域。具體而言,如圖4a中所觀察,除專用於各虛擬處理器之一暫存記憶體區域402外之,所有記憶體分區係全域的。若干不同記憶體區域亦具有不同記憶體定址方案,如下文將進一步描述。 關於暫存記憶體區域402,在執行一複雜影像處理演算法之過程中暫時儲存中間資訊(例如,接著讀回資訊且稍後使用其)並不罕見。另外,此資訊在執行緒之間為不同的(不同輸入值可實現不同中間值)並不罕見。因此,記憶體模型包含用於藉由各虛擬處理器之對應執行緒來儲存此中間資訊之每處理器專用暫存記憶體區域402。在一實施例中,一特定處理器之暫存記憶體區域由該處理器透過一典型(例如線性)隨機存取記憶體位址存取409且係記憶體之一讀/寫區域(即,一虛擬處理器能夠自專用記憶體讀取資訊及將資訊寫入至專用記憶體中)。下文將進一步更詳細討論用於存取暫存記憶體區域之虛擬處理器ISA指令格式之實施例。 輸入陣列區域403含有調入408至執行緒集中以產生輸出資料之輸入資料集。在一典型情況中,輸入陣列對應於各執行緒操作或在其內操作之一影像(例如一圖框)或一影像之區段。輸入影像可為一真實輸入(諸如由一攝影機提供之像素資訊)或某一形式之中間影像(諸如由一先前內核依一較大總影像處理序列提供之資訊)。虛擬處理器通常不完成相同輸入資料項,此係因為其在一相同週期期間操作輸入影像資料之不同像素位置。 在一實施例中,一新穎記憶體定址方案用於界定將自輸入陣列403調入何種特定輸入值。具體而言,使用一「位置相對」定址方案,其使用X、Y座標而非一傳統線性記憶體位址來界定所要輸入資料。因而,虛擬處理器之ISA之載入指令包含一指令格式,其識別具有一X分量及一Y分量之輸入陣列內之一特定記憶體位置。因而,一二維座標系用於定址自輸入陣列403讀取之輸入值之記憶體。 使用一位置相對記憶體定址方法容許一虛擬處理器操作之一影像之區域更易於由一開發者識別。如上文所提及,結合傳統數學及程式控制運算碼之一整個ISA來容易地界定/可視化任何輸入陣列位置之能力允許一用途極廣程式化環境,其基本上容許一應用程式開發者容易地理想界定待對任何大小影像表面執行之任何所要函數。下文將進一步更詳細描述採用一位置相對定址方案之指令之各種指令格式實施例及所支援之ISA之其他特徵之實施例。 輸出陣列404含有執行緒負責產生之輸出影像資料。輸出影像資料可為最終影像資料(諸如呈現於依循總影像處理序列之一顯示器上之實際影像資料)或可為總影像處理序列之一後續內核使用其作為其輸入影像資料資訊之中間影像資料。此外,虛擬處理器通常不完成相同輸出資料項,此係因為其在一相同週期期間寫入至輸出影像資料之不同像素位置。 在一實施例中,位置相對定址方案亦用於寫入至輸出陣列。因而,各虛擬處理器之ISA包含一儲存指令,其指令格式將記憶體中之一目標寫入位置界定為一二維X、Y座標而非一傳統隨機存取記憶體位址。下文將進一步提供關於虛擬ISA之位置相對指令之實施例的更多細節。 圖4a亦展示對保存於查找表記憶體區域405內之一查找表411執行一查找410之各虛擬處理器。查找表通常由影像處理任務用於(例如)獲得不同陣列位置之濾波或變換係數,實施複變函數(例如伽瑪曲線、正弦、餘弦)(其中查找表提供一輸入指標值之函數輸出),等等。此處,可預期,SIMD影像處理序列通常將在一相同時脈週期期間對一相同查找表執行一查找。因而,如同輸入陣列記憶體區域403及輸出陣列記憶體區域404,查找表區域405可由任何虛擬處理器全域存取。圖4a亦展示自保存於查找表記憶體區域405中之一相同查找表411有效地查找資訊之三個虛擬處理器之各者。 在一實施例中,由於指標值通常用於界定一所要查找表項,所以使用一標準線性存取方案來存取查找表資訊區域。在一實施例中,記憶體之查找區域係唯讀的(即,處理器無法改變一查找表中之資訊且僅被容許自其讀取資訊)。為簡單起見,圖4a僅提出一個查找表駐留於查找表區域405內,但虛擬環境容許在模擬運行時間期間駐留多個不同查找表。下文將進一步提供對查找表執行查找之指令之虛擬ISA指令格式之實施例。 圖4b展示對原子統計區域406進行寫入413之三個虛擬處理器之各者。影像程序「更新」輸出資訊或對輸出資訊進行適度改變並不罕見。接著,更新資訊可用於使用更新資訊之其他下游程序。此等更新或適度改變之實例包含一固定偏移與輸出資料之簡單相加、一被乘數與輸出資料之簡單相乘或輸出資料與某一臨限值之最小或最大比較。 在此等序列中,如圖4b中所觀察,可操作已由個別執行緒401計算之輸出資料且將結果寫入413至原子統計區域406。取決於實施方案語義,由一原子動作操作之輸出資料可由處理器內部保存或自輸出陣列調用412,圖4b展示後者。在各種實施例中,可對輸出資料執行之原子動作包含加、乘、求最小值及求最大值。在一實施例中,使用一位置相對定址方案來存取原子統計區域406 (如同輸入及輸出陣列存取),假定輸出資料之更新將被邏輯地組織成相同於輸出資料本身之一二維陣列。下文將進一步更詳細描述用於對輸出資料執行一原子動作且將結果寫入至統計區域406之虛擬ISA指令格式之實施例。 圖4c展示自常數記憶體區域407內之一常數查找表415讀取414一常數值之虛擬處理器之各者。此處,(例如)可預期,不同執行緒401在相同時脈週期上需要一相同常數或其他值(例如待對一整個影像施加之一特定乘數)。因此,存取常數查找表415將一相同純量值回傳至虛擬處理器之各者,如圖4c中所描繪。因為通常使用一指標值來存取查找表,所以在一實施例中,使用一線性隨機存取記憶體位址來存取常數查找表記憶體區域。在一實施例中,記憶體之常數區域係唯讀的(即,處理器無法改變一常數表中之資訊且僅被容許自其讀取資訊)。為簡單起見,圖4c僅展示常數記憶體區域407中之一單一常數查找表415。由於執行緒可使用一個以上此表,所以記憶體區域407經組態為足夠大以視需要/使用保存儘可能多之常數表。 c. 虛擬處理器ISA 如上文多個執行個體中所提及,虛擬處理器ISA可包含若干相關特徵。下文將立即詳細描述此等特徵之若干者。 在各種實施例中,各虛擬處理器之ISA之指令格式使用一相對定位方法來界定以下各者之一X、Y座標:1)自輸入陣列記憶體區域讀取輸入影像資料之一LOAD指令;2)將輸出資料寫入至輸出陣列之一STORE指令;及3)記憶體之統計區域之一原子更新。 結合傳統資料存取、數學及程式控制運算碼之一整個ISA來容易地界定任何輸入陣列位置之能力允許一用途極廣程式化環境,其基本上容許一應用程式開發者理想地界定待對任何大小影像表面執行之任何所要函數。例如,理想地,任何數學運算可易於經程式化以應用於任何模板大小。 在一實施例中,用於自輸入/輸出陣列載入/儲存至輸入/輸出陣列之指令具有以下格式: [OPCODE] LINEGROUP_(name)[(((X*XS + X0)/XD);((Y*YS + Y0)/YD); Z] 其中[OPCODE]係特定類型之操作(自輸入陣列LOAD,STORE至輸出陣列)且LINEGROUP_(name)係指派給輸入或輸出陣列記憶體區域內之一特定影像之一特定區段(例如影像資料之一圖框之一線群)的名稱。此處,因為單獨操作不同線群,所以不同線群被給予不同名稱,使得其可被唯一地識別/存取(例如LINEGROUP_1、LINEGROUP_2等等)。相同名稱之線群可存在於輸入陣列記憶體區域及輸出陣列記憶體區域兩者中。任何線群之原點可為(例如)其適當記憶體區域內之其左下角。 就對原子統計表執行更新之指令而言,在一實施例中,指令格式呈以下類似結構: [OPCODE] STATS_(name)[(((X*XS + X0)/XD);((Y*YS + Y0)/YD); Z] 其中顯著差異係:輸入運算元資訊界定一特定統計表(STATS_(name))內之一位置而非輸入或輸出陣列內之一特定線群。如同線群,將不同名稱給予不同統計表,使得一執行緒可在其操作過程中唯一地操作不同統計表。[OPCODE]指定待執行之特定原子動作(例如STAT_ADD、STAT_MUL、STAT_MIN、STAT_MAX)。 對於輸入/輸出陣列存取或原子統計表存取,指令之Z運算元界定指令針對一命名線群或統計表之何種通道。此處,一單一影像通常將具有多個通道。例如,視訊影像通常具有用於視訊流之一相同圖框之一紅色通道(R)、一綠色通道(G)及一藍色通道(B)。就此而言,一完整影像可被視為彼此上下堆疊之單獨R、G及B通道影像。Z運算元界定指令針對此等通道影像之何者(例如,Z=0對應於紅色通道,Z=1對應於藍色通道,及Z=2對應於綠色通道)。因此,各線群及統計表經結構化以包含用於被處理之特定影像之各通道之內容。 (X*XS+X0)/XD運算元界定指令針對之一命名線群或統計表內之X位置且(Y*YS+Y0)/YD運算元界定指令針對之一命名線群或統計表內之Y位置。X位置之XS及XD項及Y位置之YS及YD項用於具有不同像素密度之輸入影像與輸出影像之間的縮放。下文將進一步更詳細描述縮放。 在一最簡單情況中,輸入影像與輸出影像之間不存在縮放且指令格式之X分量及Y分量僅呈X+X0及Y+Y0之形式,其中X0及Y0係相對於執行緒之位置的位置偏移。一執行緒被視為指派給被寫入其輸出值之輸出陣列線群內之位置。可在輸入陣列線群及任何統計表中容易地識別一對應相同位置。 作為一實例,若執行緒被指派一輸出陣列LINEGROUP_1中之一特定X、Y位置,則指令 LOAD LINEGROUP_1[(X-1);(Y-1);Z] 將自LINEGROUP_1載入自輸入陣列內之相同X、Y位置向左一個像素位置且向下一個像素位置之一值。 因此,與其左右相鄰者一起平均化X、Y位置之像素值的一簡單模糊內核可以偽碼寫入,如圖5a中所描繪。如圖5a中所觀察,位置((X);(Y))對應於寫入至輸出陣列之虛擬處理器之位置。在上述偽碼中,LOAD對應於用於自輸入陣列之一載入之運算碼且STORE對應於用於至輸出陣列之儲存之運算碼。應注意,輸入陣列中存在一LINEGROUP_1且輸出陣列中存在一LINEGROUP_1。 圖5b描繪用於解釋相對定位載入及儲存指令格式之縮放特徵之縮放影像。降低取樣係指藉由在輸出影像中提供存在於輸入影像中之像素之非所有者來將一較高解析度影像變換成一較低解析度影像。提升取樣係指藉由在輸出影像中產生比存在於輸入影像中多之像素來將一較低解析度影像變換成一較高解析度影像。 例如,參考圖5b,若影像501表示輸入影像且影像502表示輸出影像,則將執行降低取樣,此係因為輸出影像中存在比輸入影像中少之像素。此處,對於輸出影像中之各像素,輸入影像中之相關像素(其判定一輸出像素之輸出值)進行沿輸出影像之任一軸移動而「遠離」輸出像素位置。例如,對於一3:1降低取樣比,沿任一軸之輸出影像中之第一像素對應於輸入影像中之沿相同軸之第一像素、第二像素及第三像素,輸出影像中之第二像素對應於輸入影像中之第四像素、第五像素及第六像素,等等。因此,第一輸出像素具有第三位置中之一相關像素,而第二輸出像素具有第六位置中之一相關像素。 因而,相對定位指令格式中之XS及YS被乘數項用於實施降低取樣。若圖5a之模糊偽碼被重寫以沿兩個軸3:1降低取樣,則程式碼將被重寫為: R1 <= LOAD LINEGROUP_1[((3X)-1);3(Y);0] R2 <= LOAD LINEGROUP_1[3(X);3(Y);0] R3 <= LOAD LINEGROUP_1[((3X)+1);3(Y);0] R2 <= ADD R1, R2 R2 <= ADD R2, R3 R2 <= DIV R2, 3 STORE LINEGROUP_1[(X);(Y);(0)]; R2 相比而言,就1:3提升取樣(例如,影像502係輸入影像且影像501係輸出影像)而言,XD及YD除數將用於針對沿任一軸之每個輸入像素產生三個輸出像素。因而,模糊碼將被重寫為: R1 <= LOAD LINEGROUP_1[(X-1)/3;(Y)/3;0] R2 <= LOAD LINEGROUP_1[(X)/3;(Y)/3;0] R3 <= LOAD LINEGROUP_1[(X+1)/3;(Y)/3;0] R2 <= ADD R1, R2 R2 <= ADD R2, R3 R2 <= DIV R2, 3 STORE LINEGROUP_1[(X);(Y);(0)]; R2 在各種實施例中,存取記憶體之專用部分、常數部分及查找部分之指令之指令格式包含亦呈a*b+c之形式之一運算元,其中a係一基礎位置,b係一縮放項,且c係一偏移。然而,此處,採用一線性定址方法,其中a*b+c項基本上對應於應用於目標表之一線性指標。此等指令之各者亦包含於運算碼中且包含被存取之記憶體區域之一識別符。例如,執行自查找表記憶體區域之一查找的一指令可被表達為: LOAD LKUP_(name)[(A*B + C)] 其中LOAD係識別一載入操作之運算碼且LKUP_(name)指定被存取之查找表記憶體區域中之查找表之名稱。此外,多個查找表可由一執行緒使用且因此一命名方案用於識別存在於查找表記憶體區域中之一個以上查找表之適當者。 具有類似意圖運算碼之一類似格式可用於針對常數記憶體區域及專用記憶體區域之指令(例如LOAD CNST_(name)[(A*B+C)]、LOAD PRVT_(name)[(A*B+C)])。在一實施例中,查找表及常數表存取係唯讀的(一處理器無法改變已被放置於該處之資料)。因而,此等記憶體區域不存在STORE指令。在一實施例中,記憶體之專用區域係可讀/寫的。因而,該記憶體區域存在一儲存指令(例如STORE PRVT[(A*B+C)])。 在各種實施例中,各虛擬處理器包含通用暫存器,其可含有整數值、浮點值或定點值。另外,通用暫存器可含有可組態位元寬度之資料值,諸如8位元、16位元或32位元值。因此,一輸入陣列或輸出陣列中之各像素位置處之影像資料可具有8個、16個或32個位元之一資料大小。此處,一虛擬處理器可經組態以用於建立通用暫存器內之值之位元大小及數值格式的一執行模式。指令亦可指定立即運算元(其係輸入運算元,該等輸入運算元之輸入值被直接表達於指令本身中而非在一指定暫存器中被找到)。立即運算元亦可具有可組態8位元、16位元或32位元寬度。 在一擴展實施例中,各虛擬處理器亦能夠以在本身內置之一純量模式或一SIMD模式中操作。即,一特定陣列位置內之資料可被視為一純量值或具有多個元素之一向量。例如,一第一組態可建立8個位元之純量運算,其中各影像陣列位置保存一純量8位元值。相比而言,另一組態可建立32個位元之並行/SIMD運算,其中假定各影像陣列位置保存每陣列位置之32個位元之一總資料大小之4個8位元值。 在各種實施例中,各虛擬處理器亦包含用於保存謂詞值(predicate value)之暫存器。一單一謂詞值通常僅具有一個位元長度且表達來自對既有資料執行一真/假或大於/小於測試之一運算碼的一結果。謂詞值用於(例如)在執行期間透過程式碼來判定分支方向(且因此用作為條件分支指令中之運算元)。謂詞值亦可被表達為一指令中之一立即運算元。 在各種實施例中,各虛擬處理器包含用於保存純量值之暫存器。此處,純量值被儲存至預留給常數之記憶體模型之分區空間中及自該分區空間讀取(如上文相對於圖4c所討論)。此處,處理一相同影像之一虛擬處理器群組之各虛擬處理器使用來自常數記憶體空間之相同純量值。在擴展實施例中,亦存在純量謂詞。此等係保存於滿足一謂詞及一純量兩者之定義之暫存器空間中的值。 在各種實施例中,各虛擬處理器經設計為一似RISC指令集,其支援計算指令運算碼包含以下之任何可行組合:1) ADD (運算元A及B相加);2) SUB (運算元A及B相減);3) MOV (將運算元自一暫存器移動至另一暫存器);4) MUL (多個運算元A及B);5) MAD (將運算元A及B相乘且將結果與C相加);6) ABS (回傳運算元A之絕對值);7) DIV (將運算元A除以運算元B);8) SHL (使運算元A向左位移);9) SHR (使運算元A向右位移);10) MIN/MAX (回傳運算元A及B之較大者);11) SEL (選擇運算元A之指定位元組);12) AND (回傳運算元A及B之邏輯「與」);13) OR (回傳運算元A及B之邏輯「或」);14) XOR (回傳運算元A及B之邏輯「互斥或」);15) NOT (回傳運算元A之邏輯「反」)。 指令集亦包含標準謂詞運算,諸如:1) SEQ (若A等於B,則回傳1);2) SNE (若A不等於B,則回傳1);3) SLT (若A小於B,則回傳1);4) SLE (若A小於或等於B,則回傳1)。亦包含諸如JMP (跳躍)及BRANCH (其各者可包含名義變數或謂詞作為運算元)之控制流程指令。 d. 應用軟體開發及模擬環境 圖6描繪一應用軟體開發及模擬環境601。如上文相對於圖2所討論,一開發者可藉由依與總意欲影像變換一致之一策略性序列配置內核來開發一綜合影像處理功能(例如一影像處理管線,其中管線中之各級執行一專用影像處理任務、某一其他DAG指定常式集等等)。可自一程式庫602調用內核及/或開發者可開發一或多個自訂內核。 程式庫602內之內核可由內核之一第三方供應商及/或任何基礎技術之一提供者(例如包含目標硬體影像處理器之一硬體平台之一供應商或目標硬體影像處理器(例如,經提供為其之一設計或實際硬體)之一供應商)提供。 就自訂開發內核而言,在諸多情況中,開發者僅需要寫入一單一執行緒603之程式碼。即,開發者僅需要寫入藉由參考相對於輸出像素位置(例如,具有上述位置相對記憶體存取指令格式)之輸入像素值來判定一單一輸出像素值之程式碼。在滿足單一執行緒603之操作之後,開發環境可接著自動樣例化一各自虛擬處理器上之執行緒碼之多個執行個體以使一內核作用於操作一影像表面區域之一處理器陣列。影像表面區域可為一影像圖框之一區段(諸如一線群)。 在各種實施例中,以虛擬處理器ISA之目標碼(或降級編譯成虛擬處理器ISA目標碼之一較高階語言)寫入自訂執行緒程式碼。可在一模擬運行時間環境(其包含存取根據記憶體模型所組織之一記憶體的一虛擬處理器)中執行自訂內核之程式碼之執行之模擬。此處,樣例化一虛擬處理器604及併入模型之一記憶體605之軟體模型(目標導向或依其他方式)。 接著,虛擬處理器模型604模擬執行緒碼603之執行。在滿足一執行緒、其較大內核及內核所屬之任何較大函數之性能之後,將整體編譯成基礎硬體之實際目標碼。模擬環境601之整體可經實施為在一電腦系統(例如一工作站) 606上運行之軟體。 2.0 硬體架構實施例 a. 影像處理器硬體架構及操作 圖7展示硬體中所實施之一影像處理器之一架構700之一實施例。例如,一編譯器可針對影像處理器,該編譯器將針對一模擬環境內之一虛擬處理器所寫入之程式碼轉換成由硬體處理器實際執行之程式碼。如圖7中所觀察,架構700包含複數個線緩衝器單元701_1至701_M (下文中稱為「線緩衝器」、「線緩衝器單元」或其類似者),其透過一網路704 (例如一晶片上網路(NOC)(其包含一晶片上交換網路、一晶片上環形網路)或其他種類之網路)互連至複數個模板處理器單元702_1至702_N (下文中稱為「模板處理器」、「模板處理器單元」或其類似者)及對應圖表產生器單元703_1至703_N (下文中稱為「圖表產生器」、「圖表產生器單元」或其類似者)。在一實施例中,任何線緩衝器單元可透過網路704連接至任何圖表產生器及對應模板處理器。 在一實施例中,編譯程式碼且將其載入至一對應模板處理器702上以執行早先由一軟體開發者界定之影像處理操作(亦可(例如)取決於設計及實施方案來將程式碼載入至模板處理器之相關聯圖表產生器703上)。在至少一些執行個體中,可藉由將一第一管線級之一第一內核程式載入至一第一模板處理器701_1中、將一第二管線級之一第二內核程式載入至一第二模板處理器702_2中等等來實現一影像處理管線,其中第一內核執行管線之第一級之函數,第二內核執行管線之第二級之函數,等等,且額外控制流程方法經安裝以將輸出影像資料自管線之一級傳至管線之下一級。 在其他組態中,影像處理器可經實現為具有操作相同內核程式碼之兩個或兩個以上模板處理器702_1、702_2的一平行機。例如,可藉由跨多個模板處理器(其各者執行相同功能)散佈圖框來處理一高度密集且高資料速率之影像資料流。 在其他組態中,可藉由組態各自模板處理器及其自身之各自程式碼內核且將適當控制流程鉤組態至硬體中以將來自一內核之輸出影像導引至DAG設計中之下一內核之輸入來將內核之基本上任何DAG載入至硬體處理器上。 作為一般流程,影像資料之圖框由一巨集I/O單元705接收且逐圖框地傳至線緩衝器單元701之一或多者。一特定線緩衝器單元將其影像資料圖框剖析成影像資料之一較小區域(指稱一「線群」)且接著透過網路704將線群傳至一特定圖表產生器。一完整或「全」單一線群可由(例如)一圖框之多個連續完整列或行之資料組成(為簡潔起見,本說明書將主要係指連續列)。圖表產生器將影像資料之線群進一步剖析成影像資料之一較小區域(指稱一「圖表」)且將圖表呈現給其對應模板處理器。 就具有一單一輸入之一影像處理管線或一DAG流程而言,一般將輸入圖框導引至相同線緩衝器單元701_1,線緩衝器單元701_1將影像資料剖析成線群且將線群導引至圖表產生器703_1,圖表產生器703_1之對應模板處理器702_1執行管線/DAG中之第一內核之程式碼。在完成由模板處理器702_1操作其處理之線群之後,圖表產生器703_1將輸出線群發送至一「下游」線緩衝器單元701_2 (在一些使用情況中,可將輸出線群發送回至早先已發送輸入線群之相同線緩衝器單元701_1)。 接著,一或多個「消費者」內核(其表示在其自身之各自其他圖表產生器及模板處理器(例如圖表產生器703_2及模板處理器702_2)上執行之管線/DAG中之下一級/操作)自下游線緩衝器單元701_2接收由第一模板處理器702_1產生之影像資料。依此方式,操作一第一模板處理器之一「生產者」內核使其輸出資料轉送至操作一第二模板處理器之一「消費者」內核,其中消費者內核在與總管線或DAG之設計一致之生產者內核之後執行下一組任務。 一模板處理器702經設計以同時操作影像資料之多個重疊模板。模板處理器之多個重疊模板及內部硬體處理容量有效地判定一圖表之大小。此處,在一模板處理器702內,執行道陣列一齊操作以同時處理由多個重疊模板覆蓋之影像資料表面區域。 如下文將更詳細描述,在各種實施例中,將影像資料之圖表載入至模板處理器702內之一二維暫存器陣列結構中。據信,使用圖表及二維暫存器陣列結構可藉由將大量資料移動至大量暫存器空間(作為(例如)一單一載入操作)且此後由一執行道陣列即時對資料直接執行處理任務來有效地提供電力消耗改良方案。另外,使用一執行道陣列及對應暫存器陣列提供可容易地程式化/組態之不同模板大小。 圖8a至圖8e繪示一線緩衝器單元701之剖析活動、一圖表產生器單元703之細粒剖析活動及耦合至圖表產生器單元703之模板處理器702之模板處理活動之高階實施例。 圖8a描繪影像資料801之一輸入圖框之一實施例。圖8a亦描繪一模板處理器經設計以在其上操作之三個重疊模板802 (各模板具有3個像素×3個像素之一尺寸)之一輪廓。以加粗黑線突顯各模板分別產生輸出影像資料所針對之輸出像素。為簡潔起見,將三個重疊模板802描繪為僅在垂直方向上重疊。應切實認識到,一模板處理器實際上可經設計以具有垂直方向及水平方向兩者上之重疊模板。 由於模板處理器內之垂直重疊模板802,如圖8a中所觀察,一單一模板處理器可在其上操作之圖框內存在一寬頻帶影像資料。如下文將更詳細討論,在一實施例中,模板處理器依一從左至右方式跨影像資料處理其重疊模板內之資料(且接著依從上至下順序對下一組線重複)。因此,隨著模板處理器使其操作繼續向前,加粗黑色輸出像素區塊之數目將水平向右增長。如上文所討論,一線緩衝器單元701負責自足以使模板處理器在擴大數目個未來週期內於其上操作之一傳入圖框剖析輸入影像資料之一線群。一線群之一例示性繪圖經繪示為一陰影區域803。在一實施例中,如下文將進一步描述,線緩衝器單元701可綜合不同動態表現以將一線群發送至一圖表產生器/自一圖表產生器接收一線群。例如,根據一模式(指稱「全群(full group)」),在一線緩衝器單元與一圖表產生器之間傳遞影像資料之完整全寬線。根據一第二模式(指稱「實際上高(virtually tall)」),首先使用全寬列之一子集來傳遞一線群。接著,以較小(非全寬)件依序傳遞剩餘列。 在輸入影像資料之線群803已由線緩衝器單元界定且被傳至圖表產生器單元之後,圖表產生器單元進一步將線群剖析成更精確適應模板處理器之硬體限制的精細圖表。更具體而言,如下文將進一步更詳細描述,在一實施例中,各模板處理器由一二維位移暫存器陣列組成。二維位移暫存器陣列基本上在一執行道陣列「下方」位移影像資料,其中位移之型樣引起各執行道操作其自身之各自模板內之資料(即,各執行道處理其自身之資訊模板以產生該模板之一輸出)。在一實施例中,圖表係「填充」二維位移暫存器陣列或依其他方式載入至二維位移暫存器陣列中之輸入影像資料之表面區域。 因此,如圖8b中所觀察,圖表產生器剖析來自線群803之一初始圖表804且將其提供至模板處理器(此處,資料之例示性圖表對應於大體上由元件符號804識別之5×5陰影區域)。如圖8c及圖8d中所觀察,模板處理器藉由在圖表上依一從左至右方式有效地移動重疊模板802來操作輸入影像資料之圖表。截至圖8d,已耗盡可自圖表內之資料計算其之一輸出值的像素之數目(在一塗黑3×3陣列中係9)(無其他像素位置可具有自圖表內之資訊判定之一輸出值)。為簡單起見,已忽略影像之邊界區域。 接著,如圖8e中所觀察,圖表產生器提供下一圖表805來供模板處理器繼續操作。應注意,模板之初始位置隨著其開始操作下一圖表而自第一圖表上之耗盡點接著向右前進(如先前圖8d中所描繪)。就新圖表805而言,模板將僅在模板處理器依相同於處理第一圖表之方式的方式操作新圖表時繼續向右移動。 應注意,由於包圍一輸出像素位置之模板之邊界區域,第一圖表804之資料與第二圖表805之資料之間存在某一重疊。可僅藉由圖表產生器重新傳輸重疊資料兩次來處置重疊。在替代實施方案中,為將下一圖表饋送至模板處理器,圖表產生器可繼續將新資料僅發送至模板處理器且模板處理器重新使用來自前一圖表之重疊資料。 b. 模板處理器設計及操作 圖9a展示一模板處理器單元架構900之一實施例。如圖9a中所觀察,模板處理器包含一資料運算單元901、一純量處理器902及相關聯記憶體903及一I/O單元904。資料運算單元901包含執行道905之一陣列、一二維位移陣列結構906及與陣列之特定列或行相關聯之各自單獨隨機存取記憶體907。 I/O單元904負責將自圖表產生器接收之「輸入」資料圖表載入至資料運算單元901中及將來自模板處理器之「輸出」資料圖表儲存至圖表產生器中。在一實施例中,將圖表資料載入至資料運算單元901中需要將一接收圖表剖析成影像資料列/行且將影像資料列/行載入至二維位移暫存器結構906或執行道陣列之列/行之各自隨機存取記憶體907中(如下文將更詳細描述)。若首先將圖表載入至記憶體907中,則執行道陣列905內之個別執行道可將圖表資料自隨機存取記憶體907適當載入至二維位移暫存器結構906中(例如,作為恰好在操作圖表之資料之前的一載入指令)。在完成將一資料圖表載入至暫存器結構906中(無論是否直接來自一圖表產生器或記憶體907)之後,執行道陣列905之執行道操作資料且最終「寫回」完成資料作為直接返回至圖表產生器或進入隨機存取記憶體907之一圖表。若執行道寫回至隨機存取記憶體907,則I/O單元904自隨機存取記憶體907提取資料以形成接著轉送至圖表產生器之一輸出圖表。 純量處理器902包含一程式控制器909,其自純量記憶體903讀取模板處理器之程式碼之指令且將指令發出至執行道陣列905中之執行道。在一實施例中,將一單一相同指令廣播至陣列905內之所有執行道以實現來自資料運算單元901之似單指令多資料(SIMD)行為。在一實施例中,自純量記憶體903讀取且發出至執行道陣列905之執行道的指令之指令格式包含一極長指令字(VLIW)型格式,其包含每指令之一個以上運算碼。在另一實施例中,VLIW格式包含一ALU運算碼(其指導由各執行道之ALU (如下文將描述,在一實施例中,其可指定一個以上傳統ALU運算)執行之一數學函數)及一記憶體運算碼(其指導一特定執行道或執行道組之一記憶體運算)兩者。 術語「執行道」係指能夠執行一指令之一組之一或多個執行單元(例如可執行一指令之邏輯電路)。然而,在各種實施例中,一執行道可包含不只是執行單元之更多似處理器功能性。例如,除一或多個執行單元之外,一執行道亦可包含解碼一接收指令之邏輯電路,或就更多似多指令多資料(MIMD)設計而言,包含提取及解碼一指令之邏輯電路。關於似MIMD方法,儘管本文已主要描述一集中式程式控制方法,但可在各種替代實施例中實施一更分散方法(例如,其包含陣列905之各執行道內之程式碼及一程式控制器)。 一執行道陣列905、程式控制器909及二維位移暫存器結構906之組合對一寬範圍之可程式化功能提供一可廣泛適應/組態之硬體平台。例如,應用軟體開發者能夠程式化具有一寬範圍之不同功能性能及尺寸(例如模板大小)之內核,假定個別執行道能夠執行各種功能且能夠容易地存取任何輸出陣列位置接近處之輸入影像資料。 除充當由執行道陣列905操作之影像資料之一資料儲存器之外,隨機存取記憶體907亦可保存一或多個查找表,諸如保存於上文章節1.0中所描述之虛擬處理記憶體之查找表組件中的任何查找表。在各種實施例中,一或多個純量查找表亦可樣例化於純量記憶體903內。一或多個純量查找表可為保存於上文章節1.0中所描述之記憶體模型之純量查找表組件中的任何純量查找表。 一純量查找涉及:將來自相同查找表之相同資料值自相同指標傳至執行道陣列905內之各執行道。在各種實施例中,上文所描述之VLIW指令格式經擴展以亦包含使由純量處理器執行之一查找操作針對一純量查找表之一純量運算碼。被指定用於與運算碼一起使用之指標可為一立即運算元或自某一其他資料儲存位置提取。無論如何,在一實施例中,自純量記憶體內之一純量查找表之一查找基本上涉及:在相同時脈週期期間,將相同資料值廣播至執行道陣列905內之所有執行道。下文將進一步提供關於查找表之使用及操作的額外細節。 圖9b概述上文所討論之(若干) VLIW指令字實施例。如圖9b中所觀察,VLIW指令字格式包含用於以下三個單獨指令之欄位:1)一純量指令951,其由純量處理器執行;2)一ALU指令952,其被廣播且由執行道陣列內之各自ALU依SIMD方式執行;及3)一記憶體指令953,其被廣播且依一部分SIMD方式執行(例如,若沿執行道陣列中之一相同列之執行道共用一相同隨機存取記憶體,則來自不同列之各者之一執行道實際上執行指令(記憶體指令953之格式可包含識別來自各列之何種執行道執行指令之一運算元))。 亦包含用於一或多個立即運算元之一欄位954。可以指令格式識別指令951、952、953之何者使用何種立即運算元資訊。指令951、952、953之各者自身亦包含各自輸入運算元及所得資訊(例如用於ALU運算之局部暫存器及用於記憶體存取指令之一局部暫存器及一記憶體位址)。在一實施例中,在執行道陣列內之執行道執行其他兩個指令952、953之任一者之前,由純量處理器執行純量指令951。即,VLIW字之執行包含其中執行純量指令951之一第一週期及接著其中可執行其他指令952、953之一第二週期(應注意,在各種實施例中,可並行執行指令952及953)。 在一實施例中,由純量處理器902執行之純量指令包含發出至圖表產生器703以自資料運算單元901之記憶體或2D位移暫存器906載入圖表/將圖表儲存至資料運算單元901之記憶體或2D位移暫存器906中的命令。此處,圖表產生器之操作可取決於線緩衝器單元701之操作或其他變數(其防止預運行時間包含圖表產生器703完成由純量處理器902發出之任何命令所花費之週期數)。因而,在一實施例中,任何VLIW字(其純量指令951對應於待發出至圖表產生器703之一命令或依其他方式引起一命令發出至圖表產生器703)亦包含其他兩個指令欄位952、953中之無操作(NOOP)操作。接著,程式碼進入指令欄位952、953之NOOP指令之一迴路,直至圖表產生器完成其至資料運算單元之載入/來自資料運算單元之儲存。此處,在將一命令發出至圖表產生器之後,純量處理器可設定一互鎖暫存器之一位元,圖表產生器在完成命令之後重設該位元。在NOOP迴路期間,純量處理器監測互鎖位元之位元。當純量處理器偵測到圖表產生器已完成其命令時,正常執行再次開始。 圖10展示一資料運算單元1001之一實施例。如圖10中所觀察,資料運算單元1001包含邏輯上定位於一二維位移暫存器陣列結構1006「上方」之一執行道陣列1005。如上文所討論,在各種實施例中,將由一圖表產生器提供之一影像資料圖表載入至二維位移暫存器1006中。接著,執行道操作來自暫存器結構1006之圖表資料。 執行道陣列1005及位移暫存器結構1006相對於彼此固定位置。然而,位移暫存器陣列1006內之資料依一策略性協調方式位移以引起執行道陣列中之各執行道處理資料內之一不同模板。因而,各執行道判定被產生之輸出圖表中之一不同像素之輸出影像值。應自圖10之架構明白,由於執行道陣列1005包含垂直相鄰執行道及水平相鄰執行道,所以重疊模板不僅經垂直配置,且亦經水平配置。 資料運算單元1001之一些顯著架構特徵包含具有比執行道陣列1005寬之尺寸的位移暫存器結構1006。即,執行道陣列1005外存在暫存器1009之一「暈圈」。儘管暈圈1009經展示為存在於執行道陣列之兩側上,但取決於實施方案,暈圈可存在於執行道陣列1005之更少側(一側)或更多側(三個或四個側)上。暈圈1005用於對資料提供「外溢(spill-over)」空間,其隨著資料在執行道1005「下方」位移而溢出至執行道陣列1005之界限外。簡單而言,當處理模板之最左邊像素時,居中定位於執行道陣列1005之右邊緣上的一5×5模板將需要進一步向右之四個暈圈暫存器位置。為便於繪製,圖10將暈圈之右側之暫存器展示為僅具有水平位移連接且將暈圈之底側之暫存器展示為僅具有垂直位移連接,但在一名義實施例中,任一側(右側、底側)上之暫存器將具有水平連接及垂直連接兩者。 額外外溢空間由耦合至陣列中之各列及/或各行的隨機存取記憶體1007或其部分提供(例如,可將一隨機存取記憶體指派給跨越逐列4個執行道及逐行2個執行道之執行道陣列之一「區域」。為簡單起見,應用程式之剩餘部分將主要係指基於列及/或行之分配方案)。此處,若一執行道之內核運算需要其處理二維位移暫存器陣列1006外之像素值(一些影像處理常式需要該等像素值),則影像資料之平面能夠(例如)自暈圈區域1009進一步外溢至隨機存取記憶體1007中。例如,考量一6×6模板,其中硬體包含執行道陣列之右邊緣上之一執行道右邊的僅四個儲存元件之一暈圈區域。在此情況中,需要使資料自暈圈1009之右邊緣進一步向右位移以完全處理模板。接著,經位移至暈圈區域1009外之資料將外溢至隨機存取記憶體1007。下文將進一步提供隨機存取記憶體1007及圖3之模板處理器之其他應用。 圖11a至圖11k演示在執行道陣列「下方」之二維位移暫存器陣列內位移影像資料(如上文所提及)之方式之一工作實例。如圖11a中所觀察,一第一陣列1107中描繪二維位移陣列之資料內容且由一圖框1105描繪執行道陣列。此外,簡單地描繪執行道陣列內之兩個相鄰執行道1110。在此簡化繪圖1110中,各執行道包含一暫存器R1,其可自位移暫存器接受資料,自一ALU輸出接受資料(例如,充當一跨週期累加器),或將輸出資料寫入至一輸出目的地中。 各執行道亦可使用其「下方」之二維位移陣列中之一局部暫存器R2中之內容。因此,R1係執行道之一實體暫存器,而R2係二維位移暫存器陣列之一實體暫存器。執行道包含可操作由R1及/或R2提供之運算元的一ALU。如下文將進一步更詳細描述,在一實施例中,位移暫存器實際上由每陣列位置之多個儲存器/暫存器元件(儲存器/暫存器元件之一「深度」)實施,但位移活動受限於儲存元件之一平面(例如儲存元件之僅一個平面可每週期位移)。圖11a至圖11k將此等較深暫存器位置之一者描繪為用於儲存來自各自執行道之結果X。為便於繪示,較深結果暫存器經繪製成與其配對暫存器R2並排而非位於其配對暫存器R2下方。 圖11a至圖11k聚焦於兩個模板(其中央位置與執行道陣列1105內所描繪之執行道位置對1111對準)之計算。為便於繪示,執行道對1110經繪製為水平相鄰者,但事實上,根據以下實例,執行道對1110係垂直相鄰者。 首先,如圖11a中所觀察,執行道1111居中定位於其中央模板位置上。圖11b展示由兩個執行道1111執行之目標碼。如圖11b中所觀察,兩個執行道1111之程式碼引起位移暫存器陣列1107內之資料下移一個位置且右移一個位置。此使兩個執行道1111對準於其各自模板之左上角。接著,程式碼引起位於其各自位置(R2)中之資料載入至R1中。 接著,如圖11c中所觀察,程式碼引起執行道對1111使位移暫存器陣列1107內之資料左移一個單位,其引起至各執行道之各自位置右邊之值位移至各執行道之位置中。接著,將R1中之值(先前值)與已位移至執行道之位置(R2)中之新值相加。將結果寫入至R1中。如圖11d中所觀察,重複相同於上文針對圖11c所描述之程序的程序,其引起所得R1現包含上執行道中之值A+B+C及下執行道中之值F+G+H。此時,兩個執行道1111已處理其各自模板之上列。應注意至執行道陣列1105之左側上之一暈圈區域中(若左側上存在暈圈區域)或至隨機存取記憶體中(若執行道陣列1105之左側上不存在一暈圈區域)的外溢。 接著,如圖11e中所觀察,程式碼引起位移暫存器陣列內之資料上移一個單位,其引起兩個執行道1111與其各自模板之中間列之右邊緣對準。兩個執行道1111之暫存器R1當前包含模板之頂列及中間列之最右值之總和。圖11f及圖11g演示跨兩個執行道之模板之中間列向左移動之繼續進展。累加繼續,使得在圖11g之處理結束時,兩個執行道1111包含其各自模板之頂列及中間列之值之總和。 圖11h展示用於使各執行道與其對應模板之最下列對準的另一位移。圖11i及圖11j展示用於完成兩個執行道之整個模板之處理的繼續位移。圖11k展示用於使各執行道與資料陣列中之其校正位置對準且將結果寫入至校正位置中的額外位移。 應注意,在圖11a至圖11k之實例中,用於位移運算之目標碼可包含識別以(X, Y)座標所表達之位移之方向及量值的一指令格式。例如,用於上移一個位置之目標碼可以目標碼表達為SHIFT 0, +1。作為另一實例,右移一個位置可以目標碼表達為SHIFT +1, 0。在各種實施例中,亦可在目標碼中指定較大量值之位移(例如SHIFT 0, +2)。此處,若2D位移暫存器硬體僅支援每週期位移一個位置,則指令可由機器解譯為需要多週期執行,或2D位移暫存器硬體可經設計以支援每週期位移一個以上位置。下文將進一步更詳細描述後者之實施例。 圖12展示陣列執行道及位移暫存器結構之單位晶胞之另一更詳細繪圖(暈圈區域中之暫存器不包含一對應執行道)。在一實施例中,藉由樣例化執行道陣列之各節點處之圖12中所觀察之電路來實施執行道及與執行道陣列中之各位置相關聯之暫存器空間。如圖12中所觀察,單位晶胞包含一執行道1201,其耦合至由四個暫存器R2至R5組成之一暫存器檔案1202。在任何週期期間,執行道1201可自暫存器R1至R5之任何者讀取或對暫存器R1至R5之任何者寫入。對於需要兩個輸入運算元之指令,執行道可自R1至R5之任何者擷取兩個運算元。 在一實施例中,藉由以下操作來實施二維位移暫存器結構:容許暫存器R2至R4之任何(僅)一者之內容在一單一週期期間透過輸出多工器1203移「出」至其相鄰者之暫存器檔案之一者且使暫存器R2至R4之任何(僅)一者之內容由透過輸入多工器1204自其相鄰者之一對應者移「入」的內容替換,使得相鄰者之間的位移係在一相同方向上(例如,所有執行道左移,所有執行道右移,等等)。儘管一相同暫存器在一相同週期上使其內容移出且由移入之內容替換可較為常見,但多工器配置1203、1204容許一相同週期期間之一相同暫存器檔案內之不同位移源及位移目標暫存器。 應注意,如圖12中所描繪,在一位移序列期間,一執行道將使內容自其暫存器檔案1202移出至其左邊、右邊、頂部及底部之各相鄰者。結合相同位移序列,執行道亦將使內容自其左邊、右邊、頂部及底部之一特定相鄰者移入至其暫存器檔案中。此外,移出目標及移入源應與所有執行道之一相同位移方向一致(例如,若移出係朝向右邊相鄰者,則移入應來自左邊相鄰者)。 儘管在一實施例中容許每週期每執行道位移僅一個暫存器之內容,但其他實施例可容許移入/移出一個以上暫存器之內容。例如,若將圖12中所觀察之多工器電路1203、1204之一第二執行個體併入至圖12之設計中,則可在一相同週期期間移出/移入兩個暫存器之內容。當然,在容許每週期位移僅一個暫存器之內容的實施例中,自多個暫存器之位移可藉由使數學運算之間的位移消耗更多時脈週期來發生於數學運算之間(例如,可藉由在數學運算之間消耗兩個位移運算來在數學運算之間位移兩個暫存器之內容)。 若在一位移序列期間移出一執行道之暫存器檔案之非所有內容,則應注意,各執行道之未經移出暫存器之內容保留於適當位置中(未位移)。因而,未由移入內容替換之任何未位移內容跨位移週期存留於執行道之局部處。各執行道中所觀察之記憶體單元(「M」)用於自與執行道陣列內之執行道之列及/或行相關聯之隨機存取記憶體空間載入資料/將資料儲存至與執行道陣列內之執行道之列及/或行相關聯之隨機存取記憶體空間。此處,M單元充當一標準M單元,此係因為其常用於載入/儲存無法自執行道自身之暫存器空間載入/儲存至執行道自身之暫存器空間的資料。在各種實施例中,M單元之主要操作係將資料自一局部暫存器寫入至記憶體中及自記憶體讀取資料且將其寫入至一局部暫存器中。 關於由硬體執行道1201之ALU單元支援的ISA運算碼,在各種實施例中,由硬體ALU支援之數學運算碼與由一虛擬執行道支援之數學運算碼(例如ADD、SUB、MOV、MUL、MAD、ABS、DIV、SHL、SHR、MIN/MAX、SEL、AND、OR、XOR、NOT)整合在一起(例如,實質上相同)。恰如上文所描述,記憶體存取指令可由執行道1201執行以自其相關聯之隨機存取記憶體提取資料/將資料儲存至其相關聯之隨機存取記憶體。另外,硬體執行道1201支援用於位移二維位移暫存器結構內之資料的位移運算指令(向右、向左、向上、向下)。如上文所描述,程式控制指令主要由模板處理器之純量處理器執行。 3.0 影像處理器上所實施之區塊操作 a. 列/行和運算 圖13及圖14a、圖14b係針對一列/行和運算。列/行和運算尤其用於統計計算、雜訊抑制及大規模降低取樣。可在具有一二維執行道陣列及對應二維位移暫存器陣列之一影像處理器(諸如上文先前章節中所描述之影像處理器之實施例)上實施列和運算及/或行和運算。 如圖13中所觀察,一列和運算加總一陣列之一相同列中之所有值且一行和運算加總一陣列之一相同行中之所有值。另外,如圖中所描繪,就一列和運算而言,可同時加總所有列之各自列內之值。同樣地,就一行和運算而言,可同時加總所有行之各自行內之值。然而,由於位移暫存器陣列之通用性,跨所有列或行之求和並非為一要求。即,可同時對一陣列中之非所有列求和或可同時對一陣列中之非所有行求和。 圖14a至圖14d展示用於實施一列和運算之一機器級運算之一實施例。為簡單起見,圖中僅展示一單一列。讀者應瞭解,圖14a至圖14d中所描繪之運算亦可應用於行。另外,對於列運算及行運算兩者,亦可對陣列中之多個列或行同時執行圖14a至圖14d之序列。另外,列之大小僅被展示為8個位置寬(而在實際實施方案中,執行道陣列及位移暫存器陣列可為16×16或甚至更大)。 在一實施方案中,如圖14a中所觀察,二維位移暫存器陣列經設計以支援陣列之對置端之間的直接邏輯位移1401。即,當沿一列軸執行位移時,位移暫存器可在一最右陣列行與一最左陣列行之間「滾動」或「循環」或「包裹」其內容,及/或當沿一行軸執行位移時,位移暫存器可在一最上陣列列與一最下陣列列之間滾動或循環其內容。另外,在各種實施例中,位移暫存器可支援一單一指令中之多次暫存器位置跳躍(例如,與一位移指令相關聯之一運算碼及/或變數指定位移量是否為沿水平軸及/或垂直軸之+/-1個、+/-2個、+/-3個或+/-4個暫存器位置點)。硬體中不支援之位移距離可由編譯器模仿。 首先,如圖14a中所觀察,在各執行道之各自R0及R1暫存器位置中,使列載入資料值A0至A7。接著,如圖14b中所觀察,在機器運算之一第一迭代中,使R1暫存器空間位置左移一個位置且對各執行道之R1及R0內容求和且將結果寫回至R0及R1。此在R1中產生一第一累加部分和,如將在以下討論中變明白,R1充當總求和運算之一累加器。 在圖14c所描繪之機器運算之下一迭代中,使R1暫存器空間位置左移兩個位置且對各執行道之R1及R0內容求和。再次將結果保存於R0及R1中。最後,在圖14d所描繪之機器運算之一第三迭代中,使R1暫存器空間位置左移四個位置且將結果寫入暫存器位置R0及R1之任一者或兩者中。因此,鑑於圖14b、圖14c及圖14d之和運算之迭代,應注意,位移量隨各迭代加倍且在僅三次迭代之後(即,截至圖14c)所有道中呈現完整結果。就一16寬列而言,第四迭代之位移量將為8個位置且操作將在第四迭代之後完成。 b. 列/行前綴和運算 圖15及圖16a至圖16d係針對亦可在具有一二維執行道陣列及一對應二維位移暫存器之一影像處理器上執行之一列/行前綴和運算。列/行前綴和運算尤其用於積分影像、加速箱式濾波器及緊緻運算之位址之運算。參考圖15,為簡單起見,圖中僅展示一單一列。然而,亦可對行執行該運算。此外,儘管僅描繪一個列,但在各種實施例中,如同上文剛討論之列/行和運算,可對暫存器陣列中之任何數目個列(或行)(其包含所有列/行)同時求和。另外,圖15中之列之大小經展示為僅8個位置寬,而在實際實施方案中,執行道及位移暫存器陣列可為16×16或甚至更大。 如圖15中所觀察,一列內之任何位置之一列前綴運算之結果係引導至該位置之值之和。同樣地,一行內之任何位置之一行前綴運算之值係引導至該位置之值之和。 圖16a至圖16d展示用於一列前綴運算之一機器級運算之一實施例。如同先前章節中所詳細討論之列和運算,列前綴運算採用可在陣列邊緣位置之間滾動位移1601之一二維位移暫存器。 首先,如圖16a中所觀察,在各執行道之各自R0暫存器位置中,使一列載入資料值A0至A7。此外,將一零(「0」)載入至各執行道之R2暫存器空間中。 在圖16b所描繪之機器級運算之一第一迭代中,使R0暫存器空間位置右移一個位置而至目的地位置之R1暫存器空間中。取決於道相對於迭代次數之位置,一後續ADD運算將R0內容與R1內容或R2內容相加。具體而言,第一列位置選擇R2中之零(而非R1中之位移內容)(此係因為其位置(0)等於或小於2N
-1,其中N係迭代次數(20
-1=0)),將零與R0中之內容相加,且將結果儲存回R0中。因此,第一列位置將在R0中保存A0之一值。 相比而言,其他列位置之各者將因其位置大於2N
-1而選擇R1中之位移內容(而非R2中之零值),將其與R0中之內容相加,且將結果儲存於R0中。因此,除第一列位置之外的各列位置將在R0中保存其原始位置與其最左相鄰者之和,而第一列位置將在R0中僅保存其原始內容。 在圖16c所描繪之機器級運算之一第二迭代中,使R0暫存器空間位置之內容右移兩個位置而至目的地之R1暫存器空間中。因此,如同上文剛描述之列/行運算,位移量隨機器運算之各下一迭代加倍。如同第一迭代,取決於道相對於當前迭代次數之位置,一後續ADD運算將R0內容與R1內容或R2內容相加。在此情況中,第一列位置及第二列位置選擇R2中之零(而非R1中之位移內容),此係因為其位置(0, 1)小於或等於2N
-1 (21
-1=1)。因此,此等道將零值與R0中之內容相加且將結果儲存回R0中。因此,第一列位置將在R0中保存其A0值且第二列位置將在R0中保存A0+A1之一值。 相比而言,其他列位置之各者將因其位置大於2N
-1而選擇R1中之位移內容(而非R2中之零值),將R1之內容與R0中之內容相加,且將結果儲存於R0中。因此,除第一列位置及第二列位置之外的各列位置將在R0中保存基於其原始內容及其總位移內容之一累加和。 在圖16d所描繪之機器級運算之一第三迭代中,使R0暫存器空間位置右移四個位置而至目的地之R1暫存器空間中。因此,位移量亦隨機器運算之各下一迭代加倍。如同早先迭代,取決於道相對於當前迭代次數之位置,一後續ADD運算將R0內容與R1內容或R2內容相加。在此情況中,第一列位置至第四列位置(0至3)將選擇R2中之零(而非R1中之位移內容),此係因為其位置小於或等於2N
-1 (22
-1=3)。因此,此等道之各者將零值與R0中之內容相加且將結果儲存回R0中。因此,第一列位置將在R0中保存其原始A0值,第二列位置將在R0中保存A0+A1之一值,第三列位置將在R0中保存A0+A1+A2之一值,且第四列位置將在R0中保存A0+A1+A2+A3之一值。 相比而言,其他列位置之各者將因其位置保持大於2N
-1而選擇R1中之位移內容(而非R2中之零值),將R1之內容與R0中之內容相加,且將結果儲存於R0中。因此,除第一列位置、第二列位置及第三列位置之外的各列位置將保存基於其原始內容及其總位移內容之一累加和。 在第三迭代之後,前綴和運算完成。若列係具有大小16,則僅需要使R1暫存器內容位移8個位置之再一組運算以累加所有16個執行道中之所有16個不同位置獨有之總和。 c. 列/行尋找最小值運算 圖17及圖18a至圖18d係針對亦可在具有一二維執行道陣列及一對應二維位移暫存器之一影像處理器上執行之一列/行尋找最小值運算。列/行尋找最小值運算尤其用於統計計算及區塊匹配後處理。 參考圖17,為簡單起見,圖中僅展示一單一列。然而,在實際實施方案中,可在實施一列尋找最小值運算之一相同處理器上實施一行尋找最小值運算。另外,可對暫存器陣列中之任何數目個列(或行)(其包含高達所有列/行)同時尋找一列(或行)之最小值。另外,列/行之大小僅被展示為8個位置寬,而在實際實施方案中,執行道及位移暫存器陣列可為16×16或甚至更大。 如圖17中所觀察,一列尋找最小值運算之結果對應於一相同列內之所有值中之最小值及其在該列中之定位/位置(亦指稱其指標)。同樣地,一行尋找最小值運算之結果對應於一相同行內之所有值中之最小值及其在該行內之定位/位置。如同先前章節中所詳細討論之列和運算及前綴和運算,列/行尋找最小值運算採用可在陣列邊緣位置之間滾動位移1701之一二維位移暫存器。 圖18a至圖18d展示用於一列前綴運算之機器級運算之一實施例。首先,如圖18a中所觀察,在各執行道之各自R0暫存器位置中,使一列載入資料值A0至A7。此外,將各列位置之指標載入至各執行道之R1暫存器空間中。 在圖18b所描繪之機器級運算之一第一迭代中,使R0及R1暫存器位置之內容位移一個單位而至一相鄰執行道之暫存器空間之R2及R3暫存器空間中。接著,在各執行道內比較R0及R2暫存器之各自值。將比較之最小值及其對應指標儲存至R0及R1暫存器空間中。即,若R0值小於R2值,則R0及R1暫存器保存其原始內容。然而,若R2值小於R0值,則將R2值寫入至R0中且將R3值寫入至R1中。此具有將比較之最小值保存於R0中且將其指標保存於R1中之效應。 在圖18c所描繪之機器級運算之一第二迭代中,使R0及R1暫存器位置之內容位移兩個單元而至一下游執行道之R2及R3暫存器空間中。因此,位移量再次隨下一迭代加倍。接著,在各執行道內比較R0及R2暫存器之各自值。將比較之最小值及其對應指標儲存至R0及R1暫存器空間中。此具有將已在各執行道中執行之兩次比較觀察之最小值保存於R0中且將其指標保存於R1中之效應。 在圖18d所描繪之機器級運算之一第三迭代中,使R0及R1暫存器位置之內容位移四個單位而至一下游執行道之R2及R3暫存器空間中。接著,在各執行道內比較R0及R2暫存器之各自值。將比較之最小值及其對應指標儲存至R0及R1暫存器空間中。此具有將已在各執行道中執行之所有三次比較觀察之最小值保存於R0中且將其指標保存於R1中之效應。 在第三迭代之後,尋找最小值運算完成,此係因為各執行道將在其R0暫存器空間中具有整列之最小值且在其R1暫存器空間中具有其對應指標(原先具有最小值之列位置將尋找其R1暫存器空間中所識別之其自身列位置)。若列具有大小16,則僅需要基於位移暫存器下游之R0及R1暫存器內容位移8個位置之再一組運算來提供所有16個執行道中之所有16個不同位置之最小值。 應注意,除核心數學運算包含尋找最大值而非尋找最小值之外,亦可使用上文所描述之相同原理來實施一尋找最大值運算。 d. 矩陣乘法 圖19a、圖19b及圖20係針對一矩陣乘法。一矩陣乘法尤其用於離散傅立葉或餘弦變換(其係壓縮及濾波之共同基元)且用於表達較大矩陣/乘法運算(其常用於影像辨識中)。藉由針對結果中之各矩陣座標位置使座標位置之列中之元素與座標位置之行中之其對應元素的乘積求和來執行兩個矩陣A及B之一矩陣乘法。圖19b展示圖19a中之矩陣A及B之矩陣乘法之所得矩陣X。此處,特別展示所得矩陣C中之兩個座標位置1901、1902之矩陣A及B之相關聯部分乘積項。 特定言之,例如,圖19b之所得矩陣C中之座標位置c12之所得乘積係: (a11*b11)+(a12*b21)+(a13*b31)+(a14*b41) 其對應於圖19a中之矩陣A中之列1901之元素與矩陣B中之行1902之對應元素相乘。 同樣地,圖19b之所得矩陣C中之座標位置c22之所得乘積係: (a21*b12)+(a22*b22)+(a23*b32)+(a24*b42) 其對應於圖19a中之矩陣A中之列1903之元素與矩陣B中之行1902之對應元素相乘。如自此等兩個實例可見,所得矩陣C中之任何座標位置x、y之結果可被表達為:圖20a至圖20e展示使用一二維執行道陣列及一對應二維位移暫存器陣列之唯一位移優點之一矩陣乘法運算之一實施例。 首先,如圖20a中所觀察,將兩個矩陣A及B載入至二維位移暫存器陣列中。例如,可將矩陣A之值載入至二維位移暫存器之R0暫存器空間中且可將矩陣B之值載入至二維位移暫存器陣列之R1暫存器空間中,使得各矩陣座標對應於一不同執行道之相關聯暫存器空間。此外,為便於繪示,描繪4×4矩陣,但在實際實施方案中,較大矩陣可與一對應較大大小位移暫存器陣列相乘。 如圖20b中所觀察,將一旋轉錯位演算法位移應用於兩個矩陣,其中將一列向旋轉錯位演算法位移序列應用於矩陣A且將一行向旋轉錯位演算法位移序列應用於矩陣B。如此項技術中所知,一旋轉錯位演算法使位移量增加N-1,其中N係矩陣中之位置。 因此,如圖20b中所觀察,矩陣A之第一列完全沒位移,矩陣A之第二列被位移一個單位,矩陣A之第三列被位移兩個單位,且矩陣A之第四列被位移三個單位。類似地,矩陣B之第一行完全沒位移,矩陣B之第二行被位移一個單位,矩陣B之第三行被位移兩個單位,且矩陣B之第四行被位移三個單位。此處,二維位移暫存器陣列被理解為能夠針對列定向位移及行定向位移兩者滾動陣列邊緣處之元素。 應注意,由於二維位移暫存器陣列及對應執行道陣列之通用性(其中由各執行道執行之各自位移指令可指定不同輸入運算元資料),二維位移暫存器陣列能夠使不同列位移不同水平位移量及使不同行位移不同垂直位移量且跨一相同矩陣之所有執行道同時執行位移指令(在各種實施例中,必須針對一相同列中之道指定一相同水平位移量且必須針對一相同行中之道指定一相同垂直位移量)。因此,可以想像,可只在兩個週期中完成矩陣A及B兩者之錯位(即,在一個週期中執行一矩陣之所有位移,假定位移暫存器可在一單一週期中實施多個跳躍位移)。 當矩陣A及B中之資料因錯位演算法而重新對準時,如圖20b中所觀察,執行一乘法運算,其中各執行道使其對應二維位移暫存器空間中之A值及B值相乘。此處,應想到,A值(例如)保存於R0空間中且B值保存於R1空間中。乘法運算之結果儲存於局部R2空間中。零值可作為一初值載入至R3空間中且R2中之乘法運算之結果與R3之內容相加。求和之結果儲存回R3中。如將以下教示中明白,R3呈現矩陣乘法運算過程中之部分乘積項之累加求和之累加器之滾動。 為便於理解,圖20b明確展示原先圖19b中所描繪之所得矩陣C中之座標位置c11及c22之第一迭代之後的所得R3空間中之內容。此處,在圖20b之第一迭代之後,位置C11處之R3暫存器空間含有部分乘積項(a11*b11)且位置C22處之R3暫存器空間含有部分乘積項(a21*b12)。 接著,如圖20c中所觀察,在下一迭代之後,使含有矩陣A資料之R0暫存器水平位移一個單位且使含有矩陣B資料之R1暫存器垂直位移一個單位。接著,重複上文剛相對於圖20b所描述之數學運算。然而,此處,各道之R3暫存器空間最初含有第一迭代之部分乘積項(例如位置c11之R3中之a11*b11及位置c22之R3中之a21*b12)。因而,在迭代結束時,暫存器R3將含有到目前為止已計算之兩個部分乘積之累加和。即,位置c11中之R3將具有和(a11*b11)+(a12*b21)且位置c22中之R3將具有和(a21*b12)+(a22*b22)。 如圖20d及圖20e中所觀察,在兩個矩陣之一單一單位位移及接著一乘加之再兩次迭代之後,矩陣乘法將完成,其中各暫存器陣列位置具有其局部R3暫存器空間中之部分乘積之校正和。 e. 二維離散傅立葉變換(2D DFT) 圖21描繪一二維DFT (2D DFT)。一2D DFT尤其用於雜訊減少及加速卷積。如圖21中所觀察,一2D DFT可經表達為兩個複數項2101、2102之乘積之二維空間之加總。複數項2101之一第一者對應於一相量,其振幅及相位依據時間及頻率而變化。在實施方案中,將第一複數項2101明確地計算為係數之一第一矩陣。複數項2102之一第二者對應於自空間域變換成頻率域之信號。 為簡單起見,圖21將第一複數項2101表示為Re1+jIm1且將第二複數項2102表示為Re2+jIm2。如此項技術中所知,(Re1+jIm1)*(Re2+jIm2)之實部可經表達為(Re1*Re2)-(Im1*Im2),而虛部可經表達為j((Re1*Im2)+(Re2*Im1))。恰如上文所即時詳細討論之矩陣乘法,2D空間內之2D DFT之求和加總一座標位置之一列中之元素與該座標位置之行中之對應元素的乘積。 因此,可藉由對Re1值之一陣列及Re2值之一陣列執行一矩陣乘法且自所得陣列減去針對Im1值及Im2值之一陣列之一矩陣乘法之結果來計算DFT結果之實部。類似地,可藉由對Re1值之一陣列及Im2值之一陣列執行一矩陣乘法且將所得陣列與針對Re2值及Im1值之一陣列之一矩陣乘法之結果相加來計算DFT結果之虛部。 圖22a展示用於計算DFT之實部之機器運算。如圖22a中所觀察,將Re1值之一陣列載入至二維位移暫存器陣列之R0暫存器空間中,將Re2值之一陣列載入至二維位移暫存器陣列之R1暫存器空間中,將Im1值之一陣列載入至二維位移暫存器陣列之R2暫存器空間中,且將Im2值之一陣列載入至二維位移暫存器陣列之R3暫存器空間中。接著,如圖22b中所觀察,將一旋轉錯位演算法應用於陣列值之各者,其中Re1及Im1值經水平錯位且Re2及Im2值經垂直錯位。 接著,如圖22c中所觀察,執行一Re1*Re2矩陣乘法及一Im1*Im2矩陣乘法且將結果分別保存於R0及R2暫存器空間中。接著,自R0暫存器空間減去R2暫存器空間之內容且相減之結果使DFT變換之實部保留於R0暫存器空間中,如圖22d中所觀察。 在一實施例中,將R0暫存器空間中之實部結果移動至R4暫存器空間(若其存在)或寫出至耦合至位移暫存器陣列之局部記憶體。接著,將原始Re1及Im1值重寫回R0及R1暫存器空間(例如,來自相同局部記憶體)且水平錯位,使得圖22a之暫存器內容重建於二維位移暫存器陣列中。 接著,執行一Re1*Im2矩陣乘法及一Re2*Im1矩陣乘法且將結果分別保存於R0及R2暫存器空間中。即,對R0及R3之內容執行一矩陣乘法且將結果寫回至R0,及對R2及R1之內容執行一矩陣乘法且將內容寫入至R2中。圖22e中展示R0及R2中之所得矩陣。接著,R0暫存器空間之內容與R2暫存器空間之內容相加且被寫回至R0。此使DFT變換之虛部保留於R0暫存器空間中,如圖22f中所描繪。 f. FFT蝶式運算 如此項技術中所知,一快速傅立葉變換(FFT)係一DFT之一較快、非運算密集方法。FFT依靠特別高效演算法來將時間或空間域資料快速轉換成頻率域資料。此等演算法之一關鍵組分係一蝶式演算法。圖23中描繪一例示性蝶式演算法。此處,一蝶式運算由一級界定,其中特定級判定發生於一相同列或行之元素之間的交換量。如此項技術中所知,一完整FFT包含:在蝶式運算之間對多個不同級蝶式運算之交換內容執行數學運算。 圖23展示1級、2級及4級蝶式運算之各者。就1級蝶式運算而言,交換相鄰元素。就2級蝶式運算而言,交換相鄰元素對。就4級蝶式運算而言,交換4個相鄰元素之群組。就一二維FFT而言,根據多個蝶式級之各者來交換信號資料之一第一陣列中之元素且對所交換之信號資料元素執行數學運算。 圖24a展示可用於跨儲存於二維R0暫存器空間中之一信號資料陣列實現一1級蝶式運算的機器級位移運算。為簡單起見,圖中僅展示一列。應切實認識到,可根據被觀察之特定列來同時處理一二維位移暫存器中之一陣列之多個(例如所有)列或行。 此處,首先使位移暫存器之R0暫存器空間中之其各列載入A0至A7。接著,位移暫存器使R0暫存器內容右移一個單位且各執行道將已剛位移至其位置中之資料儲存於其R1暫存器空間中。接著,位移暫存器使R0暫存器內容左移兩個單位(其結果標記為R0')。接著,各執行道執行一選擇操作,其中取決於道之位置,將其局部R0內容或其局部R1內容儲存於R0中(即,若選擇R0,則R0之內容保持不變)。在圖24a之特定實施例中,偶數道選擇R0,而奇數道選擇R1。在選擇之後,經正確交換之值位於各執行道之R0暫存器空間中(標記為R0'')。 圖24b及圖24c描繪2級及4級蝶式運算。就2級蝶式運算而言,除位移暫存器陣列使R0暫存器內容右移兩個單位且接著左移四個單位之外,處理類似於上文剛描述之1級蝶式運算。每隔一個偶數道及其最右相鄰者選自R1及R0''之一者,而其他偶數道及其最右相鄰者選自R1及R0''之另一者。就圖25c中所描繪之4級蝶式運算而言,位移暫存器陣列使R0之內容右移四個單位且接著選擇所有值駐留於R0中(標記為R0')。 g. 區塊匹配 圖25展示區塊匹配之一繪圖。區塊匹配尤其用於運動估計(例如,用於視訊壓縮)、影像穩定及影像融合演算法(例如曝光融合及時域雜訊融合)。此處,在一替代(例如後續)影像中找尋一第一基底(例如先前)影像中之一特定特徵。在圖26之實例中,需要在替代影像中尋找存在於基底影像中之區塊ABCD。 圖26a至圖26d展示用於在具有一二維執行道陣列及一二維位移暫存器陣列之一影像處理器上執行區塊匹配之一方法。此處,將替代影像之像素保存於二維位移暫存器之R0暫存器空間中。將被找尋之基底影像中之特徵之一第一像素(例如「A」)廣播至所有執行道且使一絕對差呈現於R0暫存器空間中之內容及值「A」上且將結果儲存於R1中(為簡單起見,假定替代影像中無其他像素具有找尋特徵之值(A、B、C、D)之任何者)。若替代影像中之一像素值匹配(或近似匹配)廣播像素值A,則R1中之結果應為(或接近為)零。R1中之所有其他結果應實質上為非零。 接著,參考圖26b,使替代影像在二維位移暫存器中位移一個單位,將被找尋之特徵中之下一像素值「B」廣播至所有執行道,且再次呈現絕對差且將其儲存於R1中。此處,已具有兩次連續像素匹配之特定執行道陣列位置2601應具有R1中之最低所得值。此特定執行道位置係被廣播之像素值之特定順序與位移暫存器陣列之R0中之替代影像之特定掃描/位移運動對準的位置。 如圖26c及圖26d中所觀察,程序繼續各下一迭代以廣播下一像素值且依一特定掃描順序位移替代影像資料。在足以廣播所有尋求影像像素且對應地在對應於尋找影像之大小的一區域上位移R0中之替代影像的若干迭代之後,理想地,執行道陣列中之僅一個位置2601將在每個迭代週期上經歷一匹配。因而,此特定陣列位置2601應能夠在已完成所有迭代之後保存其R1暫存器空間中之一零值或接近為零值(或至少小於其他執行道之一值)。 跨陣列中之所有列對R1暫存器空間執行上文所討論之一尋找最小值運算。接著,會將各列中之最低對應值保存於其列之各位置處。接著,跨陣列中之所有行對R1暫存器空間執行一尋找最小值運算。結果應識別匹配每個迭代上之基底影像的像素,其繼而可用於識別替代陣列中之找尋影像之精確位置。 4.0 低階程式碼之建構 圖27展示一預運行時間開發環境,其中一程式設計師設計一高階影像處理功能且應用開發環境(其可包含上文相對於圖1至圖6所詳細討論之虛擬ISA環境)提供任何/所有上述特殊運算,使得開發者不必從頭開始寫入該等運算。 此處,開發者可特別調出上文所詳細討論之運算之任何者及/或開發環境回應性地自一程式庫2701自動提供運算。替代地或組合地,可暗示或推斷開發者需要此等運算(諸如一矩陣乘法,就一2D DFT而言)且開發環境自執行此等函數之程式庫2701自動***程式碼(例如,作為一編譯程序之部分)。 因此,可以較高階(例如虛擬ISA)程式碼或較低階目標碼表達執行上述運算或其替代實施例之程式碼。在各種實施例中,較高階虛擬ISA碼可指定待操作之資料值作為具有x、y位址座標之記憶體讀取,而目標碼可代以綜合此等資料存取作為二維位移暫存器運算(諸如上文所描述之位移運算或其類似實施例之任何者)。一編譯器可將開發環境中之x、y讀取轉換成目標碼指定之二維位移暫存器之對應位移(例如,具有x、y座標(+2, +2)之開發環境中之一讀取可在目標碼中實現為左移兩個空間及下移兩個空間)。取決於環境,開發者可使可視性併入至此等兩個階(或(例如)僅較高VISA階)中。在其他實施例中,可在運行時間而非預運行時間期間調用此等預寫入常式(例如,由一即時編譯器)。 5.0 總結陳述 應自上述章節切實認識到,上文章節1.0中所描述之虛擬環境可樣例化於一電腦系統上。同樣地,上文章節2.0中所描述之一影像處理器可體現於一電腦系統上之硬體中(例如,作為一手持器件之系統單晶片(SOC)之部分,其處理來自該手持器件之攝影機之資料)。 需要指出的是,上文所描述之各種影像處理器架構特徵未必僅限於傳統意義上之影像處理,而是可應用於可(或可不)引起影像處理器重新特徵化之其他應用。例如,若上文所描述之各種影像處理器架構特徵之任何者用於建立及/或產生及/或渲染動畫而非處理實際攝影機影像,則影像處理器可經特徵化為一圖形處理單元。另外,上文所描述之影像處理器架構特徵可應用於其他技術應用,諸如視訊處理、視覺處理、影像辨識及/或機器學習。依此方式應用之影像處理器可與一更通用處理器(例如,即為或係運算系統之一CPU之部分)整合(例如,作為一共處理器)或可為一運算系統內之一獨立處理器。 上文所討論之硬體設計實施例可體現於一半導體晶片內及/或體現為用於最終針對一半導體製程之一電路設計之一描述。就後者而言,此等電路描述可呈以下形式:一(例如VHDL或Verilog)暫存器轉移層次(RTL)電路描述、一閘級電路描述、一電晶體級電路描述或遮罩描述或其各種組合。電路描述通常體現於一電腦可讀儲存媒體(諸如一CD-ROM或其他類型之儲存技術)上。 應自上述章節切實認識到,上文所描述之一影像處理器可體現於一電腦系統上之硬體中(例如,作為一手持器件之系統單晶片(SOC)之部分,其處理來自該手持器件之攝影機之資料)。應注意,在影像處理器體現為一硬體電路之情況中,可自一攝影機直接接收由影像處理器處理之影像資料。此處,影像處理器可為一離散攝影機之部分或具有一整合式攝影機之一運算系統之部分。就後者而言,可自攝影機或運算系統之系統記憶體直接接收影像資料(例如,攝影機將其影像資料發送至系統記憶體而非影像處理器)。亦應注意,上述章節中所描述之諸多特徵可應用於一圖形處理器單元(其渲染動畫)。 圖28提供一運算系統之一例示性繪圖。下文將描述之運算系統之諸多組件可應用於具有一整合式攝影機及相關聯影像處理器之一運算系統(例如一手持器件,諸如一智慧型電話或平板電腦)。一般技術者將能夠容易地區分兩者。 如圖28中所觀察,基本運算系統可包含一中央處理單元2801 (其可包含(例如)安置於一多核心處理器或應用處理器上之複數個通用處理核心2815_1至2815_N及一主記憶體控制器2817)、系統記憶體2802、一顯示器2803 (例如觸控螢幕、平板顯示裝置)、一區域有線點對點鏈接(例如USB)介面2804、各種網路I/O功能2805 (諸如一乙太網路介面及/或蜂巢式數據機子系統)、一無線區域網路(例如WiFi)介面2806、一無線點對點鏈接(例如Bluetooth)介面2807及一全球定位系統介面2808、各種感測器2809_1至2809_N、一或多個攝影機2810、一電池2811、一電力管理控制單元2824、一揚聲器及麥克風2813及一音訊編碼器/解碼器2814。 一應用處理器或多核心處理器2850可包含其CPU 2801內之一或多個通用處理核心2815、一或多個圖形處理單元2816、一記憶體管理功能2817 (例如一記憶體控制器)、一I/O控制功能2818及一影像處理單元2819。通用處理核心2815通常執行運算系統之作業系統及應用軟體。圖形處理單元2816通常執行圖形密集功能以(例如)產生呈現於顯示器2803上之圖形資訊。記憶體管理功能2817與系統記憶體2802介接以將資料寫入至系統記憶體2802/自系統記憶體2802讀取資料。電力管理控制單元2824一般控制系統2800之電力消耗。 可根據上述章節中所詳細描述之影像處理單元實施例之任何者來實施影像處理單元2819。替代地或組合地,IPU 2819可耦合至GPU 2816及CPU 2801之任一者或兩者作為其之一共處理器。另外,在各種實施例中,可使用上文所詳細描述之影像處理器特徵之任何者來實施GPU 2816。 觸控螢幕顯示器2803、通信介面2804至2807、GPS介面2808、感測器2809、攝影機2810及揚聲器/麥克風編解碼器2813、2814之各者可全部被視為相對於總運算系統(其亦適當包含一整合式周邊器件(例如一或多個攝影機2810))之各種形式之I/O (輸入及/或輸出)。取決於實施方案,此等I/O組件之各者可整合於應用處理器/多核心處理器2850上或可定位成離開晶粒或定位於應用處理器/多核心處理器2850之封裝外。 在一實施例中,一或多個攝影機2810包含能夠量測攝影機與其視野中之一物件之間的深度的一深度攝影機。在一應用處理器或其他處理器之一通用CPU核心(或具有用於執行程式碼之一指令執行管線之其他功能區塊)上執行之應用軟體、作業系統軟體、器件驅動器軟體及/或韌體可執行上文所描述之功能之任何者。 本發明之實施例可包含上文所闡述之各種程序。程序可體現於機器可執行指令中。指令可用於引起一通用或專用處理器執行特定程序。替代地,此等程序可由含有用於執行程序之固線式邏輯的特定硬體組件或由程式化電腦組件及自訂硬體組件之任何組合執行。 本發明之元件亦可提供為用於儲存機器可執行指令之一機器可讀媒體。機器可讀媒體可包含(但不限於)軟碟、光碟、CD-ROM及磁光碟、FLASH記憶體、ROM、RAM、EPROM、EEPROM、磁卡或光卡、傳播媒介或適合於儲存電子指令之其他類型之媒體/機器可讀媒體。例如,元素可下載為一電腦程式,其藉由以一載波或其他傳播媒介體現之資料信號經由一通信鏈路(例如一數據機或網路連接)自一遠端電腦(例如一伺服器)轉移至一請求電腦(例如一用戶端)。 上述說明中已描述特定實例性實施例。然而,應明白,可在不背離隨附申請專利範圍中所闡述之本發明之較廣泛精神及範疇的情況下對本發明作出各種修改及改變。相應地,本說明書及圖式應被視為意在繪示而非限制。
101‧‧‧虛擬影像處理環境102‧‧‧編譯器103‧‧‧實際影像處理硬體104‧‧‧開發者201‧‧‧輸入影像資料202‧‧‧程式碼203‧‧‧內核204‧‧‧程式碼204_1‧‧‧程式碼204_2‧‧‧程式碼204_3‧‧‧程式碼205‧‧‧處理器205_1‧‧‧處理器205_2‧‧‧處理器205_3‧‧‧處理器206‧‧‧輸出陣列301‧‧‧執行緒302‧‧‧執行緒303‧‧‧輸入陣列304‧‧‧輸出陣列401‧‧‧執行緒402‧‧‧專用暫存記憶體區域403‧‧‧全域輸入資料陣列區域404‧‧‧全域輸出資料陣列區域405‧‧‧全域查找表資訊區域406‧‧‧全域原子統計區域407‧‧‧全域常數表資訊區域/常數記憶體區域408‧‧‧調入409‧‧‧存取410‧‧‧查找411‧‧‧查找表412‧‧‧調用413‧‧‧寫入414‧‧‧讀取415‧‧‧常數查找表420‧‧‧記憶體區域501‧‧‧影像502‧‧‧影像601‧‧‧應用軟體開發及模擬環境602‧‧‧程式庫603‧‧‧單一執行緒/執行緒碼604‧‧‧虛擬處理器/虛擬處理器模型605‧‧‧記憶體606‧‧‧電腦系統700‧‧‧架構701_1至701_M‧‧‧線緩衝器單元702_1至702_N‧‧‧模板處理器單元703_1至703_N‧‧‧圖表產生器單元704‧‧‧網路705‧‧‧巨集輸入/輸出(I/O)單元801‧‧‧影像資料802‧‧‧重疊模板803‧‧‧陰影區域/線群804‧‧‧初始圖表/第一圖表805‧‧‧新圖表/第二圖表900‧‧‧模板處理器單元架構901‧‧‧資料運算單元902‧‧‧純量處理器903‧‧‧純量記憶體904‧‧‧I/O單元905‧‧‧執行道陣列906‧‧‧二維位移暫存器陣列結構907‧‧‧隨機存取記憶體907_1至907_R‧‧‧隨機存取記憶體909‧‧‧程式控制器951‧‧‧純量指令952‧‧‧ALU指令953‧‧‧記憶體指令954‧‧‧欄位1001‧‧‧資料運算單元1005‧‧‧執行道/執行道陣列1006‧‧‧二維位移暫存器陣列結構/二維位移暫存器1007‧‧‧隨機存取記憶體1007_1至1007_R‧‧‧隨機存取記憶體1009‧‧‧暫存器暈圈/暈圈區域1105‧‧‧圖框/執行道陣列1107‧‧‧位移暫存器陣列/第一陣列1110‧‧‧執行道1111‧‧‧執行道位置/執行道1201‧‧‧執行道1202‧‧‧暫存器檔案1203‧‧‧輸出多工器/多工器配置/多工器電路1204‧‧‧輸入多工器/多工器配置/多工器電路1401‧‧‧陣列之對置端之間的直接邏輯位移1601‧‧‧陣列邊緣位置之間的滾動位移1801‧‧‧陣列邊緣位置之間的滾動位移1901‧‧‧座標位置/列1902‧‧‧座標位置/行1903‧‧‧列1904‧‧‧行2101‧‧‧第一複數項2102‧‧‧第二複數項2601‧‧‧執行道陣列位置2701‧‧‧程式庫2800‧‧‧系統2801‧‧‧中央處理單元(CPU)2802‧‧‧系統記憶體2803‧‧‧顯示器2804‧‧‧區域有線點對點鏈接介面/通信介面2805‧‧‧網路I/O功能/通信介面2806‧‧‧無線區域網路介面/通信介面2807‧‧‧無線點對點鏈接介面/通信介面2808‧‧‧全球定位系統(GPS)介面2809‧‧‧感測器2809_1至2809_N‧‧‧感測器2810‧‧‧攝影機2811‧‧‧電池2812‧‧‧電力管理控制單元2813‧‧‧揚聲器/麥克風2814‧‧‧音訊編碼器/解碼器2815‧‧‧通用處理核心2815_1至2815_N‧‧‧通用處理核心2816‧‧‧圖形處理單元(GPU)2817‧‧‧主記憶體控制器/記憶體管理功能2818‧‧‧I/O控制功能2819‧‧‧影像處理單元(IPU)2850‧‧‧應用處理器/多核心處理器A0至A7‧‧‧資料值K1‧‧‧第一內核K2‧‧‧內核K3_1‧‧‧內核K3_2‧‧‧內核K4‧‧‧內核R0‧‧‧暫存器R1‧‧‧暫存器R2‧‧‧暫存器R3‧‧‧暫存器R4‧‧‧暫存器R5‧‧‧暫存器X1‧‧‧位置/輸出值X2‧‧‧位置/輸出值
以下描述及附圖用於繪示本發明之各種實施例。在圖式中: 圖1展示一技術平台之各種組件; 圖2a展示由內核建立之應用軟體之一實施例; 圖2b展示一內核之結構之一實施例; 圖3展示一內核之操作之一實施例; 圖4a、圖4b及圖4c描繪用於在一較高階應用軟體開發環境中開發內核執行緒之一虛擬處理器之記憶體模型之各種態樣; 圖5a展示用具有一位置相對格式之載入指令書寫之一執行緒之一實施例; 圖5b展示具有不同像素密度之影像; 圖6展示一應用軟體開發及模擬環境之一實施例; 圖7展示一影像處理器硬體架構之一實施例; 圖8a、圖8b、圖8c、圖8d及圖8e描繪影像資料變成一線群之剖析、一線群變成一圖表之剖析及對具有重疊模板之一圖表所執行之操作; 圖9a展示一模板處理器之一實施例; 圖9b展示模板處理器之一指令字之一實施例; 圖10展示一模板處理器內之一資料運算單元之一實施例; 圖11a、圖11b、圖11c、圖11d、圖11e、圖11f、圖11g、圖11h、圖11i、圖11j及圖11k描繪使用一二維位移陣列及一執行道陣列來判定具有重疊模板之一對相鄰輸出像素值的一實例; 圖12展示用於一整合式執行道陣列及二維位移陣列之一單位晶胞之一實施例; 圖13展示一二維列/行和運算; 圖14a、圖14b、圖14c及圖14d展示用於實施一二維列和運算之低階操作; 圖15係針對一二維前綴和運算; 圖16a、圖16b、圖16c及圖16d展示用於實施一二維前綴和運算之低階操作; 圖17係針對一二維尋找最小值運算; 圖18a、圖18b、圖18c及圖18d展示用於實施一二維尋找最小值運算之低階操作; 圖19a及圖19b展示一矩陣乘法運算; 圖20a、圖20b、圖20c、圖20d及圖20e展示用於使用一二維位移暫存器來實施一矩陣乘法運算之低階操作; 圖21展示一DFT運算; 圖22a、圖22b、圖22c、圖22d、圖22e及圖22f展示用於使用一二維位移暫存器來實施一DFT運算之低階操作; 圖23展示蝶式運算; 圖24a、圖24b及圖24c展示使用一二維位移暫存器所實施之蝶式運算; 圖25展示具有一區塊影像之一基底影像及一替代影像; 圖26a、圖26b、圖26c及圖26d展示用於執行一區塊匹配演算法之低階操作; 圖27展示用於產生針對具有一二維執行道陣列及一二維位移暫存器陣列之一硬體平台之程式碼的一環境;及 圖28展示一運算系統之一實施例。
A0至A7‧‧‧資料值
R0‧‧‧暫存器
R1‧‧‧暫存器
Claims (21)
- 一種處理器,其包括:一二維處理元素(processing elements)陣列,其中每一處理元素係與沿著該二維處理元素陣列之一第一維度在零處開始之複數個連續增加位置數目之一各別位置數目相關聯,每一位置數目表示該二維處理元素陣列之該第一維度中之該處理元素之一位置;及多個位移暫存器平面,每一位移暫存器平面包括一單獨二維位移暫存器陣列(separate two-dimensional shift-register array),其中每一位移暫存器陣列之每一位移暫存器係專用於該等處理元素之一者,其中該處理器係經組態以執行指令以執行一前綴運算(prefix operation),其自沿著該多個位移暫存器平面之一第一位移暫存器平面之該第一維度之一第一列或行中所儲存之一第一序列值而產生作為沿著該多個位移暫存器平面之一第二位移暫存器平面之該第一維度之該第一列或行之一相同列或行中所儲存之一第二序列值,其中在該第二序列值中之每一位置處之每一所得值(resultant value)係為(i)在該第一序列值中之一相對應位置處之一初始值及(ii)在該第一序列值中之該位置前發生之所有值之和,其中該多個位移暫存器平面之該第一位移暫存器平面及該第二位移暫存器平面最初具有該第一序列值之資料,其中該等指令使得該處理器執行自0至M的多個迭代,包含運算之每一迭代N包括:藉由沿著該第一維度朝向增加位置數目的一2N個位移量而位移該第二位移暫存器平面中之資料,及 若且惟若(if and only if)與該處理元素相關聯之一位置數目大於2N-1,藉由每一處理元素計算(1)專用於該第一位移暫存器平面中之該處理元素之一第一位移暫存器中之一第一值及(2)專用於該第二位移暫存器平面中之該處理元素之一第二位移暫存器中之一第二值之和。
- 如請求項1之處理器,其中每一二維位移暫存器陣列係經組態以將資料自該位移暫存器陣列之一邊緣包裹(wrap)至該位移暫存器陣列之一對置邊緣。
- 如請求項1之處理器,其中每一二維位移暫存器陣列係經組態以位移一單一指令或一單一週期(cycle)上之多個跳躍中之資料。
- 如請求項1之處理器,其中該等指令使得該處理器在該位移暫存器陣列之多個列或多個行上並列(in parallel)執行該前綴運算。
- 如請求項1之處理器,其中每一二維處理元素陣列包括至少一8x8處理元素陣列。
- 一種處理器,其包括:一二維處理元素陣列,其中每一處理元素係與沿著該二維處理元素陣列之一第一維度之一各別位置相關聯;及多個位移暫存器平面,每一位移暫存器平面包括一單獨二維位移暫存器陣列,其中每一位移暫存器陣列之每一位移暫存器係專用於該等處理 元素之一者,且其中每一位移暫存器陣列係經組態以將資料自該位移暫存器陣列之一邊緣包裹至該位移暫存器陣列之一對置邊緣,其中該處理器係經組態以執行指令以執行一尋找最小值運算(find-min operation),其自該多個位移暫存器平面之一第一位移暫存器平面之一列或行中所儲存之一第一序列值而判定在第一序列中的哪個值係小於該第一序列值中之所有其他值,其中該多個位移暫存器平面之一第二位移暫存器平面最初具有該第一序列值中之每一值之各別指標值(index values),其中該多個位移暫存器平面之一第三位移暫存器平面最初具有藉由一位置所位移之該第一序列值之資料,及該多個位移暫存器平面之一第四位移暫存器平面最初具有該第三位移暫存器平面中之每一值之各別指標值,其中該等指令使得該處理器執行多個迭代,包含運算之每一迭代包括:計算在(i)屬於該處理元素之該第一位移暫存器平面上之一位移暫存器與(ii)屬於該處理元素之該第三位移暫存器平面上之一位移暫存器之間的最小值,將該最小值儲存於該第一位移暫存器平面上之一位移暫存器中且將一相對應之指標值儲存於該第二位移暫存器平面上之一位移暫存器中,及藉由相對於一先前迭代加倍之一位移量沿著該列或行於一特定方向中位移該等第三及第四位移暫存器平面中之資料,直至該位移量大於或等於沿著該二維處理元素陣列之一列或行之一 處理元素數目的一半。
- 如請求項6之處理器,其中該等運算進一步包括:對於儲存於一第一位移暫存器平面中之一第一區塊,執行一區塊匹配處理以識別儲存於一第二位移暫存器平面中之一匹配區塊之一位置,其中該第一區塊包含複數個資料值,其包含執行用於該第一區塊中之該複數個資料值之每一資料值之下列運算:廣播該資料值至該等處理元素之每一者,藉由每一處理元素計算(i)該資料值與(ii)屬於該處理元素之該第二位移暫存器平面之一位移暫存器中之一資料之間的差,藉由每一處理元素將該各別經計算之差儲存於一第三位移暫存器平面中,及藉由在一特定方向中之一單位而位移具有該第一區塊之該第一位移暫存器平面,及其中在該第三位移暫存器平面中之該等差上執行該尋找最小值運算係識別儲存於該第二位移暫存器平面中之一匹配區塊之一位置。
- 如請求項7之處理器,其中該二維位移暫存器陣列係經組態以位移一單一指令或一單一週期上之多個跳躍中之資料。
- 如請求項7之處理器,其中該等指令使得該處理器在該位移暫存器陣列之多個列或多個行上並列(in parallel)執行該尋找最小值運算。
- 如請求項7之處理器,其中該二維處理元素陣列包括至少一8x8處理元素陣列。
- 一種電腦程式產品,其於一或多個非暫態電腦儲存媒體上編碼,該電腦程式產品包括由一處理器執行時之指令,該處理器包括:一二維處理元素陣列,其中每一處理元素係與沿著該二維處理元素陣列之一第一維度在零處開始之複數個連續增加位置數目之一各別位置數目相關聯,每一位置數目表示該二維處理元素陣列之該第一維度中之該處理元素之一位置;及多個位移暫存器平面,每一位移暫存器平面包括一單獨二維位移暫存器陣列,其中每一位移暫存器陣列之每一位移暫存器係專用於該等處理元素之一者,使得該處理器執行一前綴運算,其自沿著該多個位移暫存器平面之一第一位移暫存器平面之該第一維度之一第一列或行中所儲存之一第一序列值而產生作為沿著該多個位移暫存器平面之一第二位移暫存器平面之該第一維度之該第一列或行之一相同列或行中所儲存之一第二序列值,其中在該第二序列值中之每一位置處之每一所得值係為(i)在該第一序列值中之一相對應位置處之一初始值及(ii)在該第一序列值中之該位置前發生之所有值之和,其中該多個位移暫存器平面之該第一位移暫存器平面及該第二位移暫存器平面最初具有該第一序列值之資料,其中該等指令使得該處理器執行自0至M的多個迭代,包含運算之每一迭代N包括:藉由沿著該第一維度朝向增加位置數目的一2N個位移量而位移 該第二位移暫存器平面中之資料,及若且惟若與該處理元素相關聯之一位置數目大於2N-1,藉由每一處理元素計算(1)專用於該第一位移暫存器平面中之該處理元素之一第一位移暫存器中之一第一值及(2)專用於該第二位移暫存器平面中之該處理元素之一第二位移暫存器中之一第二值之和。
- 如請求項11之電腦程式產品,其中每一二維位移暫存器陣列係經組態以位移一單一指令或一單一週期上之多個跳躍中之資料。
- 如請求項11之電腦程式產品,其中該等指令使得該處理器在該位移暫存器陣列之多個列或多個行上並列執行該前綴運算。
- 如請求項11之電腦程式產品,其中每一二維處理元素陣列包括至少一8x8處理元素陣列。
- 一種電腦程式產品,其於一或多個非暫態電腦儲存媒體上編碼,該電腦程式產品包括由一處理器執行時之指令,該處理器包括:一二維處理元素陣列,其中每一處理元素係與沿著該二維處理元素陣列之一第一維度之一各別位置相關聯;及多個位移暫存器平面,每一位移暫存器平面包括一單獨二維位移暫存器陣列,其中每一位移暫存器陣列之每一位移暫存器係專用於該等處理元素之一者,且其中每一位移暫存器陣列係經組態以將資料自該位移暫存器陣列之一邊緣包裹至該位移暫存器陣列之一對置邊緣, 使得該處理器執行一尋找最小值運算,其自該多個位移暫存器平面之一第一位移暫存器平面之一列或行中所儲存之一第一序列值而判定在第一序列中的哪個值係小於該第一序列值中之所有其他值,其中該多個位移暫存器平面之一第二位移暫存器平面最初具有該第一序列值中之每一值之各別指標值,其中該多個位移暫存器平面之一第三位移暫存器平面最初具有藉由一位置所位移之該第一序列值之資料,及該多個位移暫存器平面之一第四位移暫存器平面最初具有該第三位移暫存器平面中之每一值之各別指標值,其中該等指令使得該處理器執行多個迭代,包含運算之每一迭代包括:計算在(i)屬於該處理元素之該第一位移暫存器平面上之一位移暫存器與(ii)屬於該處理元素之該第三位移暫存器平面上之一位移暫存器之間的最小值,將該最小值儲存於該第一位移暫存器平面上之一位移暫存器中且將一相對應之指標值儲存於該第二位移暫存器平面上之一位移暫存器中,及藉由相對於一先前迭代加倍之一位移量沿著該列或行於一特定方向中位移該等第三及第四位移暫存器平面中之資料,直至該位移量大於或等於沿著該二維處理元素陣列之一列或行之一處理元素數目的一半。
- 如請求項15之電腦程式產品,其中該等運算進一步包括: 對於儲存於一第一位移暫存器平面中之一第一區塊,執行一區塊匹配處理以識別儲存於一第二位移暫存器平面中之一匹配區塊之一位置,其中該第一區塊包含複數個資料值,其包含執行用於該第一區塊中之該複數個資料值之每一資料值之下列運算:廣播該資料值至該等處理元素之每一者,藉由每一處理元素計算(i)該資料值與(ii)屬於該處理元素之該第二位移暫存器平面之一位移暫存器中之一資料之間的差,藉由每一處理元素將該各別經計算之差儲存於一第三位移暫存器平面中,及藉由在一特定方向中之一單位而位移具有該第一區塊之該第一位移暫存器平面,及其中在該第三位移暫存器平面中之該等差上執行該尋找最小值運算係識別儲存於該第二位移暫存器平面中之一匹配區塊之一位置。
- 如請求項16之電腦程式產品,其中該二維位移暫存器陣列係經組態以位移一單一指令或一單一週期上之多個跳躍中之資料。
- 如請求項16之電腦程式產品,其中該等指令使得該處理器在該位移暫存器陣列之多個列或多個行上並列執行該尋找最小值運算。
- 如請求項16之電腦程式產品,其中該二維處理元素陣列包括至少一8x8處理元素陣列。
- 一種藉由一處理器執行之方法,該處理器包括:一二維處理元素陣列,其中每一處理元素係與沿著該二維處理元素陣列之一第一維度在零處開始之複數個連續增加位置數目之一各別位置數目相關聯,每一位置數目表示該二維處理元素陣列之該第一維度中之該處理元素之一位置;及多個位移暫存器平面,每一位移暫存器平面包括一單獨二維位移暫存器陣列,其中每一位移暫存器陣列之每一位移暫存器係專用於該等處理元素之一者,其中該方法包括執行一前綴運算,其自沿著該多個位移暫存器平面之一第一位移暫存器平面之該第一維度之一第一列或行中所儲存之一第一序列值而產生作為沿著該多個位移暫存器平面之一第二位移暫存器平面之該第一維度之該第一列或行之一相同列或行中所儲存之一第二序列值,其中在該第二序列值中之每一位置處之每一所得值係為(i)在該第一序列值中之一相對應位置處之一初始值及(ii)在該第一序列值中之該位置前發生之所有值之和,其中該多個位移暫存器平面之該第一位移暫存器平面及該第二位移暫存器平面最初具有該第一序列值之資料,其中執行該前綴運算包括執行自0至M的多個迭代,包含運算之每一迭代N包括:藉由沿著該第一維度朝向增加位置數目的一2N個位移量而位移該第二位移暫存器平面中之資料,及若且惟若與該處理元素相關聯之一位置數目大於2N-1,藉由每一處理元素計算(1)專用於該第一位移暫存器平面中之該處理元素之一第一位移暫存器中之一第一值及(2)專用於該第二位移暫存器平面中之該處 理元素之一第二位移暫存器中之一第二值之和。
- 一種藉由一處理器執行之方法,該處理器包括:一二維處理元素陣列,其中每一處理元素係與沿著該二維處理元素陣列之一第一維度之一各別位置相關聯;及多個位移暫存器平面,每一位移暫存器平面包括一單獨二維位移暫存器陣列,其中每一位移暫存器陣列之每一位移暫存器係專用於該等處理元素之一者,且其中每一位移暫存器陣列係經組態以將資料自該位移暫存器陣列之一邊緣包裹至該位移暫存器陣列之一對置邊緣,其中該方法包括執行一尋找最小值運算,其自該多個位移暫存器平面之一第一位移暫存器平面之一列或行中所儲存之一第一序列值而判定在第一序列中的哪個值係小於該第一序列值中之所有其他值,其中該多個位移暫存器平面之一第二位移暫存器平面最初具有該第一序列值中之每一值之各別指標值,其中該多個位移暫存器平面之一第三位移暫存器平面最初具有藉由一位置所位移之該第一序列值之資料,及該多個位移暫存器平面之一第四位移暫存器平面最初具有該第三位移暫存器平面中之每一值之各別指標值,其中執行該尋找最小值運算包括執行多個迭代,包含運算之每一迭代包括:計算在(i)屬於該處理元素之該第一位移暫存器平面上之一位移暫存器與(ii)屬於該處理元素之該第三位移暫存器平面上之一位移暫存器之間的最小值, 將該最小值儲存於該第一位移暫存器平面上之一位移暫存器中且將一相對應之指標值儲存於該第二位移暫存器平面上之一位移暫存器中,及藉由相對於一先前迭代加倍之一位移量沿著該列或行於一特定方向中位移該等第三及第四位移暫存器平面中之資料,直至該位移量大於或等於沿著該二維處理元素陣列之一列或行之一處理元素數目的一半。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/201,269 US20180005346A1 (en) | 2016-07-01 | 2016-07-01 | Core Processes For Block Operations On An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register |
US15/201,269 | 2016-07-01 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201921314A TW201921314A (zh) | 2019-06-01 |
TWI690896B true TWI690896B (zh) | 2020-04-11 |
Family
ID=59258352
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW106121883A TWI646501B (zh) | 2016-07-01 | 2017-06-30 | 影像處理器、由其執行之方法、及非暫態機器可讀儲存媒體 |
TW107141459A TWI690896B (zh) | 2016-07-01 | 2017-06-30 | 影像處理器、由其執行之方法、及非暫態機器可讀儲存媒體 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW106121883A TWI646501B (zh) | 2016-07-01 | 2017-06-30 | 影像處理器、由其執行之方法、及非暫態機器可讀儲存媒體 |
Country Status (9)
Country | Link |
---|---|
US (2) | US20180005346A1 (zh) |
EP (1) | EP3479341B1 (zh) |
JP (1) | JP6837084B2 (zh) |
KR (1) | KR102232723B1 (zh) |
CN (1) | CN107563954B (zh) |
DE (2) | DE102017113867A1 (zh) |
GB (2) | GB2576278B (zh) |
TW (2) | TWI646501B (zh) |
WO (1) | WO2018005037A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180007302A1 (en) | 2016-07-01 | 2018-01-04 | Google Inc. | Block Operations For An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register |
CN112005213B (zh) | 2018-02-27 | 2024-07-09 | 谷歌有限责任公司 | 在图像处理器上支持大型查找表的方法和*** |
JP7035751B2 (ja) * | 2018-04-12 | 2022-03-15 | 富士通株式会社 | コード変換装置、コード変換方法、及びコード変換プログラム |
US10776110B2 (en) * | 2018-09-29 | 2020-09-15 | Intel Corporation | Apparatus and method for adaptable and efficient lane-wise tensor processing |
US10552939B1 (en) | 2019-02-12 | 2020-02-04 | Google Llc | Image processor complex transfer functions |
US11410027B2 (en) | 2019-09-16 | 2022-08-09 | SambaNova Systems, Inc. | Performance estimation-based resource allocation for reconfigurable architectures |
US20210081691A1 (en) * | 2019-09-16 | 2021-03-18 | SambaNova Systems, Inc. | Efficient Execution of Operation Unit Graphs on Reconfigurable Architectures Based on User Specification |
CN113536220A (zh) * | 2020-04-21 | 2021-10-22 | 中科寒武纪科技股份有限公司 | 运算方法、处理器及相关产品 |
GB2595696B (en) * | 2020-06-04 | 2022-12-28 | Envisics Ltd | Forming a hologram of a target image for projection using data streaming |
CN112784977B (zh) * | 2021-01-15 | 2023-09-08 | 北方工业大学 | 一种目标检测卷积神经网络加速器 |
WO2023089610A1 (en) * | 2021-11-18 | 2023-05-25 | Deci.Ai Ltd. | System and method for optimizing calculation of butterfly transforms by a processing unit |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5148111A (en) * | 1990-04-27 | 1992-09-15 | State Of Israel, Ministry Of Defense, Rafael-Armament Development Authority | Electromagnetic pulse simulator |
TW356540B (en) * | 1996-10-18 | 1999-04-21 | Samsung Electronics Co Ltd | Method for operating a computer program on a computer readable media for execution by a vector processor and by a dual multiprocessor including a vector processor and a RISC processor |
TW200745879A (en) * | 2006-03-23 | 2007-12-16 | Cambridge Display Tech Ltd | Data processing hardware |
US20150106596A1 (en) * | 2003-03-21 | 2015-04-16 | Pact Xpp Technologies Ag | Data Processing System Having Integrated Pipelined Array Data Processor |
Family Cites Families (83)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4445177A (en) | 1981-05-22 | 1984-04-24 | Data General Corporation | Digital data processing system utilizing a unique arithmetic logic unit for handling uniquely identifiable addresses for operands and instructions |
EP0293701B1 (en) | 1987-06-01 | 1994-08-10 | Applied Intelligent Systems, Inc. | Parallel neighborhood processing system and method |
US4935894A (en) | 1987-08-31 | 1990-06-19 | Motorola, Inc. | Multi-processor, multi-bus system with bus interface comprising FIFO register stocks for receiving and transmitting data and control information |
US5253308A (en) | 1989-06-21 | 1993-10-12 | Amber Engineering, Inc. | Massively parallel digital image data processor using pixel-mapped input/output and relative indexed addressing |
US5173947A (en) * | 1989-08-01 | 1992-12-22 | Martin Marietta Corporation | Conformal image processing apparatus and method |
WO1994009595A1 (en) | 1991-09-20 | 1994-04-28 | Shaw Venson M | Method and apparatus including system architecture for multimedia communications |
JP3482660B2 (ja) | 1993-09-08 | 2003-12-22 | ソニー株式会社 | 画像データ処理装置および画像データ処理方法 |
US5848286A (en) | 1994-03-29 | 1998-12-08 | Cray Research, Inc. | Vector word shift by vo shift count in vector supercomputer processor |
US5606707A (en) * | 1994-09-30 | 1997-02-25 | Martin Marietta Corporation | Real-time image processor |
US5612693A (en) | 1994-12-14 | 1997-03-18 | International Business Machines Corporation | Sliding window data compression using a toroidal bit shift register |
JPH08194679A (ja) * | 1995-01-19 | 1996-07-30 | Texas Instr Japan Ltd | ディジタル信号処理方法及び装置並びにメモリセル読出し方法 |
KR100415417B1 (ko) | 1996-01-15 | 2004-04-17 | 지멘스 악티엔게젤샤프트 | 이미지-처리프로세서 |
US5892962A (en) | 1996-11-12 | 1999-04-06 | Lucent Technologies Inc. | FPGA-based processor |
US6148111A (en) * | 1998-04-27 | 2000-11-14 | The United States Of America As Represented By The Secretary Of The Navy | Parallel digital image compression system for exploiting zerotree redundancies in wavelet coefficients |
US6366289B1 (en) | 1998-07-17 | 2002-04-02 | Microsoft Corporation | Method and system for managing a display image in compressed and uncompressed blocks |
US6587158B1 (en) | 1998-07-23 | 2003-07-01 | Dvdo, Inc. | Method and apparatus for reducing on-chip memory in vertical video processing |
US7010177B1 (en) | 1998-08-27 | 2006-03-07 | Intel Corporation | Portability of digital images |
WO2000055810A1 (fr) | 1999-03-16 | 2000-09-21 | Hamamatsu Photonics K. K. | Capteur de vision ultra-rapide |
JP3922859B2 (ja) | 1999-12-28 | 2007-05-30 | 株式会社リコー | 画像処理装置、画像処理方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体 |
US6745319B1 (en) | 2000-02-18 | 2004-06-01 | Texas Instruments Incorporated | Microprocessor with instructions for shuffling and dealing data |
US6728862B1 (en) | 2000-05-22 | 2004-04-27 | Gazelle Technology Corporation | Processor array and parallel data processing methods |
US6728722B1 (en) | 2000-08-28 | 2004-04-27 | Sun Microsystems, Inc. | General data structure for describing logical data spaces |
US7286717B2 (en) | 2001-10-31 | 2007-10-23 | Ricoh Company, Ltd. | Image data processing device processing a plurality of series of data items simultaneously in parallel |
JP4146654B2 (ja) | 2002-02-28 | 2008-09-10 | 株式会社リコー | 画像処理回路、複合画像処理回路、および、画像形成装置 |
AU2003221680A1 (en) | 2002-04-09 | 2003-10-27 | The Research Foundation Of State University Of New York | Multiplier-based processor-in-memory architectures for image and graphics processing |
WO2004021176A2 (de) | 2002-08-07 | 2004-03-11 | Pact Xpp Technologies Ag | Verfahren und vorrichtung zur datenverarbeitung |
US20060044576A1 (en) | 2004-07-30 | 2006-03-02 | Kabushiki Kaisha Toshiba | Apparatus for image processing |
US20050216700A1 (en) * | 2004-03-26 | 2005-09-29 | Hooman Honary | Reconfigurable parallelism architecture |
WO2005109221A2 (en) * | 2004-05-03 | 2005-11-17 | Silicon Optix | A bit serial processing element for a simd array processor |
US7667764B2 (en) | 2004-06-04 | 2010-02-23 | Konica Minolta Holdings, Inc. | Image sensing apparatus |
JP4219887B2 (ja) | 2004-12-28 | 2009-02-04 | 富士通マイクロエレクトロニクス株式会社 | 画像処理装置及び画像処理方法 |
WO2006114642A1 (en) | 2005-04-28 | 2006-11-02 | The University Court Of The University Of Edinburgh | Reconfigurable instruction cell array |
US7882339B2 (en) | 2005-06-23 | 2011-02-01 | Intel Corporation | Primitives to enhance thread-level speculation |
JP2007067917A (ja) | 2005-08-31 | 2007-03-15 | Matsushita Electric Ind Co Ltd | 画像データ処理装置 |
US7602974B2 (en) | 2005-10-21 | 2009-10-13 | Mobilic Technology (Cayman) Corp. | Universal fixed-pixel-size ISP scheme |
FR2895103B1 (fr) | 2005-12-19 | 2008-02-22 | Dxo Labs Sa | Procede et systeme de traitement de donnees numeriques |
US7991817B2 (en) * | 2006-01-23 | 2011-08-02 | California Institute Of Technology | Method and a circuit using an associative calculator for calculating a sequence of non-associative operations |
US7802073B1 (en) | 2006-03-29 | 2010-09-21 | Oracle America, Inc. | Virtual core management |
US7933940B2 (en) * | 2006-04-20 | 2011-04-26 | International Business Machines Corporation | Cyclic segmented prefix circuits for mesh networks |
US20080111823A1 (en) | 2006-11-13 | 2008-05-15 | Faraday Technology Corp. | Graphics processing system |
EP1927949A1 (en) * | 2006-12-01 | 2008-06-04 | Thomson Licensing | Array of processing elements with local registers |
EP1927950A1 (en) | 2006-12-01 | 2008-06-04 | Thomson Licensing | Array of processing elements with local registers |
US8321849B2 (en) | 2007-01-26 | 2012-11-27 | Nvidia Corporation | Virtual architecture and instruction set for parallel thread computing |
US20080244222A1 (en) | 2007-03-30 | 2008-10-02 | Intel Corporation | Many-core processing using virtual processors |
JP4389976B2 (ja) | 2007-06-29 | 2009-12-24 | ブラザー工業株式会社 | 画像処理装置および画像処理プログラム |
EP2665256B1 (en) | 2007-09-05 | 2015-11-18 | Tohoku University | Solid-state image sensor and drive method for the same |
US8661226B2 (en) * | 2007-11-15 | 2014-02-25 | Nvidia Corporation | System, method, and computer program product for performing a scan operation on a sequence of single-bit values using a parallel processor architecture |
EP2289001B1 (en) | 2008-05-30 | 2018-07-25 | Advanced Micro Devices, Inc. | Local and global data share |
US8225325B2 (en) * | 2008-06-06 | 2012-07-17 | Apple Inc. | Multi-dimensional thread grouping for multiple processors |
JP4999791B2 (ja) | 2008-06-30 | 2012-08-15 | キヤノン株式会社 | 情報処理装置、その制御方法、及びプログラム |
US8456480B2 (en) | 2009-01-14 | 2013-06-04 | Calos Fund Limited Liability Company | Method for chaining image-processing functions on a SIMD processor |
KR101572879B1 (ko) | 2009-04-29 | 2015-12-01 | 삼성전자주식회사 | 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법 |
US20110055495A1 (en) | 2009-08-28 | 2011-03-03 | Qualcomm Incorporated | Memory Controller Page Management Devices, Systems, and Methods |
US8976195B1 (en) | 2009-10-14 | 2015-03-10 | Nvidia Corporation | Generating clip state for a batch of vertices |
US8436857B2 (en) | 2009-10-20 | 2013-05-07 | Oracle America, Inc. | System and method for applying level of detail schemes |
US8595428B2 (en) | 2009-12-22 | 2013-11-26 | Intel Corporation | Memory controller functionalities to support data swizzling |
GB201007406D0 (en) | 2010-05-04 | 2010-06-16 | Aspex Semiconductor Ltd | Block motion estimation |
US8749667B2 (en) | 2010-08-02 | 2014-06-10 | Texas Instruments Incorporated | System and method for maintaining maximum input rate while up-scaling an image vertically |
US8508612B2 (en) | 2010-09-30 | 2013-08-13 | Apple Inc. | Image signal processor line buffer configuration for processing ram image data |
US8797323B2 (en) | 2011-01-18 | 2014-08-05 | Intel Corporation | Shadowing dynamic volumetric media |
WO2012105174A1 (ja) | 2011-01-31 | 2012-08-09 | パナソニック株式会社 | プログラム生成装置、プログラム生成方法、プロセッサ装置及びマルチプロセッサシステム |
US9092267B2 (en) | 2011-06-20 | 2015-07-28 | Qualcomm Incorporated | Memory sharing in graphics processing unit |
US20130027416A1 (en) | 2011-07-25 | 2013-01-31 | Karthikeyan Vaithianathan | Gather method and apparatus for media processing accelerators |
JP5742651B2 (ja) | 2011-10-15 | 2015-07-01 | コニカミノルタ株式会社 | 画像処理装置、連携方法および連携プログラム |
JP5746100B2 (ja) | 2011-12-27 | 2015-07-08 | 京セラドキュメントソリューションズ株式会社 | 画像形成装置 |
US8823736B2 (en) | 2012-01-20 | 2014-09-02 | Intel Corporation | Graphics tiling architecture with bounding volume hierarchies |
US10244246B2 (en) | 2012-02-02 | 2019-03-26 | Texas Instruments Incorporated | Sub-pictures for pixel rate balancing on multi-core platforms |
US9235769B2 (en) | 2012-03-15 | 2016-01-12 | Herta Security, S.L. | Parallel object detection method for heterogeneous multithreaded microarchitectures |
TWI520598B (zh) | 2012-05-23 | 2016-02-01 | 晨星半導體股份有限公司 | 影像處理裝置與影像處理方法 |
US9232139B2 (en) | 2012-07-24 | 2016-01-05 | Apple Inc. | Image stabilization using striped output transformation unit |
US9319254B2 (en) * | 2012-08-03 | 2016-04-19 | Ati Technologies Ulc | Methods and systems for processing network messages in an accelerated processing device |
US9378181B2 (en) | 2012-11-09 | 2016-06-28 | Intel Corporation | Scalable computing array |
US8954992B2 (en) | 2013-03-15 | 2015-02-10 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Distributed and scaled-out network switch and packet processing |
US10996959B2 (en) * | 2015-01-08 | 2021-05-04 | Technion Research And Development Foundation Ltd. | Hybrid processor |
US9749548B2 (en) | 2015-01-22 | 2017-08-29 | Google Inc. | Virtual linebuffers for image signal processors |
US9756268B2 (en) | 2015-04-23 | 2017-09-05 | Google Inc. | Line buffer unit for image processor |
US9772852B2 (en) | 2015-04-23 | 2017-09-26 | Google Inc. | Energy efficient processor core architecture for image processor |
US9769356B2 (en) | 2015-04-23 | 2017-09-19 | Google Inc. | Two dimensional shift array for image processor |
US10095479B2 (en) | 2015-04-23 | 2018-10-09 | Google Llc | Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure |
US10291813B2 (en) | 2015-04-23 | 2019-05-14 | Google Llc | Sheet generator for image processor |
US9785423B2 (en) | 2015-04-23 | 2017-10-10 | Google Inc. | Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure |
US9965824B2 (en) | 2015-04-23 | 2018-05-08 | Google Llc | Architecture for high performance, power efficient, programmable image processing |
US9632979B2 (en) * | 2015-06-01 | 2017-04-25 | Intel Corporation | Apparatus and method for efficient prefix sum operation |
-
2016
- 2016-07-01 US US15/201,269 patent/US20180005346A1/en not_active Abandoned
-
2017
- 2017-05-17 US US15/598,082 patent/US9978116B2/en active Active
- 2017-06-08 JP JP2018568290A patent/JP6837084B2/ja active Active
- 2017-06-08 EP EP17734557.6A patent/EP3479341B1/en active Active
- 2017-06-08 WO PCT/US2017/036565 patent/WO2018005037A1/en unknown
- 2017-06-08 KR KR1020197003054A patent/KR102232723B1/ko active IP Right Grant
- 2017-06-20 GB GB1916257.7A patent/GB2576278B/en active Active
- 2017-06-20 GB GB201709788A patent/GB2553632B/en active Active
- 2017-06-22 DE DE102017113867.6A patent/DE102017113867A1/de active Pending
- 2017-06-22 DE DE202017103727.4U patent/DE202017103727U1/de active Active
- 2017-06-30 TW TW106121883A patent/TWI646501B/zh active
- 2017-06-30 TW TW107141459A patent/TWI690896B/zh active
- 2017-07-03 CN CN201710534983.0A patent/CN107563954B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5148111A (en) * | 1990-04-27 | 1992-09-15 | State Of Israel, Ministry Of Defense, Rafael-Armament Development Authority | Electromagnetic pulse simulator |
TW356540B (en) * | 1996-10-18 | 1999-04-21 | Samsung Electronics Co Ltd | Method for operating a computer program on a computer readable media for execution by a vector processor and by a dual multiprocessor including a vector processor and a RISC processor |
US20150106596A1 (en) * | 2003-03-21 | 2015-04-16 | Pact Xpp Technologies Ag | Data Processing System Having Integrated Pipelined Array Data Processor |
TW200745879A (en) * | 2006-03-23 | 2007-12-16 | Cambridge Display Tech Ltd | Data processing hardware |
Also Published As
Publication number | Publication date |
---|---|
GB2576278A (en) | 2020-02-12 |
TW201921314A (zh) | 2019-06-01 |
GB2553632A (en) | 2018-03-14 |
DE202017103727U1 (de) | 2017-11-02 |
US20180005346A1 (en) | 2018-01-04 |
KR20190028454A (ko) | 2019-03-18 |
EP3479341A1 (en) | 2019-05-08 |
JP6837084B2 (ja) | 2021-03-03 |
US20180005347A1 (en) | 2018-01-04 |
EP3479341B1 (en) | 2023-11-29 |
GB2553632B (en) | 2019-12-25 |
DE102017113867A1 (de) | 2018-01-04 |
US9978116B2 (en) | 2018-05-22 |
GB2576278B (en) | 2020-09-16 |
JP2019519863A (ja) | 2019-07-11 |
GB201709788D0 (en) | 2017-08-02 |
TWI646501B (zh) | 2019-01-01 |
CN107563954B (zh) | 2021-04-20 |
WO2018005037A1 (en) | 2018-01-04 |
CN107563954A (zh) | 2018-01-09 |
TW201810180A (zh) | 2018-03-16 |
KR102232723B1 (ko) | 2021-03-26 |
GB201916257D0 (en) | 2019-12-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI687896B (zh) | 用於具二維執行道陣列及二維位移暫存器之影像處理器之區塊操作 | |
TWI690896B (zh) | 影像處理器、由其執行之方法、及非暫態機器可讀儲存媒體 | |
US10216487B2 (en) | Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure | |
KR102278658B1 (ko) | 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처 |