TWI767304B - 用於編譯針對同步處理器之程式之方法及系統 - Google Patents

用於編譯針對同步處理器之程式之方法及系統 Download PDF

Info

Publication number
TWI767304B
TWI767304B TW109128681A TW109128681A TWI767304B TW I767304 B TWI767304 B TW I767304B TW 109128681 A TW109128681 A TW 109128681A TW 109128681 A TW109128681 A TW 109128681A TW I767304 B TWI767304 B TW I767304B
Authority
TW
Taiwan
Prior art keywords
configuration
update
program
operations
configuration update
Prior art date
Application number
TW109128681A
Other languages
English (en)
Other versions
TW202109289A (zh
Inventor
賴納 波普
安德魯 普立查德
Original Assignee
美商谷歌有限責任公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 美商谷歌有限責任公司 filed Critical 美商谷歌有限責任公司
Publication of TW202109289A publication Critical patent/TW202109289A/zh
Application granted granted Critical
Publication of TWI767304B publication Critical patent/TWI767304B/zh

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/458Synchronisation, e.g. post-wait, barriers, locks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Abstract

本發明揭示方法、系統及設備,其等包含在電腦儲存媒體上編碼之電腦程式以針對一同步處理器編譯延時不敏感程式。該等方法之一者包含接收指定待由一同步處理器之複數個各別組件執行之複數個操作之一程式之一中間表示,其中該中間表示將一各別時脈週期值指派給該複數個操作之各操作,該操作在該各別時脈週期值經排程以由該同步處理器執行。處理該中間表示以針對需要一硬體組態更新之該中間表示中之各操作產生一各別更新窗,其中該更新窗指定一時間範圍,在該時間範圍期間可執行一組態更新指令以實現該硬體組態更新。組態更新指令經排程以在一或多個更新窗期間且根據該同步處理器之組態約束發生。

Description

用於編譯針對同步處理器之程式之方法及系統
本說明書係關於用於同步積體電路加速器之編譯器技術。
一同步積體電路加速器係經設計用於執行高度並行同步操作之一特定應用積體電路(ASIC)。藉由整合可同時執行之許多不同獨立處理元件而達成並行化。此等裝置非常適於加速通過神經網路之推論遍次,例如,其中獨立處理元件之各者執行具有權重之層輸入之一不同乘法或加法。
為簡潔起見,在本說明書中,此等裝置將被稱為同步處理器或同步晶片。實務上,可使用多個矽晶圓(例如,使用晶粒堆疊或矽中介層)來實施此等裝置。
在本說明書中,一處理器係同步的意謂由獨立處理單元執行之操作未執行例如,如在一命令程式之一若/否則語句(if/else statement)中之分支執行。實情係,可部分或完全預先完全排程操作。舉例而言,必須將一些同步處理器之操作向下排程至個別週期級,此意謂在執行週期中將每一處理元件之每一操作指派給一特定時槽。
此複雜性使程式化同步處理器非常容易出錯。舉例而言,引入一單一週期之一意外延遲之一使用者錯誤可導致所得運算不正確或不 明確,此可意謂相同程式之多個遍次可產生不同結果。
本說明書描述用於編譯針對同步處理器撰寫之程式之技術。下文描述之技術係關於排程操控在處理器上流動之資料之資料指令。下文描述之技術亦係關於自動產生並排程由處理器之控制硬體執行之組態更新指令。
可實施本說明書中描述之標的之特定實施例以便實現以下優勢之一或多者。一系統可從一延時不敏感輸入程式自動產生一同步處理器之一完全排程中間表示。此大大減少程式化同步處理器時之手動錯誤。另外,延時不敏感程式可在未重寫之情況下再用於不同硬體組態。中間表示允許完全排程組態更新指令且向一編譯器提供在不存在可能輸出程式時引發錯誤之能力。
在隨附圖式及以下描述中陳述本說明書之標的之一或多項實施例之細節。將從描述、圖式及發明申請專利範圍明白標的之其他特徵、態樣及優勢。
101:第一維度
103:第二維度
110:步驟
120:步驟
130:步驟
140:步驟
200:圖表表示
205:讀取節點
210:讀取節點
215:讀取節點
220:乘法節點
225:加法節點
230:寫入節點
310:步驟
320:步驟
330:步驟
401:CU0
402:CU1
403:CU2
404:CU3/CU4
412:第一更新窗
415:組態窗
422:第二更新窗
425:組態窗
432:第一組態窗
434:第二組態窗
435:更新窗
442:組態窗
443:更新窗
444:組態窗
445:更新窗
452:RegFile0Read指令
454:RegFile1Read指令
456:乘法指令
458:加法指令
500:特定應用積體電路(ASIC)
501:第一維度
502:運算塊
503:第二維度
504:向量處理單元
506:片段
508a:第一通信介面
508b:第二通信介面
510a:運算塊區段/區段/第一區段
510b:運算塊區段/區段
510c:運算塊區段/區段/第二區段
510d:運算塊區段/區段
600:運算塊
602:記憶體
604:運算陣列
606:單元
610a:通用匯流排線
610b:通用匯流排線
610c:通用匯流排線
610d:通用匯流排線
620:運算陣列部分和匯流排線
620a:部分和
620b:部分和
621:控制元件/控制電路
圖1係用於產生一輸入程式之一中間表示之一例示性程序之一流程圖。
圖2係一例示性程式之一圖表表示。
圖3係用於發出用於一中間表示之組態更新指令之一例示性程序之一流程圖。
圖4係繪示在給出一同步處理器之約束之情況下排程組態更新指令之 一圖式。
圖5係繪示專用邏輯電路之一實例之一示意圖。
圖6繪示一運算塊(tile)之一實例。
各個圖式中之相同元件符號及名稱指示相同元件。
圖1係用於產生一輸入程式之一中間表示之一例示性程序之一流程圖。為了方便起見,程序將被描述為由定位於一或多個位置中之一或多個電腦之一系統執行且根據本說明書適當程式化。
系統接收指定待由一同步處理器之組件執行之操作之一程式(110)。一般而言,程式之各語句可指定一或多個輸入變數、一輸出變數及一運算。程式無需指定關於何時將執行操作之延時或時序資訊。代替地,系統可接著使用變數名稱以便判定在同步處理器上執行程式之時序約束。
表1列出一例示性程式,其將從RAM讀取之兩個值相乘,將結果與從RAM讀取之一第三值相加,且將結果寫入至RAM。
Figure 109128681-A0305-02-0005-1
箭頭語法(例如,「<-name-<」)識別從右側供應晶片上參 數且將其等晶片上結果指派給左側之名稱的子程式。在一同步處理器之情況中,箭頭語法可用於指涉處理器上之特定硬體組件。在此實例中,「addr」用作如藉由第1行上之「proc addr->...」宣告之整個複合程式之一輸入。在此情況中,「addr」識別在三個讀取操作之各者中從哪一處理器組件之RAM讀取。舉例而言,藉由「addr」表示之RAM可運算並儲存待由程式之下一階段使用之部分和。
值得注意的,例示性程式係延時不敏感的,此意謂未指定關於組件之延時之任何資訊且未指定執行各操作所需之時序。此意謂不同於傳統程式,表1中之程式不要求循序執行語句。事實上,預期通常將取決於同步處理器之性質而以一不同順序或並行執行語句。
系統針對同步處理器之組件之各者獲得各別時脈延時值(120)。系統可維持(1)藉由程式中之一關鍵字或函數辨識之各操作與(2)表示各操作在同步處理器上花費之時脈週期數之各別時脈延時值之間的一映射(例如,一表)。此配置允許針對不同底層硬體設計編譯相同延時不敏感程式。此係有利的,此係因為若底層硬體之設計改變一些組件延時值,則仍可針對硬體之新設計編譯相同程式。
系統產生用於執行程式之時脈時序約束(130)。時脈時序約束指定何時特定操作必須相對於其他操作發生。一般而言,讀取值必須在使用值之前的至少一個時脈週期發生。舉例而言,需要兩個輸入之一乘法運算具有必須在該乘法運算開始之前的至少一個時脈週期讀取該兩個輸入的約束。因此,舉例而言,表1之第5行上之乘法運算必須在第3行及第4行上之讀取操作之各者之後的至少一個時脈週期開始。另外,連續操作不應在時間上重疊。系統可藉由使用程式中之變數名稱來判定哪些操作必 須在其他操作之後發生而產生約束。
圖2係一例示性程式之一圖表表示200。圖表表示200對應於表1中列出之例示性程式。圖表表示200具有各別對應於程式中之操作之一者之節點。因此,圖表具有表示第2行上之讀取命令之一讀取節點205、表示第3行上之讀取命令之一讀取節點210、表示第4行上之讀取命令之一讀取節點215、表示第5行上之乘法命令之一乘法節點220、表示第6行上之加法命令之一加法節點225、及表示第7行上之寫入命令之一寫入節點230。
為產生時脈時序約束,系統可遍歷程式或等效地圖表表示中之邊緣以基於變數名稱而判定相依性。接著,系統可針對操作之間之所發現相依性運算所需時脈延時值。舉例而言,若第4行上之乘法運算花費4個週期,則系統可產生以下約束:第5行上之加法運算取決於乘法運算之輸出且不應開始直至乘法運算開始之後4個週期。
作為另一實例,第6行上之加法運算取決於變數x,在第2行上讀取該變數x。因此,第6行上之運算與第2行上之運算之間存在相依性。
如圖2中展示,兩個讀取節點205及210具有1個週期之一延時。讀取節點215具有2個週期之一延時。乘法節點220具有4個週期之一延時,加法節點225具有3個週期之一延時,且寫入節點230具有1個週期之一延時。
如圖1中展示,系統產生程式之一中間表示,其將一各別時脈週期值指派給複數個操作之各操作(140)。中間表示在其係相較於使用者程式之較低階程式碼,但通常未低至其可由同步處理器直接執行的意 義上係中間的。
系統可藉由在程式中之任何任意操作處開始而產生中間表示且接著遍歷相依性及延時。舉例而言,系統可在讀取節點210處開始且指派待在一任意起始週期數(例如,週期0)執行該讀取操作。
接著,系統可使用節點210與節點220之間之相依性以及節點210之1個週期延時以指派待在週期1執行之後續乘法運算。
接著,系統可檢查乘法節點220之其他相依性,其係讀取節點215。讀取節點215表示從具有與用於讀取節點210之RAM不同之特性的一調整RAM讀取。因此,延時係不同的,即2個週期而非1個週期。因此,系統指派在乘法運算220之乘法運算之前的兩個週期執行之讀取節點215之讀取操作。
此導致一負週期值-1。然而,中間表示中之值僅表示相對週期時間,且因此,負值係允許的,且有時甚至係預期或不可避免的。
接著,系統可檢查對應於加法運算之加法節點225之相依性。乘法節點220與加法節點225之間之延時係4個週期,且因此系統指派待在乘法運算之後4個週期(例如,在週期5)執行之加法運算。
接著,系統可檢查加法節點225上之其他相依性,其係讀取節點205。由於讀取節點205之1個週期延時,故系統可指派在加法節點225之前的一個週期執行讀取操作。因此,系統針對讀取操作指派一週期值4。
最後,系統檢查加法節點225之相依性,其在此實例中係對應於寫入操作之寫入節點230。由於加法節點225之3個週期之延時,故系統將一週期值8指派給寫入操作。
因此,中間表示使一各別週期時間值與程式中之各操作相關聯。系統可使用任何適當資料結構來儲存中間表示。舉例而言,系統可儲存(1)週期時間值與(2)指令識別符、一圖表中之節點、指令文字、或操作之一些其他表示之間之一映射。
表2中展示由於處理圖2值中繪示之圖表所致之一例示性中間表示:
Figure 109128681-A0305-02-0009-2
不同於原始輸入程式,表2中之語句確實指定將由同步處理器執行之操作之一時間順序。此操作順序很可能在實際硬體上成功,此係因為全部排程一延時資訊已自動向下產生至週期級。
在一些情況中,一輸入程式不存在正確中間表示。在此等情況中,系統可引發指示無法正確編譯程式之一錯誤。此可舉例而言在輸入程式中之相依性形成一週期時存在。此亦可在無法由硬體足夠快速地產生一值以在其被需要時可用時發生。
作為另一實例,具有從相同中間值導出之多個輸入之任何種類之運算可能係不合法的。若在週期0產生一值「a」,在3個週期中從「a」運算值「b」,在2個週期中從值「a」運算值「c」,且一程式嘗試在 未解決延時差異之情況下將「b」及「c」相乘在一起,則不存在排程該等運算之正確方式。代替地,一使用者可能必須添加程式碼以(例如)藉由使用一RAM或一延遲暫存器而將「c」傳達至下一週期中。
儘管中間表示針對待由同步處理器執行之操作指定一週期級排程,然編譯器可發出額外指令以便實際上在同步處理器之組件上執行程式。特定言之,編譯器可能需要產生指定同步處理器之處理組件之間之資料路徑之變化的組態更新指令。在指令具有多面體迴圈語意時,情況尤為如此,此意謂各指令序列將可能被執行多次。因此,舉例而言,程式語意可指定一特定讀取操作應在10個連續迭代從一特定暫存器讀取且接著在下10個迭代從一不同特定暫存器讀取。
為從一個組態切換至另一組態,處理器可發佈改變處理器組件之間之資料路徑中之多工器上之輸入的組態更新指令。
圖3係用於發出用於一中間表示之組態更新指令之一例示性程序之一流程圖。為了方便起見,程序將被描述為由定位於一或多個位置中之一或多個電腦之一系統執行且根據本說明書適當程式化。
系統處理一中間表示以針對各操作產生一各別更新窗(310)。系統處理中間表示中之指令且針對需要一組態更新之各指令產生表示一時間範圍之一各別更新窗,在該時間範圍期間需要執行一對應組態更新指令。在一些實施方案中,在未接收到一組態更新指令之情況下,處理器將在下次執行操作時使用相同組態。
系統獲得同步處理器之一或多個組態約束(320)。同步處理器之控制硬體之自然組態約束之一者係可在一單一週期執行之組態更新指令之數目。舉例而言,一些同步處理器可支援僅同時執行1個、2個、4個 或8個組態更新指令。
其他組態約束可包含可在哪些週期執行組態指令。舉例而言,在一些實施方案中,可僅在每第N個週期執行一組態更新指令,例如,其中N係2、4或8。
其他組態約束可包含指定處理器之每一功率域可執行之組態更新之數目的功率域約束。
系統從更新窗及組態約束產生並排程組態更新指令(330)。各組態更新指令可更改指令在一不同迴圈迭代表現之方式。舉例而言,一組態更新指令可改變一暫存器讀取操作之暫存器。作為另一實例,一組態更新指令可改變同步處理器之一資料路徑中之一多工器之引數。此可導致一下游操作在一後續迴圈迭代使用一不同引數。一般而言,各組態更新指令經排程以在從處理中間表示產生之更新窗之一者內發生。系統可使用任何適當約束解決程序來排程可用更新窗內之全部所需組態更新指令。現將描述一例示性約束解決實例。
圖4係繪示在給出一同步處理器之約束之情況下排程組態更新指令之一圖式。圖4具有一水平時間軸,沿該水平時間軸繪示組態窗及更新窗。此係編譯器可在處理如上文描述之一程式之中間表示之後產生之資訊。
組態窗表示將由具有一特定組態之處理器執行特定指令的時間範圍。更新窗表示針對特定指令組態係不重要或被忽略的時間範圍。
因此,RegFile0Read指令452被繪示為具有一第一更新窗412及一組態窗415,其中將使用名為C1之一組態來執行指令452。在組態窗415期間,處理器將使用組態C1每一週期一次地重複執行指令452。
類似地,RegFile1Read指令454被繪示為具有一第二更新窗422及一組態窗425,其中將使用名為C2之一組態來執行指令454。在組態窗415期間,處理器將使用組態C2每一週期一次地重複執行指令452。值得注意的,第二更新窗422比第一更新窗412長得多,此意謂針對RegFile1Read指令454發佈一組態更新指令存在更大靈活性。
乘法指令456被繪示為具有一第一組態窗432及一第二組態窗434。在此等組態窗之各者期間,與如針對上文描述之暫存器讀取指令之情況重複操作相反,處理器可執行一乘法運算之多個週期。乘法指令具有一更新窗435。舉例而言,更新窗435可改變資料路徑以便改變乘法運算之一運算元。
加法指令458亦被繪示為具有在其期間將執行加法運算之多個週期的兩個組態窗442及444,以及在其期間可改變加法指令之一或多個運算元的兩個更新窗443及445。
編譯器可使用更新窗來判定滿足處理器之約束之組態更新指令之一排程。對於此實例,假定約束係處理器可僅在週期X、週期Y及週期Z執行組態更新指令。另外,處理器具有一額外約束,即僅兩個組態更新指令可在一單一週期執行。
週期X與三個更新窗重疊。週期Y與一個更新窗重疊。週期Z亦與三個更新窗重疊。因此,編譯器可在週期X及週期Z之三個重疊更新窗中選定至多兩個重疊更新窗。
編譯器可選取任何適當約束解決程序以判定如何排程五個組態更新。舉例而言,編譯器可從最受約束更新窗開始且朝向最不受約束更新窗工作。若無法找到解決方案,則編譯器可引發無法在處理器上執行 程式的一錯誤。
如圖4中展示,最受約束更新窗係僅與週期X、週期Y或週期Z之一單一者重疊的該等更新窗。存在僅與一單一週期重疊之四個此等窗:UW 412、UW 435、UW 443及UW 445。
因此,編譯器可在該等更新窗期間排程對應組態更新指令。換言之,編譯器可在週期X期間排程CU0 401及CU3 404且可在週期Z期間排程CU2 403及CU4 404。
接著,編譯器可從剩餘更新窗之考量消除已具有兩個組態更新之任何週期。因此,編譯器可從進一步考量移除週期X及週期Z,此係因為兩個週期被組態更新指令完全佔用。
唯一剩餘未指派更新窗係UW422,其仍與週期Y重疊。因此,編譯器可在週期Y期間排程CU1 402,且程序可結束,此係因為成功排程全部組態更新指令。
然而,考量其中第二更新窗422等於第一更新窗412之情況。在該情況中,將不存在針對排程問題的解決方案,此係因為將針對週期X排程至少三個組態更新指令。在該例項中,編譯器可引發無組態更新可成功排程的一錯誤。
圖5係繪示專用邏輯電路(特定言之,一ASIC 500)之一實例之一示意圖。ASIC 500包含為簡潔起見將被稱為運算塊的多個同步處理器。舉例而言,ASIC 500包含運算塊502,其中運算塊502之一或多者包含經組態以執行同步運算(諸如(例如)乘法運算及加法運算)的專用電路。特定言之,各運算塊502可包含一運算單元陣列,其中各單元經組態以執行數學運算(參見(例如)在圖6中展示且在本文中描述之例示性運算塊 200)。在一些實施方案中,運算塊502經配置成一格柵圖案,其中沿一第一維度501(例如,列)且沿一第二維度503(例如,行)配置運算塊502。例如,在圖5中展示之實例中,將運算塊502劃分成四個不同區段(510a、510b、510c、510d),各區段含有配置成向下18個運算塊×橫向16個運算塊之一格柵的288個運算塊。在一些實施方案中,圖5中展示之ASIC 500可被理解為包含細分/配置成單獨運算塊的一單一脈動(systolic)單元陣列,其中各運算塊包含單元、局部記憶體及匯流排線之一子集/子陣列(參見(例如)圖6)。
ASIC 500亦包含一向量處理單元504。向量處理單元504包含經組態以從運算塊502接收輸出且基於從運算塊502接收之輸出而運算向量運算輸出值的電路。舉例而言,在一些實施方案中,向量處理單元504包含經組態以對從運算塊502接收之輸出執行累加運算的電路(例如,乘法電路、加法器電路、移位器、及/或記憶體)。替代地或另外地,向量處理單元504包含經組態以將一非線性函數應用於運算塊502之輸出的電路。替代地或另外地,向量處理單元504產生正規化值、合併值或該兩者。可將向量處理單元之向量運算輸出儲存於一或多個運算塊中。舉例而言,可將向量運算輸出儲存於與一運算塊502唯一地相關聯之記憶體中。替代地或另外地,可將向量處理單元504之向量運算輸出傳送至ASIC 500外部之一電路,例如,作為一運算之一輸出。在一些實施方案中,將向量處理單元504分段,使得各片段包含經組態以從運算塊502之一對應集合接收輸出且基於該等所接收輸出而運算向量運算輸出的電路。例如,在圖5中展示之實例中,向量處理單元504包含沿第一維度501跨越之兩列,該等列之各者包含配置成32行的32個片段506。各片段506包含經組態以基 於來自運算塊502之一對應行之輸出(例如,一累加和)而執行如本文中說明之一向量運算的電路(例如,乘法電路、加法器電路、移位器、及/或記憶體)。可將向量處理單元504定位於如圖5中展示之運算塊502之格柵中間。向量處理單元504之其他位置配置亦係可行的。
ASIC 500亦包含一通信介面508(例如,介面508a、508b)。通信介面508包含串列器/解串器(SerDes)介面及一通用輸入/輸出(GPIO)介面之一或多個集合。SerDes介面經組態以接收ASIC 500之指令(例如,用於操作下文描述之可控制匯流排線之指令)及/或輸入資料且將資料從ASIC 500輸出至一外部電路。舉例而言,SerDes介面可經組態以按32Gbps、56Gbps、或包含於通信介面508內之SerDes介面集合上方之任何適合資料速率的一速率傳輸指令及/或輸入資料。GPIO介面經組態以提供用於除錯及/或啟動之一介面。舉例而言,ASIC 500可在其導通時運行一開機程式。若程式失敗,則一管理員可使用GPIO介面來對失敗源進行除錯。
ASIC 500進一步包含經組態以在通信介面508、向量處理單元504、及多個運算塊502之間輸送資料的多個可控制匯流排線(參見(例如)圖6)。可控制匯流排線包含(例如)沿格柵之第一維度501(例如,列)及格柵之第二維度503(例如,行)兩者延伸的導線。沿第一維度501延伸之可控制匯流排線之一第一子集可經組態以在一第一方向上(例如,至圖5之右側)傳送資料。沿第一維度501延伸之可控制匯流排線之一第二子集可經組態以在一第二方向上(例如,至圖5之左側)傳送資料。沿第二維度503延伸之可控制匯流排線之一第一子集可經組態以在一第三方向上(例如,至圖5之頂部)傳送資料。沿第二維度503延伸之可控制匯流排線之一第二子 集可經組態以在一第四方向上(例如,至圖5之底部)傳送資料。
各可控制匯流排線包含用於根據一時脈信號沿線輸送資料的多個輸送器元件,諸如正反器。經由一可控制匯流排線傳送資料可包含在各時脈週期將資料從該可控制匯流排線之一第一輸送器元件移位至該可控制匯流排線之一第二鄰近輸送器元件。在一些實施方案中,在一時脈週期之上升或下降邊緣上經由可控制匯流排線輸送資料。舉例而言,在一第一時脈週期在一可控制匯流排線之一第一輸送器元件(例如,一正反器)上存在之資料可在一第二時脈週期傳送至該可控制匯流排線之一第二輸送器元件(例如,一正反器)。在一些實施方案中,輸送器元件可按距彼此之一固定距離週期性地隔開。舉例而言,在一些情況中,各可控制匯流排線包含多個輸送器元件,其中各輸送器元件經定位於一對應運算塊502內或近接一對應運算塊502。
各可控制匯流排線亦包含多個多工器及/或解多工器。一可控制匯流排線之一多工器/解多工器經組態以在匯流排線與ASIC晶片500之一組件之間傳送資料。舉例而言,一可控制匯流排線之一多工器/解多工器可經組態以向及/或從一運算塊502、向及/或從向量處理單元504、或向及/或從通信介面508傳送資料。在運算塊502、向量處理單元504及通信介面之間傳送資料可包含基於待發生之所要資料傳送而將控制信號發送至多工器。可將控制信號儲存於直接耦合至多工器及/或解多工器之暫存器中。接著,控制信號之值可判定(例如)什麼資料從一源(例如,一運算塊502或一向量處理單元504內之記憶體)傳送至一可控制匯流排線或替代地什麼資料從可控制匯流排線傳送至一接收點(sink)(例如,一運算塊502或一向量處理單元504內之記憶體)。
可控制匯流排線經組態以依一局部級控制,使得各運算塊、向量處理單元及/或通信介面包含其自身用於操控通過該運算塊、向量處理單元及/或通信介面之可控制匯流排線之控制元件集合。舉例而言,各運算塊、1D向量處理單元及通信介面可包含用於控制至及來自該運算塊、1D向量處理單元及通信介面之資料傳送之輸送器元件、多工器及/或解多工器之一對應集合。
為最小化與ASIC晶片500之操作相關聯之延時,運算塊502及向量處理單元504可經定位以減小資料在各種組件之間行進之距離。在一特定實施方案中,可將運算塊502及通信介面508兩者分割成多個區段,其中運算塊區段及通信介面區段兩者經配置使得減小資料在一運算塊與一通信介面之間行進之最大距離。例如,在一些實施方案中,運算塊502之一第一群組可經配置成通信介面508之一第一側上之一第一區段,且運算塊502之一第二群組可經配置成通信介面之一第二側上之一第二區段。因此,與其中全部運算塊502經配置成通信介面之一側上之一單一區段的一組態相比,從一通信介面至最遠運算塊之距離可減小一半。
替代地,運算塊可經配置成不同數目個區段,諸如四個區段。例如,在圖5中展示之實例中,ASIC 500之多個運算塊502經配置成多個區段510(510a、510b、510c、510d)。各區段510包含配置成一格柵圖案的類似數目個運算塊502(例如,各區段510可包含配置成16個列及16個行之256個運算塊)。亦將通信介面508劃分成多個區段:配置於運算塊502之區段510之任一側上之一第一通信介面508a及一第二通信介面508b。第一通信介面508a可透過可控制匯流排線耦合至ASIC晶片500之左側上之兩個運算塊區段510a、510c。第二通信介面508b可透過可控制 匯流排線耦合至ASIC晶片500之右側上之兩個運算塊區段510b、510d。因此,與其中僅一單一通信介面可用之一配置相比,資料向及/或從一通信介面508行進之最大距離(及因此與資料傳播相關聯之延時)可減半。運算塊502及通信介面508之其他耦合配置亦可減少資料延時。可藉由將控制信號提供至可控制匯流排線之輸送器元件及多工器而程式化運算塊502及通信介面508之耦合配置。
在一些實施方案中,一或多個運算塊502經組態以相對於可控制匯流排線及/或ASIC 500內之其他運算塊(本文中被稱為「控制運算塊」)起始讀取及寫入操作。ASIC 500內之剩餘運算塊可經組態以基於輸入資料而執行運算(例如,以運算層推論)。在一些實施方案中,控制運算塊包含與ASIC 500內之其他運算塊相同之組件及組態。可將控制運算塊添加為ASIC 500之一或若干額外運算塊、一或若干額外列、或一或若干額外行。舉例而言,對於其中各運算塊502經組態以對輸入資料執行一運算之運算塊502之一對稱格柵,可包含控制運算塊之一或多個額外列以處置用於運算塊502對輸入資料執行運算之讀取及寫入操作。例如,各區段510包含18列運算塊,其中最後兩列運算塊可包含控制運算塊。在一些實施方案中,提供單獨控制運算塊增加用於執行運算之其他運算塊中可用之記憶體的量。然而,不需要專用於提供如本文中描述之控制之單獨運算塊,且在一些情況中,未提供單獨控制運算塊。實情係,各運算塊可在其局部記憶體中儲存用於起始該運算塊之讀取及寫入操作之指令。
此外,雖然圖5中展示之各區段510包含配置成18列×16行的運算塊,但一區段中之運算塊502之數目及其等配置可係不同的。舉例而言,在一些情況中,區段510可包含相等數目個列及行。
此外,儘管在圖5中被展示為劃分成四個區段,然可將運算塊502劃分成其他不同分組。舉例而言,在一些實施方案中,將運算塊502分組成兩個不同區段,諸如向量處理單元504上方(例如,較接近圖5中展示之頁面之頂部)之一第一區段及向量處理單元504下方(例如,較接近圖5中展示之頁面之底部)之一第二區段。在此一配置中,各區段可含有(例如)配置成向下(沿方向506)18個運算塊×橫向(沿方向501)32個運算塊之一格柵的576個運算塊。區段可含有其他總數個運算塊且可經配置成不同大小陣列。在一些情況中,藉由ASIC 500之硬體特徵劃定區段之間之劃分。舉例而言,如圖5中展示,可藉由向量處理單元504將區段510a、510b與區段510c、510d分離。
亦可藉由相對於運算塊區段510居中定位向量處理單元504而減少延時。在一些實施方案中,運算塊502之一第一半經配置於向量處理單元504之一第一側上,且運算塊502之一第二半經配置於向量處理單元504之一第二側上。
舉例而言,在圖5中展示之ASIC晶片500中,向量處理單元504包含兩個區段(例如,兩列),該兩個區段之各者包含匹配運算塊502之行數之若干片段506。各片段506可經定位且經組態以從運算塊之一區段510內之運算塊502之一對應行接收一輸出,諸如一累加和。在圖5中展示之實例中,定位於向量處理單元504之一第一側上(例如,向量處理單元504上方)之運算塊區段510a、510b可透過可控制匯流排線耦合至片段506之頂列。定位於向量處理單元504之一第二側上(例如,向量處理單元504下方)之運算塊區段510c、510d可透過可控制匯流排線耦合至片段506之底列。此外,可將處理單元504上方第一半內之各運算塊502定位於距向 量處理單元504之與處理單元504下方第二半內之一各別運算塊502相同之一距離處,使得兩半之間之整體延時不存在差異。例如,可將第一區段510a中之列i中之運算塊502(其中變數i對應於列位置)定位於遠離向量處理單元504之與運算塊之一第二區段(例如,區段510c)中之列m-1-i中之運算塊502相同的距離處(其中m表示各區段中之列之總數,且假定列在兩個區段中沿相同方向遞增)。
與其中將向量處理單元504定位於全部運算塊502之一遠端(例如,底部)處的一配置相比,以此方式組態運算塊區段510可使資料向及/或從向量處理單元504行進之距離(及因此與資料傳播相關聯之延時)減半。例如,與透過運算塊502之一行從區段510a接收一累加和相關聯之延時可係與透過運算塊502之一行從區段510a及510c接收一累加和相關聯之延時的一半。可藉由將控制信號提供至可控制匯流排線之輸送器元件及多工器而程式化運算塊502及向量處理單元504之耦合配置。
在ASIC晶片500之操作期間,啟動輸入可在運算塊之間移位。舉例而言,啟動輸入可沿第一維度501移位。另外,來自由運算塊502執行之運算之輸出(例如,由運算塊502內之運算陣列執行之運算之輸出)可沿第二維度503在運算塊之間移位。
在一些實施方案中,可控制匯流排線可實體上硬接線以導致資料跳過運算塊502以減少與ASIC晶片500之操作相關聯之延時。舉例而言,由一第一運算塊502執行之一運算之一輸出可沿格柵之第二維度503移位至一第二運算塊502,該第二運算塊502經定位成遠離第一運算塊502至少一個運算塊,因此跳過其間之運算塊。在另一實例中,來自一第一運算塊502之一啟動輸入可沿格柵之第一維度501移位至一第二運算塊 502,該第二運算塊502經定位成遠離第一運算塊502至少一個運算塊,因此跳過其間之運算塊。藉由在使啟動輸入或輸出資料移位時跳過至少一個運算塊,可減小整體資料路徑長度,使得更快速地傳送資料(例如,無需利用一時脈週期以將資料儲存於跳過運算塊處),且減少延時。
在一例示性實施方案中,區段510a之各行內之各運算塊502可透過可控制匯流排線組態以沿第二維度503朝向向量處理單元504傳遞輸出資料。各行內之運算塊502可進一步經組態以藉由跳過下一鄰近運算塊(例如,透過運算塊之間之可控制匯流排線之實體硬接線)而朝向向量處理單元504傳遞資料。即,第一區段510a中之一位置(i,j)=(0,0)處之一運算塊502(其中變數i對應於列位置且變數j對應於行位置)可經硬接線以將輸出資料傳遞至一位置(i,j)=(2,0)處之一運算塊502;類似地,第一區段510a中之一位置(i,j)=(2,0)處之運算塊502可經硬接線以將輸出資料傳遞至一位置(i,j)=(4,0)處之一運算塊502等等。未被跳過之最後運算塊(例如,定位於位置(i,j)=(16,0)處之運算塊502)將輸出資料傳遞至向量處理單元504。對於具有18列運算塊之一區段510,諸如圖5中展示之實例,運算塊跳過確保一區段510內之全部運算塊遠離向量處理單元504至多9個「運算塊跳躍(tile hop)」,因此藉由將資料路徑長度及所得資料延時減小一半而改良ASIC晶片500效能。
在另一例示性實施方案中,區段510a、510c之各列內及區段510b、510d之各列內之各運算塊502可透過可控制匯流排線組態以沿第一維度501傳遞啟動輸入。舉例而言,區段510a、510b、510c、510d之一些運算塊可經組態以朝向格柵500之一中心或朝向通信介面508傳遞啟動輸入。各列內之運算塊502可進一步經組態以(例如)藉由硬接線運算塊之 間之可控制匯流排線而跳過鄰近運算塊。舉例而言,第一區段510a中之一位置(i,j)=(0,0)處之一運算塊502(其中變數i對應於列位置且變數j對應於行位置)可經組態以將啟動輸入傳遞至一位置(i,j)=(0,2)處之一運算塊502;類似地,第一區段510a中之一位置(i,j)=(0,2)處之一運算塊502可經組態以將啟動輸入傳遞至一位置(i,j)=(0,4)處之一運算塊502等等。在一些情況中,未被跳過之最後運算塊(例如,定位於位置(i,j)=(0,14)處之運算塊502)未將啟動輸入傳遞至另一運算塊上。
類似地,被跳過之運算塊可在相反方向上傳遞啟動輸入。舉例而言,第一區段510a中之一位置(i,j)=(0,15)處之一運算塊502(其中變數i對應於列位置且變數j對應於行位置)可經組態以將啟動輸入傳遞至一位置(i,j)=(0,13)處之一運算塊502;類似地,第一區段510a中之一位置(i,j)=(0,13)處之一運算塊502可經組態以將啟動輸入傳遞至一位置(i,j)=(0,11)處之一運算塊502等等。在一些情況中,未被跳過之最後運算塊(例如,定位於位置(i,j)=(0,1)處之運算塊502)未將啟動輸入傳遞至另一運算塊上。藉由跳過運算塊,在一些實施方案中可藉由使資料路徑長度及所得資料延時減小一半而改良ASIC晶片500效能。
如本文中說明,在一些實施方案中,運算塊502之一或多者專用於儲存控制資訊。即,專用於儲存控制資訊之運算塊502未參與對諸如權重輸入及啟動輸入之輸入資料執行計算。控制資訊可包含(例如)用於在ASIC晶片500之操作期間組態可控制匯流排線,使得可在ASIC晶片500上四處移動資料的控制資料。可以控制信號之形式將控制資料提供至可控制匯流排線以用於控制可控制匯流排線之輸送器元件及多工器。控制資料指定可控制匯流排線之特定輸送器元件是否將資料傳遞至可控制匯流 排線之一下一輸送器元件,使得根據一預定排程在運算塊之間傳送資料。控制資料額外地指定是否從或向一匯流排線傳送資料。舉例而言,控制資料可包含控制信號,該等控制信號引導一多上器以將資料從一匯流排線傳送至記憶體及/或一運算塊內之其他電路。在另一實例中,控制資料可包含控制信號,該等控制信號引導一多工器以將資料從運算塊內之記憶體及/或電路傳送至匯流排線。在另一實例中,控制資料可包含控制信號,該等控制信號引導一多工器以在一匯流排線與通信介面508之間及/或在匯流排線與向量處理單元504之間傳送資料。替代地,如本文中揭示,未使用專用控制運算塊。實情係,在此等情況中,各運算塊之局部記憶體儲存該特定運算塊之控制資訊。
圖6繪示用於ASIC晶片500中之一運算塊600之一實例。各運算塊600包含局部記憶體602及耦合至記憶體602的一運算陣列604。局部記憶體602包含定位成近接運算陣列604的實體記憶體。運算陣列604包含多個單元606。運算陣列604之各單元606包含經組態以基於至單元606之資料輸入(諸如啟動輸入及權重輸入)而執行一運算(例如,一乘法及累加運算)的電路。各單元可在時脈信號之一週期執行運算(例如,乘法及累加運算)。運算陣列604可具有比行更多之列、比列更多之行、或相等數目個行及列。例如,在圖6中展示之實例中,運算陣列604包含配置成8列及8行的64個單元。其他運算陣列大小亦係可行的,諸如具有16個單元、32個單元、128個單元、或256個單元等等之運算陣列。各運算塊可包含相同數目個單元及/或相同大小運算陣列。接著,可針對ASIC晶片並行執行之操作之總數取決於具有晶片內之相同大小運算陣列之運算塊之總數。舉例而言,對於圖5中展示之含有大約1150個運算塊之ASIC晶片500,此意 謂每一週期可並行執行大約72,000個運算。可使用之時脈速度之實例包含(但不限於)225MHz、500MHz、750MHz、1Ghz、1.25GHz、1.5GHz、1.75GHz或2GHz。各個別運算塊之運算陣列604係較大脈動運算塊陣列之一子集,如圖5中繪示。
含於運算塊600中之記憶體602可包含(例如)隨機存取記憶體(RAM),諸如SRAM。可代替地使用其他記憶體。各記憶體602可經組態以儲存與圖5中繪示之ASIC晶片之n個運算塊502相關聯之總記憶體之1/n。記憶體602可被提供為一單一晶片或多個晶片。舉例而言,圖6中展示之記憶體602被提供為四個單埠SRAM,其等之各者耦合至運算陣列604。替代地,記憶體602可被提供為兩個單埠SRAM或八個單埠SRAM以及其他組態。在錯誤校正編碼之後,記憶體之聯合容量可係(但不限於)(例如)16kB、32kB、64kB或128kB。藉由在運算陣列本端提供實體記憶體602,在一些實施方案中可大大減小ASIC 500之接線密度。在其中記憶體集中於ASIC 500內之一替代組態中,與如本文中描述般在本端提供相反,記憶體頻寬之各位元可能需要一導線。覆蓋ASIC 500之各運算塊所需之導線之總數將遠遠超過ASIC 100內之可用空間。相比之下,運用針對各運算塊提供之專用記憶體,可實質上減小跨越ASIC 500之區域所需之總數。
運算塊600亦包含可控制匯流排線。可將可控制匯流排線分類成多個不同群組。舉例而言,可控制匯流排線可包含經組態以沿各基本方向在運算塊之間傳送資料的通用可控制匯流排線610之一第一群組。即,可控制匯流排線610之第一群組可包含:匯流排線610a,其等經組態以沿運算塊之格柵之第一維度501朝向一第一方向(被稱為圖6中之「東」) 傳送資料;匯流排線610b,其等經組態以沿運算塊之格柵之第一維度101朝向一第二方向(被稱為圖6中之「西」)傳送資料,其中該第二方向與該第一方向相反;匯流排線610c,其等經組態以沿運算塊之格柵之第二維度103朝向一第三方向(被稱為圖6中之「北」)傳送資料;及匯流排線610d,其等經組態以沿運算塊之格柵之第二維度103朝向一第四方向(被稱為圖6中之「南」)傳送資料,其中該第四方向與該第三方向相反。通用匯流排線610可經組態以攜載控制資料、啟動輸入資料、來自及/或至通信介面之資料、來自及/或至向量處理單元之資料、及待由運算塊600儲存及/或使用之資料(例如,權重輸入)。運算塊600可包含用於控制可控制匯流排線且因此向及/或從運算塊600及/或從記憶體602路由資料的一或多個控制元件621(例如,正反器及多工器)。
可控制匯流排線亦可包含可控制匯流排線之一第二群組,本文中被稱為運算陣列部分和匯流排線620。運算陣列部分和匯流排線620可經組態以攜載從由運算陣列604執行之運算輸出之資料。舉例而言,匯流排線620可經組態以攜載從運算陣列604中之列獲得之部分和資料,如圖6中展示。在此情況中,匯流排線620之數目將匹配陣列604中之列之數目。例如,對於一8×8運算陣列,將存在8個部分和匯流排線620,其等之各者耦合至運算陣列604中之一對應列之輸出。運算陣列輸出匯流排線620可進一步經組態以耦合至ASIC晶片內之另一運算塊,例如,作為ASIC晶片內之另一運算塊之一運算陣列之輸入。舉例而言,運算塊600之陣列部分和匯流排線620可經組態以接收定位成遠離運算塊600至少一個運算塊之一第二運算塊之一運算陣列之輸入(例如,部分和620a)。接著,將運算陣列604之輸出與部分和線620相加以產生新部分和620b,該新部 分和620b可從運算塊600輸出。接著,可將部分和620b傳遞至另一運算塊或替代地傳遞至向量處理單元。舉例而言,各匯流排線620可耦合至向量處理單元之一對應片段(諸如圖5中之片段506)。
如關於圖5說明,可控制匯流排線可包含諸如經組態以允許沿匯流排線輸送資料之輸送器元件(例如,正反器)的電路。在一些實施方案中,各可控制匯流排線針對各運算塊包含一對應輸送器元件。如關於圖5進一步說明,可控制匯流排線可包含諸如經組態以允許在ASIC晶片之不同運算塊、向量處理單元及通信介面之間傳送資料之多工器的電路。可將多工器定位於存在資料之一源或接收點之任何位置。舉例而言,在一些實施方案中,如圖6中展示,可將諸如多工器之控制電路621定位於可控制匯流排線之交叉點處(例如,通用匯流排線610a及610d之交叉點處、通用匯流排線610a及610c之交叉點處、通用匯流排線610b及610d之交叉點處、及/或通用匯流排線610b及610c之交叉點處)。匯流排線交叉點處之多工器可經組態以在交叉點處在匯流排線之間傳送資料。因此,藉由多工器之適當操作,可改變資料在可控制匯流排線上方行進之方向。舉例而言,可將在通用匯流排線610a上沿第一維度101行進之資料傳送至通用匯流排線610d,使得資料代替地沿第二維度103行進。在一些實施方案中,多工器可經定位成鄰近運算塊600之記憶體602,使得可向及/或從記憶體602傳送資料。
可在數位電子電路中、在有形體現之電腦軟體或韌體中、在電腦硬體中(包含本說明書中揭示之結構及其等結構等效物)、或在其等之一或多者之組合中實施本說明書中描述之標的及功能操作之實施例。本說明書中描述之標的之實施例可經實施為一或多個電腦程式,即,在一有 形非暫時性儲存媒體上編碼以由資料處理設備執行或控制資料處理設備之操作之電腦程式指令之一或多個模組。電腦儲存媒體可係一機器可讀儲存裝置、一機器可讀儲存基板、一隨機或串列存取記憶體裝置或其等之一或多者之一組合。替代地或另外地,程式指令可在一人工產生之傳播信號(例如,一機器產生之電氣、光學或電磁信號)上編碼,該信號經產生以對資訊進行編碼以傳輸至適合接收器設備以由一資料處理設備執行。
術語「資料處理設備」係指資料處理硬體且涵蓋用於處理資料之全部種類之設備、裝置及機器,包含(藉由實例)一可程式化處理器、一電腦或多個處理器或電腦。設備亦可係或進一步包含專用邏輯電路,例如,一FPGA(場可程式化閘陣列)或一ASIC(特定應用積體電路)。除硬體以外,設備可視情況包含針對電腦程式建立一執行環境之程式碼,例如,組成處理器韌體、一協定堆疊、一資料庫管理系統、一作業系統或其等之一或多者之一組合之程式碼。
亦可被稱為或描述為一程式、軟體、一軟體應用程式、一應用程式、一模組、一軟體模組、一指令碼或程式碼之一電腦程式可以任何形式之程式設計語言(包含編譯或解譯語言,或宣告式或程序語言)撰寫,且其可以任何形式(包含作為一獨立程式或作為一模組、組件、副常式,或適於用於一運算環境中之其他單元)部署。一程式可能但非必需對應於一檔案系統中之一檔案。一程式可儲存於保存其他程式或資料(例如,儲存於一標記語言文件中之一或多個指令碼)之一檔案之一部分中、儲存於專用於討論中程式之一單一檔案中、或儲存於多個協調檔案(例如,儲存程式碼之一或多個模組、副程式或部分之檔案)中。一電腦程式可經部署以在一個電腦上執行或在定位於一個位點處或跨多個位點分佈且 藉由一資料通信網路互連之多個電腦上執行。
一或多個電腦之一系統經組態以執行特定操作或動作意謂系統已在其上安裝在操作中導致系統執行操作或動作之軟體、韌體、硬體或其等之一組合。一或多個電腦程式經組態以執行特定操作或動作意謂一或多個程式包含在由資料處理設備執行時導致設備執行操作或動作的指令。
如本說明書中使用,一「引擎」或「軟體引擎」係指提供不同於輸入之一輸出之一軟體實施之輸入/輸出系統。一引擎可係一編碼功能性區塊,諸如一程式庫、一平台、一軟體開發工具包(「SDK」)或一物件。可在包含一或多個處理器及電腦可讀媒體之任何適當類型之運算裝置(例如,伺服器、行動電話、平板電腦、筆記型電腦、音樂播放器、電子書閱讀器、膝上型或桌上型電腦、PDA、智慧型電話或其他固定或可攜帶裝置)上實施各引擎。此外,可在相同運算裝置上或在不同運算裝置上實施引擎之兩者或兩者以上。
可藉由執行一或多個電腦程式之一或多個可程式化電腦執行本說明書中描述之程序及邏輯流程以藉由對輸入資料操作且產生輸出而執行功能。亦可藉由專用邏輯電路(例如,一FPGA或一ASIC),或藉由專用邏輯電路及一或多個程式化電腦之一組合執行程序及邏輯流程。
適於執行一電腦程式之電腦可基於通用或專用微處理器或該兩者,或任何其他種類之中央處理單元。通常,一中央處理單元將從一唯讀記憶體或一隨機存取記憶體或該兩者接收指令及資料。一電腦之必要元件係用於執行(performing或executing)指令之一中央處理單元及用於儲存指令及資料之一或多個記憶體裝置。中央處理單元及記憶體可藉由專用 邏輯電路補充或併入專用邏輯電路中。通常,一電腦亦將包含用於儲存資料之一或多個大容量儲存裝置(例如,磁碟、磁光碟或光碟),或操作地耦合以從該一或多個大容量儲存裝置接收資料或將資料傳送至該一或多個大容量儲存裝置或該兩者。然而,一電腦未必具有此等裝置。此外,一電腦可嵌入在另一裝置(例如,一行動電話、一個人數位助理(PDA)、一行動音訊或視訊播放器、一遊戲主控台、一全球定位系統(GPS)接收器或一可攜帶儲存裝置,例如,一通用串列匯流排(USB)快閃隨身碟,僅舉幾例)中。
適於儲存電腦程式指令及資料之電腦可讀媒體包含全部形式之非揮發性記憶體、媒體及記憶體裝置,包括(藉由實例):半導體記憶體裝置,例如,EPROM、EEPROM及快閃記憶體裝置;磁碟,例如,內部硬碟或可移除磁碟;磁光碟;及CD-ROM及DVD-ROM光碟。
為提供與一使用者的互動,可在具有用於將資訊顯示給使用者之一顯示裝置(例如,一CRT(陰極射線管)或LCD(液晶顯示器)監視器)及一鍵盤及指標裝置(例如,一滑鼠、軌跡球或一存在敏感顯示器或使用者可藉由其提供輸入至電腦之其他表面)之一電腦上實施本說明書中描述之標的之實施例。亦可使用其他種類之裝置來提供與一使用者的互動;舉例而言,提供給使用者之回饋可係任何形式之感覺回饋,例如,視覺回饋、聽覺回饋或觸覺回饋;且來自使用者之輸入可以任何形式接收,包含聲學、語音或觸覺輸入。另外,一電腦可藉由將文件發送至由使用者使用之一裝置且從該裝置接收文件而與一使用者互動;舉例而言,藉由回應於從一使用者之裝置上之一網頁瀏覽器接收之請求而將網頁發送至網頁瀏覽器。再者,一電腦可藉由將文字訊息或其他形式之訊息發送至運行一傳訊 應用程式且作為回報從使用者接收回應訊息之一個人裝置(例如,一智慧型電話)而與一使用者互動。
可在一運算系統中實施本說明書中描述之標的之實施例,該運算系統包含一後端組件(例如,作為一資料伺服器),或包含一中間組件(例如,一應用程式伺服器),或包含一前端組件(例如,具有一使用者可透過其與本說明書中描述之標的之一實施方案互動之一圖形使用者介面、一網頁瀏覽器或一應用程式之一用戶端電腦),或一或多個此等後端組件、中間組件或前端組件之任何組合。系統之組件可藉由任何形式或介質之數位資料通信(例如,一通信網路)互連。通信網路之實例包含一區域網路(LAN)及一廣域網路(WAN),例如,網際網路。
實施例1係一種方法,其包括:接收指定待由一同步處理器之複數個各別組件執行之複數個操作之一程式之一中間表示,其中該中間表示將一各別時脈週期值指派給該複數個操作之各操作,該操作在該各別時脈週期值經排程以由該同步處理器執行;處理該中間表示以針對需要一硬體組態更新之該中間表示中之各操作產生一各別更新窗,其中該更新窗指定一時間範圍,在該時間範圍期間可執行一組態更新指令以實現該硬體組態更新;獲得該同步處理器之一或多個組態約束;及產生並排程各別在該等更新窗之一者期間且根據該同步處理器之該等組態約束發生之組態更新指令。
實施例2係實施例1之方法,其中該等組態約束包括該同步處理器可在一單一週期執行之最大數目個組態更新指令。
實施例3係實施例2之方法,其中該等組態約束包括可在其執行組態更新指令之有限數目個週期。
實施例4係實施例1至3中任一項之方法,其中從該等更新窗及組態約束產生並排程組態更新指令包括在將組態更新指令分配給其他更新窗之前將組態更新指令分配給最大約束更新窗。
實施例5係實施例1至4中任一項之方法,其中該等組態更新指令之一或多者改變一讀取操作之暫存器。
實施例6係實施例1至5中任一項之方法,其中該等組態更新指令之一或多者改變該同步處理器之一資料路徑中之一多工器引數。
實施例7係實施例1至6中任一項之方法,其中該同步處理器經組態以在尚未發佈組態更新指令之情況下用相同組態執行各操作。
實施例8係前述實施例中任一項之方法,其進一步包括運用該同步處理器執行該等操作及根據該等組態更新指令來更新該同步處理器之該組態。
實施例9係一種方法,其包括:接收指定待由一同步處理器之複數個各別組件執行之複數個操作之一程式;針對該複數個組件之各組件獲得待由該組件執行之該程式之各操作之一各別時脈延時值;基於該程式之各操作之該等各別時脈延時值而產生用於執行該程式之時脈時序約束;及基於該等時脈時序約束而產生將一各別時脈週期值指派給該複數個操作之各操作之該程式之一中間表示。
實施例10係實施例9之方法,其中該等操作進一步包括:處理該中間表示以針對需要一硬體組態更新之該中間表示中之各操作產生一各別更新窗,其中該更新窗指定一時間範圍,在該時間範圍期間可執行一組態更新指令以實現該硬體組態更新;獲得該同步處理器之一或多個組態約束;產生並排程各別在該等更新窗之一者期間且根據該同步處理器之該等組態約束發生之組態更新指令。
實施例11係實施例10之方法,其中該等組態約束包括該同步處理器可在一單一週期執行之最大數目個組態更新指令。
實施例12係實施例11之方法,其中該等組態約束包括可在其上執行組態更新指令之有限數目個週期。
實施例13係實施例10之方法,其中從該等更新窗及組態約束產生並排程組態更新指令包括在將組態更新指令分配給其他更新窗之前將組態更新指令分配給最大約束更新窗。
實施例14係實施例9至13中任一項之方法,其中該程式係延時不敏感的。
實施例15係實施例14之方法,其中該程式未指定操作之一順序或該等操作之間之時序。
實施例16係實施例15之方法,其中該程式未指定該同步處理器之組件之延時資訊。
實施例17係實施例9至16中任一項之方法,其中該程式之該中間表示可將負時脈週期值指派給該複數個操作之各操作。
實施例18係實施例9至17中任一項之方法,其中該等操作 進一步包括從輸入程式中之變數產生操作之間之相依性資訊。
實施例19係一種包括一或多個電腦及儲存指令之一或多個儲存裝置的系統,該等指令可操作以在由該一或多個電腦執行時導致該一或多個電腦執行前述實施例中任一項之方法。
實施例20係一種編碼有一電腦程式的電腦儲存媒體,該程式包括可操作以在由資料處理設備執行時導致該資料處理設備執行實施例1至18中任一項之方法的指令。
雖然本說明書含有許多特定實施方案細節,但此等不應被解釋為對任何發明之範疇或對可主張之內容之範疇之限制,而係被解釋為可能特定於特定發明之特定實施例之特徵之描述。本說明書中在單獨實施例之背景內容中描述之某些特徵亦可在一單一實施例中組合實施。相反地,在一單一實施例之背景內容中描述之各種特徵亦可在多個實施例中分別或以任何適合子組合實施。此外,儘管特徵在上文中可被描述為以某些組合起作用且甚至最初如此主張,然來自一所主張組合之一或多個特徵在一些情況中可從組合刪除,且所主張組合可能係關於一子組合或一子組合之變化例。
類似地,雖然在圖式中以一特定順序描繪操作,但此不應被理解為要求以展示之特定順序或以循序順序執行此等操作,或執行全部繪示操作以達成所要結果。在某些情境中,多任務及並行處理可係有利的。此外,上文中描述之實施例中之各種系統模組及組件之分離不應被理解為在全部實施例中要求此分離,且應瞭解,所描述之程式組件及系統通常可一起整合於一單一軟體產品中或封裝至多個軟體產品中。
已描述標的之特定實施例。其他實施例在以下發明申請專 利範圍之範疇內。舉例而言,發明申請專利範圍中敘述之動作可按一不同順序執行且仍達成所要結果。作為一個實例,附圖中描繪之程序不一定要求所展示之特定順序,或循序順序以達成所要結果。在特定一些情況中,多任務及並行處理可係有利的。
110:步驟
120:步驟
130:步驟
140:步驟

Claims (20)

  1. 一種用於編譯針對同步處理器之程式之方法,其包括:接收指定待由一同步處理器之複數個各別組件執行之複數個操作之一程式之一中間表示,其中該中間表示基於用於該操作之一各別時脈延時值將一各別時脈週期值指派給該複數個操作之各操作,該操作在該各別時脈週期值經排程以由該同步處理器執行;處理該中間表示以針對需要一硬體組態更新之該中間表示中之各操作產生一各別更新窗,其中該更新窗指定一時間範圍,在該時間範圍期間,一組態針對該操作係不重要或被忽略且可執行一組態更新指令以實現該硬體組態更新;獲得該同步處理器之一或多個組態約束;及產生並排程各別在該等更新窗之一者期間且根據該同步處理器之該等組態約束發生之組態更新指令。
  2. 如請求項1之方法,其中該等組態約束包括該同步處理器可在一單一週期執行之最大數目個組態更新指令。
  3. 如請求項2之方法,其中該等組態約束包括可在其執行組態更新指令之有限數目個週期。
  4. 如請求項1至3中任一項之方法,其中從該等更新窗及組態約束產生並排程組態更新指令包括在將組態更新指令分配給其他更新窗之前將組態 更新指令分配給最大約束更新窗。
  5. 如請求項1至3中任一項之方法,其中該等組態更新指令之一或多者改變一讀取操作之暫存器。
  6. 如請求項1至3中任一項之方法,其中該等組態更新指令之一或多者改變該同步處理器之一資料路徑中之一多工器引數。
  7. 如請求項1至3中任一項之方法,其中該同步處理器經組態以在尚未發佈組態更新指令之情況下用相同組態執行各操作。
  8. 如請求項1至3中任一項之方法,其進一步包括運用該同步處理器執行該等操作及根據該等組態更新指令來更新該同步處理器之該組態。
  9. 一種用於編譯針對同步處理器之程式之方法,其包括:接收指定待由一同步處理器之複數個各別組件執行之複數個操作之一程式;針對該複數個組件之各組件獲得待由該組件執行之該程式之各操作之一各別時脈延時值;基於該程式之各操作之該等各別時脈延時值而產生用於執行該程式之時脈時序約束;及基於該等時脈時序約束而產生將一各別時脈週期值指派給該複數個操作之各操作之該程式之一中間表示。
  10. 如請求項9之方法,其中該等操作進一步包括:處理該中間表示以針對需要一硬體組態更新之該中間表示中之各操作產生一各別更新窗,其中該更新窗指定一時間範圍,在該時間範圍期間,一組態針對該操作係不重要或被忽略且可執行一組態更新指令以實現該硬體組態更新;獲得該同步處理器之一或多個組態約束;產生並排程各別在該等更新窗之一者期間且根據該同步處理器之該等組態約束發生之組態更新指令。
  11. 如請求項10之方法,其中該等組態約束包括該同步處理器可在一單一週期執行之最大數目個組態更新指令。
  12. 如請求項11之方法,其中該等組態約束包括可在其上執行組態更新指令之有限數目個週期。
  13. 如請求項10之方法,其中從該等更新窗及組態約束產生並排程組態更新指令包括在將組態更新指令分配給其他更新窗之前將組態更新指令分配給最大約束更新窗。
  14. 如請求項9至13中任一項之方法,其中該程式係延時不敏感的。
  15. 如請求項14之方法,其中該程式未指定操作之一順序或該等操作之 間之時序。
  16. 如請求項15之方法,其中該程式未指定該同步處理器之組件之延時資訊。
  17. 如請求項9至13中任一項之方法,其中該程式之該中間表示可將負時脈週期值指派給該複數個操作之各操作。
  18. 如請求項9至13中任一項之方法,其中該等操作進一步包括從輸入程式中之變數產生操作之間之相依性資訊。
  19. 一種用於編譯針對同步處理器之程式之系統,其包括:一或多個電腦及儲存指令之一或多個儲存裝置,該等指令可操作以在由該一或多個電腦執行時導致該一或多個電腦執行請求項1至18中任一項之方法。
  20. 一種編碼有一電腦程式的電腦儲存媒體,該程式包括可操作以在由資料處理設備執行時導致該資料處理設備執行請求項1至18中任一項之方法的指令。
TW109128681A 2019-08-22 2020-08-21 用於編譯針對同步處理器之程式之方法及系統 TWI767304B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201962890495P 2019-08-22 2019-08-22
US62/890,495 2019-08-22

Publications (2)

Publication Number Publication Date
TW202109289A TW202109289A (zh) 2021-03-01
TWI767304B true TWI767304B (zh) 2022-06-11

Family

ID=72470582

Family Applications (1)

Application Number Title Priority Date Filing Date
TW109128681A TWI767304B (zh) 2019-08-22 2020-08-21 用於編譯針對同步處理器之程式之方法及系統

Country Status (6)

Country Link
US (1) US20220276847A1 (zh)
EP (1) EP4004724A1 (zh)
KR (1) KR20220032630A (zh)
CN (1) CN114270308A (zh)
TW (1) TWI767304B (zh)
WO (1) WO2021035187A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220075834A1 (en) * 2020-09-10 2022-03-10 Taboola.Com Ltd. Semantic meaning association to components of digital content
WO2023069180A1 (en) * 2021-10-22 2023-04-27 ALTMAN, Daniel, E. Real-time operating system with a cpu cycle time base

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7523441B2 (en) * 2004-04-16 2009-04-21 National Instruments Corporation Implementing a synchronous reactive system in a graphical program
US20100122105A1 (en) * 2005-04-28 2010-05-13 The University Court Of The University Of Edinburgh Reconfigurable instruction cell array
CN102326126A (zh) * 2009-02-18 2012-01-18 杜比实验室特许公司 用于将多个安全时钟同步的方法和系统
CN103019656A (zh) * 2012-12-04 2013-04-03 中国科学院半导体研究所 可动态重构的多级并行单指令多数据阵列处理系统
TWI531896B (zh) * 2010-12-22 2016-05-01 威盛電子股份有限公司 多核心處理器的電源狀態同步化
US9785587B2 (en) * 2012-07-09 2017-10-10 Commissariat A L'energie Atomique Et Aux Energies Alternatives Method for executing, within a multitasking onboard system, an application timed according to a plurality of different time domains including interruption management
JP6253065B2 (ja) * 2012-06-15 2017-12-27 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation トランザクション処理における命令実行の選択的制御
CN107980118A (zh) * 2015-06-10 2018-05-01 无比视视觉技术有限公司 使用多线程处理的多核处理器设备

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1356400A2 (en) * 2000-08-07 2003-10-29 Altera Corporation Inter-device communication interface
US20030028864A1 (en) * 2001-01-29 2003-02-06 Matt Bowen System, method and article of manufacture for successive compilations using incomplete parameters
US6691301B2 (en) * 2001-01-29 2004-02-10 Celoxica Ltd. System, method and article of manufacture for signal constructs in a programming language capable of programming hardware architectures
US7840777B2 (en) * 2001-05-04 2010-11-23 Ascenium Corporation Method and apparatus for directing a computational array to execute a plurality of successive computational array instructions at runtime
US7734895B1 (en) * 2005-04-28 2010-06-08 Massachusetts Institute Of Technology Configuring sets of processor cores for processing instructions

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7523441B2 (en) * 2004-04-16 2009-04-21 National Instruments Corporation Implementing a synchronous reactive system in a graphical program
US20100122105A1 (en) * 2005-04-28 2010-05-13 The University Court Of The University Of Edinburgh Reconfigurable instruction cell array
CN102326126A (zh) * 2009-02-18 2012-01-18 杜比实验室特许公司 用于将多个安全时钟同步的方法和系统
US8533515B2 (en) * 2009-02-18 2013-09-10 Dolby Laboratories Licensing Corporation Method and system for synchronizing multiple secure clocks using an average adjusted time of the secure clocks if the average adjusted time is within the limit intersection and using a substitute average adjusted time if the averaged adjusted time is outside the limit intersection
TWI531896B (zh) * 2010-12-22 2016-05-01 威盛電子股份有限公司 多核心處理器的電源狀態同步化
JP6253065B2 (ja) * 2012-06-15 2017-12-27 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation トランザクション処理における命令実行の選択的制御
US9785587B2 (en) * 2012-07-09 2017-10-10 Commissariat A L'energie Atomique Et Aux Energies Alternatives Method for executing, within a multitasking onboard system, an application timed according to a plurality of different time domains including interruption management
CN103019656A (zh) * 2012-12-04 2013-04-03 中国科学院半导体研究所 可动态重构的多级并行单指令多数据阵列处理系统
CN107980118A (zh) * 2015-06-10 2018-05-01 无比视视觉技术有限公司 使用多线程处理的多核处理器设备

Also Published As

Publication number Publication date
EP4004724A1 (en) 2022-06-01
WO2021035187A1 (en) 2021-02-25
KR20220032630A (ko) 2022-03-15
US20220276847A1 (en) 2022-09-01
TW202109289A (zh) 2021-03-01
JP2022544843A (ja) 2022-10-21
CN114270308A (zh) 2022-04-01

Similar Documents

Publication Publication Date Title
US11088679B2 (en) Synchronization in a quantum controller with modular and dynamic pulse generation and routing
TWI767310B (zh) 處理器、運算方法及電腦程式產品
Bohnenstiehl et al. Kilocore: A fine-grained 1,000-processor array for task-parallel applications
TWI767304B (zh) 用於編譯針對同步處理器之程式之方法及系統
US7831945B2 (en) Manufacturing a clock distribution network in an integrated circuit
US11868243B2 (en) Topological scheduling
US10579554B2 (en) System and method for routing bus including buffer
WO2018067251A1 (en) Methods and apparatus for dynamically configuring soft processors on an integrated circuit
US20190173781A1 (en) Constructing staging trees in hierarchical circuit designs
US10802806B1 (en) Generating vectorized control flow using reconverging control flow graphs
JP7476299B2 (ja) 同期プロセッサのためのコンパイル
TWI767303B (zh) 在神經網路中傳播延遲減少之電腦實施方法
JP2009188093A (ja) 半導体集積回路の設計装置、方法、及び、プログラム
US20240037063A1 (en) Routing Method Based On A Sorted Operation Unit Graph For An Iterative Placement And Routing On A Reconfigurable Processor
Lavin et al. RapidWright: Unleashing the Full Power of FPGA Technology with Domain-Specific Tooling
Eguro et al. Fast Compilation Techniques
Bag Zeki Energy-Aware Coarse Grained Reconfigurable Architectures Using Dynamically Reconfigurable Isolation Cells