TWI614689B - 用於映射程式碼至一高效能、高功率效率、可程式化之影像處理硬體平台的編譯器技術 - Google Patents
用於映射程式碼至一高效能、高功率效率、可程式化之影像處理硬體平台的編譯器技術 Download PDFInfo
- Publication number
- TWI614689B TWI614689B TW105144288A TW105144288A TWI614689B TW I614689 B TWI614689 B TW I614689B TW 105144288 A TW105144288 A TW 105144288A TW 105144288 A TW105144288 A TW 105144288A TW I614689 B TWI614689 B TW I614689B
- Authority
- TW
- Taiwan
- Prior art keywords
- core
- cores
- processor
- template
- code
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Image Processing (AREA)
- Devices For Executing Special Programs (AREA)
- Multi Processors (AREA)
Abstract
本發明揭示一種方法。該方法包含編譯針對具有可程式化之模板處理器之一影像處理器的程式碼,該模板處理器係由各自二維執行道及移位暫存器電路結構構成。程式碼實施一有向非循環圖且係由在該等模板處理器之各自處理器上執行之多個核構成,其中該編譯包含以下之任何者:認識到在程式碼中存在不同於該影像處理器中之模板處理器之數量的核;認識到核之至少一者比核之另一者計算密集;及認識到程式碼具有超過該影像處理器之記憶體容量的資源要求。該編譯回應於上文之認識之任何者而進一步包含執行以下之任何者:核之水平融合;核之垂直融合;核之一者之分裂成多個核;一核之空間劃分成多個經空間劃分之核;將該有向非循環圖分成較小之圖。
Description
本發明之領域大體上係關於影像處理,且更具體而言,係關於用於映射程式碼至一可程式化之影像處理硬體平台(諸如一高效能、高功率效率、可程式化之影像處理硬體平台)的編譯器技術。
影像處理通常涉及組織成一陣列之像素值之處理。此處,一空間組織之二維陣列擷取影像之二維本質(額外維度可包含時間(例如二維影像之一序列)及資料類型(例如色彩))。在一典型情況中,陣列像素值由已產生一靜態影像或用於擷取運動影像之圖框之一序列之一相機提供。 一第一極值執行影像處理任務作為在一通用處理器或類通用處理器(例如具有向量指令增強之一通用處理器)。儘管該第一極值通常提供一高度多功能應用軟體開發平台,但其使用細粒狀資料結構與相關聯之附加項(例如指令提取及解碼、晶片上及晶片外資料之處置、臆測執行)組合最終導致在程式碼之執行期間每單位資料消耗大量能量。 一第二、相反極值將固定功能固線式電路應用於大很多之資料塊。直接應用於定製設計電路之較大(與細粒相反)資料塊之使用大幅減少每單位資料之電力消耗。然而,使用定製設計之固定功能電路大體上導致處理器能夠執行之一有限任何集。因而,(與第一極值相關聯之)廣泛多功能程式化環境缺少第二極值。 提供高度多功能應用軟體開發機會與每單位資料之改良式高功率效率組合兩者之一技術平台仍係一期望而尚未達成之解決方案。
本發明描述一種方法。該方法包含編譯針對具有可程式化之模板處理器之一影像處理器之程式碼,該模板處理器由各自二維執行道及移位暫存器電路結構構成。程式碼實施一有向非循環圖且由在該等模板處理器之各自處理器上執行之多個核構成,其中該編譯包含以下之任何者:認識到在程式碼中存在不同於該影像處理器中之模板處理器之數量之核;認識到核之至少一者比核之另一者計算密集;及認識到程式碼具有超過該影像處理器之記憶體容量之資源要求。該編譯回應於上文之認識之任何者而進一步包含執行以下之任何者:核之水平融合;核之垂直融合;核之一者之分裂成多個核;一核之空間劃分成多個經空間劃分之核;將該有向非循環圖分成較小圖。 本發明描述一種設備。該設備包含用於編譯針對具有可程式化之模板處理器之一影像處理器之程式碼之構件,該模板處理器由各自二維執行道及移位暫存器電路結構構成。程式碼實施一有向非循環圖且由在該等模板處理器之各自處理器上執行之多個核構成,其中用於編譯之構件包含用於以下之任何者之構件:認識到在程式碼中存在不同於該影像處理器中之模板處理器之數量之核;認識到核之至少一者比核之另一者計算密集;及認識到程式碼具有超過該影像處理器之記憶體容量之資源要求。用於編譯之構件回應於上文之認識之任何者而進一步包含用於執行以下之任何者之構件:核之水平融合;核之垂直融合;核之一者之分裂成多個核;一核之空間劃分成多個經空間劃分之核;將該有向非循環圖分成較小圖。
本申請案主張名稱為「Compiler Techniques For Mapping Program Code To A High Performance, Power Efficient, Programmable Image Processing Hardware Platform」之2016年2月26日申請之美國臨時申請案第62/300,684號之權利,其全部內容以引用的方式併入本文中。
a . 影像處理器硬體架構及操作圖1展示在硬體中實施之一影像處理器之一架構100之一實施例。該影像處理器可由(例如)將針對一模擬環境內一虛擬處理器寫入之程式碼轉換成實際上由硬體處理器執行之程式碼之一編譯器標定。如圖1中所觀察,架構100包含通過一網路104 (例如包含一交換網路晶片、一環狀網路晶片或其他種類之網路之一網路晶片(NOC))互連至複數個模板處理器單元102_1至102_N及對應表單產生器單元103_1至103_N之複數個行緩衝器單元101_1至101_M。在一實施例中,任何行緩衝器單元可通過網路104連接至任何表單產生器及對應模板處理器。 在一實施例中,程式碼經編譯且載入至一對應模板處理器102上以執行先前由一軟體開發者界定之影像處理操作(程式碼亦可(例如)取決於設計及實施方案而載入至模板處理器之相關聯之表單產生器103)。在至少一些例項中,一影像處理管線可藉由以下各者而實現:將一第一管線階段之一第一核程式載入至一第一模板處理器102_1、將一第二管線階段之一第二核程式載入至一第二模板處理器102_2等等,其中第一核執行管線之第一階段之功能、第二核執行管線之第二階段之功能等等且安裝額外控制流程方法以將輸出影像資料自管線之一階段傳遞至管線之下一階段。 在其他組態中,影像處理器可被實現為具有操作相同核程式碼之兩個或兩個以上模板處理器102_1、102_2之一平行機器。例如,可藉由擴展圖框跨越多個模板處理器(其各者執行相同功能)來處理影像資料之一高度密集及高資料速率流。 在其他組態中,基本上核的任何DAG可藉由組態各自模板處理器及其自身之各自程式碼的核且將適當控制流程攔截程式組態至硬體中而載入至硬體處理器上,以將輸出影像自一核引導至DAG設計中之下一核的輸入。 作為一一般流程,影像資料之圖框係由一宏I/O (marco I/O) 單元105接收,且在圖框基礎上被傳遞至一圖框上之行緩衝器單元101中之一或多者。一特定行緩衝器單元將其影像資料之圖框剖析為影像資料之一較小區域(指稱一「線群」),且接著通過網路104將該線群傳遞至一特定表單產生器。一完整或「全」奇異線群可(例如)係由一圖框之多個連續完整列或行的資料構成(為簡明起見,本說明書將主要參考連續列)。表單產生器將影像資料之線群進一步剖析為影像資料之一較小區域(指稱一「表單」),且將該表單呈現給其對應模板處理器。 通常,就一影像處理管線或具有一單一輸入之一DAG流程而言,輸入圖框被引導至將影像資料剖析為線群且將線群引導至表單產生器103_1 (其對應模板處理器102_1執行管線/DAG中之第一核之碼)之相同行緩衝器單元101_1。在由其處理之線群上的模板處理器102_1完成操作之後,表單產生器103_1將輸出線群發送至一「下游」行緩衝器單元101_2 (在一些使用情況中,輸出線群可發送回先前發送輸入線群之相同行緩衝器單元101_1)。 接著,表示在其自身之各自其他表單產生器及模板處理器(例如表單產生器103_2及模板處理器102_2)上執行之管線/DAG中之下一階段/操作的一或多個「消費者」核自下游行緩衝器單元101_2接收由第一模板處理器102_1產生的影像資料。依此方式,在一第一模板處理器上操作之一「生產者」核使其輸出資料遞送至在一第二模板處理器中操作之一「消費者」核,其中該消費者核在該生產者核與總體管線或DAG之設計一致之後執行下一組任務。 一模板處理器102經設計以在影像資料之多個重疊模板上同時操作。該多個重疊模板及模板處理器之內部硬體處理容量有效地判定一表單之大小。此處,在一模板處理器102內,執行道陣列一齊操作以同時處理由多個重疊模板覆蓋之影像資料表面區域。 如下文所更詳細描述,在各種實施例中,影像資料之表單被載入至模板處理器102內之一二維暫存器陣列結構。咸信使用表單及該二維暫存器陣列結構有效地藉由將大量資料移動至大量暫存器空間作為(例如)一單一載入操作來提供電力消耗改良,其中在此之後立即由一執行道陣列直接在資料上執行處理任務。另外,使用一執行道陣列及對應暫存器陣列來提供可易於程式化/組態之不同模板大小。 圖2a至圖2e繪示一行緩衝器單元101之剖析活動、一表單產生器103之細粒狀剖析活動,以及經耦合至表單產生器單元103之模板處理器102之模板處理活動之一高層級實施例。 圖2a描繪影像資料之一輸入圖框之一實施例。圖2a亦描繪一模板處理器經設計以在其上方操作之三個重疊模板202 (各具有3像素x 3像素之一尺寸)之一輪廓。各模板分別產生輸出影像資料的輸出像素係以純黑色顯目顯示。為簡明起見,三個重疊模板202係描繪為僅在垂直方向上重疊。切合地認識到事實上一模板處理器可經設計以使重疊模板係在垂直方向及水平方向兩者上。 由於模板處理器內之垂直重疊模板202 (如圖2a中所觀察),在一單一模板處理器可於其上方操作的圖框內存在影像資料之一寬頻帶。如下文所更詳細討論,在一實施例中,模板處理器依跨越影像資料之一從左至右方式處理其重疊模板內之資料(且接著依自上而下順序對下一行集重複)。因此,當模板處理器繼續推進其操作時,純黑輸出像素塊的數目將水平向右生長。如上文所討論,一行緩衝器單元101負責剖析來自模板處理器足以在其上方操作達一擴展數目個即將到來之循環之一引入圖框之輸入影像資料之一線群。一線群之一例示性描繪被繪示為一陰影區域203。在一實施例中,行緩衝器單元101可被理解用於將一線群發送至一表單產生器/自一表單產生器接收一線群之不同動態。例如,根據一模式(指稱「全組」),影像資料之完整全寬度行係在一行緩衝器單元與一表單產生器之間傳遞。根據一第二模式(指稱「虛高」),一線群初始係與全寬度列之一子集傳遞。接著,剩餘列係呈較小(小於全寬度)片形式依序傳遞。 隨著輸入影像資料之線群203已由行緩衝器單元界定且傳遞至表單產生器單元,表單產生器單元將線群進一步剖析為更精確配合於模板處理器之硬體限制之更細表單。更具體而言,如下文所進一步更詳細描述,在一實施例中,各模板處理器由一二維移位暫存器陣列組成。該二維移位暫存器陣列基本上移位一執行道陣列「下面」之影像資料,其中移位之圖案引起各執行道在其自身之各自模板內之資料上操作(即,各執行道在其自身之資訊道上處理以產生該模板之一輸出)。在一實施例中,表單係「填充」或以其他方式載入至該二維移位暫存器陣列中之輸入影像資料之表面區域。 如下文所更詳細描述,在各種實施例中,實際上存在可依任何循環移位之二維移位暫存器資料之多個層。為方便起見,許多本描述將僅使用術語「二維移位暫存器」及其類似者以指稱具有可移位之二維移位暫存器資料之一或多個此等層之結構。 因此,如圖2b中所觀察,表單產生器剖析來自線群203之一初始表單204且將其提供至模板處理器(此處,資料之表單對應於通常由元件符號204識別之陰影區域)。如圖2c及圖2d中所觀察,模板處理器藉由在表單上依一從左至右方式有效地移動重疊模板202而在輸入影像資料之表單上操作。自圖2d起,一輸出值可自表單內之資料計算之像素之數目耗盡(無其他像素位置可具有自表單內之資訊判定之一輸出值)。為簡明起見,已忽略影像之邊界區域。 接著,如圖2e中所觀察,表單產生器提供模板處理器繼續操作之下一表單205。注意當模板在下一表單上操作時模板之初始位置係自第一表單(如先前在圖2d中所描繪)上之耗盡點至右邊之下一進展。使用新表單205,當模板處理器依相同於第一表單之處理之方式在新表單上操作時,模板將僅繼續移動至右邊。 注意第一表單204之資料與第二表單205之資料之間由於包圍一輸出像素位置之模板之邊界區域而存在一些重疊。可僅由兩次重新傳輸重疊資料之表單產生器處置重疊。在替代實施方案中,為將下一表單饋送至模板處理器,表單產生器可僅繼續將新資料發送至模板處理器且模板處理器再使用來自先前表單之重疊資料。
b . 模板處理器設計及操作圖3展示一模板處理器架構300之一實施例。如圖3中所觀察,模板處理器包含一資料計算單元301、一純量處理器302及相關聯之記憶體303及I/O單元304。資料計算單元301包含一執行道陣列305、一二維移位陣列結構306及與該陣列之特定列或行相關聯之單獨隨機存取記憶體307。 I/O單元304負責將自表單產生器接收之資料之「輸入」表單載入至資料計算單元301中且將來自模板處理器之資料之「輸出」表單儲存至表單產生器中。在一實施例中,將表單資料載入至資料計算單元301中牽涉將所接收之一表單剖析為影像資料之列/行且將影像資料之列/行載入至二維移位暫存器結構306或執行道陣列(下文更詳細描述)之列/行之各自隨機存取記憶體307中。若表單初始載入至記憶體307中,則在適當時(例如當一載入指令恰在表單之資料上操作之前)執行道陣列305內之個別執行道可將表單資料自隨機存取記憶體307載入至二維移位暫存器結構306。在完成將資料之一表單載入至暫存器結構306 (無論直接自一表單產生器或自記憶體307)之後,執行道陣列305之執行道在資料上操作且最終「寫回」已完成之資料作為一表單直接回到表單產生器或隨機存取記憶體307中。若係後者,則I/O單元304自隨機存取記憶體307提取資料以形成接著遞送至表單產生器之一輸出表單。 純量處理器302包含自純量記憶體303讀取模板處理器之程式碼之指令且將指令發佈至執行道陣列305中之執行道之一程式控制器309。在一實施例中,一單一相同指令被廣播至陣列305內之所有執行道,以自資料計算單元301實現一類SIMD行為。在一實施例中,自純量記憶體303讀取且發佈至執行道陣列305之執行道之指令的指令格式包含一非常長指令字(VLIW)類型格式,每個指令包含一個以上運算碼。在一進一步實施例中,VLIW格式包含引導由各執行道之ALU執行之一數學函數(如下文所描述,在一實施例中,其可指定一個以上傳統ALU運算)之一ALU運算碼及一記憶體運算碼(其引導一特定執行道或執行道組之一記憶體運算)兩者。 術語「執行道」指稱能夠執行一指令之一或多個執行單元之一集合(例如可執行一指令之邏輯電路)。然而,在各種實施例中,一執行道可包含恰超出執行單元之更多類處理器功能。例如,除一或多個執行單元之外,一執行道亦可包含解碼所接收之一指令之邏輯電路,或就更多類MIMD設計而言,提取及解碼一指令之邏輯電路。相對於類MIMD方法,儘管本文已主要描述一集中程式控制方法,但可在各種替代實施例中實施一更分佈式方法(例如包含程式碼及陣列305之各執行道內之一程式控制器)。 一執行道陣列305、程式控制器309及二維移位暫存器結構306的組合針對可程式化之功能之一寬範圍提供一廣泛可調適/可組態硬體平台。例如,鑑於個別執行道能夠執行多種功能且能夠容易地存取鄰近任何輸出陣列位置之輸入影像資料,應用軟體開發者能夠程式化具有一廣範圍之不同功能能力以及尺寸(例如模板大小)的核。 除充當由執行道陣列305操作之影像資料之一資料儲存體以外,隨機存取記憶體307亦可保持一或多個查找表。在各種實施例中,一或多個純量查找表亦可被例示於純量記憶體303內。 一純量查找涉及將來自相同查找表之相同資料值自相同指數傳遞至執行道陣列305內之執行道。在各種實施例中,上述VLIW指令格式擴展以亦包含將由純量處理器執行之一查找操作引導至一純量查找表之一純量運算碼。指定與運算碼一起使用之指數可為一立即運算元或自一些其他資料儲存位置提取。無論如何,在一實施例中,自純量記憶體內之一純量查找表之一查找基本上涉及在相同時脈週期期間將相同資料值廣播至執行道陣列305內之所有執行道。下文進一步提供有關查找表之使用及操作的額外細節。 圖3b概述上文所討論之(若干) VLIW指令字實施例。如圖3b中所觀察,VLIW指令字格式包含三個單獨指令之欄位:1)由純量處理器執行之一純量指令351;2)由執行道陣列內之各自ALU依SIMD方式廣播及執行之一ALU指令352;及3)依一部分SIMD方式廣播及執行之一記憶體指令353 (例如若沿執行道陣列中之一相同列的執行道共用一相同隨機存取記憶體,則來自不同列之各者之一執行道實際上執行指令(記憶體指令353之格式可包含識別來自各列之哪個執行道執行指令之一運算元))。 亦包含一或多個立即運算元之一欄位354。可依指令格式識別指令351、352、353之哪個指令使用哪個立即運算元資訊。指令351、352、353之各者亦包含其自身之各自輸入運算元及所得資訊(例如ALU運算之局部暫存器及記憶體存取指令之一局部暫存器及一記憶體位址)。在一實施例中,純量指令351在執行道陣列內的執行道執行其他兩個指令352、353的任一者之前係由純量處理器執行。即,VLIW字之執行包含一第一循環,在第一循環之後執行純量指令351,隨後一第二循環,在第二循環之後可執行其他指令352、353 (注意,在各種實施例中指令352及353可平行執行)。 在一實施例中,由純量處理器執行之純量指令包含被發佈至表單產生器以自資料計算單元之記憶體或2D移位暫存器載入表單/將表單儲存至資料計算單元之記憶體或2D移位暫存器中的命令。此處,表單產生器的操作可取決於行緩衝器單元的操作或防止表單產生器完成由純量處理器發佈之任何命令所耗費之循環之數目之預運行時間理解的其他變數。因而,在一實施例中,其純量指令351對應於或以其他方式引起一命令發佈至表單產生器的任何VLIW字亦包含其他兩個指令欄位352、353中的無操作(NOOP)指令。接著,程式碼進入指令欄位352、353之NOOP指令之一迴路,直至表單產生器完成其自資料計算單元之載入/儲存至資料計算單元。此處,一旦發佈一命令至表單產生器,純量處理器可設定在完成該命令之後表單產生器重新設定之一互鎖暫存器之一位元。在NOOP迴路期間,純量處理器監視該互鎖暫存器之該位元。當純量處理器偵測到表單產生器已完成其命令時,正常執行再次開始。 圖4展示一資料計算組件401之一實施例。如圖4中所觀察,資料計算組件401包含經邏輯定位於一二維移位暫存器陣列結構406「上方」之一執行道陣列405。如上文所討論,在各種實施例中,由一表單產生器提供之影像資料之一表單被載入至二維移位暫存器406中。接著,執行道在來自暫存器結構406之表單資料上操作。 執行道陣列405及移位暫存器結構406被固定在相對於彼此之位置中。然而,移位暫存器陣列406依一策略及協調方式移位,以引起執行道陣列中之各執行道處理資料內之一不同模板。因而,各執行道判定所產生之輸出表單中之一不同像素的輸出影像值。自圖4之架構應清楚重疊模板不僅是垂直配置且亦是水平配置,此係由於執行道陣列405包含垂直相鄰執行道以及水平相鄰執行道。 資料計算單元401之一些顯著架構構件包含具有比執行道陣列405寬之尺寸之移位暫存器結構406。即,執行道陣列405外部存在暫存器之一「光暈」409。儘管光暈409展示成存在於執行道陣列之兩側上,但依據實施方案,光暈可存在於執行道陣列405之較少(一)或較多(三個或四個)側上。當資料在執行道405「下面」移位時光暈409用以針對溢出執行道陣列405之界限外部之資料提供「溢出」空間。作為一簡單情況,居中於執行道陣列405之右邊緣上之一5x5模板在處理模板之最左邊像素時將需要較遠離右邊之四個光暈暫存器位置。為了易於繪示,在一標稱實施例中,當任一側上之暫存器(右、底)將具有水平連接及垂直連接兩者時,圖4將光暈之右側之暫存器展示為僅具有水平移位連接且將光暈之底側之暫存器展示為僅具有垂直移位連接。在各種實施例,光暈區域不包含用於執行影像處理指令(例如不存在ALU)之對應執行道邏輯。然而,個別記憶體存取單元(M)出現在光暈區域位置之各者中使得個別光暈暫存器位置可個別地自記憶體載入資料及將資料儲存至記憶體。 額外溢出空間由耦合至陣列中之各列及/或各行或其部分之隨機存取記憶體407提供(例如一隨機存取記憶體可指派至橫跨4個執行道逐列及2個執行道逐行之執行道陣列之一「區域」。為簡明起見,應用之其餘部分將主要指稱基於列及/或行之分配方案)。此處,若一執行道之核運算要求其處理二維移位暫存器陣列406之外部之像素值(一些影像處理常式可需要像素值),則影像資料之平面能夠進一步自(例如)光暈區域409溢出至隨機存取記憶體407。例如,考量一6X6模板,其中硬體僅包含執行道陣列之右邊緣上之一執行道右邊之四個儲存元件之一光暈區域。在此情況中,資料將需要進一步移位至光暈409之右邊緣之右邊以完全處理模板。接著,在光源區域409外部移位之資料溢出至隨機存取記憶體407。下文進一步提供隨機存取記憶體407及圖3之模板處理器之其他應用。 圖5a至圖5k表明其中影像資料在執行道陣列「下面」之二維移位暫存器陣列內移位之方式之一工作實例,如上文所提及。如圖5a中所觀察,一第一陣列507中描繪二維移位陣列之資料內容且執行道陣列由一圖框505描繪。另外,簡單描繪執行道陣列內之兩個相鄰執行道510。在此簡單描繪510中,各執行道包含可自移位暫存器接受資料、自一ALU輸出接受資料(例如充當跨越循環之一累積器)或將輸出資料寫入一輸出目的地中之一暫存器R1。 各執行道在一局部暫存器R2中亦具有二維移位陣列中其「下面」之可用內容。因此,R1係執行道之一實體暫存器而R2係二維移位暫存器陣列之一實體暫存器。執行道包含可在由R1及/或R2提供之運算元上操作之一ALU。如下文所進一步更詳細描述,在一實施例中,移位暫存器實際上每個陣列位置實施多個儲存/暫存器元件(之一「深度」)但移位活動受限於儲存元件之一平面(例如每個循環僅可移位儲存元件之一平面)。圖5a至圖5k將此等較深暫存器位置之一者描繪為用以儲存來自各自執行道之所得X。為了易於繪示,並排而非在其相對暫存器R2下面繪製所得較深暫存器。 圖5a至圖5k聚焦於兩個模板之計算,其中中央位置與執行道陣列內之描繪之該對執行道位置511對準。為了易於繪示,當事實上,根據以下實例,該對執行道510係垂直相鄰時,該對執行道510繪製為水平相鄰。 如圖5a中最初所觀察,執行道居中於其中央模板位置上。圖5b展示由兩個執行道執行之目標碼。如圖5b中所觀察,兩個執行道之程式碼引起移位暫存器陣列內之資料向下移位一位置及向右移位一位置。這使得兩個執行道與其各自模板之左上角對準。接著,程式碼引起位於(在R2中)其各自位置中之資料載入至R1中。 接著,如圖5c中所觀察,程式碼引起該對執行道將移位暫存器陣列內之資料移位一個單位至左邊,其引起各執行道之各自位置右邊之值移位至各執行道之位置。接著,R1中之值(先前值)新增已移位至執行道之位置(R2中)之新值。所得寫入R1中。如圖5d中所觀察,重複如上文針對圖5c所描述之相同程序,其引起所得R1現在上執行道中包含值A+B+C且在下執行道中包含值F+G+H。此時,兩個執行道均已處理其各自模板之上列。注意溢出至執行道陣列之左側上之一光暈區域(若一光暈區域存在於左手側)或溢出至隨機存取記憶體(若一光暈區域不存在於執行道陣列之左手側)。 接著,如圖5e中所觀察,程式碼引起移位暫存器陣列內之資料向上移位一個單位,其引起兩個執行道與其各自模板之中間列之右邊緣對準。兩個執行道之暫存器R1當前包含模板之頂列及中間列之最右值之加總。圖5f及圖5g表明跨越兩個執行道之模板之中間列按左移動之繼續進度。累加繼續使得圖5g之處理最後兩個執行道均包含其各自模板之頂列及中間列之值之加總。 圖5h展示用於使各執行道與其對應模板之最下列對準之另一移位。圖5i及圖5j展示繼續移位以完成兩個執行道之模板之進程上方之處理。圖5k展示用於使各執行道與其在資料陣列中之正確位置對準且將所得寫入資料陣列中之額外移位。 在圖5a至圖5k之實例中,注意移位運算之目標碼可包含識別以(X, Y)座標表達之移位之方向及量值之一指令格式。例如,一向上移位達一位置之目標碼在目標碼中可表達為SHIFT 0, +1。作為另一實例,一向右移位達一位置在目標碼中可表達為SHIFT +1, 0。在各種實施例中,較大量值之移位亦可在目標碼中指定(例如SHIFT 0, +2)。此處,若2D移位暫存器硬體僅支持每個循環移位達一位置,則指令可由機器解譯為需要多個循環執行或2D移位暫存器硬體可經設計以支持每個循環移位達一個以上位置。下文進一步更詳細描述後者之實施例。 圖6展示陣列執行道及移位暫存器結構(光暈區域中之暫存器不包含一對應執行道)之單位晶胞之另一更詳細描述。在一實施例中,執行道及與執行道陣列中之各位置相關聯之暫存器空間藉由將圖6中觀察之電路例示於執行道陣列之各節點處來實施。如圖6中所觀察,單位晶胞包含耦合至由四個暫存器R2至R5組成之一暫存器檔案602之一執行道601。在任何循環期間,執行道601可自暫存器R1至R5之任何者讀取或寫入暫存器R1至R5之任何者。對於需要兩個輸入運算元之指令,執行道可自暫存器R1至R5之任何者擷取運算元之兩者。 在一實施例中,二維移位暫存器結構由以下實施:在一單一循環期間,允許暫存器R2至R4之(僅)一者之任何者之內容通過輸出多工器603移「出」至其相鄰之暫存器檔案之一者且使自其鄰居之一對應者通過輸入多工器604移「入」之內容替代暫存器R2至R4之(僅)一者之任何者之內容使得鄰居之間的移位在一相同方向上(例如所有執行道向左移位、所有執行道向右移位等等)。儘管常見的係一相同暫存器使其內容移出且替代為依一相同循環移入之內容,但多工器配置603、604在一相同循環期間允許一相同暫存器檔案內之不同移位源及移位目標暫存器。 如圖6中所描繪,注意在一移位序列期間,一執行道將內容自其暫存器檔案602移出至其左鄰、右鄰、頂鄰及底鄰之各者。結合相同移位序列,執行道亦將內容自其左鄰、右鄰、頂鄰及底鄰之一特定者移入其暫存器檔案中。再次,移出目標及移入源應與所有執行道之一相同移位方向一致(例如若移出至右鄰,則移入應自左鄰)。 儘管在一實施例中,每個循環每個執行道僅允許移位一暫存器之內容,但其他實施例可允許移入/出一個以上暫存器之內容。例如,若圖6中觀察之多工器電路603、604之一第二例項併入圖6之設計,則兩個暫存器之內容可在一相同循環期間移入/出。當然,在其中每個循環僅允許移位一暫存器之內容之實施例中,可藉由針對數學運算之間的移位消耗更多時脈週期而在數學運算之間發生自多個暫存器之移位(例如兩個暫存器之內容可藉由在數學運算之間消耗兩個移位運算而在數學運算之間移位)。 若小於一執行道之暫存器檔案之全部內容在一移位序列期間移出,則注意各執行道之未移出暫存器之內容保留在適當位置(未移位)。因而,任何未被替代為移入內容之任何未移位內容跨越移位循環保留在執行道局部。格執行道中之所觀察之記憶體單元(「M」)用以自與執行道陣列內之執行道之列及/或行相關聯之隨機存取記憶體空間載入資料/將資料儲存至與執行道陣列內之執行道之列及/或行相關聯之隨機存取記憶體空間。此處,M單元充當一標準M單元,其係因為M單元用以載入/儲存無法自執行道之自身之暫存器空間載入/儲存至執行道之自身之暫存器空間之資料。在各種實施例中,M單元之主要操作係將資料自一局部暫存器寫入記憶體中且自記憶體讀取資料且將其寫入一局部暫存器中。 相對於由硬體執行道601之ALU單元支持之ISA運算碼,在各種實施例中,由硬體ALU支持之數學運算碼一體地與一虛擬執行道支持之數學運算碼(例如ADD、SUB、MOV、MUL、MAD、ABS、DIV、SHL、SHR、MIN/MAX、SEL、AND、OR、XOR、NOT)並列(例如實質上相同於)。如上文剛描述,記憶體存取指令可由執行道601執行以自其相關聯之隨機存取記憶體提取資料/將資料儲存至其相關聯之隨機存取記憶體。另外,硬體執行道601支持移位運算指令(右、左、上、下)以在二維移位暫存器結構內移位資料。如上文所描述,程式控制指令由模板處理器之純量處理器大規模執行。
c . 影像處理器及行緩衝器單元操作之組態圖7展示包含一虛擬影像處理環境701、實際影像處理硬體703及用於將針對虛擬處理環境701寫入之較高階程式碼平移至實體執行之實際硬體703之目標碼之一編譯器702之一影像處理器技術平台之一高階視圖。如下文中所更詳細描述,就可開發且經調整以使一應用之構成程序易於可視化之應用而言,虛擬處理環境701係廣泛多功能。在由開發者704完成程式碼開發努力之後,編譯器702將寫入虛擬處理環境701內之碼平移至針對實際硬體703之目標碼。 在各種實施例中,針對硬體平台寫入之程式碼與包含一指令集之一唯一虛擬碼一起寫入,該指令集具有其指令格式將輸入及輸出陣列位置識別為(例如) X,Y座標之載入及儲存指令。在各種實施例中,X,Y座標資訊實際上可程式化為硬體平台且由其組件之各種組件辨識/理解。除(例如)將X,Y座標(例如在編譯器內)轉換成不同資訊之外,這保持不變。例如,就模板處理器內之二維移位暫存器結構而言,X,Y座標資訊轉換成暫存器移位移動。相比而言,硬體平台之其他部分具體而言可接收及理解原始依較高虛擬碼層級表達之X,Y座標資訊。 如圖8中所觀察,一程式碼開發者將資料位置表達為具有虛擬碼層級801處之特殊指令格式之X,Y座標。在編譯階段期間,虛擬碼轉換成實際上由硬體(目標碼)處理之程式碼及載入至硬體之組態(例如暫存器)空間之對應組態資訊。如圖8中所觀察,在一實施例中,一特定核之目標碼載入至模板處理器之純量處理器805之程式空間。 作為組態程序之部分,在純量處理器805上執行之組態軟體將適當組態資訊811、812載入至耦合至模板處理器802之表單產生器單元803及將用於產生模板處理器802操作之新表單或接收由模板處理器802產生之處理表單之行緩衝器單元801兩者。通常,此處,就一總體影像之X,Y座標而言仍可預期表單。即,一旦界定圖框之一影像(例如就每列之像素之數目、列之數目、每行之像素之數目及行之數目而言),影像之任何部位或位置仍可使用X,Y座標指稱。 因而,在各種實施例中,表單產生器單元803及行緩衝器單元801之任一者或兩者經組態在其各自組態空間806、807內具有資訊811、812,組態空間806、807建立在X,Y座標中識別一影像或圖框之具體位置及/或區域(例如線群、表單)之一資訊平台。在各種實施方案/用途中,X,Y座標可為依虛擬碼層級表達之相同X,Y座標。 此資訊之實施例包含(例如)行緩衝器單元中之線群之數目、各線群之影像大小(例如四個X, Y座標(各角一個X, Y座標)之一集合或一對X, Y座標(一個X, Y座標用於一下較近角且一個X, Y座標用於一上較遠角))或絕對影像寬度及影像高度、模板大小(表達為界定一單一模板及/或模板處理器之重疊模板之區域之大小之X, Y值)、表達及/或線群大小(例如同樣就一影像大小而言指定但具有較小尺寸)等等。相應地,行緩衝器單元701可經程式化具有諸如生產者核寫入之數目及讀取由行緩衝器單元801管理之線群之消費者核之數目之額外組態資訊。與影像資料相關聯之通道及/或尺寸之數目通常亦包含為組態資訊。 圖9a描繪使用X, Y座標以界定(僅作為一實例)一影像內之線群。此處,在一影像901內可觀察到N個線群901_1、901_2、…901_N。如自圖9a可見,各線群可易於藉由參考界定(例如)一線群之角點之一或多者之影像內之X, Y座標而界定。因而,在各種實施例中,一線群之名稱或用以界定一特定線群之其他資料結構可包含與該線群相關聯之X, Y座標位置以特定識別該線群。 簡單返回參考圖8,注意圖8展示在運行時間期間,一表單產生器803可藉由(例如)包含界定所要資料區域之X, Y座標資訊而自行緩衝器單元801請求一「下一」線群(或一線群之部分)。圖9a展示僅由影像資料之完成列構成之標稱「全寬」線群。在指稱「虛高」之一替代組態中,行緩衝器單元801最初僅通過一線群之一第一上部分作為影像資料之全寬列。接著,該線群之後續下列由小於一全寬列且經單獨請求之連續塊中之表單產生器請求。因而,有表單產生器實行多個請求以獲得全線群。此處,各此請求可由可歸因於下一部分之X, Y座標界定該下一部分。 如圖9b中所觀察,一行緩衝器單元包含其中儲存線群902_1至902_N (例如靜態或動態隨機存取記憶體(SRAM或DRAM))之記憶體901。記憶體901可在晶片上以及實施該行緩衝器單元(及(例如)表單產生器及模板處理器)之相同電路上或晶片外實施。圖9b展示產生及消耗記憶體901內之一特定影像/圖框之線群902_1至902_N之各種核之間的活動。 如圖9b中所觀察,一生產者核K1將新線群發送至行緩衝器單元901以經由單獨時間點P1、P2至PN儲存在記憶體901中。生產者核K1在產生資料之新表單之一模板處理器上執行。耦合至該模板處理器之表單產生器累積表單以形成線群且將線群遞送至將線群儲存在記憶體中之行緩衝器單元。 亦如圖9b中所描繪,存在在由生產者核K1產生之線群902_1至902_N上操作之兩個消費者核K2、K3。此處,消費者核K2、K3分別在時間C21及C31處接收第一線群902_1。顯然,時間間C21及C31在時間P1之後出現。其他限制可不存在。例如,時間C21及/或C31可在時間P2至PN之任何者之前或之後出現。此處,核K2及K3之各自表達產生器在適於其各自核之一時間處請求下一線群。若核K2、K3之任何者在時間P1之前請求線群902_1,則請求閒置直至線群902_1實際上已寫入記憶體901中之後。 可想到的是,針對所有線群902_1至902_N之來自核K2及K3之任一者或兩者可在時間P1之前到達。因此,線群可由消費者核隨時請求。然而,當線群請求其經受生產者核K1可生產線群之速率時將線群遞送至消費者核。在各種實施例中,消費者核依序請求線群且同樣地依序接收線群(核K2在時間C22至C2N中依序接收線群902_2至902_N)。為簡明起見,針對一特定線群僅描繪一生產者核。可想到的是各種實施例可經設計以允許不同生產者寫入一相同線群(例如其中不允許服務消費者直至所有生產者已寫入線群之後)。 在其中不存在生產者核(因為(若干)消費者核係處理器之DAG處理流程中之第一核)之情況中,影像資料之圖框可轉移至記憶體901 (例如經由直接記憶體存取(DMA)或自一相機)且剖析為線群。在其中不存在(若干)消費者核(因為生產者核係處理器之總體程式流程中之最後核)之情況中,所得線群可組合以形成輸出圖框。
d . 核之應用及結構圖10a展示寫入虛擬環境內之應用軟體可採用之結構及形式之一實例。如圖10a中所觀察,程式碼可預期處理輸入影像資料1001之一或多個圖框以在輸入影像資料1001上實現一些總體轉換。使用依由開發者表達之一編排次序在輸入影像資料上操作之程式碼1002之一或多個核之操作實現。 例如,如圖10a中所觀察,總體轉換由首先使用一第一核K1處理各輸入影像實現。接著,由核K1產生之輸出影像由核K2操作。接著,由核K2產生之輸出影像之各者由核K3_1或K3_2操作。接著,由(若干)核K3_1/K3_2產生之輸出影像由核K4操作。核K3_1及K3_2核為經設計以藉由在K3階段中施加平行處理而使總體處理加速之相同核或可為不同核(例如核K3_1在一第一特定類型之輸入影像上操作而核K3_2在一第二不同類型之輸入影像上操作)。 因而,較大總體影像處理序列可呈一影像處理管線或一有向非循環圖(DAG)且因而開發環境可經配備實際上防止具有程式碼之一表示之開發者開發(此處一管線被理解為一DAG之一形式)。核可由個別地由一開發者開發及/或可由供應任何底層技術(諸如實際信號處理器硬體及/或其之一設計)之一實體及/或由一第三方(例如針對開發環境寫入之核軟體之一供應商)提供。因而,預期一標稱開發環境將包含開發者以各種方式自由「連接」以影響其較大開發努力之總體流程之核之一「程式庫」。預期為此一程式庫之部分之一些基本核可包含用以提供以下基本影響處理任務之任一者或多者之核:卷積、去雜質、色空間轉換、邊緣及角偵測、銳化、白色平衡、伽馬(gamma)校正、色調映射、矩陣乘法、影像校準、金字塔結構、小波轉換、區塊化離散餘弦及傅立葉(Fourier)變換。 如上文所討論,在各種實施例中,各核在其自身之模板處理器上運行。例如,參考圖10a,核K1在一第一模板出處理器上運行,核K2在一第二模板處理器上運行等等。另外,如上文所討論,產生及消耗核通過行緩衝器單元介接。 圖10b描繪影像處理器可經組態以實施圖10a之DAG流程之方式。如圖10b中所觀察,行緩衝器單元1001_1 (LBU_1)接收影像流且將所接收之圖框剖析為線群。交換網路經組態以將線群自LBU_1路由至其上執行核K1之一第一模板處理器1002_1。來自核K1之輸出影像格式化為線群且遞送至一第二行緩衝器單元1001_2 (LBU_2)。接著,此等線群遞送至其上執行核K2之一第二模板處理器。 自圖10a,影像資訊可自核K2「分裂」成核K3_1或K3_2之任一者。此處,例如,核K3_1及K3_2可處理與經處理之總體影像相關聯之不同通道。例如,核K3_1可處理紅色(R)影像而核K3_2可戳綠色(G)及藍色(B)影像。替代地,K3_1可處理虛擬影像而核K3_2可處理深度影像(例如自飛行時間深度成像相機取得以及虛擬影像)。無論如何,影像之所有通道由核K1及K2處理但影像之不同通道使用不同核K3_1及K3_2處理。另外,核K3_1及K3_2可為相同(例如極度計算密集)程式碼之單獨例項且兩個模板處理器用以藉由平行執行K3功能而使之加速。 無論如何,前述「分裂」引起來自核K2之一些線群影像資訊緩衝至一第三行緩衝器單元1001_3 (LBU_3)且來自核K2之其他線群影像資訊緩衝至一第四行緩衝器單元1001_4 (LBU_4)。在LBU_3行緩衝器單元中緩衝之線群遞送至其上執行核K3_1之一第三模板處理器1002_3。在LBU_4行緩衝器單元中緩衝之線群遞送至其上執行核K3_2之一第四模板處理器1002_4。來自核K3_1及K3_2之輸出線群分別在第五及第六行緩衝器單元1001_5 (LBU_5)、1001_6 (LBU_6)中緩衝。接著,來自LBU_5及LBU_6行緩衝器單元之線群傳遞至執行核K4之一第五模板處理器1002_5。注意分裂線群在第五模板處理器1002_5處再次合併。 圖11a及圖11b係關於一更直接管線方法,其中各模板處理器自前一階段接收一線群且針對一後一階段提供一線群。具體而言,行緩衝器單元1101_1 (LBU_1)、1101_2 (LBU_2)、1101_3 (LBU_3)、1101_4 (LBU_4)分別饋送分別執行核K1、K2、K3及K4之模板處理器1102_1、1102_2、1102_3、1102_4。模板處理器1102_1、1102_2、1102_3、1102_4亦分別饋送行緩衝器單元1101_2 (LBU_2)、1101_3 (LBU_3)、1101_4 (LBU_4)、1101_5(LBU_5)。 圖11c展示基本上平行執行兩個管線(K1-K3-…)及(K2-K4-…)之另一管線方法。此組態可用以通過平行執行(例如核K1及K2相同,且核K3及K4相同)使一管線加速或取決於影像資料內文使用兩個不同管線(例如一管線處理一種通道且另一管線處理另一種通道)。 在圖11a、圖11b及圖11c之各者中,注意需要對連接網路1004/1104實行不同組態以將模板處理器依適當方式連接至源及匯線群。 在各種實施例中,影像處理器包含適當組態空間(例如使用組態暫存器及/或隨機存取記憶體(諸如純量處理器之純量記憶體)),其中保持組態資訊以實施一萬個各種組態之任何者(例如DAG、影像處理管線)。一些例示性組態參數包含:1)源影像之數目(自(例如)一相機或一較大電腦系統之主記憶體串流至系統之源影像圖框之數目);2)線群之數目(用於組態至系統中之行緩衝器單元內之線群之總數);3)主動模板處理器之數目(系統中之主動模板處理器之總數);4)每個模板處理器之輸入線群之數目(一模板處理器可處置一個以上輸入影像圖框,Num_Input_LGs_perStencil基本上指示模板處理器將處置多少不同輸入影像圖框);5)每個模板處理器之輸出線群之數目(一模板處理器可處置一個以上輸出影像圖框,Num_Output_LGs_perStencil基本上指示模板處理器將處置多少不同輸出影像圖框);6)每個線群之消費者之數目(對於經組態用於各行緩衝器單元中之各線群,Num_Cons_per_LG指示線群具有多少消費者)。其他類型之組態資訊可基於上文所描述之系統之特徵、結構或操作之任何者而由系統接受。
e . 自動 DAG/ 管線碼重構程序使用影像處理器組態之前述基本原理及先前章節中描述之操作,本發明描述一編譯器可對核之一DAG執行以實現DAG之較高效率總體實施方案之特定重構程序。如上文所提及,一管線被理解為DAG之一形式。 此處,編譯器可經程式化以辨識某些無效率或否則成問題之DAG結構且自動重構DAG以減少無效率及/或減輕問題。在各種實施例中,一軟體程式開發工具可允許一程式開發者提供一編譯器可用以對下文進一步描述之程式碼執行一或多個轉換以解決無效率之提示。 可由編譯器偵測或回應之一DAG中之無效率或問題之實例包含(但不限於):1)相較於DAG中之其他核計算上尤其更複雜之一核;2)含有比影像處理器中之模板處理器多或少之核之一DAG;3)有限行緩衝器單元記憶體空間及/或有限指令記憶體空間。圖12a/b/c至圖16描述一編譯器可經設計以回應於此等無效率/問題而實施之一些可能重構。 圖12a及圖12b係關於「水平融合」碼重構。就水平融合而言,如圖12a中所觀察,一DAG之多個核(例如來自一相同核之各流程)合併成一單一核。此處,圖12a展示具有單獨K2及K3核之一原始碼序列1201。在由編譯器重構之後,產生一新碼序列1202,其中核K2及K3組合成一單一核K2/K3。 水平融合可由一編譯器回應於(例如) DAG/管線中存在相較於其他核之較小核而執行。此處,核之融合將產生在大小/計算強度上更可比於其他核之一較大核。替代地或組合,編譯器可回應於原始DSG存在比模板處理器多之核而執行水平融合。此處,融合將減少DAG中之核之總數(理想地,以不再超過影像處理器中之模板處理器之數目)。 在各種實施例中,水平融合合併獨立於彼此之多個核之程式碼(例如獨立於經合併之兩個核,一第一核不接受作為由一第二核產生之一輸入資訊)。另外,水平融合之核可自一相同核接收輸入資訊及/或提供由一相同核消耗之輸出資訊。前者在圖12a中繪示,其中融合核K2及K3均自核K1接受輸入資訊。 圖12b展示水平融合之實施方案之一實施例。此處,新構造之K2/K3核設計為經融合之核之一級聯。即,在圖12b之實施例中,新核K2/K3由恰在核K2之程式碼執行之後開始執行之核K3之程式碼構成(1203)。顯著地,新核K2及K3接受相同於核K2及K3之組合之輸入資訊且提供相同於核K2及K3之組合之輸出資訊。再次,輸入可自相同或不同行緩衝器單元接收且輸出可將其各自輸出提供至相同或不同行緩衝器單元。 此處,參考圖12a,若核K1產生用於兩個不同行緩衝器單元之行緩衝器資料(饋送K2之一第一行緩衝器單元及饋送K3之一第二行緩衝器單元),則不需要改變程式流程(核K2/K3之K2部分自產生K2之行緩衝器單元讀取而核K2/K3之K3部分自產生K3之行緩衝器單元讀取)。若兩個核K2及K3均為來自核K1之相同資料之消費者(即核K1僅寫入一行緩衝器單元且K2及K3兩者自該行緩衝器單元讀取),則再次不需要改變程式之資料流程。在此情況中,核K2/K3之K2及K3部分兩者自相同行緩衝器單元消耗。一相似類比應用於核K2/K3之(若干)輸出行緩衝器單元。 在各種實施例中,編譯器應意識到融合核據此操作之空間速率(每個核調用處理之像素)。此處,經融合之核可不必要依相同於原始寫入之速率操作。例如,由於影像解析度中之差異,所以核在執行器各自演算法時不消耗相同數目之循環。例如,一向下取樣核可必須通過需要比未向下取樣之另一核多之二維移位暫存器移位運算之一較寬影像區域操作。 因此,向下取樣核在其完成之前消耗比未向下取樣之核多之調用。例如,向下取樣核可在其完成之前消耗16個循環而非向下取樣核僅可消耗4個循環。完成速率中之差異可引起時序問題,其中行緩衝器單元預期每次完成之循環在整個一核之運行長度上恆定。因此,編譯器修改(若干)核之碼使得其消耗約一相同數目個循環以完全執行器各自演算法。藉此,行緩衝器被免於必須在中間核執行期間調整為一顯著不同之核演算法完成速率。 因此,在一實施例中,編譯器將一或多個迴路添加至每次完成消耗較少循環之一核以引起該核(例如)每次完成消耗相同於每次完成消耗較多循環之一核之數目之循環。例如,在前述實例中,非向下取樣之核將經修改以在其完成之前貫穿其演算法之四個迴路。儘管相較於一執行運行之其原始版本,資料由經修改之核產生四次,但經修改之核將在其完成之前消耗16個循環(其相同於向下取樣核)。可想到的是編譯器可修改一個以上核之速率以達到所有核可匹配速率之循環之一共同支配者。 圖13a至圖13c係關於垂直融合。就垂直融合而言,如圖13a中所觀察,一生產者/消費者關係存在於經融合之核之間。例如,如圖13a中所觀察,核K1係核K2之一生產者(核K2係核K1之一消費者)。在由核重構之後,產生一新核K1/K2,其執行融合核K1及K2之功能。 圖13b展示該新核之構造。此處,消耗核K2在核K1實現正確生產者/消費者關係之後級聯。新核K1/K2之輸入對應於核K1之輸入且新核K1/K2之輸出對應於核K2之輸出。編譯器可決定(例如)回應於經融合之核在計算上不如DAG中之其他核複雜及/或DAG中存在比影像處理器內之模板處理器多之核而施加垂直融合。 就垂直融合而言,若一垂直融合之核需要光暈區域以執行其(若干)任務,則可出現任何問題。自以上圖4之討論回憶在各種實施例中,一模板處理器內之二維移位暫存器之尺寸可容納延伸出其中儲存輸出像素值之區域外部之一光暈區域409。 此處,若一垂直融合之核之消耗核部分需要光暈區域中之內容,則其無法立即在產生核部分之輸出上操作。即,由一生產者產生之輸出資料將保持在執行道「下面」且將不延伸至光暈區域。若消耗核部分需要光暈區域中之影像資料,則光暈資料在消耗核部分在在自生產者部分獲得一輸出之後立即在該輸出上開始操作時將不可用。 一解決方案係延遲消耗核部分之起始以確保在消耗核開始操作時光暈區域資料已由生產者核部分產生。圖13c展示該解決方案之一例示性描繪。此處,邊界區域1301對應於生產者核部分之執行道區域且邊界區域1302對應於駐留在生產者核部分之執行道區域1301外部之光暈區域。 相比而言,邊界區域1303對應於消耗核部分在生產者核部分已在區域1301內產生輸出之後操作之執行道區域。邊界區域1304對應於駐留在消費者核部分之執行道區域1303周圍之光暈區域。圖13c假定模板處理依一從左至右方式沿表單之一相同列在表單上操作直至在處理將開始下一列表單之時間處完成該列表單之處理。 存在於區域1301與1303之間的偏移或相差可藉由延遲消耗核部分之起始直至輸出由可用於消耗核部分且具有圖13c中所觀察之相對定位偏移之產生核部分產生而故意施加。顯著地,由於此偏移,所以已由生產者核產生且可用於消耗核部分之影像資料輸出不僅「填充」消耗核部分之之執行道區域1303亦「填充」其光暈區域1304。因而,消耗核部分具有適當計算區域1303之輸出值所需之資料且在試圖K1之下一運行之前可允許其後接著K2之K1之級聯操作。 在一標稱實施例中,一生產者核將其輸出資料寫入一行緩衝器單元中且消耗核自相同行緩衝器單元讀取資料。然而,由於生產及消耗核部分現經融合且在相同模板處理器上執行,所以由生產核部分產生之輸出資料可保持在模板處理器局部(例如在模板處理器RAM 407及/或表單產生器記憶體內)而非寫回行緩衝器單元。因而,消耗核部分代以自位於模板處理器局部之記憶體讀取輸出資料而非自一行緩衝器單元讀取資料。 因此,可避免一模板處理器與一行緩衝器單元之間的整個寫/讀序列。在其中存在未與生產核部分融合之生產核部分之輸出之其他消費者之實施例中,生產核部分之輸出在外部寫入一行緩衝器單元使得外部消耗核可接收生產者之資料。 圖13c亦展示因相似原因,實際上由模板處理器處理之影像資料之尺寸超過經處理之影像之尺寸。具體而言,額外空間區域1305、1306由生產者核處理使得生產者核部分可產生消費者核部分需要之光暈資料。 圖14描繪可指稱一「分裂裂開」之另一限制。就一分裂裂開而言,一較大核破裂為多個較小核。例如,如圖14中所觀察,具有子圖A至F一大初始核K破裂為兩個核K1及K2,其中新核K1包含子圖A至D且新核K2含有子圖E及F。若(例如)經分裂之核K比DAG中之其他核計算密集及/或其指令佔據面積太大而無法適合於模板處理器指令記憶體,則一分裂裂開可由一編譯器施加。 作為重構之部分,注意「store_sheet」命令/指令及「load_sheet」命令/指令新插入其中較大核碼分裂之接點處之總體碼中。具體而言,自圖14之實例觀察到較大核K在接點1401處分裂,注意子圖D之輸出經修改以儲存資訊之一表單且子圖E之輸入經修改以載入資訊之一表單。 如上文所詳細討論,由於一模板處理器內存在二維移位存取陣列,所以影像資料之一表單係一核之基本輸入資料結構及輸出資料結構。因而,在一核可在資料之一表單上操作之前,其必須首先將資料之該表單載入至該模板處理器之二維暫存器空間。同樣地,當一核已完成其核心演算法之一執行時,該核將其資料之輸出表單自二維移位暫存器寫入至模板處理器RAM及/或表單產生器RAM中。 與此等基本資料結構要求一致,施加一分裂裂開之部分係一新產生之核輸出(圖14中之子圖D之輸出)及一新產生之核輸入(圖14中之子圖E之輸入)。前者需要用以自二維移位暫存器陣列寫入輸出之一表單之一儲存表單命令而後者需要用以將輸入資料之一表單讀取至二維移位暫存器陣列之一載入表單命令。注意Store_Sheet及Load_Sheet命令亦對應於一核與一行緩衝器單元之間的通信(行緩衝器由多個表單構成)。因而,儘管在分裂之前子圖D未直接饋送一行緩衝器單元,但在分裂之後子圖D直接饋送一行緩衝器單元。同樣地,儘管在分裂之前子圖E未自一行緩衝器單元直接接收,但在分裂之後子圖E自一行緩衝器單元直接接收。 在一實施例中,編譯器經設計以在一區域或較大核K中施加分裂接點1401使得新產生之單獨核K1、K2將在大小/計算強度上大約相等。在一些例項中,此可引起編譯器通過一反復迴路施加分裂接點1401。例如,子圖D及E可實施一迴路,其中程式流程自子圖E流回子圖D直至完成該迴路。 在其中分裂接點1401通過一迴路切割之情況中,編譯器額外修改程式碼使得該迴路自身分裂。此處,注意圖14中所觀察之分裂裂開1401基本上產生具有一生產者/消費者關係之新核。即,新產生之核K2自核K1將其寫入輸出行緩衝器之一行緩衝器單元讀取由核K1產生之行緩衝器。因而,循環之導前迴路由K1執行而循環之尾接迴路由K2執行。 在另一實施例中,編譯器不試圖分裂在先前反復及下一反復之間具有一資料相依性且代以保持一相同核內之一迴路之完整性。因而,出現迴路可影響編譯器選擇在何處施加分裂接點1401 (在迴路周圍替代通過迴路)。 圖15描繪指稱「空間劃分」之另一編譯器重構程序。如圖15中所觀察,空間劃分牽涉將原始設計以在一較大影像上操作之一核複製為經設計以僅在該影像之一部分上操作之相同核心演算法之多個核。 此處,在圖15之例示性描繪中,原始核K1經設計以在整個影像1501上操作。編譯器基本上複製核1使得DAG包含K1之碼之兩個例項K1_1及K1_2。編譯器進一步修改新產生之核之基底K1碼以僅指稱假定處理之影像之部分。在圖15之實例中,核K1_1僅在影像之左半部1501_1上操作而核K1_2僅在影像1501之右半部1501_2上操作。 因而,編譯器將重構核K1_1之核碼以僅請求駐留在影像1501之左半部1501_1內之行緩衝器資料且將重構核K1_2之碼以僅請求駐留在影像1501之右半部1501_2內之行緩衝器資料。回憶核軟體可藉由指稱為其X, Y座標而請求一行緩衝器,在各種實施例中,編譯器之核K1及K2之重構牽涉對行緩衝器請求重訂格式以指定對應於核假定處理之影像之部分之座標。 例如,核K1_1將避免請求橫跨整個影像之寬度之座標而一旦已接收足以處理影像之左半部1501_1則輸入行緩衝器資料代以請求影像資料之下一下列。同樣地,當起始處理行緩衝器資料之下一下列時,核K1_2將具有對應於影像之頒布之一X軸偏移(例如替代請求座標0,Y處之下一下行緩衝器,核將請求座標W/2,Y處之下一下行緩衝器,其中W係整個影像1501沿X軸之寬度)。 根據微調所請求之行緩衝器資料之座標值之前述原理,其他影像劃分配置係可行的。 在一典型實施例中,原始核K1_1經設計以自一單一行緩衝器單元讀取整個影像且將其輸出資料寫入另一單一行緩衝器單元中。在空間劃分之後,核K1_1及K1_2兩者可指稱其中駐留影像資料之單一源行緩衝器單元(或核K1_1、K1_2之輸入影像之生產者核可經重新組態以在核K1_1及K1_2單獨自其讀取之兩個單獨行緩衝器單元中寫入兩個副本)。然而,如圖15中所觀察,在一實施例中,核K1_1及K1_2之各者將其輸出資料寫入兩個單獨行緩衝器單元LB_1及LB_2。 在一實施例中,施加此限制,因為,如上文相對於圖9a及圖9b所提及,一行緩衝器單元可服務多個消費者但僅可處置一生產者。因而,一單一行緩衝器單元無法處置來自核K1_1及K1_2 (各核必須寫入其自身之行緩衝器單元)之兩者之輸出。因此,如圖15中所觀察,消耗核K2亦重新組態為空間劃分重構之部分以自兩個不同行緩衝器單元讀取其期望影像之兩個不同半部之影像(LB_1保持左手側影像資料且LB_2保持右手側影像資料)。即,核K2經重構以將一請求發佈至LB_1 (若LB_1想要左手側影像)且將一請求發佈至LB_2 (若LB_2想要右手側影像資料)。K2亦可經重構以將影像半部合併為一單一影像(若(例如) K2之演算法在一整個影像上運算)。 圖16係關於指稱「圖分裂」之另一碼重構程序。就圖分裂而言,由DAG處理之資料之量超過影像處理器之內部記憶體需求。因而,DAG必須分裂為多個DAG,各處理影像處理器之內部儲存空間限制內之資料之量。此處,在各種實施例中,行緩衝器單元、表單產生器及模板處理器各具有相關聯之記憶體。若一單一DAG之儲存需求超過此等記憶體之一或多者之容量,則產生多個DAG。 圖16中觀察到其中產生一DAG 1608之一實例,其目的係將一非常大輸入影像1601重複向下取樣為一小很多的較低密度輸出影像1607。DAG/管線1608由六個核K1至K6構成,各將一較大輸入影像向下取樣為一較小輸出影像(例如核K1將較大輸入影像1601向下取樣為較小影像1602、核K2將影像1602向下取樣為較小影像1603、核K3將影像1603向下取樣為較小影像1604等等)。 在其中(例如)初始輸入影像1601極大之一實施方案中,不可能使所有資料/指令/內文適合於影像處理器之內部記憶體空間。因而,作為回應,編譯器將分析核K1至K6之記憶資源需求且將初始較大DAG/管線1608剖析為依序操作之較小DAG/管線1609、1610、1611之一群組且其各者不需要比影像處理器內可用多之內部記憶體資源。 自圖1之討論回憶一DAG以將輸入資料自外部記憶體載入至(若干)行緩衝器單元開始且以將輸出資料自(若干)行緩衝器單元寫入外部記憶體結束。因此,圖16之初始DAG/管線1608包含用於將輸入資料自外部記憶體轉移至核K1之輸入處之(若干)行緩衝器單元之命令/指令且亦包含用於將輸出資料自(若干)行緩衝器單元轉移至核K6之輸出處之外部記憶體之命令/指令。 在編譯器將原始較大DAG/管線1608剖析為較小DAG/管線1609、1610、1611之後,編譯器將額外地插入用於以將輸入資料自外部記憶體載入至核K2及K4之輸入處(即新的較小DAG/管線1610及1611之輸入處)之(若干)行緩衝器單元之命令/指令。編譯器亦將插入用於將輸出資料自(若干)行緩衝器單元載入至核K1及K3之輸出處(即新的較小DAG/管線1609及1610之輸出處)之外部記憶體之命令/指令。注意新命令/指令之此等插入位於何處,原始DAG/管線1608指定將資料寫入一行緩衝器單元而非外部記憶體/自一行緩衝器單元而非外部記憶體讀取資料(因為一相同DAG/管線內之核通過行緩衝器單元彼此饋送/起源)。因而,此等原始命令/指令將由編譯器移除。 注意所描述之重構之各種重構可最終回應於上文所討論之無效率之任何者而執行。例如,在一系列融合之後編譯器可最終執行圖分裂。 在前述討論中,注意在最終編譯為目標碼時核自身可為由許多支路構成之大型複雜軟體常式及相關聯之基本區塊。因而,核內之子圖自身在最終編譯為目標碼時亦可由目標碼之多個支路及基本區塊構成。 圖17a展示由(例如)一編譯器執行之一方法,如上文所討論。如圖17a中所觀察,該方法包含1701編譯針對具有可程式化之模板處理器之一影像處理器之程式碼,該模板處理器由各自二維執行道及移位暫存器電路結構構成,該程式碼實施一有向非循環圖且由在該等模板處理器之各自處理器上執行之多個核構成,其中該編譯包含以下之任何者:認識到在程式碼中存在比該影像處理器中之模板處理器多之核;認識到核之至少一者比核之另一者計算密集;認識到程式碼具有超過該影像處理器之記憶體容量之資源要求。該方法亦包含1702回應於上述認識之任何者而執行以下之任何者:核之水平融合;核之垂直融合;核之一者之分裂成多個核;一核之空間劃分成多個經空間劃分之核;將該有向非循環圖分成較小圖。 圖17b描繪在編譯用於在一影像處理器(諸如具有上文所討論之硬體特徵之一影像處理器)上執行之程式碼時與上述編譯器程序之任何者一起使用之一應用軟體開發及模擬環境1721。此處,一開發者可藉由依與總體預期影像轉換一致之一策略次序配置核以開發一綜合影像處理功能(例如一影像處理管線,其中管線中之各階段執行一專用影像處理任務、一些其他DAG指定之常式集等等)。核可自一程式庫1722召集及/或開發者可開發一或多個定製核。 程式庫1722內之核可由核之一第三方供應商及/或任何底層技術之一供應商提供(例如包含目標硬體影像處理器之一硬體平台之一供應商或目標硬體影像處理器(例如提供為其之一設計或實際硬體)之一供應商)。 就定製開發核而言,在許多情況中,開發者僅需要針對一單一線程1723寫入程式碼。即,開發者僅需要寫入藉由參考相對於輸出像素位置之輸入像素值(例如使用上述位置相對記憶體存取指令格式)來判定一單一輸出像素值之程式碼。在滿足單一線程1723之操作之後,接著,開發環境可自動例示一各自虛擬處理器上之線程碼之例項以實現在一影像表面區域上操作之處理器之一陣列上之一核。該影像表面區域可為一影像圖框之一段(諸如一線群)。 在各種實施例中,定製線程程式碼寫入虛擬處理器ISA之目標碼中(或編譯為虛擬處理器ISA目標碼之一較高階語言)。定製核之程式碼之執行之模擬可在包含存取根據記憶體模型組織之一記憶體之一虛擬處理器之一模擬運行時間環境。此處,例示一虛擬處理器1724之軟體模型(定向或以其他方式之目標)及併入該模型之一記憶體1725。 接著,虛擬處理器模型1724模擬線程碼1723之執行。在滿足一線程之效能、其較大核及核屬於之任何較大功能之後,整體被編譯為下伏硬體之實際目標碼。模擬環境1721之整體可實施為在一電腦系統(例如一工作站) 1726上運行之軟體。
f . 實施方案實施例相關的應指出上文所描述之各種影像處理器架構特徵不必要受限於傳統意義上之影像處理且因此可應用於可(或可不)引起影像處理器重新定性其他應用。例如,若上文所描述之各種影像處理器架構特徵之任何者用於動畫之創建及/或產生及/或渲染而非實際相機影像之處理,則影像處理器可具有一圖形處理單元之特性。另外,上文所描述之影像處理器架構特徵可應用於諸如視訊處理、視覺處理、影像辨識及/或機器學習之其他技術應用。依此方式應用,影像處理器可與一較通用處理器(例如係計算系統之一CPU或計算系統之一CPU之部分)整合(例如作為一協處理器)或可為一計算系統內之一独立式處理器。 上文所討論之硬體設計實施例可體現在一半導體晶片內及/或作為最終朝向一半導體製造程序標定之一電路設計之一描述。就後者而言,此等電路描述可呈以下形式:一(例如VHDL或Verilog)暫存器轉移層級(RTL)電路描述、一閘級電路描述、一電晶體級電路描述或遮罩描述或其各種組合。電路描述通常體現在一電腦可讀儲存媒體上(諸如一CD-ROM或其他類型之儲存技術)。 自先前章節係關於認識到如上文所描述之一影像處理器可體現在一電腦系統上之硬體(例如作為處理來自該手持裝置之相機之資料之一手持裝置之系統單晶片(SOC))。在其中影像處理器體現為一硬體電路之情況中,注意由影像處理器處理之影像資料可自一相機直接接收。此處,影像處理器可為一離散相機之部分或具有一整合式相機之一計算系統之部分。就後者而言影像資料可自相機或自計算系統之系統記憶體直接接收(例如相機將其影像資料發送至系統記憶體而非影像處理器)。亦注意先前章節中描述之許多特徵可應用於一圖形處理器單元(其渲染動畫)。 圖18提供一計算系統之一例示性描繪。下文所描述之該計算系統之許多組件可應用於具有一整合式相機及相關聯之影像處理器之一計算系統(例如諸如一智慧型電話或平板電腦之一手持裝置)。一般技術者將能夠容易在兩者之間劃界。另外,圖18之計算系統亦包含一高效能計算系統之許多特徵,諸如用以實施上文相對於圖17c所討論之開發環境之一工作站。 如圖18中所觀察,基本計算系統可包含一中央處理單元1801 (其可包含(例如)複數個通用處理器核心1815_1至1815_N及安置於一多核心處理器或應用處理器上之一主記憶體控制器1817)、系統記憶體1802、一顯示器1803 (例如觸控螢幕或平板)、一局部有線點至點鏈路(例如USB)介面1804、各種網路I/O功能1805 (諸如一乙太(Ethernet)網路介面及/或蜂巢式數據機子系統)、一無線區域網路(例如WiFi)介面1806、一無線點至點鏈路(例如藍芽)介面1807及一全球定位系統介面1808、各種感測器1809_1至1809_N、一或多個相機1810、一電池1811、一電源管理控制單元1812、一揚聲器及麥克風1813及一音訊編碼器/解碼器1814。 一應用處理器或多核心處理器1850在其CPU 1801內可包含一或多個通用處理器核心1815、一或多個圖形處理單元1816、一記憶體管理功能1817 (例如一記憶體控制器)、一I/O控制功能1818及一影像處理單元1819。通用處理核心1815通常執行操作系統及計算系統之應用軟體。圖形處理單元1816通常執行圖形密集功能以(例如)產生出現在顯示器1803上之圖形資訊。記憶體控制功能1817與系統記憶體1802介接以將資料寫入系統記憶體1802/自系統記憶體1802讀取資料。電源管理控制單元1812大體上控制系統1800之電力消耗。 影像處理單元1819可根據上文在先前章節中詳細描述之影像處理單元實施例之任何者實施。替代地或組合,IPU 1819可耦合至GPU 1816及CPU 1801之任一者或兩者作為其之一協處理器。另外地,在各種實施例中,GPU 1816可使用上文詳細描述之影像處理器特徵之任何者來實施。 觸控螢幕顯示器1803、通信介面1804至1807、GPS介面1808、感測器1809、相機1810及揚聲器/麥克風編解碼器1813、1814之各者全可視為相對於總體計算系統之各種形式之I/O (輸入及/或輸出),總體計算系統視情況亦包含一整合式週邊裝置(例如該一或多個相機1810)。依據實施方案,此等I/O組件之各I/O組件可整合於應用處理器/多核心處理器1850上或可位於應用處理器/多核心處理器1850之晶粒下或封包外部。 在一實施例中,一或多個相機1810包含能夠量測相機與其視域中之一物件之間之深度之一深度相機。在一應用處理器之一通用CPU核心上執行之應用軟體、操作系統軟體、裝置驅動器軟體及/或韌體(或具有用於執行程式碼之一指令執行管線之其他功能方塊)或其他處理器可執行上文所描述之功能之任何者。 本發明之實施例可包含如上文所闡述之各種程序。程序可體現在機器可執行指令中。指令可用以引起一通用或專用處理器執行特定程序。替代地,此等程序可由含有用於執行程序之固線式及/或可程式化之邏輯之特定硬體組件或由程式化電腦組件及定製硬體組件之任何組合執行。 本發明之元件亦可提供為用於儲存機器可執行指令之一機器可讀媒體。機器可讀媒體可包含(但不限於)軟碟 、光碟、CD-ROM及磁光碟、快閃記憶體、ROM、RAM、EPROM、EEPROM、磁卡或光學卡、傳播媒體或適合於儲存電子指令之其他類型之媒體/機器可讀媒體。例如,本發明可經由一通信鏈路(例如一數據機或網路連接)下載為可憑藉體現在一載波或其他傳播媒體中之資料信號自一遠端電腦(例如一伺服器)轉移至一請求電腦(例如一客戶端)之一電腦程式。 在前述說明書中,已參考本發明之特定例示性實例描述本發明。然而,顯而易見,可在不會背離如隨附申請專利範圍中所闡述之本發明之廣泛精神及範疇之情況下對本發明實行各種修改及改變。相應地,說明書及圖式被視為具繪示性而非限制性。
101_1至101_M 行緩衝器單元 102_1至102_M 模板處理器單元 103_1至103_M 表單產生器單元 104 網路 105 宏I/O單元 201 影像資料 202 重疊模板/垂直重疊模板 203 陰影區域/線群 204 初始表單/第一表單 205 下一表單/第二表單 300 模板處理器架構 301 資料計算單元 302 純量處理器 303 記憶體/純量記憶體 304 I/O單元 305 執行道陣列 306 二維移位陣列結構/二維移位暫存器結構 309 程式控制器 351 純量指令 352 ALU指令/指令欄位 353 記憶體指令/指令欄位 354 欄位 401 資料計算組件/資料計算單元 405 執行道陣列 406 二維移位暫存器陣列結構/二維移位暫存器/暫存器結構/移位暫存器結構/移位暫存器陣列 409 光暈/光暈區域 505 圖框 507 第一陣列 510 執行道/簡單描繪 511 執行道位置 601 執行道/硬體執行道 602 暫存器檔案 603 輸出多工器/多工器配置/多工器電路 604 輸入多工器/多工器配置/多工器電路 701 虛擬影像處理環境 702 編譯器 703 實際影像處理硬體 704 開發者 801 虛擬碼層級/行緩衝器單元 802 模板處理器 803 表單產生器單元 805 純量處理器 806 組態空間 807 組態空間 811 組態資訊 812 組態資訊 901 影像/行緩衝器單元/記憶體 902_1至902_N 線群 1001 輸入影像資料 1001_1 行緩衝器單元 1001_2 第二行緩衝器單元 1001_3 第三行緩衝器單元 1001_4 第四行緩衝器單元 1001_5 第五行緩衝器單元 1001_6 第六行緩衝器單元 1002 程式碼 1002_1 第一模板處理器 1002_2 第二模板處理器 1002_3 第三模板處理器 1002_4 第四模板處理器 1002_5 第五模板處理器 1004 連接網路 1101_1 行緩衝器單元 1101_2 行緩衝器單元 1101_3 行緩衝器單元 1101_4 行緩衝器單元 1101_5 行緩衝器單元 1102_1 模板處理器 1102_2 模板處理器 1102_3 模板處理器 1102_4 模板處理器 1104 連接網路 1201 原始碼序列 1202 新碼序列 1301 邊界區域/執行道區域 1302 邊界區域 1303 邊界區域/執行道區域 1304 邊界區域/光暈區域 1305 額外空間區域 1401 接點/分裂接點/分裂裂開 1501 影像 1501_1 影像之左半部 1501_2 影像之右半部 1601 非常大輸入影像/初始輸入影像 1602 較小影像 1603 樣本影像 1604 較小影像 1607 小很多較低密度輸出影像 1608 有向非循環圖(DAG)/管線 1609 較小有向非循環圖(DAG)/管線 1610 較小有向非循環圖(DAG)/管線 1611 較小有向非循環圖(DAG)/管線 1721 應用軟體開發及模擬環境 1722 程式庫 1723 單一線程/線程碼 1724 虛擬處理器/虛擬處理器模型 1725 記憶體 1800 系統 1801 中央處理單元(CPU) 1802 系統記憶體 1803 顯示器/觸控螢幕顯示器 1804 局部有線點至點鏈路介面/通信介面 1805 網路I/O功能/通信介面 1806 無線區域網路介面/通信介面 1807 無線點至點鏈路介面/通信介面 1808 全球定位系統(GPS)介面 1810 相機 1811 電池 1812 電源管理控制單元 1813 揚聲器及麥克風/揚聲器/麥克風編解碼器 1814 音訊編碼器/解碼器/編解碼器/揚聲器/麥克風編解碼器 1815_1至1815-N 通用處理器核心 1816 圖形處理單元(GPU) 1817 記憶體管理功能 1818 I/O控制功能 1819 影像處理單元(IPU) 1850 應用處理器/多核心處理器 A至F 子圖 C21 時間 C22至C2N 時間 C31 時間 K1 核 K1_1 核 K1_2 核 K2 核 K3 核 K3_1 核 K3_2 核 K4 核 K5 核 K6 核 LB_1 行緩衝器單元 LB_2 行緩衝器單元 P1至PN 時間點/時間 R1 實體暫存器 R2 局部暫存器 R3至R5 暫存器
以下描述及附圖用以繪示本發明之實施例。在圖式中: 圖1展示一影像處理器硬體架構之一實施例; 圖2a、圖2b、圖2c、圖2d及圖2e描繪影像資料之剖析為一線群、一線群之剖析為一表單及在一表單上使用重疊模板執行之操作; 圖3a展示一模板處理器之一實施例; 圖3b展示模板處理器之一指令字之一實施例; 圖4展示一模板處理器內之一資料計算單元之一實施例; 圖5a、圖5b、圖5c、圖5d、圖5e、圖5f、圖5g、圖5h、圖5i、圖5j及圖5k描繪使用一二維移位陣列及一執行道陣列以判定具有重疊模板之一對相鄰輸出像素值之一實例; 圖6展示一整合式執行道陣列及一二維移位陣列之一單位晶胞之一實施例; 圖7展示用於開發及實施影像處理程式碼之一程序; 圖8係關於用於組態一影像處理器之一程序; 圖9a及圖9b係關於一行緩衝器單元之操作; 圖10a及圖10b係關於一DAG程式流程; 圖11a、圖11b及圖11c係關於一管線程式流程; 圖12a及圖12b係關於一水平核融合程序; 圖13a、圖13b及圖13c係關於一垂直核融合程序; 圖14係關於一核分裂程序; 圖15係關於一圖形劃分程序; 圖16係關於一DAG/管線分裂程序; 圖17a展示一編譯方法; 圖17b展示一程式碼開發環境; 圖18展示一例示性計算系統。
1201 原始碼序列 1202 新碼序列 K1 核 K2 核 K3 核
Claims (20)
- 一種具有經儲存於其上之在由一計算系統處理時引起該計算系統執行一方法之程式碼之機器可讀儲存媒體,其包括: 編譯針對具有可程式化之模板處理器之一影像處理器之程式碼,各模板處理器包括二維執行道及移位暫存器電路結構,該程式碼實施一有向非循環圖,且係由在該等模板處理器之各自處理器上執行之多個核構成,其中該編譯包括: a)判定在該程式碼中存在不同於該影像處理器中之模板處理器之數量的核; b)回應於上文之a)而執行以下之任何者: 核之水平融合; 核之垂直融合; 一核之空間劃分成多個經空間劃分之核; 將該有向非循環圖分成多個有向非循環圖。
- 如請求項1之機器可讀儲存媒體,其中核之該水平融合進一步包括級聯程式流程,使得一第一融合核先於一第二融合核。
- 如請求項2之機器可讀儲存媒體,其中核之該水平融合進一步包括修改每完成至少該第一第一融合核及該第二融合核所消耗之調用。
- 如請求項3之機器可讀儲存媒體,其中該修改進一步包括將一或多個迴路添加至具有每完成所消耗之一較少調用之一融合核。
- 如請求項1之機器可讀儲存媒體,其中核之該垂直融合進一步包括施加程式碼以延遲一消耗融合核之起始。
- 如請求項5之機器可讀儲存媒體,其中施加該延遲以確保駐留在執行該等垂直融合核之一模板處理器之該執行道空間外部之暫存器空間之一光暈區域將包括取決於所消耗之融合核的資料。
- 如請求項1之機器可讀儲存媒體,其中存在比核多之模板處理器。
- 如請求項1之機器可讀儲存媒體,其中該空間劃分進一步包括調整該多個經空間劃分之核內之該核的X、Y座標值,使得該多個經空間劃分之核指稱其各自影像部分。
- 如請求項1之機器可讀儲存媒體,其中將該有向非循環圖分成多個有向非循環圖進一步包括添加用於將資料儲存至較小程式之一者之一輸出處之該影像處理器外部之記憶體之一指令及/或命令,及添加用於自該等較小程式之另一者之一輸入處之該影像處理器外部之記憶體載入資料之一指令及/或命令。
- 如請求項9之機器可讀儲存媒體,其中該多個有向非循環圖經組態以寫入至該影像處理器內之其自身之各自行緩衝器單元。
- 一種具有經儲存於其上之在由一計算系統處理時引起該計算系統執行一方法之程式碼之機器可讀儲存媒體,其包括: 編譯針對具有可程式化之模板處理器之一影像處理器之程式碼,各模板處理器包括二維執行道及移位暫存器電路結構,該程式碼實施一有向非循環圖,且係由在該等模板處理器之各自處理器上執行之多個核構成,其中該編譯包括: a)判定該等核之至少一者比該等核之另一者計算密集; b)回應於上文之a)而執行以下之任何者: 核之水平融合; 核之垂直融合; 該等核之一者之分裂成多個核; 一核之空間劃分成多個經空間劃分之核; 將該有向非循環圖分成多個有向非循環圖。
- 如請求項11之機器可讀儲存媒體,其中核之該水平融合進一步包括級聯程式流程,使得一第一融合核先於一第二融合核。
- 如請求項11之機器可讀儲存媒體,其中核之該垂直融合進一步包括施加程式碼以延遲一消耗融合核之起始。
- 如請求項11之機器可讀儲存媒體,其中該等核之一者之分裂成多個核進一步包括添加用於將資料之一表單儲存於該多個核之一者之一輸出處之一指令及/或命令,及添加用於在該多個核之另一者之一輸入處載入資料之一指令及/或命令。
- 如請求項11之機器可讀儲存媒體,其中該空間劃分進一步包括調整該多個經空間劃分之核內之該核的X、Y座標值,使得該多個經空間劃分之核指稱其各自影像部分。
- 如請求項11之機器可讀儲存媒體,其中將該有向非循環圖分成多個有向非循環圖進一步包括添加用於將資料儲存至較小程式之一者之一輸出處之該影像處理器外部之記憶體之一指令及/或命令,及添加用於自該等較小程式之另一者之一輸入處之該影像處理器外部之記憶體載入資料之一指令及/或命令。
- 一種具有經儲存於其上之在由一計算系統處理時引起該計算系統執行一方法之程式碼之機器可讀儲存媒體,其包括: 編譯針對具有可程式化之模板處理器之一影像處理器之程式碼,各模板處理器包括二維執行道及移位暫存器電路結構,該程式碼實施一有向非循環圖,且係由在該等模板處理器之各自處理器上執行之多個核構成,其中該編譯包括: a)判定該程式碼具有超過該影像處理器之記憶體容量的資源要求; b)回應於上文之a)而執行以下之任何者: 該等核之一者之分裂成多個核; 一核之空間劃分成多個經空間劃分之核; 將該有向非循環圖分成多個有向非循環圖。
- 如請求項17之機器可讀儲存媒體,其中該空間劃分進一步包括調整該多個經空間劃分之核內之該核的X、Y座標值,使得該多個經空間劃分之核指稱其各自影像部分。
- 如請求項17之機器可讀儲存媒體,其中將該有向非循環圖分成多個有向非循環圖進一步包括添加用於將資料儲存至較小程式之一者之一輸出處之該影像處理器外部之記憶體之一指令及/或命令,及添加用於自該等較小程式之另一者之一輸入處之該影像處理器外部之記憶體載入資料之一指令及/或命令。
- 如請求項19之機器可讀儲存媒體,其中該多個有向非循環圖經組態以寫入至該影像處理器內之其自身之各自行緩衝器單元。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662300684P | 2016-02-26 | 2016-02-26 | |
US62/300,684 | 2016-02-26 | ||
US15/389,113 | 2016-12-22 | ||
US15/389,113 US10387988B2 (en) | 2016-02-26 | 2016-12-22 | Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201800940A TW201800940A (zh) | 2018-01-01 |
TWI614689B true TWI614689B (zh) | 2018-02-11 |
Family
ID=59678542
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW106140542A TWI635443B (zh) | 2016-02-26 | 2016-12-30 | 用於映射程式碼至一高效能、高功率效率、可程式化之影像處理硬體平台的編譯器技術 |
TW105144288A TWI614689B (zh) | 2016-02-26 | 2016-12-30 | 用於映射程式碼至一高效能、高功率效率、可程式化之影像處理硬體平台的編譯器技術 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW106140542A TWI635443B (zh) | 2016-02-26 | 2016-12-30 | 用於映射程式碼至一高效能、高功率效率、可程式化之影像處理硬體平台的編譯器技術 |
Country Status (7)
Country | Link |
---|---|
US (3) | US10387988B2 (zh) |
EP (1) | EP3420527B1 (zh) |
JP (2) | JP6704056B2 (zh) |
KR (1) | KR102009906B1 (zh) |
CN (1) | CN108541321B (zh) |
TW (2) | TWI635443B (zh) |
WO (1) | WO2017146816A1 (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10387988B2 (en) * | 2016-02-26 | 2019-08-20 | Google Llc | Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform |
US10204396B2 (en) * | 2016-02-26 | 2019-02-12 | Google Llc | Compiler managed memory for image processor |
WO2017163591A1 (ja) * | 2016-03-24 | 2017-09-28 | 富士フイルム株式会社 | 画像処理装置、画像処理方法、及び画像処理プログラム |
US10534639B2 (en) * | 2017-07-06 | 2020-01-14 | Bitfusion.io, Inc. | Virtualization of multiple coprocessors |
JP2019074967A (ja) * | 2017-10-17 | 2019-05-16 | キヤノン株式会社 | フィルタ処理装置およびその制御方法 |
KR20200080263A (ko) | 2017-11-09 | 2020-07-06 | 엔체인 홀딩스 리미티드 | 중재자 컴퓨터 시스템을 이용하여 컴퓨터 프로그램의 정확한 실행을 보장하기 위한 시스템 및 방법 |
SG11202004147RA (en) | 2017-11-09 | 2020-06-29 | Nchain Holdings Ltd | System for securing verification key from alteration and verifying validity of a proof of correctness |
SG11202005567QA (en) | 2017-12-13 | 2020-07-29 | Nchain Holdings Ltd | System and method for securely sharing cryptographic material |
US10983583B2 (en) * | 2018-08-23 | 2021-04-20 | Apple Inc. | Electronic display reduced blanking duration systems and methods |
WO2020052241A1 (en) * | 2018-09-11 | 2020-03-19 | Huawei Technologies Co., Ltd. | Heterogeneous scheduling for sequential compute dag |
KR102023855B1 (ko) * | 2018-12-05 | 2019-09-20 | 전자부품연구원 | 딥러닝 하드웨어 가속장치 |
CN110147236B (zh) * | 2019-04-30 | 2023-01-31 | 创新先进技术有限公司 | 代码编译方法及装置 |
US10552121B1 (en) * | 2019-05-07 | 2020-02-04 | Capital One Services, Llc | System and method for dynamic process flow control based on real-time events |
CN110399124B (zh) * | 2019-07-19 | 2022-04-22 | 浪潮电子信息产业股份有限公司 | 一种代码生成方法、装置、设备及可读存储介质 |
DE102019129362B4 (de) | 2019-10-30 | 2023-09-07 | Chie-Hee Cho-Nöth | Vorrichtung und Verfahren zur Messung der Kerntemperatur eines menschlichen oder tierischen Körpers unter MRT-Bedingungen |
KR102490539B1 (ko) * | 2019-12-30 | 2023-01-19 | 주식회사 모레 | 딥러닝을 위한 가속기용 프로그램 생성 방법 |
WO2021137669A1 (ko) | 2019-12-30 | 2021-07-08 | 매니코어소프트주식회사 | 딥러닝을 위한 가속기용 프로그램 생성 방법 |
WO2022064828A1 (ja) * | 2020-09-28 | 2022-03-31 | 日本電気株式会社 | 情報処理装置、情報処理方法及び記憶媒体 |
CN112558938B (zh) * | 2020-12-16 | 2021-11-09 | 中国科学院空天信息创新研究院 | 一种基于有向无环图的机器学习工作流调度方法及系统 |
CN113485712B (zh) * | 2021-04-23 | 2024-05-07 | 武汉深之度科技有限公司 | 一种内核裁剪方法及计算设备 |
BE1029306B1 (de) * | 2021-04-30 | 2023-07-14 | Zebra Technologies | Industrielles ethernet-konfigurationswerkzeug mit vorschaufunktionen |
JP2023063815A (ja) | 2021-10-25 | 2023-05-10 | 株式会社Preferred Networks | コンパイラ装置、命令生成方法、プログラム、コンパイル方法及びコンパイラプログラム |
CN116484822B (zh) * | 2023-06-26 | 2023-09-01 | 和创(北京)科技股份有限公司 | 表单字段表达式循环依赖计算方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070003161A1 (en) * | 2005-06-30 | 2007-01-04 | Shih-Wei Liao | Computation transformations for streaming applications on multiprocessors |
US20110022817A1 (en) * | 2009-07-27 | 2011-01-27 | Advanced Micro Devices, Inc. | Mapping Processing Logic Having Data-Parallel Threads Across Processors |
US20130091507A1 (en) * | 2011-10-11 | 2013-04-11 | Nec Laboratories America, Inc. | Optimizing data warehousing applications for gpus using dynamic stream scheduling and dispatch of fused and split kernels |
US8578389B1 (en) * | 2004-05-04 | 2013-11-05 | Oracle America, Inc. | Method and system for merging directed acyclic graphs representing data flow codes |
US20140204232A1 (en) * | 2013-01-24 | 2014-07-24 | Analog Devices Technology | Descriptor-based stream processor for image processing and method associated therewith |
Family Cites Families (84)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US156284A (en) | 1874-10-27 | Improvement in railway-car brakes | ||
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 |
DE3851005T2 (de) | 1987-06-01 | 1995-04-20 | Applied Intelligent Syst Inc | Paralleles Nachbarverarbeitungssystem und -Verfahren. |
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 |
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 | ソニー株式会社 | 画像データ処理装置および画像データ処理方法 |
US5612693A (en) | 1994-12-14 | 1997-03-18 | International Business Machines Corporation | Sliding window data compression using a toroidal bit shift register |
DE59607143D1 (de) | 1996-01-15 | 2001-07-26 | Infineon Technologies Ag | Prozessor zur bildverarbeitung |
US5892962A (en) | 1996-11-12 | 1999-04-06 | Lucent Technologies Inc. | FPGA-based processor |
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 |
JP4489305B2 (ja) | 1999-03-16 | 2010-06-23 | 浜松ホトニクス株式会社 | 高速視覚センサ装置 |
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 | 株式会社リコー | 画像処理回路、複合画像処理回路、および、画像形成装置 |
US9170812B2 (en) | 2002-03-21 | 2015-10-27 | Pact Xpp Technologies Ag | Data processing system having integrated pipelined array data processor |
WO2003088033A1 (en) | 2002-04-09 | 2003-10-23 | University Of Rochester | Multiplier-based processor-in-memory architectures for image and graphics processing |
AU2003286131A1 (en) | 2002-08-07 | 2004-03-19 | Pact Xpp Technologies Ag | Method and device for processing data |
US7624174B2 (en) * | 2003-05-22 | 2009-11-24 | Microsoft Corporation | Self-learning method and system for detecting abnormalities |
US20060044576A1 (en) | 2004-07-30 | 2006-03-02 | Kabushiki Kaisha Toshiba | Apparatus for image processing |
US7667764B2 (en) | 2004-06-04 | 2010-02-23 | Konica Minolta Holdings, Inc. | Image sensing apparatus |
JP4219887B2 (ja) | 2004-12-28 | 2009-02-04 | 富士通マイクロエレクトロニクス株式会社 | 画像処理装置及び画像処理方法 |
JP6059413B2 (ja) | 2005-04-28 | 2017-01-11 | クアルコム,インコーポレイテッド | 再構成可能命令セル・アレイ |
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 |
US7802073B1 (en) | 2006-03-29 | 2010-09-21 | Oracle America, Inc. | Virtual core management |
US8438365B2 (en) * | 2006-10-06 | 2013-05-07 | Calos Fund Limited Liability Company | Efficient data loading in a data-parallel processor |
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 |
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 | ブラザー工業株式会社 | 画像処理装置および画像処理プログラム |
WO2009031302A1 (ja) | 2007-09-05 | 2009-03-12 | Tohoku University | 固体撮像素子及びその駆動方法 |
US8174534B2 (en) * | 2007-12-06 | 2012-05-08 | Via Technologies, Inc. | Shader processing systems and methods |
US8106914B2 (en) * | 2007-12-07 | 2012-01-31 | Nvidia Corporation | Fused multiply-add functional unit |
US7995845B2 (en) * | 2008-01-30 | 2011-08-09 | Qualcomm Incorporated | Digital signal pattern detection and classification using kernel fusion |
US9678775B1 (en) * | 2008-04-09 | 2017-06-13 | Nvidia Corporation | Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment |
EP2289001B1 (en) * | 2008-05-30 | 2018-07-25 | Advanced Micro Devices, Inc. | Local and global data share |
JP4999791B2 (ja) | 2008-06-30 | 2012-08-15 | キヤノン株式会社 | 情報処理装置、その制御方法、及びプログラム |
US9690591B2 (en) | 2008-10-30 | 2017-06-27 | Intel Corporation | System and method for fusing instructions queued during a time window defined by a delay counter |
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 |
US8856496B2 (en) | 2010-04-27 | 2014-10-07 | Via Technologies, Inc. | Microprocessor that fuses load-alu-store and JCC macroinstructions |
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 | 晨星半導體股份有限公司 | 影像處理裝置與影像處理方法 |
US9875139B2 (en) * | 2012-05-29 | 2018-01-23 | Qatar Foundation | Graphics processing unit controller, host system, and methods |
US9232139B2 (en) | 2012-07-24 | 2016-01-05 | Apple Inc. | Image stabilization using striped output transformation unit |
US9378181B2 (en) | 2012-11-09 | 2016-06-28 | Intel Corporation | Scalable computing array |
US9424038B2 (en) * | 2012-12-10 | 2016-08-23 | Nvidia Corporation | Compiler-controlled region scheduling for SIMD execution of threads |
US8954992B2 (en) | 2013-03-15 | 2015-02-10 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Distributed and scaled-out network switch and packet processing |
US20150277904A1 (en) | 2014-03-28 | 2015-10-01 | Roger Espasa | Method and apparatus for performing a plurality of multiplication operations |
US9818166B2 (en) * | 2015-01-16 | 2017-11-14 | Intel Corporation | Graph-based application programming interface architectures with producer/consumer nodes for enhanced image processing parallelism |
US9749548B2 (en) | 2015-01-22 | 2017-08-29 | Google Inc. | Virtual linebuffers for image signal processors |
US10291813B2 (en) | 2015-04-23 | 2019-05-14 | Google Llc | Sheet generator for image processor |
US9772852B2 (en) | 2015-04-23 | 2017-09-26 | Google Inc. | Energy efficient processor core architecture for image processor |
US9756268B2 (en) | 2015-04-23 | 2017-09-05 | Google Inc. | Line buffer unit 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 |
US9769356B2 (en) | 2015-04-23 | 2017-09-19 | Google Inc. | Two dimensional shift array for image processor |
US9965824B2 (en) | 2015-04-23 | 2018-05-08 | Google Llc | Architecture for high performance, power efficient, programmable image processing |
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 |
CN105023289A (zh) | 2015-07-08 | 2015-11-04 | 成都梦工厂网络信息有限公司 | 图形图像三维处理平台 |
US10387988B2 (en) * | 2016-02-26 | 2019-08-20 | Google Llc | Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform |
US10430919B2 (en) * | 2017-05-12 | 2019-10-01 | Google Llc | Determination of per line buffer unit memory allocation |
-
2016
- 2016-12-22 US US15/389,113 patent/US10387988B2/en active Active
- 2016-12-28 KR KR1020187022160A patent/KR102009906B1/ko active IP Right Grant
- 2016-12-28 CN CN201680080956.4A patent/CN108541321B/zh active Active
- 2016-12-28 EP EP16829467.6A patent/EP3420527B1/en active Active
- 2016-12-28 WO PCT/US2016/068932 patent/WO2017146816A1/en active Application Filing
- 2016-12-28 JP JP2018539837A patent/JP6704056B2/ja active Active
- 2016-12-30 TW TW106140542A patent/TWI635443B/zh active
- 2016-12-30 TW TW105144288A patent/TWI614689B/zh active
-
2017
- 2017-06-20 US US15/628,480 patent/US10387989B2/en active Active
-
2019
- 2019-08-01 US US16/529,633 patent/US20200020069A1/en not_active Abandoned
- 2019-12-02 JP JP2019218095A patent/JP6858239B2/ja active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8578389B1 (en) * | 2004-05-04 | 2013-11-05 | Oracle America, Inc. | Method and system for merging directed acyclic graphs representing data flow codes |
US20070003161A1 (en) * | 2005-06-30 | 2007-01-04 | Shih-Wei Liao | Computation transformations for streaming applications on multiprocessors |
US20110022817A1 (en) * | 2009-07-27 | 2011-01-27 | Advanced Micro Devices, Inc. | Mapping Processing Logic Having Data-Parallel Threads Across Processors |
US20130091507A1 (en) * | 2011-10-11 | 2013-04-11 | Nec Laboratories America, Inc. | Optimizing data warehousing applications for gpus using dynamic stream scheduling and dispatch of fused and split kernels |
US20140204232A1 (en) * | 2013-01-24 | 2014-07-24 | Analog Devices Technology | Descriptor-based stream processor for image processing and method associated therewith |
Also Published As
Publication number | Publication date |
---|---|
US10387988B2 (en) | 2019-08-20 |
US10387989B2 (en) | 2019-08-20 |
TW201810036A (zh) | 2018-03-16 |
JP6858239B2 (ja) | 2021-04-14 |
US20170249716A1 (en) | 2017-08-31 |
TW201800940A (zh) | 2018-01-01 |
KR102009906B1 (ko) | 2019-08-12 |
EP3420527B1 (en) | 2021-07-14 |
KR20180100372A (ko) | 2018-09-10 |
CN108541321A (zh) | 2018-09-14 |
CN108541321B (zh) | 2023-04-18 |
WO2017146816A1 (en) | 2017-08-31 |
JP6704056B2 (ja) | 2020-06-03 |
JP2020061168A (ja) | 2020-04-16 |
US20170287103A1 (en) | 2017-10-05 |
TWI635443B (zh) | 2018-09-11 |
EP3420527A1 (en) | 2019-01-02 |
US20200020069A1 (en) | 2020-01-16 |
JP2019508802A (ja) | 2019-03-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI614689B (zh) | 用於映射程式碼至一高效能、高功率效率、可程式化之影像處理硬體平台的編譯器技術 | |
JP7202987B2 (ja) | 高性能で、電力効率の良い、プログラマブルな画像処理のためのアーキテクチャ | |
JP6793162B2 (ja) | 画像プロセッサのためのラインバッファユニット | |
JP6764954B2 (ja) | プログラマブル二次元画像プロセッサ上の畳み込みニューラルネットワーク | |
JP6793228B2 (ja) | 画像プロセッサのためのシート生成部 | |
TWI690850B (zh) | 非暫時性之電腦儲存媒體、運算系統及由一或多個電腦執行之方法 | |
JP7208920B2 (ja) | ラインバッファユニット単位メモリ割り当ての決定 | |
TWI650013B (zh) | 用於影像處理器之巨型輸入/輸出單元 |