TW201435576A - 陷阱處理期間的協作執行緒陣列粒化內文切換 - Google Patents
陷阱處理期間的協作執行緒陣列粒化內文切換 Download PDFInfo
- Publication number
- TW201435576A TW201435576A TW102144211A TW102144211A TW201435576A TW 201435576 A TW201435576 A TW 201435576A TW 102144211 A TW102144211 A TW 102144211A TW 102144211 A TW102144211 A TW 102144211A TW 201435576 A TW201435576 A TW 201435576A
- Authority
- TW
- Taiwan
- Prior art keywords
- thread
- trap
- array
- group
- execution
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 63
- 238000012545 processing Methods 0.000 claims description 233
- 230000015654 memory Effects 0.000 claims description 99
- 230000004044 response Effects 0.000 claims description 4
- 230000008901 benefit Effects 0.000 abstract description 3
- 238000003860 storage Methods 0.000 description 22
- 238000010586 diagram Methods 0.000 description 19
- 238000004891 communication Methods 0.000 description 17
- 239000000872 buffer Substances 0.000 description 15
- 230000008569 process Effects 0.000 description 14
- 238000003491 array Methods 0.000 description 9
- 239000000463 material Substances 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000009877 rendering Methods 0.000 description 3
- 238000000638 solvent extraction Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000005469 granulation Methods 0.000 description 2
- 230000003179 granulation Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000012884 algebraic function Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004040 coloring Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000011273 social behavior Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3888—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
- Multi Processors (AREA)
Abstract
本發明揭示提供用於處理要在複數個執行緒單元內執行的一執行緒陣列之一部分的一執行緒內所遇到的一陷阱之技術。在這些技術當中,更新具有有關該執行緒的一識別碼之一資料結構,以指出在該執行緒陣列執行期間是否發生的該陷阱。另外在這些技術中,該等執行單元執行包括一內文切換的一陷阱處理常式。該等執行單元針對當成該陷阱處理常式之一部分的該等執行單元之至少一者以執行此內文切換,同時允許其餘的執行單元在該內文切換之前離開該陷阱處理常式。所揭示技術的一優點為該陷阱處理常式可在平行處理器內有效運作。
Description
本發明通常關於平行處理器架構,尤其係關於陷阱處理期間的協作執行緒陣列粒化內文切換。
在電腦架構當中,一陷阱指令為一種中斷目前運行中程式的指令。程式中斷有許多發生原因,原始陷阱發生的範例應包括要求更多資訊的一系統呼叫,或其中該電腦受指示等待使用者輸入(例如按下鍵盤上一按鍵)的一暫停。陷阱發生以回應一錯誤的範例應包括嘗試執行一不合法的電腦操作,例如除以零或存取一不合法的記憶體位置。此外,陷阱指令可由程式設計師手動***,用於偵錯用途。
當遇到一陷阱指令,表示已經執行已知為一陷阱處理常式的一專屬程式(例如利用導致該程式計數器指向一陷阱處理常式,也就是已知的陷阱處理器)。一內文切換通常在執行一陷阱處理常式時執行。一般而言,內文切換說明儲存與復原處理單元狀態的計算處理,使得稍後可從中斷點恢復該運行中程式的執行。通常,內文切換相當耗費計算資源。
在平行處理系統中,其中在當成單一邏輯單元的不同執行單元上同時處理多個執行緒,就是一協作執行緒陣列,在單一執行緒內遇到的陷阱(此後稱為「陷阱執行緒」)導致所有執行中執行緒的內文切換。發生這種情況並非所要,因為在執行中執行緒內的內文切換,而非該陷阱執行緒的內文切換,導致非必要消耗電腦資源,並且減緩非陷阱執行緒的執行。
因此,業界內所需為一種在平行處理器內有效運作的陷阱處理常式。
本發明的具體實施例揭示一種用於處理屬於複數個執行緒單元內執行一執行緒陣列之一部分的一執行緒內所遇到的一陷阱之方法。該方法包括使用有關該執行緒的一識別碼以更新一資料結構,以指出在該執行緒陣列執行期間是否發生的該陷阱。另外在此方法中,該等執行緒執行包括一內文切換的一陷阱處理常式。針對在當成該陷阱處理常式之一部分的該執行緒陣列中的該等執行緒之至少一者以執行該內文切換,同時允許其餘的執行緒陣列在該內文切換之前離開該陷阱處理常式。
本發明的其他具體實施例包括但不受限於一電腦可讀取媒體,其包括可讓一處理單元實施該等揭示方法的一或更多態樣之指令,以及構成實施該等揭示方法的一或多個態樣之一系統。
所揭示技術的一優點為該陷阱處理常式可在平行處理器內有效運作。
100‧‧‧電腦系統
102‧‧‧中央處理單元
103‧‧‧裝置驅動程式
104‧‧‧系統記憶體
105‧‧‧記憶體橋接器
106‧‧‧通訊路徑
107‧‧‧輸入/輸出橋接器
108‧‧‧使用者輸入裝置
110‧‧‧顯示裝置
112‧‧‧平行處理子系統
113‧‧‧第二通訊路徑
114‧‧‧系統磁碟
116‧‧‧開關
118‧‧‧網路配接器
120-121‧‧‧外接卡
202‧‧‧平行處理單元
204‧‧‧平行處理記憶體
205‧‧‧輸入/輸出橋接器
206‧‧‧主介面
207‧‧‧任務/工作單元
208‧‧‧一般處理叢集
210‧‧‧記憶體交換開關單元
212‧‧‧前端
214‧‧‧記憶體介面
215‧‧‧劃分單元
220‧‧‧動態隨機存取記憶體
230‧‧‧處理叢集陣列
302‧‧‧執行單元群組
303‧‧‧載入儲存單元
304‧‧‧本機暫存檔
305‧‧‧管線管理員
306‧‧‧共用記憶體
310‧‧‧串流多重處理器
312‧‧‧線程束排程器與指令單元
320‧‧‧L1快取
328‧‧‧記憶體管理單元
335‧‧‧第一點五層快取
352‧‧‧統一位址映射單元
370‧‧‧指令L1快取
380‧‧‧記憶體與快取互連
402‧‧‧協作執行緒陣列
404‧‧‧線程束
502‧‧‧陷阱指令
506‧‧‧陷阱處理常式
508‧‧‧初步指令
600‧‧‧陷阱原因表
602‧‧‧陷阱原因表輸入
604‧‧‧陷阱原因
606‧‧‧程式計數器
608‧‧‧內文緩衝區位址
610‧‧‧選項
612‧‧‧執行緒識別碼
如此上面簡單彙總可詳細了解本發明上述特色的方式,本發明的更特定說明則參照具體實施例,某些具體實施例說明於附圖內。不過吾人應該注意,附圖只說明本發明的典型具體實施例,因此並不對本發明範疇產生限制,本發明承認其他等效具體實施例。
第一圖為例示構成實施本發明之一或多個態樣的電腦系統方塊圖;第二圖為根據本發明的一具體實施例,用於第一圖中該電腦系統的一平行處理子系統之方塊圖;第三圖為根據本發明之一具體實施例,第二圖中該通常處理叢集內一串流多重處理器一部分之方塊圖;第四圖為例示根據本發明之一具體實施例,在一串流多重處理器內執行的一協作執行緒陣列(CTA,Cooperative Thread Array)內一系列線程束之方塊圖;第五圖為根例示據本發明之另一具體實施例,在一串流多重處理器內執行的一協作執行緒陣列(CTA,Cooperative Thread Array)內一系列線程束之方塊圖;
第六A圖為例示根據本發明之一具體實施例之一陷阱原因表(TRT,trap reason table)的方塊圖;第六B圖為揭示根據本發明之一具體實施例之描述用於執行一陷阱原因表更新的一處理之方法步驟的流程圖;第六C圖至第六D圖為揭示根據本發明之一具體實施例之描述用於執行一陷阱處理常式的一處理之方法步驟的流程圖;及第七圖為揭示根據本發明之一具體實施例之描述用於使用一接合視窗處理一陷阱的一處理之方法步驟的流程圖。
在以下描述中,揭示許多特定細節以對本發明有更徹底之理解。但是,精通技術人士應該了解,在沒有一或多個該等特定細節之下還是可實施本發明。
系統概觀
第一圖為例示構成實施本發明一或多個態樣的電腦系統100之方塊圖。電腦系統100包括一中央處理單元(CPU,Central Processing Unit)102,及通過一互連路徑通訊的一系統記憶體104,其中該路徑可包含一記憶體橋接器105。例如可為北橋晶片的記憶體橋接器105透過匯流排或其他通訊路徑106(例如超傳輸連結),連接至一I/O(輸入/輸出)橋接器107。例如可為南僑晶片的輸入/輸出橋接器107接收來自一或多個使用者輸入裝置108(例如鍵盤、滑鼠)的使用者輸入,並透過通訊路徑106和記憶體橋接器105將該輸入轉送至中央處理單元102。一平行處理子系統112透過匯流排或第二通訊路徑113(例如一高速周邊組件互連(PCI,Peripheral Component Interconnect)、加速圖形連接埠(AGP,Accelerated Graphics Port)及/或HyperTransport連結)耦合至記憶體橋接器105。在一具體實施例中,平行處理子系統112為一圖形子系統,其將像素遞送至顯示裝置110,該裝置可為任何傳統陰極射線管、液晶顯示器、發光二極體顯示器等等。系統磁碟114也連接至I/O橋接器107,並且可構成儲存內容與應用程式及資料,供中央處理單元102及平行處理子系統112使用。系統磁碟114提供非揮發性儲存裝置給應用程式與資料,並且可包括固定式或可移除式硬碟
機、快閃記憶體裝置及CD-ROM(小型光碟唯讀記憶體)、DVD-ROM(數位多用途光碟-ROM)、藍光、HD-DVD(高傳真DVD)或其他詞性、光學或固態儲存裝置。
一開關116提供輸入/輸出橋接器107與其他組件,像是網路配接器118及許多外接卡120和121之間的連接。其他組件(未明確顯示),包含萬用序列匯流排(USB,Universal Serial Bus)或其他連接埠連接、小型光碟(CD)光碟機、數位多用途光碟(DVD)光碟機、檔案記錄裝置等等,也可連接至輸入/輸出橋接器107。第一圖內顯示的許多通訊路徑,包含特地指名的通訊路徑106和113,都可使用任何合適的協定來實施,例如PCI Express、AGP(加速圖形連接埠)、HyperTransport或任何其他匯流排或點對點通訊協定,及不同組件之間的連接都可使用業界內已知的不同協定。
在一具體實施例中,平行處理子系統112併入圖形與視訊處理最佳化的電路,包括例如視訊輸出電路,並且構成一圖形處理單元(GPU,Graphics Processing Unit)。在另一具體實施例中,平行處理子系統112併入一般用途處理最佳化的電路,同時保留底層計算架構,本說明書內有更詳細描述。尚且在另一具體實施例中,平行處理子系統112可在單一子系統內合併一或多個其他系統元件,例如結合記憶體橋接器105、中央處理單元102和輸入/輸出橋接器107來形成一晶片上系統(SoC,System on Chip)。
吾人應瞭解,本說明書中顯示的該系統為例示,所以可進行改變與修改。包括橋接器的數量與配置、中央處理單元102的數量及平行處理子系統112的數量這類連接拓撲可依照需求修改。例如在某些具體實施例中,系統記憶體104直接連接至中央處理單元102,而不是透過橋接器,並且其他裝置透過記憶體橋接器105及中央處理單元102與系統記憶體104通訊。在其他替代拓撲中,平行處理子系統112連接至輸入/輸出橋接器107或直接連接至中央處理單元102,而不是連接至記憶體橋接器105。在仍舊其他具體實施例中,輸入/輸出橋接器107和記憶體橋接器105可整合成為單一晶片,替代現有的一或多個分散裝置。大型組件可包括兩或多個中央處理單元102及兩或多個平行處理子系統112。本說明書中顯示的該等特定組件為選擇性;例如可支援任何數量的外接卡或周邊裝置。在某些具體實
施例中,省略開關116,並且網路配接器118和外接卡120、121都直接連接至輸入/輸出橋接器107。
第二圖例示根據本發明一具體實施例的平行處理子系統112。如所示,平行處理子系統112包括一或多個平行處理單元(PPU,Parallel Processing Unit)202,每一都連結至本機平行處理(PP,Parallel Processing)記憶體204。通常來說,平行處理子系統包括數量為U的平行處理單元,其中U1。(本說明書中多個類似物體的實例都用參考號碼標示出該物體,並且括號標示所需的實例。)平行處理單元202及平行處理記憶體204可使用一或多個積體電路裝置來實施,例如可程式處理器、特殊應用積體電路(ASIC,Application Specific Integrated Circuit)或記憶體裝置,或以任何其他技術可行方式。
請即重新參考第一圖以及第二圖所示,在一具體實施例中,平行處理子系統112內的某些或全部平行處理單元202為具有著色管線的圖形處理器,其可構成執行許多操作,這些操作有關透過記憶體橋接器105和第二通訊路徑113,從中央處理單元102及/或系統記憶體104供應的圖形資料產生畫素資料、與本機平行處理記憶體204(可用來當成圖形記憶體,包括例如傳統訊框緩衝區)互動來儲存與更新畫素資料、傳遞畫素資料給顯示裝置110等等。在某些具體實施例中,平行處理子系統112可包括操作當成圖形處理器的一或多個平行處理單元202,及用於通常用途計算的一或多個其他平行處理單元202。平行處理單元202可相同或不同,並且每一平行處理單元202都可擁有一或多個專屬平行處理記憶體裝置或無專屬平行處理記憶體裝置。平行處理子系統112內的一或多個平行處理單元202可輸出資料至顯示裝置110,或平行處理子系統112內的每一平行處理單元202都可輸出資料至一或多個顯示裝置110。
在操作上,中央處理單元102為電腦系統100的主要處理器,控制與協調其他系統組件的操作。尤其是,中央處理單元102發出指令控制平行處理單元202的操作。在某些具體實施例中,中央處理單元102將每一平行處理單元202的指令串流寫入一資料結構(第一圖或第二圖內未明確顯示),其可位於系統記憶體104內、平行處理記憶體204內或可存取
中央處理單元102和平行處理單元202的其他儲存位置內。每一資料結構已經寫入一推送緩衝區的指標,開始在該資料結構內處理該指令串流。平行處理單元202讀取來自一或多個推送緩衝區的指令串流,然後關於中央處理單元102的操作非同步執行指令。利用應用程式透過裝置驅動程式103來控制不同推送緩衝區的排程,指定每一推送緩衝區的執行優先順序。
請即重新參考第二圖及第一圖,每一平行處理單元202都包括一I/O(輸入/輸出)單元205,其透過連接至記憶體橋接器105(或在替代具體實施例中,直接至中央處理單元102)的通訊路徑113,與電腦系統100的其餘組件通訊。平行處理單元202與電腦系統100其餘組件的連接也可改變。在某些具體實施例中,平行處理子系統112實施成為可***電腦系統100內擴充槽的外接卡。在其他具體實施例中,平行處理單元202可與例如記憶體橋接器105或輸入/輸出橋接器107這類匯流排橋接器整合在單一晶片上。在仍舊其他具體實施例中,平行處理單元202的某些或全部元件可與中央處理單元102整合在單一晶片上。
在一具體實施例中,通訊路徑113為一PCI Express連結,其中分配專屬通道給每一平行處理單元202,如業界內所熟知。在一具體實施例中,通訊路徑113為一PCI Express連結,其中分配專屬通道給每一平行處理單元202,如業界內所熟知。一輸入/輸出單元205產生在通訊路徑113上傳輸的封包(或其他信號),也從通訊路徑113上接收所有傳入封包(或其他信號),將該等傳入封包導引至平行處理單元202的適當組件。例如:有關處理任務的指令可導引至主介面206,而有關記憶體操作的指令(例如讀取或寫入平行處理記憶體204)可導引至記憶體交換開關單元210。主介面206讀取每一推送緩衝區,並將該推送緩衝區內儲存的該指令串流輸出至一前端212。
每一平行處理單元202都有利地實施一高平行處理架構。如細節內所示,平行處理單元202(0)包括一處理叢集陣列230,其包含數量為C的一般處理叢集(GPC,General Processing Cluster)208,其中C1。每個一般處理叢集208都可同時執行大量的(例如數百或數千)執行緒,其中每一執行緒都是一程式的實例。在許多應用當中,不同的一般處理叢集208可
分配用於處理不同種類的程式,或用於執行不同種類的計算。一般處理叢集208的分配絕大部分取決於針對每一種程式或計算所賦予的工作負擔。
一般處理叢集208從任務/工作單元207內的工作分配單元當中接收要執行的處理任務,該工作分配單元接收指標來處理任務,其編碼為任務中繼資料(TMD,Task Metadata)(未顯示)並儲存在記憶體內。該指標至任務中繼資料包括在指令串流內,其儲存當成一推送緩衝區並由前端單元212從主介面206接收。可編碼為任務中繼資料的處理任務包括要處理的資料索引,以及定義如何處理該資料的狀態參數與指令(例如要執行哪個程式)。任務/工作單元207從前端212接收任務,並且確保在每一任務中繼資料指定的處理開始之前已經將一般處理叢集208構成有效狀態。一優先順序可指定給每一任務中繼資料,用來排定該處理任務的執行時間。處理任務也可從處理叢集陣列230接收。或者,該任務中繼資料可包括一參數,其控制該任務中繼資料加入處理任務清單(或處理任務指標清單)的頭部或尾部,藉此提供優先順序之上的另一控制等級。
記憶體介面214包括數量為D的劃分單元215,這些單元每一都直接連接至一部分平行處理記憶體204,其中D1。如所示,劃分單元215的數量通常等於動態隨機存取記憶體(DRAM,Dynamic Random Access Memory)220的數量。在其他具體實施例中,劃分單元215的數量可不等於記憶體裝置的數量。精通技術人士應瞭解,動態隨機存取記憶體220可用其他合適的裝置取代,並且可為通常傳統設計,因此省略其詳細說明。像是訊框緩衝區或紋理地圖這類渲染目標可通過動態隨機存取記憶體220儲存,允許劃分單元215平行寫入每一渲染目標的部分,以有效使用平行處理記憶體204的可用頻寬。
一般處理叢集208之任一者都可處理寫入平行處理記憶體204內任一動態隨機存取記憶體220的資料。交換開關單元210構成將每一一般處理叢集208的輸出繞送至任意劃分單元215的輸入或至用於進一步處理的其他一般處理叢集208。一般處理叢集208透過交換開關單元210與記憶體介面214通訊,來讀取或寫入許多外部記憶體裝置。在一具體實施例中,交換開關單元210具有一連接至記憶體介面214來與輸入/輸出單元
205通訊,及一連接至本機平行處理記憶體204,藉此讓不同一般處理叢集208內的處理核心與系統記憶體104或不在平行處理單元202本機上的其他記憶體通訊。在第二圖所示的具體實施例中,交換開關單元210直接連接至輸入/輸出單元205。交換開關單元210可使用虛擬通道,以分隔一般處理叢集208與劃分單元215之間的流量串流。
一般處理叢集208同樣可程式編輯來執行有關廣泛應用的處理任務,包含但不受限於線性與非線性資料傳輸、視訊及/或音訊資料篩選、模型化運算(例如套用實體規則來決定位置、速度以及其他物體屬性)、影像渲染運算(例如曲線細分著色、影點著色、幾何著色及/或畫素著色程式)等等。平行處理單元202可從系統記憶體104及/或本機平行處理記憶體204將資料傳輸進入內部(晶片上)記憶體、處理該資料並將結果資料寫回系統記憶體104及/或本機平行處理記憶體204,其中這種資料可由其他系統組件存取,包括中央處理單元102或另一平行處理子系統112。
一平行處理單元202可提供任何數量的本機平行處理記憶體204,包含非本機記憶體,並且可任何情況下使用本機記憶體和系統記憶體。例如:平行處理單元202可為統一記憶體架構(UMA,Unified Memory Architecture)具體實施例內的圖形處理器。在這種具體實施例中,提供一些或無專屬圖形(平行處理)記憶體,並且平行處理單元202完全或幾乎完全使用系統記憶體。在統一記憶體架構具體實施例中,平行處理單元202可整合至橋接器晶片或處理器晶片,或提供當成分散式晶片,具有高速連結(例如PCI Express)透過橋接器晶片或其他通訊方式將平行處理單元202連接至系統記憶體。
如上述,任何數量的平行處理單元202都可包含在一平行處理子系統112內。例如:單一外接卡上可提供多個平行處理單元202,或多張外接卡可連接至通訊路徑113,或一或多個平行處理單元202可整合到一橋接器晶片上。多平行處理單元系統內的平行處理單元202可彼此相同或不同。例如:不同的平行處理單元202可具有不同數量的處理核心、不同大小的本機平行處理記憶體等等。當存在多個平行處理單元202時,這些平行處理單元可平行操作,以比單一平行處理單元202還要高產量的方式
來處理資料。合併一或多個平行處理單元202的系統可在許多設置與外型因素之下實施,包含桌上型、膝上型或手持式個人電腦、伺服器、工作站、遊戲機、嵌入式系統等等。
多重處理任務可在一般處理叢集208上同時執行,並且一處理任務可在執行期間產生一或多個「子」處理任務。任務/工作單元207接收該等任務,並且動態排定要由一般處理叢集208執行的處理任務以及子處理任務。
第三圖為根據本發明的一具體實施例,第二圖中一般處理叢集208內串流多重處理器(SM)310的方塊圖。每個一般處理叢集208都可構成同時執行大量執行緒,其中「執行緒」一詞代表在特定輸入資料集上執行的特定程式之實例。在某些具體實施例中,單一指令、多重資料(SIMD,Single-Instruction,Multiple-Data)指令發行技術用於支援大量執行緒的平行執行,而不用提供多個獨立指令單元。在其他具體實施例中,單一指令、多重執行緒(SIMT,Single-Instruction,Multiple-Thread)技術用於支援大量通常同步執行緒的平行執行,使用共用指令單元,其構成發出指令給每個一般處理叢集208內的處理引擎集。不同於一單一指令、多重資料執行引擎,其中所有處理區域通常都執行一致的指令,單一指令、多重執行緒執行允許不同執行緒更迅速遵循分散的執行路徑通過一已知執行緒程式。業界內精通技術人士應瞭解,單一指令、多重資料處理區域代表一單一指令、多重執行緒處理區域的函數子集。
透過將處理任務分配至一或多個串流多重處理器(SM,Streaming Multiprocessor)310的管線管理員(未顯示)可有利地控制一般處理叢集208的操作,其中每一串流多重處理器310都構成處理一或多個執行緒群組。每一串流多重處理器310都包含一指令L1快取370,其構成透過一般處理叢集208內一L1.5快取(未顯示)接收指令與常數。線程束排程器與指令單元312接收來自指令L1快取370的指令與常數,並且根據該等指令與常數控制本機暫存檔304及串流多重處理器310功能單元。串流多重處理器310功能單元包含N個執行(執行或處理)單元302以及P個載入儲存單元(LSU,Load-Store Unit)303。該串流多重處理器功能單元可管線化,
允許在先前指令完成之前發出新指令,如業界所熟知。本發明可提供任何功能執行單元組合。在一具體實施例中,該等功能單元支援許多種運算,包含整數與浮點演算(例如加法與乘法)、比較運算、布林運算(AND、OR、XOR)、位元位移和許多代數函數的計算(例如平面插值、三角函數以及對數函數等等);並且可運用該相同功能單元來執行不同運算。
這一系列指令傳輸至構成一執行緒的特定一般處理叢集208,如本說明書先前所定義,並且通過串流多重處理器310內平行處理引擎(未顯示)的特定數量同時執行的執行緒之集合在此稱為「線程束」或「執行緒群組」。如本說明書所使用,「執行緒群組」代表在不同輸入資料上同時執行相同程式的執行緒群組,其中該群組的一執行緒指派給串流多重處理器310內不同的處理引擎。一執行緒群組可包括數量比串流多重處理器310內處理引擎數量還要少的執行緒,在此案例中,某些處理引擎會在循環期間處理該執行緒群組時閒置。執行緒群組也可包含數量比串流多重處理器310內處理引擎數量還要多的執行緒,在此案例中,將在連續時脈循環上進行處理。因為每一串流多重處理器310都可同時支援最多G個執行緒群組,接著在任何已知時間上一般處理叢集208內都可執行最多G*M個執行緒群組之系統,其位於包含M個串流多重處理器310的一般處理叢集208內。
此外,在串流多重處理器310內可同時啟用複數個相關執行緒群組(在不同執行階段內)。此執行緒群組的集合稱為「協作執行緒陣列」(CAT,Cooperative Thread Array)或「執行緒陣列」。特定協作執行緒陣列的大小等於m*k,其中k為執行緒群組內同時執行的執行緒數量,通常為串流多重處理器310內平行處理引擎數量的整數倍數,並且m為串流多重處理器310內同時啟用的執行緒群組數量。協作執行緒陣列的大小通常由程式設計師以及該協作執行緒陣列可用的硬體資源數量,例如記憶體或暫存器,來決定。
在本發明的具體實施例中,吾人想要使用一計算系統的平行處理單元202或其他處理器,運用執行緒陣列來執行一般用途計算。該執行緒陣列內的每一執行緒都可指派一獨一的執行緒識別碼(「執行緒ID」),
其可在該執行緒執行期間存取該執行緒。該執行緒ID可定義為一維度或多維度數值,控制該執行緒處理行為的許多態樣。例如:一執行緒ID可用於決定設定一執行緒的哪個輸入資料部分要處理及/或決定設定一執行緒的哪個輸入資料部分要產生或寫入。
每個執行緒指令的序列可包含至少一指令,其定義該代表性執行緒與該執行緒陣列的一或多個其他執行緒之間的協作行為。例如:每一執行緒指令的順序可包含將在該順序內特定點上該代表執行緒運算執行中斷,直到一或多個其他執行緒到達該特定點上為止之指令、讓該代表執行緒將一或多個其他執行緒可存的資料儲存至一共用記憶體內之指令、讓該代表執行緒根據其執行緒ID自動讀取與更新一共用記憶體內一或多個該等其他執行緒已經存取過的資料之指令等等。該協作執行緒陣列程式也可包含一指令,計算該共用記憶體內所要讀取資料的位址,其中該位址為執行緒ID的函數。利用定義合適的功能並且提供同步技術,資料可利用CAT的一執行緒寫入共用記憶體內一已知位置,並且以可預測方式用相同協作執行緒陣列的不同執行緒從該位置當中讀取。因此,支援在執行緒之間共用的任何資料圖案,並且一協作執行緒陣列內的任何執行緒都可與相同協作執行緒陣列內任何其他執行緒共用資料。在協作執行緒陣列執行緒之間共用的資料內容(若有的話)由該協作執行緒陣列程式決定;如此吾人了解在使用協作執行緒陣列的特定應用當中,根據該協作執行緒陣列程式,協作執行緒陣列的執行緒彼此之間不會確實共用資料,並且在本說明書中可同時使用「協作執行緒陣列」與「執行緒陣列」等詞。
串流多重處理器310提供具備不同存取階層的晶片上(內部)資料儲存。特殊暫存器(未顯示)可由載入儲存單元303讀取但是無法寫入,並且可用於定義每一直執行緒「位置」的參數。在一具體實施例中,特殊暫存器包含每一執行緒(或串流多重處理器310內每一執行單元302)一暫存器,其儲存一執行緒ID;每一執行緒ID暫存器都只能由個別一執行單元302存取。特殊暫存器也可包含額外暫存器,可由執行任務中繼資料(未顯示)(或由所有載入儲存單元303)所呈現相同處理任務的所有執行緒讀取,其儲存一協作執行緒陣列識別碼、該協作執行緒陣列維度、該協作執行緒
陣列所屬網格的維度(或若任務中繼資料編碼一佇列任務而非一網格任務時的佇列位置)以及指派協作執行緒陣列的任務中繼資料之識別碼。
若任務中繼資料為一網格任務中繼資料,則執行任務中繼資料會導致啟動並執行固定數量的協作執行緒陣列,來處理佇列525內所儲存的固定數量資料。協作執行緒陣列的數量依照網格寬度、高度與深度的乘積來指定。該固定數量的資料可儲存在任務中繼資料內,或任務中繼資料可儲存將由協作執行緒陣列處理的資料之指標。任務中繼資料也儲存該協作執行緒陣列所執行程式的開始位址。
若任務中繼資料為佇列任務中繼資料,然後使用任務中繼資料的佇列功能,表示要處理的資料量並不需要固定。佇列記錄儲存資料,供指派給任務中繼資料322的該等協作執行緒陣列處理。該等佇列記錄也呈現執行緒執行期間由另一任務中繼資料產生的子任務,藉此提供巢狀平行。一般來說,執行緒的執行或包含該執行緒的協作執行緒陣列會中止,直到子任務執行完成為止。該佇列可儲存在任務中繼資料內,或與任務中繼資料322分開,在此案例中任務中繼資料儲存至該佇列的佇列指標。有利的是,由該子任務產生的資料可寫入該佇列,同時任務中繼資料代表已經執行的該子任務。該佇列可實施為一圓形佇列,如此資料總量並不受限於該佇列的大小。
屬於一網格的協作執行緒陣列具有隱含的網格寬度、高度和深度參數,指示該網格內的個別協作執行緒陣列的位置。在初始化期間會寫入特殊暫存器,以回應透過前端212從裝置驅動程式103接收命令,並且在一處理任務期間不會改變。前端212排程執行每一處理任務。每一協作執行緒陣列都有關一特定任務中繼資料,以同時執行一或多個任務。此外,單一一般處理叢集208可同時執行多個任務。
一參數記憶體(未顯示)儲存可由相同協作執行緒陣列(或任何載入儲存單元303)內任何執行緒讀取但無法寫入的執行時間參數(常數)。在一具體實施例中,裝置驅動程式103在導引串流多重處理器310開始執行使用這些參數的任務之前,提供參數給該參數記憶體。任何協作執行緒陣列內的任何執行緒(或串流多重處理器310內的任何執行單元)都可
透過記憶體介面214存取全域記憶體。全域記憶體的一些部分可儲存在L1快取320內。
每一執行緒都使用本機暫存檔304當成暫存空間;每一暫存器都分配給一執行緒專用,並且任何本機暫存檔304內的資料都只能由分配給該暫存器的該執行緒存取。本機暫存檔304可實施為實體上或邏輯上區分成P個通路的暫存檔,每一通路都具有某些數量的記錄(在此每一記錄都可儲存例如32位元字)。一通路指派給該N個執行單元302及P個載入儲存單元載入儲存單元303之每一者,並且不同通路內的對應記錄可填入執行相同程式的不同執行緒之資料,以幫助單一指令、多重資料執行。通路的不同部分可分配給該G個同時執行緒群組中不同的執行緒,如此本機暫存檔304內的一已知記錄只能由特定執行緒存取。在一具體實施例中,本機暫存檔304內的特定記錄保留用於儲存執行緒識別碼,實施該等特殊暫存器之一者。此外,一統一L1快取375儲存N個執行單元302及P個載入儲存單元載入儲存單元303的每一通路之統一或常數值。
共用記憶體306可由單一協作執行緒陣列內的執行緒存取;換言之,共用記憶體306內任何位置都可由相同協作執行緒陣列內任何執行緒(或串流多重處理器310內任何處理引擎)來存取。共用記憶體306可實施為具有互連的一共用暫存檔或共用晶片上記憶體,允許任何處理引擎從該共用記憶體內任何位置讀取或寫入。在其他具體實施例中,共用的狀態空間可映射至晶片外記憶體的每一協作執行緒陣列區域,並且快取在L1快取320內。該參數記憶體可實施為該相同共用暫存檔或實施共用記憶體306的共用快取記憶體內一指定區段,或實施為載入儲存單元303具有唯讀存取的一別共用暫存檔或晶片上快取記憶體。在一具體實施例中,實施該參數記憶體的區域也用於儲存該協作執行緒陣列ID和任務ID,以及協作執行緒陣列和網格尺寸或佇列位置,實施該特殊暫存器的位置。串流多重處理器310內每一載入儲存單元303都連結至統一位址映射單元352,將提供用於載入與儲存統一記憶體空間內所指定指令的一位址轉換至每一分散記憶體空間內一位址。因此,利用指定該統一記憶體空間內一位址,可使用一指令來存取任何該區域、共用、或全域記憶體空間。
每一串流多重處理器310內的L1快取320都可用於快取私用每一執行緒區域資料,並且也快取每一應用程式全域資料。在某些具體實施例中,該每一協作執行緒陣列共用資料可快取在L1快取320內。載入儲存單元303可透過一記憶體與快取互連380而耦接至共用記憶體306及L1快取320。
吾人應瞭解,本說明書中顯示的該核心架構為例示,所以可進行改變與修改。任何數量的處理單元,例如串流多重處理器310可包含在一般處理叢集208內。進一步如第二圖內所示,平行處理單元202可包括任意數量功能彼此類似的一般處理叢集208,如此執行行為並不取決於接收特定處理任務的一般處理叢集208。此外,每個一般處理叢集208可有利運用分離並分散的處理單元、L1快取操作與其他一般處理叢集208無關的操作,,以執行一或多個應用程式的任務。
精通此技術人士應瞭解,第一圖至第三圖內描述的架構並非用於限制本發明範疇,本說明書內的技術可在任何正確設置的處理單元上實施,在不悖離本發明範疇之下包括但不受限於一或多個中央處理單元、一或多個多核心中央處理單元、一或多個平行處理單元202、一或多個一般處理叢集208、一或多個圖形或特殊用途處理單元等等。
陷阱處理期間的協作執行緒陣列粒化內文切換
第四圖為根例示據本發明的一具體實施例,在一串流多重處理器310(0)內執行的一協作執行緒陣列(CTA,Cooperative Thread Array)402內的一系列線程束404之方塊圖。串流多重處理器310(0)元包括執行單元(EU,Execution Unit)群組302,其包括N個執行單元302(0)-302(N-1),如第三圖所示。協作執行緒陣列402包含m條線程束,顯示為線程束404(0)-404(m-1)。串流多重處理器310(0)內一群同時執行的執行緒構成一線程束404,其中線程束404內的每一執行緒都在不同輸入資料上執行相同的程式指令。已知線程束404內的每一執行緒都在執行單元群組302內的不同執行單元302(0)-302(N-1)上執行。當線程束404(0)透過執行單元群組302的管線進行時,線程束404(1)可進入執行單元群組302的管線,如此同時但是在管線的不同階段內執行線程束404(0)和線程束404(1)。同樣地,當線程
束404(0)、404(1)透過執行單元群組302的管線進行時,額外線程束可進入該管線且與線程束404(0)、404(1)同時執行。
如所示,線程束404例示成由下往上執行線程束404。因此,位於線程束404底部上的指令(未顯示)比位於線程束404頂端上的指令更早執行。在某些具體實施例中,執行單元群組302可與來自其他協作執行緒陣列的線程束(未顯示)同時執行來自協作執行緒陣列402的線程束404。在許多具體實施例中,每一線程束都可明確透過可存取至該線程束的一協作執行緒陣列位準識別碼、隱含透過單獨識別該協作執行緒陣列的一執行緒識別碼或線程束識別碼、或透過任何其他技術上可行的方式,以識別該線程束所屬的一對應協作執行緒陣列。
第五圖為例示根據本發明之另一具體實施例,在一串流多重處理器310(0)內執行的一協作執行緒陣列(CTA,Cooperative Thread Array)402內的一系列線程束404之方塊圖。除了以下的進一步描述之外,串流多重處理器310(0)和協作執行緒陣列402的作用大體上類似第四圖的串流多重處理器310(0)和協作執行緒陣列402。
如所示,線程束404(0)執行一陷阱指令502,導致所有線程束404(0)-404(m-1)輸入陷阱處理常式506。在某些具體實施例中,執行陷阱指令502的線程束404(0)可在輸入陷阱處理常式506時執行初步指令508,然後可執行陷阱處理常式506的其餘指令。不執行陷阱指令502的線程束404(1)-404(m-1)可執行陷阱處理常式506,但是不執行初步指令508。在完成執行陷阱處理常式506時,線程束404(0)離開陷阱處理常式506,然後準備從串流多重處理器310(0)離開。協作執行緒陣列402內的其他線程束404(1)-404(m-1)也完成執行陷阱處理常式506,並且離開陷阱處理常式506。在某些具體實施例中,在串流多重處理器SM 310(0)上執行並且與協作執行緒陣列402以外協作行緒陣列CTA(未顯示)相關聯的線程束也可輸入陷阱處理常式506。在輸入陷阱處理常式506時,這種線程束可決定執行該陷阱指令的該線程束有關不同協作執行緒陣列402。因此,這種線程束可在執行陷阱處理常式506內的指令主體之前,迅速離開陷阱處理常式506。
在許多場景內都會遇到陷阱。如上述,執行指令導致例外
時,例如嘗試除以零或一不合法記憶體存取時,可產生陷阱。其他陷阱範例發生於執行一中斷點指令時。如本說明書內所使用,導致發生陷阱的線程束稱為已經「陷入」。此外,包含陷阱的線程束稱為「陷阱線程束」。最後,因為線程束404(0)包含陷阱指令502,所以在此將線程束404(0)稱為陷阱線程束404(0)。
在陷阱處理期間,任何線程束404(1)-404(m-1)都可在已經執行初步指令508之後執行一內文切換。一般而言,內文切換為儲存與復原處理單元的該狀態(在此稱為內文資料或內文之處理,如稍後可從該相同點恢復執行。在一具體實施例中,隨著套用至陷阱處理常式506的執行,一內文切換可涉及(不無限制)中止由執行單元群組302執行線程束404,及儲存該內文供稍後恢復。在內文切換期間儲存的內文包括有關進行該內文切換的線程束404之許多儲存元件內容,包括但不受限於本機暫存器、本機記憶體、與目前運行線程束相關的共用記憶體。一旦協作執行緒陣列402內每一線程束404(0)-404(m-1)的內文都已經儲存,並且協作執行緒陣列402內的所有線程束404(0)-404(m-1)都已經離開陷阱處理常式506,然後協作執行緒陣列402可從串流多重處理器310(0)內的正在執行當中移除或「退休」。從正在執行當中移除協作執行緒陣列402可釋放串流多重處理器310(0)內的資源,以處理有關其他協作執行緒陣列的線程束。
第六A圖例示說明根據本發明之一具體實施例之一陷阱原因表(TRT,Trap Reason Table)600的方塊圖。在許多具體實施例中,陷阱原因表600可儲存在可存取至協作執行緒陣列402內每一線程束404的一記憶體位置內,包括但不受限於共用記憶體306、平行處理記憶體204或系統記憶體104。如所示,陷阱原因表600包括每一線程束404的一陷阱原因表輸入602(例如陷阱原因表輸入602(0)至602(W-1)),其中W為在串流多重處理器310(0)內執行的線程束數量。每一陷阱原因表輸入602都包括但不限制一陷阱原因602、一程式計數器606、一內文緩衝區位址608、選項610及一執行緒識別碼612。針對已知陷阱原因表輸入602寫入元件604-612的處理在此稱為陷阱原因表輸入更新,或簡稱陷阱原因表更新。程式計數器606用來儲存一使用者特定儲存的常式位置,該使用者特定儲存的常式
包括在陷阱發生之後但是在協作執行緒陣列402離開陷阱處理常式506之前串流多重處理器310執行之操作。在某些具體實施例中,有關程式計數器606的該使用者特定儲存常式可在儲存該關聯之後執行,如上面結合第五圖的描述。除此之外,內文緩衝區位址608用於儲存一內文緩衝區的位置。該內文緩衝區可在該內文切換之時,用來儲存有關串流多重處理器310的該內部狀態之資料。除此之外,選項610用於設定每一陷阱原因表輸入602的使用者選項。執行緒識別碼612用於指定哪個線程束404對應至陷阱原因表輸入602。在許多具體實施例中,執行緒識別碼612可為獨一識別對應至陷阱原因表輸入602的線程束404之任何每一線程束或每一執行緒識別碼,包括但不受限於一實體執行緒識別碼,其識別執行該線程束的平行處理單元112的部分,或一獨一邏輯執行緒識別碼。
第六B圖為揭示根據本發明的一具體實施例之描述用於執行一陷阱原因表更新的一處理之方法步驟的流程圖。雖然已經結合第一圖至第五圖的系統來描述該等方法步驟,不過精通技術人士應瞭解,構成執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
如所示,方法620從步驟622開始,其中,在一執行緒執行一陷阱指令之後,一線程束404執行指令,導致讀取有關陷阱線程束404的執行緒識別碼612。在步驟624,線程束404根據有關陷阱線程束404(0)的執行緒識別碼612,執行指令以搜尋適當的陷阱原因表輸入602。在一具體實施例中,在步驟626,線程束404執行一IDE指令且停止中斷。在步驟628,線程束404執行指令以將有關陷阱線程束404的該資料寫入陷阱原因表輸入602的該等參數內。陷阱原因表輸入602參數包括但不限制陷阱原因604、程式計數器606、內文緩衝區位址608、選項610及執行緒識別碼612。在某些具體實施例中,在步驟630,執行單元410可執行一IDE指令且可啟用中斷。
在一具體實施例中,一IDE指令可允許啟用及停用中斷,例如內文切換,並且在保護指令關鍵區段避免毀損時相當有用。例如:可中斷第一陷阱原因表更新,以執行第二陷阱原因表更新或內文切換。由於陷阱原因表更新會發生在多個指令循環上的事實,並且若陷阱原因表更新
已經中斷,則一或多個元件604-612應該只有部分更新,此可能性產生一考量。若陷阱原因表輸入602只有部分更新,則陷阱原因表輸入602可能已毀損。如此,更新陷阱原因表輸入602的處理可考慮該陷阱處理常式內不應中斷的關鍵指令區段。
在一具體實施例中,一IDE指令可用來不中斷該陷阱原因表輸入更新程序,如此避免第一陷阱原因表更新由於第二陷阱原因表更新或內文切換而中斷。IDE指令的新增好處為一IDE指令可用來保護程式碼的其他關鍵區段,例如協作執行緒陣列402完成之後釋放資源的指令,或系統呼叫常式的特定部分。
第六C圖至第六D圖為揭示根據本發明之一具體實施例之描述用於執行一陷阱處理常式的一處理之方法步驟的流程圖。雖然已經結合第一圖至第五圖的系統來描述該等方法步驟,不過精通技術人士應瞭解,構成執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
如所示,方法640從步驟642開始,其中線程束404目前正在執行。在步驟644,一線程束404執行一陷阱指令,以產生陷阱。在步驟646,線程束404執行指令,以使每一線程束404使用該陷阱處理常式506(例如初步指令508)的該第一指令位址載入有關每一線程束404之程式計數器。如此,該陷阱處理程序開始。在步驟648,線程束404執行指令導致搜尋陷阱原因表輸入602。在步驟650,線程束404執行指令導致根據步驟648內進行的搜尋,決定哪個特定線程束404執行一陷阱指令。在步驟652,每一線程束404都執行指令導致根據有關線程束404的陷阱原因表輸入602,決定陷阱原因604。若線程束404未導致發生一陷阱,則該方法繼續方法600的步驟664,如以下所述。若線程束404導致發生陷阱,則該方法繼續方法600的步驟662。
在步驟662,線程束404針對陷阱線程束404執行初步指令508。在步驟664,線程束404執行指令的第一部分導致針對線程束404的內文切換。在步驟666,在一具體實施例中,線程束404可執行一RTT.FALLTHROUGH指令。在步驟668,線程束404執行指令的其餘部分導致一內文切換。在步驟684,線程束404執行一使用者儲存程式,利用載
入具有該值儲存在適當陷阱原因表輸入602內程式計數器606的該程式計數器暫存器,儲存額外使用者定義的關聯。在某些具體實施例中,線程束404也可執行額外指令,以完成陷阱處理常式506。在步驟686,線程束404決定已經執行陷阱處理常式506的協作執行緒陣列402內的所有線程束404是否已經執行一RTT指令或一RTT.FALLTHROUGH指令。若並非所有線程束都已經執行一RTT指令或一RTT.FALLTHROUGH指令,則該方法在步驟686等待。在步驟686,若所有線程束都已經執行一RTT指令或一RTT.FALLTHROUGH指令,則方法660前往步驟688,在此協作執行緒陣列402內的線程束404從串流多重處理器310(0)內的正在執行中離開。
在本發明的一具體實施例中,可執行一RTT.FALLTHROUGH指令,以解決當比串流多重處理器310內全部還要少的該等協作執行緒陣列包括一陷阱指令時所產生之潛在效能問題。當已經執行一陷阱指令時,可中斷串流多重處理器310內的所有協作執行緒陣列402的進度,以允許該陷阱指令進行適當處理。此外,此中斷可繼續到有關陷阱線程束404的陷阱處理常式506完成執行為止。如此,若在陷阱處理常式506完成執行之前允許非陷阱協作執行緒陣列離開該陷阱處理器,則非陷阱協作執行緒陣列會更迅速恢復執行。
在一具體實施例中,一接合視窗可將陷阱處理延遲預定循環數量(Z),如此來自該陷阱線程束的多個陷阱可遭遇並用單一內文切換來處理。在另一具體實施例中,可用特權暫存器設定設置該數量Z。
第七圖為揭示根據本發明之一具體實施例,描述用於使用一接合視窗處理一陷阱的一處理之方法步驟的流程圖。雖然已經結合第一圖至第五圖的系統來描述該等方法步驟,不過精通技術人士應瞭解,構成執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
如所示,方法710從步驟712開始,其中線程束404開始執行一組相關執行緒。在步驟714,線程束404內的每一執行緒都執行下一指令。在步驟716,線程束404決定該目前指令是否導致一陷阱。若該目前指令並未導致一陷阱,則該方法回到步驟714,在此線程束404內的每一執行緒都執行下一指令。在步驟716,若該目前指令確實導致一陷阱,則該方法
前往步驟718,在此線程束404暫停執行Z個循環。此處理該陷阱的Z個循環延遲允許其他陷阱發生(例如來自該陷阱線程束內或協作執行緒陣列402內其他線程束之中運行之其他執行緒)。這種額外陷阱與該第一陷阱接合,並且用協作執行緒陣列402內該等線程束的單一內文切換來處理。在步驟720,線程束404開始執行陷阱處理常式506,如上面有關第六C圖至第六D圖之描述。
本發明之一具體實施例可實施當成搭配電腦系統使用的程式產品。該程式產品的程式定義該等具體實施例(包含本說明書所述的方法)的功能,並且可包括在電腦可讀取儲存媒體上。例示的電腦可讀取儲存媒體包含但不受限於:(i)其上資訊永久儲存的不可抹寫儲存媒體(例如電腦內的唯讀記憶體裝置,例如小型碟片唯讀記憶體(CD-ROM)光碟機可讀取的CD-ROM光碟、快閃記憶體、ROM晶片或任何一種固態非揮發性半導體記憶體);及(ii)上其儲存可變資訊的可抹寫儲存媒體(例如磁碟機或硬碟內的磁碟或任何一種固態隨機存取半導體記憶體)。
在此已經參考特定具體實施例說明本發明。不過精通此技術的人士應瞭解,在不悖離申請專利範圍內公佈之本發明廣泛精神及範疇下,可進行許多修改與變更。因此前述說明與圖式僅供參考而不做限制。
因此,本發明具體實施例的範疇公布於以下的申請專利範圍內。
Claims (10)
- 一種用於執行由一處理核心內執行的一執行緒所遇到的一第一陷阱指令之方法,該方法包括:針對該處理核心內執行的複數個執行緒群組中所包括之每一執行緒群組,進入一陷阱處理器常式,以回應執行該第一陷阱指令的該等執行緒群組之一者內含之一第一執行緒;針對該等複數個執行緒群組內含的每一執行緒群組,決定一對應協作執行緒陣列(CTA,Cooperative Thread Array)識別碼是否有關包括該第一執行緒的一協作執行緒陣列;及若該對應協作執行緒陣列識別碼與包括該第一執行緒的該協作執行緒陣列無關,則離開該陷阱處理器常式;或若該對應協作執行緒陣列識別碼有關包括該第一執行緒的該協作執行緒陣列,則執行有關該陷阱處理器常式的一或多個操作。
- 如申請專利範圍第1項之方法,其中若該對應協作執行緒陣列識別碼有關包括該第一執行緒的該協作執行緒陣列,則更包括:將有關一第一執行緒群組的一內文之第一部分儲存在一記憶體內;儲存有關該第一執行緒群組的該內文之第二部分之前,指出該等複數個執行緒群組內含的每一執行緒群組可在該陷阱處理器常式之外恢復執行;及將有關該第一執行緒群組的該內文之第二部分儲存在該記憶體內。
- 如申請專利範圍第2項之方法,更包括:決定包含該第一執行緒的該協作執行緒陣列內的每一執行緒群組是否已經執行有關該陷阱處理器常式的一或多個操作;及從該處理核心內正在執行當中移除在包括該第一執行緒的該協作執行緒陣列內的每一執行緒群組。
- 如申請專利範圍第2項之方法,更包括:決定在該處理核心內執行的所有執行緒群組指出該等複數個執行緒群組內含的每一執行緒群組可在該陷阱處理器常式之外恢復執行;及 促使該第一執行緒群組在該陷阱處理器常式之外恢復執行。
- 如申請專利範圍第2項之方法,更包括:決定該第一執行緒群組是否包括遇到該第一陷阱指令的該執行緒;及在儲存該內文的該第一部分之前執行一或多個指令。
- 如申請專利範圍第5項之方法,其中決定該第一執行緒群組是否包括遇到該第一陷阱指令的該執行緒包括:從包含複數個執行緒群組內含的每一執行緒群組的陷阱資訊之一資料結構當中,擷取有關該第一執行緒群組的一輸入;及決定該第一執行緒是否已經更新有關該第一執行緒群組的該輸入。
- 如申請專利範圍第2項之方法,更包括:在執行有關該陷阱處理器常式的該等一或多個操作之前,等待一預定時間週期;及決定該等執行緒群組之一者是否內含一第二執行緒以執行一第二陷阱指令。
- 一種電腦系統,包括:一記憶體,其構成儲存與一陷阱處理常式相關的資料;一處理器,其構成執行由一處理核心內執行的一執行緒所遇到之一陷阱指令,包含執行下列步驟:針對該處理核心內執行的複數個執行緒群組中所包括之每一執行緒群組,進入一陷阱處理器常式,以回應執行該陷阱指令的該等執行緒群組之一者內含之一第一執行緒;針對該等複數個執行緒群組內含的每一執行緒群組,決定一對應協作執行緒陣列(CTA,Cooperative Thread Array)識別碼是否有關包括該第一執行緒的一協作執行緒陣列;及若該對應協作執行緒陣列識別碼與包含該第一執行緒的該協作執行緒陣列無關,則離開該陷阱處理器常式;或若該對應協作執行緒陣列識別碼有關包括該第一執行緒的該協作執行緒陣列,則執行有關該陷阱處理器常式的一或多個操作。
- 如申請專利範圍第8項之電腦系統,其中若該對應協作執行緒陣列識別碼有關包括該第一執行緒的該協作執行緒陣列,然後該處理器另構成執行下列步驟:將有關一第一執行緒群組的一內文之第一部分儲存在一記憶體內;儲存有關該第一執行緒群組的該內文之第二部分之前,指出該等複數個執行緒群組內含的每一執行緒群組都可在該陷阱處理器常式之外恢復執行;及將有關該第一執行緒群組的該內文之第二部分儲存在該記憶體內。
- 如申請專利範圍第9項之電腦系統,其中該處理器另構成:決定包括該第一執行緒的該協作執行緒陣列內的每一執行緒群組是否已經執行有關該陷阱處理器常式的一或多個操作;及從該處理核心內正在執行當中移除包括該第一執行緒的該協作執行緒陣列內的每一執行緒群組。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/728,784 US10289418B2 (en) | 2012-12-27 | 2012-12-27 | Cooperative thread array granularity context switch during trap handling |
Publications (1)
Publication Number | Publication Date |
---|---|
TW201435576A true TW201435576A (zh) | 2014-09-16 |
Family
ID=50928537
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW102144211A TW201435576A (zh) | 2012-12-27 | 2013-12-03 | 陷阱處理期間的協作執行緒陣列粒化內文切換 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10289418B2 (zh) |
CN (1) | CN103902369A (zh) |
DE (1) | DE102013022258A1 (zh) |
TW (1) | TW201435576A (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102177871B1 (ko) * | 2013-12-20 | 2020-11-12 | 삼성전자주식회사 | 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법 |
US10409614B2 (en) * | 2017-04-24 | 2019-09-10 | Intel Corporation | Instructions having support for floating point and integer data types in the same register |
US10474458B2 (en) | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
US10593010B2 (en) * | 2017-12-13 | 2020-03-17 | Microsoft Technology Licensing, Llc | Techniques for capturing and executing graphics processing operations |
CN109726023B (zh) * | 2018-12-12 | 2023-05-23 | 中国航空工业集团公司西安航空计算技术研究所 | 一种支持多线程多上下文的图形任务同步管理方法 |
US11954062B2 (en) | 2019-03-15 | 2024-04-09 | Intel Corporation | Dynamic memory reconfiguration |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4761733A (en) * | 1985-03-11 | 1988-08-02 | Celerity Computing | Direct-execution microprogrammable microprocessor system |
US5961629A (en) * | 1991-07-08 | 1999-10-05 | Seiko Epson Corporation | High performance, superscalar-based computer system with out-of-order instruction execution |
US6643765B1 (en) | 1995-08-16 | 2003-11-04 | Microunity Systems Engineering, Inc. | Programmable processor with group floating point operations |
US6128641A (en) * | 1997-09-12 | 2000-10-03 | Siemens Aktiengesellschaft | Data processing unit with hardware assisted context switching capability |
US6629252B1 (en) * | 1999-10-28 | 2003-09-30 | International Business Machines Corporation | Method for determining if a delay required before proceeding with the detected interrupt and exiting the interrupt without clearing the interrupt |
GB0226874D0 (en) * | 2002-11-18 | 2002-12-24 | Advanced Risc Mach Ltd | Switching between secure and non-secure processing modes |
GB2396713B (en) | 2002-11-18 | 2005-09-14 | Advanced Risc Mach Ltd | Apparatus and method for controlling access to a memory unit |
US7539853B2 (en) | 2002-11-18 | 2009-05-26 | Arm Limited | Handling interrupts in data processing of data in which only a portion of a function has been processed |
US7779238B2 (en) | 2004-06-30 | 2010-08-17 | Oracle America, Inc. | Method and apparatus for precisely identifying effective addresses associated with hardware events |
US7861060B1 (en) | 2005-12-15 | 2010-12-28 | Nvidia Corporation | Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior |
US20080059677A1 (en) * | 2006-08-31 | 2008-03-06 | Charles Jens Archer | Fast interrupt disabling and processing in a parallel computing environment |
US7937567B1 (en) * | 2006-11-01 | 2011-05-03 | Nvidia Corporation | Methods for scalably exploiting parallelism in a parallel processing system |
US8259576B2 (en) * | 2007-03-23 | 2012-09-04 | Intel Corporation | Method and apparatus for performing interrupt coalescing |
US8522000B2 (en) * | 2009-09-29 | 2013-08-27 | Nvidia Corporation | Trap handler architecture for a parallel processing unit |
US9734545B2 (en) * | 2009-10-08 | 2017-08-15 | Nvidia Corporation | Software methods in a GPU |
US9081501B2 (en) * | 2010-01-08 | 2015-07-14 | International Business Machines Corporation | Multi-petascale highly efficient parallel supercomputer |
US9652282B2 (en) | 2011-11-08 | 2017-05-16 | Nvidia Corporation | Software-assisted instruction level execution preemption |
US20130318269A1 (en) | 2012-05-22 | 2013-11-28 | Xockets IP, LLC | Processing structured and unstructured data using offload processors |
-
2012
- 2012-12-27 US US13/728,784 patent/US10289418B2/en active Active
-
2013
- 2013-12-03 TW TW102144211A patent/TW201435576A/zh unknown
- 2013-12-09 DE DE201310022258 patent/DE102013022258A1/de active Pending
- 2013-12-27 CN CN201310741943.5A patent/CN103902369A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
CN103902369A (zh) | 2014-07-02 |
US10289418B2 (en) | 2019-05-14 |
US20140189329A1 (en) | 2014-07-03 |
DE102013022258A1 (de) | 2014-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI498728B (zh) | 非搶占式圖形處理單元上互動除錯之方法和裝置 | |
TWI552108B (zh) | 運用於執行緒單一指令多重資料執行之編譯器控制區域排程 | |
TWI531974B (zh) | 管理巢狀執行串流的方法和系統 | |
TWI466027B (zh) | 解決執行緒發散的方法及系統 | |
US9921847B2 (en) | Tree-based thread management | |
TWI529626B (zh) | 在複數執行緒處理單元中的效率式記憶體虛擬化 | |
TWI525437B (zh) | 在複數執行緒處理單元中的效率式記憶體虛擬化 | |
TWI502489B (zh) | 叢集多階暫存檔的暫存器分配 | |
TWI489392B (zh) | 多個應用程式分享的圖形處理單元 | |
TW201413456A (zh) | 處理巢狀串流事件的方法和系統 | |
US20210019185A1 (en) | Compute task state encapsulation | |
US9645802B2 (en) | Technique for grouping instructions into independent strands | |
US10095542B2 (en) | Cooperative thread array granularity context switch during trap handling | |
TW201435576A (zh) | 陷阱處理期間的協作執行緒陣列粒化內文切換 | |
US10489200B2 (en) | Hierarchical staging areas for scheduling threads for execution | |
TWI528178B (zh) | 用於分析圖形處理管線效能之方法及計算系統 | |
TWI489289B (zh) | 分散作業的預先排程重播 | |
TWI457828B (zh) | 執行緒陣列粒化執行的優先權計算 | |
TW201432573A (zh) | 工作佇列型圖形處理單元工作創建 | |
TW201351276A (zh) | 計算工作的排程和執行 | |
TW201432571A (zh) | 儲存與復原執行緒群組操作狀態之技術 | |
US20150205606A1 (en) | Tree-based thread management |