TWI552108B - 運用於執行緒單一指令多重資料執行之編譯器控制區域排程 - Google Patents
運用於執行緒單一指令多重資料執行之編譯器控制區域排程 Download PDFInfo
- Publication number
- TWI552108B TWI552108B TW102143298A TW102143298A TWI552108B TW I552108 B TWI552108 B TW I552108B TW 102143298 A TW102143298 A TW 102143298A TW 102143298 A TW102143298 A TW 102143298A TW I552108 B TWI552108 B TW I552108B
- Authority
- TW
- Taiwan
- Prior art keywords
- thread
- region
- area
- branch
- code
- Prior art date
Links
- 230000015654 memory Effects 0.000 claims description 90
- 238000000034 method Methods 0.000 claims description 83
- 239000002243 precursor Substances 0.000 claims description 41
- 230000008030 elimination Effects 0.000 claims description 3
- 238000003379 elimination reaction Methods 0.000 claims description 3
- 230000000873 masking effect Effects 0.000 claims 1
- 238000012545 processing Methods 0.000 description 184
- 238000010586 diagram Methods 0.000 description 45
- 238000004458 analytical method Methods 0.000 description 40
- 238000004891 communication Methods 0.000 description 16
- 230000014509 gene expression Effects 0.000 description 13
- 238000007689 inspection Methods 0.000 description 12
- 239000000872 buffer Substances 0.000 description 9
- 230000008569 process Effects 0.000 description 7
- 230000008901 benefit Effects 0.000 description 5
- 238000006243 chemical reaction Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 239000000463 material Substances 0.000 description 5
- 238000003491 array Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 238000009877 rendering Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000000638 solvent extraction Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000005206 flow analysis Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000005457 optimization Methods 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
- 238000012546 transfer Methods 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 238000012884 algebraic function Methods 0.000 description 1
- 238000010420 art technique Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000009849 deactivation Effects 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
- 238000011156 evaluation Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000012913 prioritisation Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000011273 social behavior Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000014616 translation 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/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- 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/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/453—Data distribution
-
- 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/443—Optimisation
-
- 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/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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
Description
本發明一般係關於平行計算,尤其係關於運用於執行緒SIMD(單一指令多重資料)執行的編譯器控制區域排程。
單一指令多重資料(SIMD,Single-Instruction-Multiple-Data)處理器為執行一組指令的的處理器,其中每一指令都同時對多個不同資料值進行操作。專為單一指令多重資料處理器撰寫的應用程式在邏輯上分成「線程束」,其中每一線程束都是在單一指令多重資料處理器上合作且同時執行的「執行緒」之群組。一般而言,線程束內的每一執行緒都對不同資料值執行指令,但是執行與線程束內的其他執行緒相同的指令。
線程束內執行緒的執行可發散,若程式指令規定線程束內的一或多個執行緒採用第一路徑,而該線程束內的一或多個其他執行緒採用第二路徑,則該線程束內的執行緒發散。有許多因素造成發生執行緒發散,例如:因為線程束內條件分支的可能性,其中根據一分支條件結果,每一執行緒都可或不可分支,並且因為該分支條件的評估係根據每一執行緒都不同的資料值,所以評估該分支條件的該等執行緒可到達不同的分支條件結果且可發散。在本說明書中,這種發散執行可稱為「發散的控制流」。
因為線程束內的所有執行緒通常都執行相同指令,因此具有發散控制流的程式之執行牽涉到在每一執行緒所流動的所有控制流路徑上執行。以此方式在所有控制流路徑上執行牽涉到往下執行多條路徑,其中某些執行緒為「啟用」(目前執行中),而其他執行緒「未啟用」(等待執行)。往下執行多條路徑可導致(並且通常引起)整個線程束的執行時間比使用在任何一單一執行緒上的執行時間還要長。存在用於決定哪些發散執行緒應
在何時執行發散之技術。不過,某些現有技術可能無法與優先順序流結合、可能無法有效排程執行緒或可能無法提早確定執行緒的重新收斂。
針對上面的例示,需要更有效率的技術來管理整個程式不同區域內的一線程束內執行緒之執行。
本發明之一具體實施例揭示一種用於管理程式碼將執行緒排程以執行一程式的不同區域之方法。該方法包括下列步驟:分析一控制流圖形,其為根據該程式碼且該圖形包括複數個區域,每一區域都代表該程式碼的一部分,每一區域都指派給一執行優先順序,並且每一區域都具有一執行緒先驅碼,該執行緒先驅碼包含一或多個執行緒先驅碼區域;在該等複數個區域包含的一第一區域結尾上插入一或多個更新預測遮罩變數指令;及在該第一區域結尾上插入一或多個條件分支指令,其配置來反應該第一去的該執行緒先驅碼內的該等一或多個執行緒先驅碼區域之執行優先順序。
該揭示技術的一項優點為該揭示技術可用來決定,哪個執行緒應該在何時執行一程式的哪個區域。其他優點為該揭示技術可提早讓執行緒重新收斂。
100‧‧‧電腦系統
101‧‧‧編譯器
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‧‧‧記憶體與快取互連
400‧‧‧方法
500‧‧‧控制流圖形
502‧‧‧區域
504‧‧‧執行優先順序
506‧‧‧方向箭號
508‧‧‧分支
510‧‧‧檢查區塊
522A-2‧‧‧值
522B-2‧‧‧值
520‧‧‧預測遮罩變數
520A‧‧‧預測遮罩變數
520B‧‧‧預測遮罩變數
522A-1‧‧‧值
522B-1‧‧‧值
524A-2‧‧‧位元
524B-2‧‧‧位元
524A-1‧‧‧位元
524B-1‧‧‧位元
530‧‧‧遮罩更新指令
532‧‧‧控制流轉換指令
502-1~502-8‧‧‧區域
508-1~508-3‧‧‧暗示分支
如此上面簡單彙總可詳細了解本發明上述特色的方式,本發明的更特定說明則參照具體實施例,某些具體實施例說明於附圖內。不過吾人應該注意,附圖只說明本發明的典型具體實施例,因此未限制本發明的範疇,本發明承認其他等效具體實施例。
第一圖為例示構成實施本發明之一或多個態樣之電腦系統的方塊圖;第二圖為根據本發明的一具體實施例之用於第一圖中該電腦系統之一平行處理子系統的方塊圖;第三圖為根據本發明之一具體實施例之第二圖中該一般處理叢集內的一串流多重處理器之一部分的方塊圖;第四圖為根據本發明之一具體實施例之用於提供指令以排
程用於執行一程式不同區域的執行緒之方法步驟的流程圖;第五A圖為根據本發明之一具體實施例之揭示一程式不同區域的優先順序執行之一控制流圖形;第五B圖為根據本發明之一具體實施例之範例預測遮罩變數的概念圖;第五C圖為根據本發明之一具體實施例之包括遮罩更新指令及控制流轉換指令之一檢查區塊之範例配置的概念圖;第六圖為根據本發明之一具體實施例之用於插入指令以更新預測遮罩變數之方法步驟的流程圖;第七圖為根據本發明之一具體實施例之用於決定要插入該程式的程式碼內之檢查與條件分支指令之方法步驟的流程圖。
在以下描述中,揭示許多特定細節以對本發明有更徹底之理解。但是,精通技術人士應該了解,在無一或多個該等特定細節之下還是可實施本發明。
系統概觀
第一圖為例示構成實施本發明之一或多個態樣之電腦系統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)。
一編譯器101可內嵌在裝置驅動程式103內。編譯器101依照需求編譯程式指令,供平行處理子系統112執行。在此編譯期間,編譯器101可在許多編譯階段上對程式指令套用轉換。在本發明的另一具體實施例中,編譯器101可為單機應用程式。
應瞭解,本說明書中顯示的該系統為例示,可進行改變與修改。包括橋接器的數量與配置、中央處理單元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都有利地實施一高平行處理架構。如圖詳細所示,PPU 202(0)包括一處理叢集陣列230,其包括數量為C的一般處理叢集(General Processing Cluster,GPC)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,Ccooperative Thread Array)或「執行緒陣列」。特定合作執行緒陣列
的大小等於m*k,其中k為執行緒群組內同時執行的執行緒數量,通常為串流多重處理器310內平行處理引擎數量的整數倍數,並且m為串流多重處理器310內同時啟用的執行緒群組數量。合作執行緒陣列的大小通常由程式設計師及該合作執行緒陣列可用的硬體資源數量(例如記憶體或暫存器)來決定。
在本發明的具體實施例中,吾人想要使用一計算系統的平行處理單元202或其他處理器,運用執行緒陣列來執行一般用途計算。該執行緒陣列內的每一執行緒都可指派一獨一的執行緒識別碼(「執行緒ID」),其可在該執行緒執行期間存取該執行緒。該執行緒ID可定義為一維度或多維度數值,控制該執行緒處理行為的許多態樣。例如:一執行緒ID可用於決定設定一執行緒的哪個輸入資料部分要處理及/或決定設定一執行緒的哪個輸入資料部分要產生或寫入。
每個執行緒指令的序列可包括至少一指令,其定義該代表性執行緒與該執行緒陣列的一或多個其他執行緒之間的合作行為。例如:每一執行緒指令的順序可包括將在該順序內特定點上該代表執行緒運算執行中斷,直到一或多個其他執行緒到達該特定點上為止之指令、讓該代表執行緒將一或多個其他執行緒可存的資料儲存至一共用記憶體內之指令、讓該代表執行緒根據其執行緒ID自動讀取與更新一共用記憶體內的一或多個該等其他執行緒已經存取過的資料之指令等等。該合作執行緒陣列程式也可包括一指令,計算該共用記憶體內所要讀取資料的位址,其中該位址為執行緒ID的函數。利用定義合適的功能並且提供同步技術,資料可利用CAT的一執行緒寫入共用記憶體內的一已知位置,並且以可預測方式用相同合作執行緒陣列的不同執行緒從該位置當中讀取。因此,支援在執行緒之間共用的任何資料圖案,並且一合作執行緒陣列內的任何執行緒都可與相同合作執行緒陣列內任何其他執行緒共用資料。在合作執行緒陣列執行緒之間共用的資料內容(若有的話)由該合作執行緒陣列程式決定;如此吾人了解在使用合作執行緒陣列的特定應用當中,根據該合作執行緒陣列程式,合作執行緒陣列的執行緒彼此之間不會確實共用資料,並且在本說明書中可同時使用「合作執行緒陣列」與「執行緒陣列」等詞。
串流多重處理器310提供具備不同存取階層的晶片上(內部)資料儲存。特殊暫存器(未顯示)可由載入儲存單元303讀取但是無法寫入,並且可用於定義每一直執行緒「位置」的參數。在一具體實施例中,特殊暫存器包括每一執行緒(或串流多重處理器310內每一執行單元302)一暫存器,其儲存一執行緒ID;每一執行緒ID暫存器都只能由個別一執行單元302存取。特殊暫存器也可包括額外暫存器,可由執行任務中繼資料(或由所有載入儲存單元303)所呈現相同處理任務的所有執行緒讀取,其儲存一合作執行緒陣列識別碼、該合作執行緒陣列維度、該合作執行緒陣列所屬網格的維度(或若任務中繼資料編碼一佇列任務而非一網格任務時的佇列位置)及指派合作執行緒陣列的任務中繼資料之識別碼。
若任務中繼資料為一網格任務中繼資料,則執行任務中繼資料會導致啟動並執行固定數量的合作執行緒陣列,來處理佇列內所儲存的固定數量資料。合作執行緒陣列的數量依照網格寬度、高度與深度的乘積來指定。該固定數量的資料可儲存在任務中繼資料內,或任務中繼資料可儲存將由合作執行緒陣列處理的資料之指標。任務中繼資料也儲存該合作執行緒陣列所執行程式的開始位址。
若任務中繼資料為佇列任務中繼資料,然後使用任務中繼資料的佇列功能,表示要處理的資料量並不需要固定。佇列記錄儲存資料,供指派給任務中繼資料的該等合作執行緒陣列處理。該等佇列記錄也呈現執行緒執行期間由另一任務中繼資料產生的子任務,藉此提供巢狀平行。一般來說,執行緒的執行或包括該執行緒的合作執行緒陣列會中止,直到子任務執行完成為止。該佇列可儲存在任務中繼資料內,或與任務中繼資料分開,在此案例中任務中繼資料儲存至該佇列的佇列指標。有利的是,由該子任務產生的資料可寫入該佇列,同時任務中繼資料代表已經執行的該子任務。該佇列可實施為一圓形佇列,如此資料總量並不受限於該佇列的大小。
屬於一網格的合作執行緒陣列具有暗示的網格寬度、高度和深度參數,指示該網格內個別合作執行緒陣列的位置。在初始化期間會寫入特殊暫存器,以回應透過前端212從裝置驅動程式103接收命令,並且
在一處理任務期間不會改變。前端212排程執行每一處理任務。每一合作執行緒陣列都關聯於一特定任務中繼資料,以便同時執行一或多個任務。此外,單一一般處理叢集208可同時執行多個任務。
一參數記憶體(未顯示)儲存可由相同合作執行緒陣列(或任何載入儲存單元303)內任何執行緒讀取但無法寫入的執行時間參數(常數)。在一具體實施例中,裝置驅動程式103在導引串流多重處理器310開始執行使用這些參數的任務之前,提供參數該參數記憶體。任何合作執行緒陣列內的任何執行緒(或串流多重處理器310內的任何執行單元)都可透過記憶體介面214存取全域記憶體。全域記憶體的一部分可儲存在L1快取320內。
每一執行緒都使用本機暫存檔304當成挖掘空間;每一暫存器都分配給一執行緒專用,並且任何本機暫存檔304內的資料都只能由分配給該暫存器的該執行緒存取。本機暫存檔304可實施為實體上或邏輯上區分成P個通路的暫存檔,每一通路都具有某些數量的記錄(在此每一記錄都可儲存例如32位元字)。一通路指派給該N個執行單元302及P個載入儲存單元載入儲存單元303的每一,並且不同通路內的對應記錄可填入執行相同程式的不同執行緒之資料,來幫助單一指令、多重資料執行。通路的不同部分可分配給該G個同時執行緒群組中不同的執行緒,如此本機暫存檔304內的一已知記錄只能由特定執行緒存取。在一具體實施例中,本機暫存檔304內的特定記錄保留用於儲存執行緒識別碼,實施該等特殊暫存器之一者。此外,一統一L1快取320儲存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都得利於與其他一般處理叢集208無關的操作,運用分離並分散的處理單元、L1快取,來執行一或多個應用程式的任務。
精通此技術人士將了解,第一圖至第三圖內描述的架構並非用於限制本發明範疇,本說明書內的技術可在任何正確設置的處理單元上實施,在不背離本發明範疇之下包括但不受限於一或多個中央處理單元、一或多個多核心中央處理單元、一或多個平行處理單元202、一或多個一般處理叢集208、一或多個圖形或特殊用途處理單元等等。
運用於執行緒單一指令多重資料執行之編譯器控制區域排程
如上面所解釋,一線程束為在串流多重處理器310上執行的一執行緒群組。有時,線程束可發散,表示該線程束內的執行緒受只是遵循不同的控制流路徑。這些不同的控制流路徑通常無法在串流多重處理器
310上同時執行。因此,在不同時間上執行該等不同控制流路徑。一種技術通常用來排程在不同控制流路徑上執行之執行緒。本說明書內提供一種編譯器控制技術,藉由使用預測(執行緒執行的選擇性停用)和分支指令,修改程式碼插入指令來排程執行緒。該預測與分支指令用來實施通過該程式的一預定優先化控制流。
第四圖為根據本發明之一具體實施例之具有步驟用於讓編譯器101將指令插入該程式碼,以排程在不同控制流路徑上執行的執行緒之方法400的流程圖。第四圖所示方法400的描述可參照第五A圖至第五C圖,其描述一範例控制流圖形500、範例預測遮罩變數520及一範例檢查區塊510。雖然已經結合第一圖至第三圖及第五A圖至第五C圖來描述該等方法步驟,不過精通技術人士將了解,構成執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。在本揭露事項當中,編譯器101說明成執行有關已分析區域的特定步驟。如本揭露事項所使用,符號「R」代表已經分析的區域,在本說明書中也稱為「分析區域」。
如所示,方法400從步驟402開始,在此編譯器101可使用控制流分析來分析程式碼,以產生一控制流圖形,例如第五A圖內所示的控制流圖形。控制流圖形500在概念上例示用於在一程式內包括特定指令順序的程式碼之控制流。
請即參考第五A圖,控制流圖形500包括具有執行優先順序504並且由方向箭號506連接的一或多個「區域」,例如區域1-8 502-1-502-8。一控制流圖形為一執行緒在執行期間可移動通過一程式的所有路徑之表示,使同行符號。基本區塊為具有一進入點與一離開點的指令有限順序。一區域為控制流圖形的已連接子圖形。區域包括至少一基本區塊。進入單一區域502的執行緒至少在單一區域502完成執行之前通常不會發散。若在區域502結尾上存在發散程式碼(例如一條件分支指令),則會發散已經一起執行區域502的執行緒。執行緒的發散可在例如區域1 502-1的結尾上。如方向箭號506-1和506-2的指示,某些執行緒可移動至區域2 502-2,而其他執行緒則可移動至區域3 502-3。一般來說,執行緒往方向箭號506-1-506-10的箭頭所指示方向移動。雖然控制流圖形500上某些箭
頭,例如箭頭506-1和506-2指示一發散路徑,不過其他箭頭,例如箭頭506-9和506-10則指示一收斂路徑。執行緒從區域7 502-7和區域4 502-4離開,收斂於區域8 502-8。區域可具有前導者與後繼者。若方向箭號從一第一區域指向一第二區域,則該第一區域為該第二區域的前導者。此外,若方向箭號從一第二區域指向一第一區域,則該第一區域為該第二區域的後繼者。前導者與後繼者在此也稱為「前導區域」及「後繼區域」。
較佳是,區域儘可能較長。不過,透過控制流分析建立的區域可包括小於所要的單一基本區塊,如業界內所熟知。為了從單一基本區塊建立大型區域,透過收斂分析識別統一的分支。然後選擇並分析放大的區域。若為該區域用於放大的前導者之所有基本區塊都已統一分支當成結尾,並且是相同區域的所有部分(稱為「前導區域」),則該前導區域加入放大區域。此放大程序可循環重複用於所有區域,以達成大區域尺寸。較佳是,第五A圖內描述的控制流圖形500包括用此方式盡可能放大的區域。
執行優先順序504-1-504-8決定執行區域的順序。在第五A圖所示的控制流圖形500內,較大數字表示較高執行優先順序。換言之,若提供選擇,則具有較高優先順序的區域內之執行緒會在具有較低優先順序的區域內之執行緒之前執行。如此,在第五A圖所示的範例中,若有執行緒等待執行優先順序7的區域2,而有執行緒等待執行優先順序6的區域3,則等待執行區域2的執行緒會在等待執行區域3的執行緒之前執行。任何傳統演算法都可用來決定該控制流圖形內區域的執行優先順序。
實施用於強迫區域執行優先順序所需的該控制流可能需要使用到暗示分支,例如暗示分支508-1-508-3。這些分支508利用在不需要由原始程式碼連結在一起的區域502之間提供路徑,確定以優先順序執行區域502。例如:若某些執行緒已經傳遞至剛完成執行的區域2 502-2,但還有一些執行緒等待在區域4 502-4及區域3 502-3內執行,則一般會先執行區域3 502-3。不過,從區域2 502-2至區域3 502-3並無方向箭號。如此,暗示分支508-1用來將控制權從區域2 502-2轉換至區域3 502-3。
請即重新參考第四圖,在步驟404,編譯器101決定每一區域502的執行緒先驅碼。針對每一區域,一執行緒先驅碼包括其中執行緒
等待執行的所有區域502,並且考慮到圖形內的方向箭號506及執行優先順序506。執行緒先驅碼內的區域502可稱為「執行緒先驅碼區域」。
例如請即重新參考第五A圖,在控制流圖形500的頂端上,在區域1 502-1的開頭上,該執行緒先驅碼並未包括區域。這是因為執行緒正在執行區域1,區域1 502-1為控制流圖形500開始的位置,並且尚無方式讓任何執行緒到達任何其他區域。不過在區域1 502-1的結尾上,可讓執行緒移至區域2 502-2或區域3 502-3。因此,區域1結尾上的該執行緒先驅碼包括區域2 502-2和3 502-3。
在區域2 502-1的結尾上,該執行緒先驅碼包括區域4 502-4、5 502-5和3 502-3。這都是因為區域2 502-2結尾上的該發散控制流,由箭頭506-3和506-4表示,以及由於實際上區域2 502-2的優先順序504-2高於區域3的優先順序504-3,故實際上,某些執行緒可等待執行區域3 502-3。如此,有三個執行緒可等待執行的地方:區域3 502-3,在此從區域1 502-1分支的執行緒可等待;以及分支目標502-4和502-5兩者。
繼續該範例,在區域3 502-3的結尾上,該執行緒先驅碼包括區域4 502-4、5 502-5和6 502-6,但是不包括區域2 502-2。不包括區域2 502-2是因為其優先順序(7)高於區域3 502-3的優先順序(6)。如此,在區域3 502-3的結尾上,已經進入區域2 502-2的所有執行緒都已經完成執行,並且沒有執行緒等待執行區域2 502-2。不過,當區域3 502-3的優先順序高於區域2 502-2的分支目標時,其中該區域包括區域4 502-4和5 502-5,某些執行緒會在控制權轉換至區域3 502-3之前,從區域2 502-2流向區域4 502-4和5 502-5,並且執行緒執行區域3 502-3,而可能有執行緒等待執行區域4 502-4或502-5。此外,因為區域6 502-6為區域3 502-3本身的分支目標,所以執行緒可從區域3 502-3流向區域6 502-6,因此執行緒可等待執行區域6 502-6。因此,區域3 502-3的該執行緒先驅碼包括區域4 502-4、5 502-5及6 502-6。
省略前面,區域7 502-7的該執行緒先驅碼包括區域4 502-4和8 502-8。區域4 502-4位於該執行緒先驅碼內,因為從區域2 502-2分支出來的執行緒正等著執行區域4 502-4。因為區域4 502-4具有2的優先順
序,低於區域7 502-7的3優先順序,則等待執行區域4 502-4的任何執行緒都沒有機會在區域7 502-7執行之前執行。區域8 502-8為區域7 502-7的後記者,但是具有優先順序低於區域4 502-4的順序,如此執行緒可等待區域8 502-8。執行緒先驅碼可用任何已知方式決定。
請即重新參考第四圖,在步驟406內,編譯器101插入指令,將預測遮罩變數起始為0。每一區域502都存在有預測遮罩變數,並且指出哪個執行緒正在執行或正在等待對應至該預測遮罩變數的該區域。值為0的預測遮罩變數指出,目前並無執行緒等待執行該對應區域。當該程式開始時,因為並無執行緒已經進入任何區域,則所有預測遮罩變數都起始為0。一特殊預測遮罩變數「m」,在此也稱為當前區域預測遮罩,用來設定該預測遮罩給目前執行中的該區域。當控制流向新區域時,該變數m設定成等於該新區域的該預測遮罩變數,並且根據變數m預測指令。
第五B圖為範例預測遮罩變數520A、520B的概念版本圖。預測遮罩變數520A、520B包括具有位元524A、524B的數量等於線程束內執行緒數量的一位元遮罩。在第五B圖內,每一預測遮罩變數520A、520B都具有4個位元524A-1-524A-4、524B-1-524B-4.該位元遮罩內的每一位元都代表該線程束內不同的執行緒。因此,預測遮罩變數520A、520B可用來與具有4個執行緒的線程束結合。每一位元524對應至哪個執行緒的指示顯示於第五B圖內,每一位元都具有文字「(Tx)」,其中「x」為識別該執行緒的編號。
該位元遮罩內1之值表示,該對應執行緒目前正在執行或等待執行該對應區域,而0之值表示,目前並未執行該對應執行緒,並且並未等待執行該對應區域。
在第五B圖內,每一位元524A、524B都具有一值522A-1-522A-4、522B-1-522B-4.當變數520A內所有位元524A都設定為0,變數520A代表其中並無執行緒正在執行或等待執行的一區域。在變數520B內,位元522B-1和522B-4都設定為0,而位元522B-2和522B-3都設定為1。如此,執行緒T2和T3正在執行或等待執行由預測遮罩變數520B代表的該區域,而執行緒T1和T4目前並未執行也未等待執行由預測遮罩變數520B
代表的該區域。
請即重新參考第四圖,在步驟407內,編譯器101在每一區域開頭上插入指令,將位元遮罩變數「m」設定為等於該對應區域的該預測遮罩變數。位元遮罩變數「m」包含有關目前哪個執行緒正在執行一當前執行區域,並且用類似格式導出至第五B圖所示位元遮罩變數520A和520B之資訊。尤其是,m內的「1」指出正在執行該當前執行區域的個別執行緒,而m內的「0」指出該個別執行緒目前並未執行該當前執行區域。
在步驟408,編譯器101分析一區域,在此稱為「分析區域」或用符號「R」表示,並且將指令插入分析區域R內的一檢查區塊510,如第五A圖所示,以更新分析區域R的後繼者之預測遮罩變數520,如第五B圖所示。在步驟408,指令已經插入已分析的該控制流圖形(例如第五A圖內的控制流圖形500)內所有區域之檢查區塊510(如第五A圖內所示)。
請即重新參考第五A圖,一區域的後繼者,例如區域2 502-2,包括為區域2 502-2結尾上分支指令目標的區域,及方向箭號506所指示該控制應該流到的任何區域,但是不包括暗示分支508所指區域。這是因為暗示分支508只代表當前控制流至其他區域內等待中執行緒的轉換,但不代表執行緒至該區域的實際轉換,因為執行緒可能只流過該圖形內的方向箭號506。區域2 502-2的後繼者包括區域4 502-4和5 502-5,但不包括區域3 502-3。
請即重新參考第五A圖,在區域502結尾上存在檢查區塊510。第五C圖例示一示範檢查區塊510,其包括遮罩更新指令530(底下關於步驟408再來討論),接著控制流轉換指令532(底下關於步驟410和412再來討論)。更新預測遮罩變數520的指令(在此也稱為「遮罩更新指令」530)允許在執行時間上更新預測遮罩變數520,即是在程式執行期間。
請即重新參考第四圖,在步驟410和412,編譯器101插入檢查指令與條件分支指令,該分支指令在該檢查指令上設立條件並且指向等待執行的區域。這些檢查指令與條件分支指令都插入檢查區塊510的控制流轉換指令532內,如第五C圖所示。底下將關於第七圖更詳細討論步驟410和412,描述用於插入檢查與分支指令給一分析區域之方法。針對檢
查與分支指令要插入的每一區域,可重複第七圖內描述的該方法。
在步驟414內,在方法400內插入的該等指令經過效率最佳化。一旦編譯器101使用操縱預測遮罩的指令取代分支指令,則該程式碼可進一步最佳化。許多最佳化技術都可使用,例如「共用子表達式消除」、「恆定傳播」、「強度降低」、「循環非變數程式碼動作」以及「部分冗餘消除」。這些最佳化技術可移除已經插入區域結尾上的某些該等指令。
第六圖和第七圖呈現範例方法,編譯器101分析一區域並且執行第四圖所示的步驟408、410和412。尤其是,第六圖呈現在一區域上執行步驟408的範例方法,並且第七圖呈現在一區域上執行步驟410和412的範例方法。因為一編譯器101執行第六圖和第七圖所述該方法步驟,將指令插入一區域,編譯器101可針對所有區域重複第六圖和第七圖所述的該等方法。
有關第六圖和第七圖所提供的揭露事項可參考特定偽碼表達式。這些偽碼表達式用意在於概念性呈現程式指令,但是非必要以任何特定語言或指令集來呈現指令。有關第六圖和第七圖所提供的討論可參考特定符號,這些符號包括:「R」-也稱為「分析區域」,其為由有關第六圖和第七圖所討論方法內該編譯器所分析的該區域、「s」-該後繼者的該預測遮罩變數或該分析區域的分支採用目標區域、「n」-該分析區域的該分支不採用目標區域之該預測遮罩變數,以及「C」-該分析區域結尾上任何分支的該分支條件位元遮罩變數。
第六圖為根據本發明之一具體實施例之用於插入指令來更新特定區域的該預測遮罩變數之方法步驟的流程圖。雖然已經結合第一圖至第三圖及第五A圖至第五C圖來描述該等方法步驟,不過精通技術人士將了解,構成執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
第六圖描述的方法600決定要插入單一區域的指令,該區域已經過編譯器101分析,也稱為該分析區域或區域R。為了決定要插入控制圖內每一區域的指令,第六圖的該方法重複用於所有這種區域。
運用第六圖所示方法600的步驟,編譯器101分析一分析區
域,就是區域R,並且決定插入R結尾上檢查區塊510的指令。一控制流圖形及執行緒先驅碼已經分別在步驟402和404產生,編譯器101可使用這些控制流圖形及執行緒先驅碼來執行第六圖顯示的步驟601-622。
如所示,方法600從步驟601開始,在此編譯器101選擇要分析的區域,即一分析區域,在此也稱為區域R。在步驟602,編譯器101決定區域R使用一分支指令結尾。沿著由從第六圖步驟602延伸的「是」和「否」箭頭所到達之路徑反映出事實,就是若該分析區域結尾是一分支指令,則該分析區域具有兩後繼者,因此更新兩不同區域的預測遮罩變數,即是該兩後繼者,也稱為該分支採用目標與該分支不採用目標,同時若該分析區域結尾不是一分支指令,則該分析區域只有一後繼者,並且只更新一預測遮罩變數。步驟604、606和608呈現用於設定該分支採用目標的該預測遮罩變數,而步驟610、612和614呈現用於設定該分支採用目標的該預測遮罩變數之流程邏輯。步驟618和620呈現用於設定該非分支後繼者的該預測遮罩變數之流程邏輯。
若該分析區域結尾為一分支指令,則編譯器101前往步驟603,其中編譯器101移除該分支指令並且編譯器101插入一指令,以決定一分支條件位元遮罩變數之值,在此也稱為符號「C」。該分支條件位元遮罩變數為包含每一都對應至不同執行緒的位元之位元遮罩。該分支條件位元遮罩變數使用類似於第五B圖內的預測位元遮罩變數520A和520B的方式加以格式化。針對該分支條件位元遮罩變數內的每一位元,將該已移除分支指令的分支條件評估為真的一執行緒由值「1」表示,而評估該分支條件為偽的一執行緒則用值「0」表示。因此,C包含有關哪個執行緒「採用」該分支(由1表示)及哪個執行緒「不採用」該分支(由0表示)的資訊。
在步驟604,編譯器101檢查該分析區域的該分支採用目標,以了解該分支採用目標是否具有多個前導者。若該分支採用目標具有多個前導者,則方法600前往步驟606。若該分支採用目標具有多個前導者,則可能有來自不同區域的執行緒收緒。換言之,執行該分析區域的執行緒及執行該分支採用目標的任何其他前導者之執行緒都可收斂在該分支採用目標。因此,在步驟606內,編譯器101插入指令以合併來自該分析區域
的執行緒,採用具有執行緒等待執行該分支採用目標的該分支。
編譯器101利用插入對應至該偽碼s|=m & C的指令,其中「s」為該分支採用目標的該預測遮罩變數(類似第五B圖內所示的變數),「|=」為位元OR化合指派運算元,m為該分析區域R的該預測遮罩變數(類似第五B圖所示的變數),「&」為該位元AND運算元並且「C」為步驟602偵測的該分支之該分支條件位元遮罩變數。
表達式「m & C」,其中「&」為該位元AND運算元,提供一結果位元遮罩,針對由該結果位元遮罩內的一位元所呈現的每一執行緒,只有若該對應執行緒都執行R時才存在「1」,並且採用步驟602參照的該分支。如此,該表達式「m & C」產生一位元遮罩,指出來自R的哪個執行緒採用該分支。
表達式s|=m & C內的該位元OR運算元指出,採用已經從該分析區域移除的該分支之執行緒與來自該分支採用目標的其他前導者之執行緒合併。該位元OR運算元維持用該預測遮罩變數內1表示的所有先前執行緒用於該分支採用目標(也稱為符號「s」),並且加入來自該分析區域的新執行緒。編譯器101針對所有區域執行第六圖內該流程圖中呈現的方法600,包括上面提到的該分支採用目標之該等前導者。如此,指令存在於該分支採用目標的所有前導者內,用於更新該分支採用目標的該預測遮罩變數。該位元OR確定利用更新該分支採用目標中所有前導者內遮罩變數指令所指示的所有執行緒都在該分支採用目標上合併在一起。
若該分支採用目標不具有多個前導者,則方法600前往步驟608,並且插入指令,將採用已經從該分析區域移除的該分支之執行緒指派給該分支採用目標。
編譯器101利用插入對應至該偽碼s=m & C的指令,執行步驟608。在步驟608,並無來自該分支採用目標的其他前導者區域之執行緒收斂。因此,編譯器101不需要該位元OR運算元,並且編譯器101簡單將該值「m & C」(指示來自該分析區域的哪個執行緒採用該分支)指派給該分支採用目標的該預測位元遮罩變數,對應至符號「s」。
接下來,編譯器101前往步驟610。在步驟610,編譯器101
檢查該分支不採用目標是否具有多個前導者。若該分支不採用目標具有多個前導者,則編譯器101前往步驟612,並且插入指令,合併不採用該分支的執行緒與等待執行該分支不採用目標的執行緒。
該編譯器可利用插入對應至該偽碼n |=m &~C的指令來執行步驟612,其中「n」為該分支不採用目標的該預測遮罩變數,並且「~」為該位元NOT運算元。該表達式「m &~C」代表來自未採用該分支的該當前區域之該等執行緒。表達式「~C」為該分支條件位元遮罩變數C的該位元NOT,並且代表未採用該分支的執行緒。概念上,因為該位元NOT運算翻轉一位元遮罩內所有位元(即是從0到1及從1到0),並且因為位元遮罩C內所有位元都代表不採用該分支的所有執行緒。例如:若C的第二位元為1,指示該二執行緒採用該分支,則該C的該位元NOT,~C的該第二位元等於0,表示該第二執行緒不採用該分支。如此,該表達式「m &~C」指出執行R的哪個執行緒不採用該分支。該表達式n |=m &~C將來自該分支不採用目標的執行緒與來自不採用該分支的該分析區域之該等執行緒合併,類似於關於步驟606和608所述的方式。
若該分支不採用目標不具有多個前導者,則編譯器101前往步驟614,並且插入指令,將來自不採用該分支的該分析區域內的該等執行緒指派給該分支不採用目標。
編譯器101利用插入對應至該偽碼n=m &~C的指令,執行步驟614。如上面關於步驟606、608和612的解釋,此表達式指出不採用該分支的該等執行緒(m &~C)簡單指派給該分支不採用目標。
請即重新參考步驟602,若編譯器101未偵測步驟602中的該分析區域結尾上的一分支,然後該分析區域只具有一後繼者,並且方法600前往步驟616。因為不無分支,來自區域R的所有執行緒都傳遞至其後繼者區域。如此,編譯器101插入指令,將來自該當前區域的所有執行緒合併或指派至該後繼者區域。另外,因為只有一後繼者,編譯器101只插入用於指派一位元遮罩變數值的指令,該位元遮罩變數用於該後繼者s。
在步驟616,編譯器101檢查R的該後繼者是否具有多個前導者。編譯器101根據R的該後繼者是否具有多個前導者,指派步驟618
或620中的s值。該邏輯類似有關步驟606和612的邏輯。換言之,若有多個前導者至該R後繼者,則編譯器101插入指令,合併來自R的該等執行緒與來自該等多個前導者的該等執行緒。若沒有多個前導者至該R後繼者,則編譯器101簡單指派執行R的該等執行緒至該後繼者內的該等執行緒。
在步驟616,若該分析區域的後繼者具有多個前導者,則方法600前往步驟618,並且插入指令,合併執行該分析區域的執行緒與等待執行該後繼者區域的執行緒。在步驟618,因為該後繼者具有多個前導者,編譯器101插入指令,使用該位元OR運算,合併等待執行該分析區域後繼者的執行緒,就是以變數s指示的執行緒,與當前執行該分析區域的該等執行緒,就是以變數m指示的執行緒。編譯器101利用插入對應至該偽碼s |=m的指令,執行步驟618。
若在步驟616,編譯器101決定該後繼者不具有多個前導者,方法600前往步驟620。在步驟620,因為該後繼者只有一前導者,就是區域R,則無其他執行緒可等待執行該後繼者,並且來自R的所有執行緒都傳遞至該後繼者。編譯器101可插入對應至該表達式s=m的指令,執行步驟620。在編譯器101已經完成步驟612、614、618或620之後,方法600終止於步驟622。
為了例示,第六圖的方法600應用在第五A圖中控制流圖形500所示區域2 502-2底下,並且參考第五A圖和第六圖。範例偽碼表達式用來幫助例示編譯器101執行的步驟。
在步驟602,編譯器101檢查區域2 502-2,了解區域2 502-2是否結束於一分內。如從箭頭506-3和506-4所示,區域2 502-2未結束於一分支內。因此,編譯器101前往步驟604。在步驟604,編譯器101檢查區域2 502-2的該分支採用目標,以了解該分支採用目標是否具有多個前導者。區域2 502-2的該分支採用目標為區域4 502-4(為了簡化,在第五A圖內,一區域左邊上的所有分支目標都是該分支採用目標,並且該區域右邊上的所有分支目標都是該分支不採用目標)。如所見,該分支採用目標,區域4 502-4,只具有一前導者,就是區域2 502-2。因此,編譯器101前往步
驟608。
在步驟608,編譯器101將對應至該偽碼s=m & C的指令插入區域2 502-2的該檢查區塊510-2。此陳述設定區域4 502-4的該預測遮罩變數,在此指示為「s」,等於區域2 502-2的該預測遮罩之該位元AND,及區域2 502-2之結尾上的該分支之條件。邏輯上,此可理解,因為採用區域2 502-2的結尾上該分支的所有執行緒都流至區域4 502-4。
在步驟610,編譯器101檢查區域5 502-5,了解區域5,502-5是否具有多個前導者。區域5 502-5確實具有多個前導者,因為區域3 502-3和區域2 502-2都是區域5 502-5的前導者。編譯器101前往步驟612,並且插入對應至該偽碼n |=m &~C的指令。這些指令設定區域5 502-5的該預測遮罩變數,在此指示為「n」,等於具有區域2 502-2中該預測遮罩的該位元AND之「n」的先前值之該位元OR,其為「m」,以及該分支條件C的該位元NOT。邏輯上,這對應將等待執行區域5 502-5的執行緒與從區域2 502-2傳遞至區域5 502-5的該等執行緒合併。
編譯器101前往步驟622,並且結束第六圖所示的該方法。此範例中,由編譯器101插入區域2 502-2的檢查區塊510-2之該等指令包括以下:s=m & C
n |=m &~C
根據這些指令,當由控制流圖形500呈現的該程式正在運行時,檢查區塊510-2更新區域4和5的該預測遮罩變數。這些指令都位於第五A圖和第五C圖所示檢查區塊510-2內遮罩更新指令530內。
第七圖為根據本發明之一具體實施例之用於決定有關第四圖內步驟410和412所討論該檢查與條件分支指令之方法步驟的流程圖。雖然已經結合第一圖至第三圖及第五A圖至第五C圖來描述該等方法步驟,不過精通技術人士將了解,構成執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
第七圖內描述的方法700決定用於單一區域的檢查與條件分支指令,該區域已經過編譯器101分析,也稱為該分析區域或區域R。
為了決定用於一控制圖內每一區域的檢查與條件分支指令,第七圖的該方法重複用於所有這種區域。
為了避免混淆,由執行第七圖內所示該等步驟的編譯器101所分析的R以外之區域在此稱為「執行緒先驅碼區域」或符號「[Rx]」,並且用於一執行緒先驅碼區域的該預測遮罩變數在此稱為「[x]」,其中「x」由第五A圖內的該等區域的區域號碼表示。
如所示,方法700從步驟701開始,其中編譯器101從一控制流圖形(例如第五A圖內描述的控制流圖形500)選擇一分析區域。編譯器101已經知道該分析區域的該執行緒先驅碼,因為已經在第四圖內步驟404中執行過。在步驟702,編譯器101決定該執行緒先驅碼區域為該分析區域的該執行緒先驅碼內具有最高優先順序的區域。
在步驟704,若用於具有最高優先順序的該執行緒先驅碼區域之該預測遮罩變數指出,具有執行緒等待執行具有最高優先順序的該執行緒先驅碼區域,則編譯器101將指令插入給到達該執行緒先驅碼區域的分支。在步驟704,編譯器101可使用對應至該偽碼「if[x]goto[Rx]」的指令。概念上,這陳述「若該執行緒先驅碼區域內有任何執行緒等待中,則轉換程式控制到該執行緒先驅碼區域」。「if[x]」的陳述式可由在變數[x]內所有位元都採用位元OR來實施,若在[x]內有任何1,則產生1(真),並且若在[x]內無1,則產生0(偽)。
在步驟706,編譯器101檢查該執行緒先驅碼內是否有任何區域尚未分析。若有,則方法700前往步驟708,否則該方法結束於步驟710。
為了例示,此時第七圖內所示的該方法應用在第五A圖中控制流圖形500內所示區域2 502-2,並且參照第五A圖和第七圖。範例偽碼表達式用來幫助例示編譯器101採用的步驟。
對於步驟702而言,編譯器101試驗第五A圖中控制流圖形500內所示區域2 502-2的該執行緒先驅碼。區域2 502-2的該執行緒先驅碼包括區域3 502-3、區域4 502-4和區域5 502-5。在這些之中,具有最高優先順序的該區域為區域3 502-3,其具有優先順序6 504-3。
編譯器101前往步驟704,並且在區域2 502-2結尾上的檢查區塊510內插入檢查與分支指令。在第五圖所示的範例控制流圖形500內,因為區域3具有最高優先順序,所以插入對應至區域3的指令。該對應的偽碼為「if[3]goto[R3]」。
接下來在步驟706,編譯器101檢查該執行緒先驅碼內是否有任何執行緒尚未分析。在範例控制流圖形500中,在區域2 502-2的該執行緒先驅碼仍舊有兩個區域尚未分析,就是區域4 502-4和區域5 502-5。
在這之中,區域5 502-5具有最高優先順序。該方法前往步驟704,其中編譯器101插入對應的if和goto指令:if[5]goto[R5]。然後方法700前往步驟706,並且決定該執行緒先驅碼內仍舊有一執行緒。此後,該方法再次前往步驟704,並且插入該指令if[4]goto[R4]。最後,因為該執行緒先驅碼內未留下區域,則該方法前忘步驟710並且結束該分析區域的分析。
從此程序所獲得用於該範例控制流圖形500的該偽碼如下:if[3]goto[R3]
if[5]goto[R5]
if[4]goto[R4]
如所見,當控制流圖形500代表的該程式正在運行,則檢查區塊510-2先檢查是否有執行緒在區域3內等待,若有,則前往此處,然後檢查是否有執行緒在區域5內等待,若有,則前往此處,然後檢查是否有執行緒在區域4內等待,若有,則前往此處。依照優先順序排列該陳述式,強迫該區域的執行優先順序。
最後一「if」陳述式可移除,因為若檢查到所有其他區域內都無執行緒等待,則控制流至該最後其餘區域。這產生該偽碼:if[3]goto[R3]
if[5]goto[R5]
goto[R4]
此外此外,若R的所有後繼者的優先順序都高於R的該執行緒先驅碼內所有其他區域,則控制轉換至R的該等後繼者之一者,並且if和goto陳述並不需要用於R的該執行緒先驅碼內無R後繼者的區域。
請了解,第六圖和第七圖內參照的該偽碼在概念上代表電腦指令,但是並不需要代表任何特定程式語言的指令、指令集等等。
總結來說,本說明書內提供編譯器實施技術,用於在一程式結構內施行區域的優先順序。運用這些技術,該編譯器利用插入指令來執行每一區域內的一系列檢查與分支,來修改程式碼。針對每一區域,該系列檢查與分支決定接下來控制應流往何處。該等檢查與分支都用優先順序排列,這幫助施行執行的優先順序。該編譯器也插入指令,來更新用於每一區域的預測遮罩變數,以便確定該等正確執行緒正在每一區域內執行。更新預測遮罩變數的該等指令也幫助施行執行的優先順序。
本說明書內提供的技術優點為該等區域以優先順序執行,本說明書內提供的另一技術優點為發散的執行緒提早重新收斂,仍舊另一優點為,因為該等技術由該編譯器實施,所以不需要支援特定硬體。
本發明之一具體實施例可實施當成搭配電腦系統使用的程式產品。該程式產品的程式定義該等具體實施例(包括本說明書所述的方法)的功能,並且可包括在電腦可讀取儲存媒體上。例示的電腦可讀取儲存媒體包括但不受限於:(i)其上資訊永久儲存的不可抹寫儲存媒體(例如電腦內的唯讀記憶體裝置,例如小型碟片唯讀記憶體(CD-ROM)光碟機可讀取的CD-ROM光碟、快閃記憶體、ROM晶片或任何一種固態非揮發性半導體記憶體);及(ii)上其儲存可變資訊的可抹寫儲存媒體(例如磁碟機或硬碟內的磁碟或任何一種固態隨機存取半導體記憶體)。
在此已經參考特定具體實施例說明本發明。不過精通此技術的人士將會了解,在不悖離申請專利範圍內公佈之本發明廣泛精神以及領域下,可進行許多修改與變更。因此前述說明與圖式僅供參考而不做限制。
因此,本發明具體實施例的範疇公布於以下的申請專利範圍內。
Claims (10)
- 一種用於排程執行緒以執行一程式的不同區域之方法,該方法包括:分析一控制流圖形,其為根據程式碼且包含複數個區域,其中每一區域都代表該程式碼的一不同部分,每一區域都指派一執行優先順序,且都關聯於一執行緒先驅碼,該執行緒先驅碼包含一或多個執行緒先驅碼區域,每一執行緒先驅碼區域都是該控制流圖形內的一區域;根據該控制流圖形及該程式碼,在該等複數個區域內包含的一第一區域結尾上插入一或多個更新預測遮罩變數指令;及在該第一區域結尾上插入一或多個條件分支指令,其配置用以反應該第一區域的該執行緒先驅碼內的該等一或多個執行緒先驅碼區域之執行優先順序。
- 如申請專利範圍第1項之方法,更包括決定一分支指令是否包括在該第一區域的該結尾上,並且用構成計算該第一區域的一分支條件位元遮罩變數之指令以取代該分支指令。
- 如申請專利範圍第2項之方法,其中該控制流圖形內的每一區域具有一或多個後繼者區域及一或多個前導者區域,每一後繼者區域都是該控制流圖形內的一區域,並且每一前導者區域都是該控制流圖形內的一區域,並且其中在該第一區域結尾上的該分支指令具有一分支採用目標區域,該分支採用目標區域為該控制流圖形內的該等複數個區域內的一區域,並且插入一或多個更新預測遮罩變數指令更包括:決定該分支採用目標區域具有多個前導者區域,並且插入指令,該構成合併採用該第一區域內的該分支的執行緒與等待執行該分支採用目標區域的執行緒;或決定該分支採用目標區域不具有多個前導者區域,並且插入指令,構成將採用該第一區域內該分支的執行緒指派至該分支採用目標區域。
- 如申請專利範圍第3項之方法,更包括:決定該分支不採用目標區域具有多個前導者區域,並且插入指令,構成合併不採用該第一區域內該分支的執行緒與等待執行該分支不採 用目標區域的執行緒;或決定該分支不採用目標區域不具有多個前導者區域,並且插入指令,構成將不採用該第一區域內該分支的執行緒指派至該分支不採用目標區域。
- 如申請專利範圍第1項之方法,其中該控制流圖形內的每一區域都具有一或多個後繼者區域及一或多個前導者區域,每一後繼者區域都是該控制流圖形內的一區域,並且每一前導者區域都是該控制流圖形內的一區域,並且其中插入第一組更新預測遮罩變數指令更包括:決定一分支指令並未包括在該第一區域結尾上;並且也決定該第一區域的一後繼者區域具有多個前導者區域,並且插入指令,構成合併執行該第一區域的執行緒與等待執行該後繼者區域的執行緒;或決定該第一區域的一後繼者區域不具有多個前導者區域,並且插入指令構成將執行該第一區域的執行緒指派至該第一區域的該後繼者區域。
- 如申請專利範圍第1項之方法,其中插入該等一或多個條件分支指令更包括:以該第一區域的該執行緒先驅碼內的該等執行緒先驅碼區域之執行優先順序,在該第一區域結尾上插入複數個條件分支指令,每一條件分支指令都具有一個別目標執行先驅碼區域,每一條件分支指令都構成:決定執行緒是否等待執行該第一區域的該執行緒先驅碼內的該個別目標執行緒先驅碼區域,並且若執行緒等待執行該個別目標執行緒先驅碼區域時,分支至該目標執行緒先驅碼區域。
- 如申請專利範圍第1項之方法,更包括在該第一區域的開頭上插入一或多個指令,以設定一預測遮罩給該第一區域。
- 如申請專利範圍第1項之方法,更包括利用執行一或多個死碼消除及循環非變數程式碼動作,最佳化該等一或多個更新預測遮罩變數指令及該等一或多個條件分支指令。
- 如申請專利範圍第1項之方法,更包括:在該等複數個區域內的一第二區域結尾上插入一或多個更新預測 遮罩變數指令;及在該第二區域結尾上插入一或多個條件分支指令,該條件分支指令以該第二區域的一執行緒先驅碼內的該等執行緒先驅碼區域之執行優先順序來排列。
- 一種用於排程執行緒以執行一程式的不同區域之計算裝置,該計算裝置包括:一處理器;及一記憶體,其耦合至該處理器,其中該記憶體包括一具有指令的編譯器,該處理器執行該等指令時,導致該處理器:分析一控制流圖形,其為根據程式碼且包含複數個區域,其中每一區域都代表該程式碼的一不同部分,每一區域都指派一執行優先順序,並且都關聯於一執行緒先驅碼;根據該控制流圖形及該程式碼,在該等複數個區域內包含的一第一區域結尾上插入一或多個更新預測遮罩變數指令;及在該第一區域結尾上插入一或多個條件分支指令,其基於與該第一區域相關聯的該執行緒先驅碼所配置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/710,279 US9424038B2 (en) | 2012-12-10 | 2012-12-10 | Compiler-controlled region scheduling for SIMD execution of threads |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201443825A TW201443825A (zh) | 2014-11-16 |
TWI552108B true TWI552108B (zh) | 2016-10-01 |
Family
ID=50778225
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW102143298A TWI552108B (zh) | 2012-12-10 | 2013-11-27 | 運用於執行緒單一指令多重資料執行之編譯器控制區域排程 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9424038B2 (zh) |
CN (1) | CN103870246A (zh) |
DE (1) | DE102013017982A1 (zh) |
TW (1) | TWI552108B (zh) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9332083B2 (en) * | 2012-11-21 | 2016-05-03 | International Business Machines Corporation | High performance, distributed, shared, data grid for distributed Java virtual machine runtime artifacts |
US9569400B2 (en) | 2012-11-21 | 2017-02-14 | International Business Machines Corporation | RDMA-optimized high-performance distributed cache |
US9378179B2 (en) | 2012-11-21 | 2016-06-28 | International Business Machines Corporation | RDMA-optimized high-performance distributed cache |
US9384019B2 (en) | 2014-03-25 | 2016-07-05 | International Business Machines Corporation | Dynamic code injection |
US10405784B2 (en) | 2014-05-14 | 2019-09-10 | Stryker Corporation | Tissue monitoring apparatus and method |
US9223551B1 (en) * | 2014-07-22 | 2015-12-29 | Here Global B.V. | Rendergraph compilation method and use thereof for low-latency execution |
KR102279027B1 (ko) | 2014-12-03 | 2021-07-19 | 삼성전자주식회사 | 멀티 스레드를 실행하는 방법 및 장치 |
US9928034B2 (en) * | 2014-12-17 | 2018-03-27 | Nvidia Corporation | Work-efficient, load-balanced, merge-based parallelized consumption of sequences of sequences |
US9898287B2 (en) * | 2015-02-13 | 2018-02-20 | Advanced Micro Devices, Inc. | Dynamic wavefront creation for processing units using a hybrid compactor |
US10152452B2 (en) * | 2015-05-29 | 2018-12-11 | Intel Corporation | Source operand read suppression for graphics processors |
EP3106982B1 (en) * | 2015-06-18 | 2021-03-10 | ARM Limited | Determination of branch convergence in a sequence of program instructions |
JP6668638B2 (ja) * | 2015-08-24 | 2020-03-18 | 富士通株式会社 | 情報処理装置、コンパイル方法及びコンパイラ |
US9921838B2 (en) * | 2015-10-02 | 2018-03-20 | Mediatek Inc. | System and method for managing static divergence in a SIMD computing architecture |
US11424931B2 (en) | 2016-01-27 | 2022-08-23 | Blackberry Limited | Trusted execution environment |
US10599409B2 (en) * | 2016-02-02 | 2020-03-24 | Blackberry Limited | Application lifecycle operation queueing |
US10115175B2 (en) * | 2016-02-19 | 2018-10-30 | Qualcomm Incorporated | Uniform predicates in shaders for graphics processing units |
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 |
EP3367606B1 (en) * | 2017-02-24 | 2019-09-18 | Secure-IC SAS | Automatic insertion of masking into an algorithm |
US10489877B2 (en) * | 2017-04-24 | 2019-11-26 | Intel Corporation | Compute optimization mechanism |
US10133561B1 (en) | 2017-08-30 | 2018-11-20 | International Business Machines Corporation | Partial redundancy elimination with a fixed number of temporaries |
US11442795B2 (en) | 2018-09-11 | 2022-09-13 | Nvidia Corp. | Convergence among concurrently executing threads |
CN110032407B (zh) | 2019-03-08 | 2020-12-22 | 创新先进技术有限公司 | 提升cpu并行性能的方法及装置和电子设备 |
US11455153B2 (en) * | 2019-03-18 | 2022-09-27 | Advanced Micro Devices, Inc. | Dynamic instances semantics |
GB2579114B (en) | 2019-05-31 | 2021-04-21 | Imagination Tech Ltd | Controlling rendering operations |
US11934867B2 (en) | 2020-07-23 | 2024-03-19 | Nvidia Corp. | Techniques for divergent thread group execution scheduling |
US20230115044A1 (en) * | 2021-10-08 | 2023-04-13 | Nvidia Corp. | Software-directed divergent branch target prioritization |
CN117311988B (zh) * | 2023-11-27 | 2024-03-12 | 沐曦集成电路(南京)有限公司 | 一种带掩码的规约操作优化方法、装置、设备及介质 |
CN118349281B (zh) * | 2024-06-18 | 2024-10-29 | 北京辉羲智能科技有限公司 | 线程分歧处理方法、装置和设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070050603A1 (en) * | 2002-08-07 | 2007-03-01 | Martin Vorbach | Data processing method and device |
US20090240931A1 (en) * | 2008-03-24 | 2009-09-24 | Coon Brett W | Indirect Function Call Instructions in a Synchronous Parallel Thread Processor |
US20110072248A1 (en) * | 2009-09-24 | 2011-03-24 | Nickolls John R | Unanimous branch instructions in a parallel thread processor |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8196127B2 (en) * | 2006-08-04 | 2012-06-05 | International Business Machines Corporation | Pervasively data parallel information handling system and methodology for generating data parallel select operations |
US8572355B2 (en) * | 2009-09-28 | 2013-10-29 | Nvidia Corporation | Support for non-local returns in parallel thread SIMD engine |
US8806458B2 (en) * | 2012-02-16 | 2014-08-12 | Microsoft Corporation | Vectorization of shaders |
US9851977B2 (en) * | 2012-12-06 | 2017-12-26 | Kalray | Apparatus and method for combining thread warps with compatible execution masks for simultaneous execution and increased lane utilization |
-
2012
- 2012-12-10 US US13/710,279 patent/US9424038B2/en active Active
-
2013
- 2013-11-27 TW TW102143298A patent/TWI552108B/zh active
- 2013-11-29 DE DE102013017982.3A patent/DE102013017982A1/de not_active Ceased
- 2013-12-10 CN CN201310666892.4A patent/CN103870246A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070050603A1 (en) * | 2002-08-07 | 2007-03-01 | Martin Vorbach | Data processing method and device |
US20090240931A1 (en) * | 2008-03-24 | 2009-09-24 | Coon Brett W | Indirect Function Call Instructions in a Synchronous Parallel Thread Processor |
US20110072248A1 (en) * | 2009-09-24 | 2011-03-24 | Nickolls John R | Unanimous branch instructions in a parallel thread processor |
Non-Patent Citations (2)
Title |
---|
Brunie et al,"Simultaneous Branch and Warp Interweaving for Sustained GPU Performance" ,2011/12/7,page 1-17 * |
Diamos et al,"SIMD Re-Convergence at Thread Frontiers",MICRO'11,2011/12/7,page 1-12,http://www.istc-cc.cmu.edu/publications/index.shtml#pubs2011 * |
Also Published As
Publication number | Publication date |
---|---|
TW201443825A (zh) | 2014-11-16 |
DE102013017982A1 (de) | 2014-06-12 |
US9424038B2 (en) | 2016-08-23 |
US20140165049A1 (en) | 2014-06-12 |
CN103870246A (zh) | 2014-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI552108B (zh) | 運用於執行緒單一指令多重資料執行之編譯器控制區域排程 | |
US11847508B2 (en) | Convergence among concurrently executing threads | |
US9436447B2 (en) | Technique for live analysis-based rematerialization to reduce register pressures and enhance parallelism | |
JP4984306B2 (ja) | 汎用プロセッサによって実行するためのアプリケーションプログラムのリターゲティング | |
TWI502489B (zh) | 叢集多階暫存檔的暫存器分配 | |
EP2710467B1 (en) | Automatic kernel migration for heterogeneous cores | |
US9612811B2 (en) | Confluence analysis and loop fast-forwarding for improving SIMD execution efficiency | |
TWI498819B (zh) | 執行成型記憶體存取作業的系統和方法 | |
US9645802B2 (en) | Technique for grouping instructions into independent strands | |
TWI489392B (zh) | 多個應用程式分享的圖形處理單元 | |
TW201439970A (zh) | 儲存共用頂點之技術 | |
US20120331278A1 (en) | Branch removal by data shuffling | |
US8615770B1 (en) | System and method for dynamically spawning thread blocks within multi-threaded processing systems | |
TWI528178B (zh) | 用於分析圖形處理管線效能之方法及計算系統 | |
TW201443826A (zh) | 儲存共用頂點之技術 | |
US20140351826A1 (en) | Application programming interface to enable the construction of pipeline parallel programs | |
TW201435576A (zh) | 陷阱處理期間的協作執行緒陣列粒化內文切換 | |
TW201432573A (zh) | 工作佇列型圖形處理單元工作創建 | |
TW201432571A (zh) | 儲存與復原執行緒群組操作狀態之技術 | |
US8959497B1 (en) | System and method for dynamically spawning thread blocks within multi-threaded processing systems | |
KR101118321B1 (ko) | 리타게팅된 그래픽 프로세서 가속 코드의 범용 프로세서에 의한 실행 | |
KR20090107972A (ko) | 범용 프로세서에 의해 실행하기 위한 어플리케이션 프로그램의 리타게팅 | |
Abdolrashidi | Improving Data-Dependent Parallelism in GPUs Through Programmer-Transparent Architectural Support |