TW201342240A - 解決執行緒發散的方法和系統 - Google Patents

解決執行緒發散的方法和系統 Download PDF

Info

Publication number
TW201342240A
TW201342240A TW102101081A TW102101081A TW201342240A TW 201342240 A TW201342240 A TW 201342240A TW 102101081 A TW102101081 A TW 102101081A TW 102101081 A TW102101081 A TW 102101081A TW 201342240 A TW201342240 A TW 201342240A
Authority
TW
Taiwan
Prior art keywords
thread
threads
subset
divergent
memory
Prior art date
Application number
TW102101081A
Other languages
English (en)
Other versions
TWI466027B (zh
Inventor
Jack Choquette
Xiaogang Qiu
Jeff Tuckey
Ming Yiu Michael Siu
Robert J Stoll
Olivier Giroux
Original Assignee
Nvidia Corp
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 Nvidia Corp filed Critical Nvidia Corp
Publication of TW201342240A publication Critical patent/TW201342240A/zh
Application granted granted Critical
Publication of TWI466027B publication Critical patent/TWI466027B/zh

Links

Classifications

    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent 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]
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming

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)

Abstract

本發明揭示一種位址發散單元,其偵測一執行緒群組內執行緒間之發散,然後將這些執行緒分成一未發散執行緒子集以及一發散執行緒子集。在一個具體實施例內,該位址發散單元導致發行與該未發散執行緒子集相關聯的指令在並行處理單元上執行,而導致與該發散執行緒子集相關聯的指令重新擷取並重新發行用來執行。

Description

解決執行緒發散的方法及系統
本發明一般係關於多執行緒處理,尤其係關於解決執行緒發散的方法及系統。
【相關技術】
「執行緒群組」為一組並行執行緒,其以單一指令多重執行緒(SIMT,Single-instruction multiple-thread)或單一指令多重資料(SIMD,Single-instruction multiple-data)方式一起執行相同的指令。一並行處理單元(PPU,Parallel processing unit)可同時發出並執行許多並行執行緒,以便執行許多不同處理任務。一已知執行緒執行時,該執行緒可從一特定記憶體位置,例如暫存檔,讀取資料或寫入資料。一般而言,一執行緒群組裡面許多執行緒的目標全都在相同記憶體位置。不過,某種指令會導致發生分支,造成某些執行緒的目標在一個記憶體位置,而其他執行緒的目標在其他記憶體位置。這就是業界內已知的「執行緒發散」。運用傳統PPU,執行緒發散會造成PPU整個系統的失效。
因此,業界所需為一種解決執行緒群組內執行緒之間發散之技術。
在以下描述中,揭示許多特定細節以對本發明有更徹底之理解。但是,精通此技術的人士應該了解,在無一或多個該等特定細節之下還是可實施本發明。
總結來說,一並行處理單元內一位址發散單元將一執行緒群組內的執行緒分成未發散執行緒子集以及發散執行緒子集。該位址發散單元導致發行未發散執行緒子集來在該並行處 理單元上執行,而導致重新擷取並重新發行與該發散執行緒子集相關聯的指令。
系統概觀
第一圖為例示設置來實施本發明一或多個態樣的電腦系統100之方塊圖。電腦系統100包括一中央處理單元(CPU,Central processing unit)102,以及透過一互連路徑通訊的一系統記憶體104,其中該路徑可包括一記憶體橋接器105。例如可為北橋晶片的記憶體橋接器105透過匯流排或其他通訊路徑106(例如超傳輸連結),連接至一輸入/輸出(I/O,Input/Output)橋接器107。例如可為南橋晶片的I/O橋接器107接收來自一或多個使用者輸入裝置108(例如鍵盤、滑鼠)的使用者輸入,並透過通訊路徑106和記憶體橋接器105將該輸入轉送至CPU 102。一並行處理子系統112透過匯流排或第二通訊路徑113(例如快速周邊組件互連(PCI,Express Peripheral Component Interconnect Express)、加速圖形連接埠(Accelerated Graphics Port)或超傳輸連結)耦合至記憶體橋接器105;在一個具體實施例內,並行處理子系統112為傳遞畫素給顯示裝置110(例如傳統陰極射線管或液晶顯示監視器)的圖形子系統。系統磁碟114也連接至I/O橋接器107。一開關116提供I/O橋接器107與其他組件,像是網路配接器118以及許多外接卡120和121之間的連接。其他組件(未明確顯示),包括萬用序列匯流排(USB,Universal serial bus)或其他連接埠連接、光碟(CD,Compact Disc)機、數位視訊光碟(DVD,Digital Video Disc)機、薄膜記錄裝置等等,也可連接至I/O橋接器107。第一圖內顯示的許多通訊路徑,包括特地指名的通訊路徑106和113,都可使用任何合適的協定來實施,例如PCI Express、加速圖形連接埠(AGP,Accelerated Graphics Port)、超傳輸或任何其他匯流排或點對點通訊協定,以及不同裝置之間的連接都可使用業界內已知的不同協定。
在一個具體實施例內,並行處理子系統112併入針對圖形與視訊處理最佳化的電路,包括例如視訊輸出電路,並且構成一圖形處理單元(GPU,Graphics processing unit)。在另一具體實施例內,並行處理子系統112併入針對一般用途處理最佳化的電路,同時保留底層計算架構,本文內有更詳細描述。尚且在另一具體實施例內,並行處理子系統112可在單一子系統內合併一或多個其他系統元件,例如結合記憶體橋接器105、CPU 102和I/O橋接器107來形成一單晶片系統(SoC,System on chip)。
吾人將了解,本文中顯示的系統為例示,所以可進行改變與修改。包括橋接器的數量與配置、CPU 102的數量以及並行處理子系統112的數量之這類連接拓撲可依照需求修改。例如在某些具體實施例內,系統記憶體104直接連接至CPU 102,而不是透過橋接器,並且其他裝置透過記憶體橋接器105以及CPU 102與系統記憶體104通訊。在其他替代拓撲中,並行處理子系統112連接至I/O橋接器107或直接連接至CPU 102,而不是連接至記憶體橋接器105。仍舊在其他具體實施例內,I/O橋接器107和記憶體橋接器105可整合成為單一晶片,替代做為一或多個分散裝置。大型具體實施例可包括二或多個CPU 102以及二或多個並行處理子系統112。本文中顯示的特定組件為選擇性;例如可支援任何數量的外接卡或周邊裝置。在某些具體實施例內,省略開關116,並且網路配接器118和外接卡120、121都直接連接至I/O橋接器107。
第二圖例示根據本發明一個具體實施例的並行處理子系統112。如所示,並行處理子系統112包括一或多個並行處理單元(PPU,Parallel processing unit)202,每一個都耦合至本機並行處理(PP,Parallel processing)記憶體204。一般來說,並行處理子系統包括數量為U的PPU,其中U1。(本文中多個類似物件的實例都用參考號碼標示出該物件,並且括號標示所 需的實例。)PPU 202以及並行處理記憶體204可使用一或多個積體電路裝置來實施,例如可程式化處理器、特殊應用積體電路(ASIC,Application specific integrated circuit)或記憶體裝置,或以任何其他技術可行方式。
請再次參閱第一圖與第二圖,在一些具體實施例內,並行處理子系統112內的某些或全部PPU 202為具有顯像管線的圖形處理器,其可設置成執行許多操作,這些操作有關透過記憶體橋接器105和第二通訊路徑113從CPU 102及/或系統記憶體104供應的圖形資料產生畫素資料,與本機並行處理記憶體204(可用來當成圖形記憶體,包括例如傳統畫框緩衝區)互動來儲存與更新畫素資料,傳遞畫素資料給顯示裝置110等等。在某些具體實施例內,並行處理子系統112可包括操作當成圖形處理器的一或多個PPU 202,以及用於一般用途計算的一或多個其他PPU 202。該等PPU可一致或不同,並且每一PPU都可擁有一專屬的並行處理記憶體裝置或無專屬的並行處理記憶體裝置。並行處理子系統112內的一或多個PPU 202可輸出資料至顯示裝置110,或並行處理子系統112內的每一PPU 202都可輸出資料至一或多個顯示裝置110。
在操作上,CPU 102為電腦系統100的主要處理器,控制與協調其他系統組件的操作。尤其是,CPU 102發出命令控制PPU 202的操作。在某些具體實施例內,CPU 102將每一PPU 202的命令串流寫入至一資料結構(第一圖或第二圖內未明確顯示),其可位於系統記憶體104內、並行處理記憶體204內或CPU 102和PPU 202可存取的其他儲存位置內。指向至每一資料結構的一指標寫入至一推送緩衝區,啟始在該資料結構內該命令串流之處理。PPU 202讀取來自一或多個推送緩衝區的命令串流,然後相對於CPU 102的操作非同步執行命令。利用應用程式透過裝置驅動程式103來控制不同推送緩衝區的排程,指定每一推送緩衝區的執行優先順序。
此時請回頭參閱第二圖以及第一圖,每一PPU 202都包括一I/O單元205,其透過通訊路徑113與電腦系統100的剩餘部份通訊,其連接至記憶體橋接器105(或在替代具體實施例內直接連接至CPU 102)。PPU 202與電腦系統100之剩餘部份的連接也可改變。在某些具體實施例內,並行處理子系統112實施成為可插入電腦系統100內之擴充槽的外接卡。在其他具體實施例內,PPU 202可與例如記憶體橋接器105或I/O橋接器107這類的匯流排橋接器整合在單一晶片上。仍舊在其他具體實施例內,PPU 202的某些或全部元件可與CPU 102整合在單一晶片上。
在一個具體實施例內,通訊路徑113為一PCI Express連結,其中分配專屬通道給每一PPU 202,如業界內所熟知。在此也可使用其他通訊路徑。一I/O單元205產生在通訊路徑113上傳輸的封包(或其他信號),也從通訊路徑113上接收所有傳入封包(或其他信號),將該等傳入封包導引至PPU 202的適當組件。例如:有關處理任務的命令可導引至主介面206,而有關記憶體操作的命令(例如讀取或寫入並行處理記憶體204)可導引至記憶體交叉開關單元210。主介面206讀取每一推送緩衝區,並將該推送緩衝區內儲存的命令串流輸出至一前端212。
每一PPU 202都有利地實施一高並行處理架構。如細節內所示,PPU 202(0)包括一處理叢集陣列230,其包括數量為C的一般處理叢集(GPC,General processing cluster)208,其中C1。每一GPC 208都可同時執行大量的(例如數百或數千)執行緒,其中每一執行緒都是一程式的實例。在許多應用當中,不同的GPC 208可分配用於處理不同種類的程式,或用於執行不同種類的計算。GPC 208的分配取決於每一種程式或計算所賦予的工作負擔而變化。
GPC 208從任務/工作單元207內的工作分配單元當中接收要執行的處理任務,該工作分配單元接收指向被編碼為任務 中繼資料(TMD,Task metadata)並儲存在記憶體內的處理任務之指標。該等指向至TMD的指標包括在命令串流內,該命令串流儲存當成一推送緩衝區並由前端單元212從主介面206接收。可編碼為TMD的處理任務包括要處理的資料索引,以及定義如何處理該資料的狀態參數與命令(例如要執行哪個程式)。任務/工作單元207從前端212接收任務,並且確定在每一TMD指定的處理啟始之前已經將GPC 208設置成有效狀態。一優先順序可指定給每一TMD,用來排程該處理任務的執行。處理任務也可從處理叢集陣列230接收。選擇性,該TMD可包括一參數,其控制該TMD是否要加入處理任務清單(或處理任務指標清單)的頭部或尾部,藉此提供優先順序之上的另一控制等級。
記憶體介面214包括數量為D的分割單元215,這些單元每一個都直接耦合至並行處理記憶體204的一部份,其中D1。如所示,分割單元215的數量一般等於動態隨機存取記憶體(DRAM,Dynamic random access memory)220的數量。在其他具體實施例內,分割單元215的數量可不等於記憶體裝置的數量。精通此技術人士將了解,DRAM 220可用其他合適的儲存裝置取代,並且可為一般傳統設計,因此省略其詳細說明。像是畫框緩衝區或紋理映射這類的顯像目標可儲存在DRAM 220,允許分割單元215並行寫入每一顯像目標的部分,以有效使用並行處理記憶體204的可用頻寬。
任一GPC 208都可處理寫入並行處理記憶體204內任一DRAM 220的資料。交叉開關單元210設置成將每一GPC 208的輸出導引至任意分割單元215的輸入或至其他GPC 208做進一步處理。GPC 208透過交叉開關單元210與記憶體介面214通訊,來讀取或寫入許多外部記憶體裝置。在一個具體實施例內,交叉開關單元210連接至記憶體介面214來與I/O單元205通訊,以及連接至本機並行處理記憶體204,藉此讓不 同GPC 208內的處理核心與系統記憶體104或不在PPU 202本機上的其他記憶體通訊。在第二圖所示的具體實施例中,交叉開關單元210直接連接至I/O單元205。交叉開關單元210可使用虛擬通道,以分隔GPC 208與分割單元215之間的流量串流。
GPC 208同樣可被程式化來執行有關廣泛應用的處理任務,包括但不受限於線性與非線性資料轉換、視訊及/或音訊資料篩選、模型化運算(例如套用物理定律來決定物件的位置、速度以及其他屬性)、影像顯像運算(例如鑲嵌著色器、頂點著色器、幾何著色器及/或畫素著色器程式)等等。PPU 202可從系統記憶體104及/或本機並行處理記憶體204將資料傳輸進入內部(晶片上)記憶體,處理該資料並將結果資料寫回系統記憶體104及/或本機並行處理記憶體204,其中這種資料可由其他系統組件存取,包括CPU 102或另一並行處理子系統112。
一PPU 202可具有任何數量的本機並行處理記憶體204,包括非本機記憶體,並且可在任何組合下使用本機記憶體和系統記憶體。例如,PPU 202可為統一記憶體架構(UMA,Unified memory architecture)具體實施例內的圖形處理器。在這種具體實施例內,提供少數或無專屬圖形(並行處理)記憶體,並且PPU 202專有地或幾乎專有地使用系統記憶體。在UMA具體實施例內,PPU 202可整合至橋接器晶片或處理器晶片,或提供當成具有高速連結(例如PCI Express)的分散式晶片,透過橋接器晶片或其他通訊方式將PPU 202連接至系統記憶體。
如上述,任何數量的PPU 202都可包括在一並行處理子系統112內。例如,單一外接卡上可提供多個PPU 202,或多個外接卡可連接至通訊路徑113,或一或多個PPU 202可整合到一橋接器晶片上。多PPU系統內的PPU 202可彼此一致或不同。例如,不同的PPU 202可具有不同數量的處理核心、不同 數量的本機並行處理記憶體等等。當存在多個PPU 202時,這些PPU可並行操作,以比單一PPU 202還要高產量的方式來處理資料。合併一或多個PPU 202的系統可在許多設置與外形因素之下實施,包括桌上型、膝上型或手持式個人電腦、伺服器、工作站、遊戲機、嵌入式系統等等。
多重並行任務排程
多重處理任務可在GPC 208上同時執行,並且一處理任務可在執行期間產生一或多個「子代」處理任務。任務/工作單元207接收該等任務,並且動態地排程要由GPC 208執行的處理任務以及子代處理任務。
第三A圖為根據本發明的一個具體實施例,第二圖中任務/工作單元207的方塊圖。任務/工作單元207包括一任務管理單元300以及工作分配單元340。任務管理單元300根據執行優先順序等級來組織要排程的任務。針對每一優先順序等級,任務管理單元300儲存對應至排程器表321內任務的TMD 322的一指標清單,其中該清單可做為連結清單來實施。TMD 322可儲存在PP記憶體204或系統記憶體104內。任務管理單元300接受任務並且將該等任務儲存在排程器表321內的速率與任務管理單元300排程任務來執行的速率分離,因此任務管理單元300可在排程該等任務之前集中許多任務。然後根據優先順序資訊或使用其他技術,例如循環排程,來排程集中的任務。
工作分配單元340包括一任務表345,其中有插槽,每一插槽讓TMD 322針對執行的任務所佔用。任務管理單元300可在任務表345內有空插槽時排程任務來執行。當無空插槽時,未佔用插槽的較高優先順序任務會驅逐佔用插槽的較低優先順序任務。一任務遭到驅逐時,該任務會停止,並且若該任務尚未執行完畢,則該任務的指標會加入要排程的任務指標清單中,如此稍後會恢復執行該任務。在一任務執行期間產生子 代處理任務時,將該子代任務的指標加入要排程的任務指標清單內。在處理叢集陣列230內執行的TMD 322可產生一子代任務。
與從前端212的任務/工作單元207所接收的任務不同,子代任務從處理叢集陣列230接收。子代任務並未插入推送緩衝區或傳輸至該前端。子代任務已經產生或該子代任務的資料已經儲存在記憶體內時,並不會通知CPU 102。透過推送緩衝區提供的該等任務與子代任務間之另一差異在於,透過推送緩衝區提供的該等任務由應用程式定義,而該等子代任務則在該等任務執行期間動態產生。
任務處理概觀
第三B圖為根據本發明的一個具體實施例,第二圖中PPU 202之一者內之GPC 208的方塊圖。每一GPC 208都可設置成同時執行大量執行緒,其中「執行緒」一詞代表在特定輸入資料集上執行的特定程式之實例。在某些具體實施例內,單一指令多重資料(SIMD,Single-instruction,multiple-data)指令發行技術用於支援大量執行緒的並行執行,而不用提供多個獨立指令單元。在其他具體實施例內,單一指令多重執行緒(SIMT,Single-instruction,multiple-thread)技術用於支援大量一般同步執行緒的並行執行,使用共用指令單元,其設置成發出指令至每一GPC 208內的處理引擎集。不同於一SIMD執行方式,其所有處理引擎一般都執行一致的指令,SIMT執行允許不同執行緒更迅速遵循分散的執行路徑,透過一已知執行緒程式。業界內精通此技術人士將了解,SIMD處理方式代表一SIMT處理方式的功能子集。
透過將處理任務分配至串流多重處理器(SM,Streaming multiprocessor)310的管線管理員305可有利地控制GPC 208的操作。管線管理員305也可設置成利用指定SM 310所輸出的處理資料之目的地,來控制工作分配交叉開關330。
在一個具體實施例內,每一GPC 208都包括數量為M的SM 310,其中M1,每一SM 310都設置成處理一或多個執行緒群組。另外,每一SM 310有利地包括可管路化的一致功能執行單元集(例如執行單元與載入儲存單元,在第三C圖內顯示為執行單元302以及載入儲存單元(LSU,Load-store Unit)303),允許完成先前指令之前發出新指令,如先前技術所知。可提供任何功能執行單元的組合。在一個具體實施例內,該等功能單元支援許多種運算,包括整數與浮點演算(例如加法與乘法)、比較運算、布林運算(AND、OR、XOR)、位元位移和許多代數函數的計算(例如平面插值、三角函數、指數以及對數函數等等);並且相同的功能單元硬體可用來執行不同運算。
傳輸至一特定GPC 208的這一系列指令構成一執行緒,如本文先前所定義,並且遍及SM 310內並行處理引擎(未顯示)的特定數量之同時執行的執行緒之集合在此稱為「包繞」或「執行緒群組」。如本文所使用,「執行緒群組」代表在不同輸入資料上同時執行相同程式的執行緒群組,其中該群組的一個執行緒指派給SM 310內不同的處理引擎。一執行緒群組可包括數量比SM 310內處理引擎數量還要少的執行緒,在此案例中,某些處理引擎會在循環期間處理該執行緒群組時閒置。執行緒群組也可包括數量比SM 310內處理引擎數量還要多的執行緒,在此案例中,將在連續時脈循環上進行處理。因為每一SM 310都可同時支援最多G個執行緒群組,所以在任何已知時間上GPC 208內都可執行最多G*M個執行緒群組。
此外,在SM 310內可同時啟用複數個相關執行緒群組(在不同執行階段內)。此執行緒群組的集合稱為「協作執行緒陣列」(cooperative thread array,CTA)或「執行緒陣列」。特定CTA的大小等於m*k,其中k為執行緒群組內同時執行的執行緒數量,通常為SM 310內並行處理引擎數量的整數倍數,並且m為SM 310內同時啟用的執行緒群組數量。CTA的大小 一般由程式器以及該CTA可用的硬體資源數量,例如記憶體或暫存器來決定。
每一SM 310都包括一層(L1)快取(如第三C圖所示),或使用SM 310之外對應L1快取內的空間,其用於執行負載與儲存操作。每一SM 310也要存取所有GPC 208之間共享的二層(L2)快取,並且可用於在執行緒之間傳輸資料。最後,SM 310也要存取至晶片外「全域」記憶體,其可包括例如並行處理記憶體204及/或系統記憶體104。吾人了解,PPU 202之外的任何記憶體都可用來當成全域記憶體。此外,一點五層(L1.5)快取335可包括在GPC 208內,設置成接收並保持由SM 310要求而透過記憶體介面214從記憶體擷取的資料,包括指令、統一資料以及常數資料,並且將該要求的資料提供給SM 310。具有GPC 208內多個SM 310的具體實施例得利地共享共用指令和在L1.5快取335內快取的資料。
每一GPC 208都可包括一記憶體管理單元(MMU,Memory management unit)328,其設置成將虛擬位址映射至實體位址。在其他具體實施例內,MMU 328可位於記憶體介面214之內。MMU 328包括一組頁表項(PTE,page table entry),用於將虛擬位址映射至一瓷磚以及選擇性一快取線索引的實體位址。MMU 328可包括能夠位於多重處理器SM 310或L1快取或GPC 208內的位址轉譯後備緩衝器(TLB,translation lookaside buffer)或快取。該實體位址經過處理來分配本機存取的表面資料,以便讓有效要求交錯於分割單元215之間。該快取線索引可用於決定一快取線的要求是否命中或未命中。
在圖形與計算應用當中,GPC 208可經過設置,如此每一SM 310都耦合至一紋理單元315,用於執行紋理映射操作,例如決定紋理樣本位置、讀取紋理資料以及篩選該紋理資料。紋理資料從內部紋理L1快取(未顯示)讀取,或在某些具體實施例內從SM 310內的L1快取讀取,並且依照需求從所有GPC 208、並行處理記憶體204或系統記憶體104之間共享的L2快取擷取。每一SM 310都輸出處理過的任務至工作分配交叉開關330,以便將該處理過的任務提供至另一GPC 208供進一步處理,或透過交叉開關單元210將該處理過的任務儲存在L2快取、並行處理記憶體204或系統記憶體104內。預先掃描場化作業(preROP,Pre-raster Operation)325設置成從SM 310接收資料,將資料引導至分割單元215內的ROP單元,並且執行顏色混合最佳化、組織畫素顏色資料以及執行位址轉譯。
吾人將了解,本文中顯示的核心架構為例示,所以可進行改變與修改。任何數量的處理單元,例如SM 310或紋理單元315、preROP 325都可包括在GPC 208內。進一步如第二圖內所示,PPU 202可包括任意數量之功能有利地彼此類似的GPC 208,如此執行行為並不取決於接收特定處理任務的是哪一個GPC 208。進一步,每一GPC 208都得利於與其他GPC 208無關的操作,運用分離並分散的處理單元、L1快取,來執行一或多個應用程式的任務。
精通此技術人士將了解,第一圖、第二圖、第三A圖和第三B圖內描述的架構並非用於限制本發明範疇,本說明書內的技術可在任何正確設置的處理單元上實施,在不背離本發明範疇之下包括但不受限於一或多個CPU、一或多個多核心CPU、一或多個PPU 202、一或多個GPC 208、一或多個圖形或特殊用途處理單元等等。
在本發明的具體實施例內,吾人想要使用一計算系統的PPU 202或其他處理器,運用執行緒陣列來執行一般用途計算。該執行緒陣列內的每一執行緒都可指派一個獨一的執行緒識別碼(「執行緒ID」),其可在該執行緒執行期間由該執行緒存取。該執行緒ID可定義為一維度或多維度數值,控制該執行緒處理行為的許多態樣。例如,一執行緒ID可用於決定一 執行緒要處理的是輸入資料集的哪一部分及/或決定一執行緒要產生或寫入的是輸入資料集的哪一部分。
每個執行緒指令的序列可包括至少一個指令,其定義代表執行緒與執行緒陣列的一或多個其他執行緒之間的協作行為。例如,每一執行緒指令的序列可包括將在該序列內特定點上之該代表執行緒運算執行中斷,直到一或多個其他執行緒到達該特定點上為止之指令、讓該代表執行緒將一或多個其他執行緒可存取的資料儲存至一共享記憶體內之指令、讓該代表執行緒根據其執行緒ID原子性地讀取與更新一共享記憶體內一或多個該等其他執行緒可存取的資料之指令等等。CTA程式也可包括一指令,計算該共享記憶體內所要讀取資料的位址,其中該位址為執行緒ID的函數。利用定義合適的功能並且提供同步技術,資料可利用CTA的一個執行緒寫入共享記憶體內一已知位置,並且以可預測方式用相同CTA的不同執行緒從該位置當中讀取。因此,支援在執行緒之間共享的任何資料形式,並且一CTA內的任何執行緒都可與相同CTA內任何其他執行緒共享資料。在CTA執行緒之間共享的資料程度(若有的話)由該CTA程式決定;如此吾人了解在使用CTA的特定應用當中,根據該CTA程式,CTA的執行緒彼此之間會或可能不會確實共享資料,並且在本文中可同義地使用「CTA」與「執行緒陣列」之詞彙。
第三C圖為根據本發明的一個具體實施例,第三B圖中SM 310的方塊圖。SM 310包括一指令L1快取370,其設置成透過L1.5快取335自記憶體接收指令與常數。包繞排程器與指令單元312接收來自指令L1快取370的指令與常數,並且根據該等指令與常數控制本機暫存檔304以及SM 310功能單元。SM 310功能單元包括N個執行(執行或處理)單元302以及P個載入儲存單元(LSU,load-store unit)303。
如底下結合第四圖至第五圖所詳細描述,包繞排程器與指令單元312設置成於要在SM 310內含功能單元上執行的一執行緒群組內發行執行緒。另如底下所描述,包繞排程器與指令單元312設置成偵測並解決該執行緒群組內執行緒之間可能發生的發散。
SM 310提供具備不同存取階層的晶片上(內部)資料儲存。特殊暫存器(未顯示)可由LSU 303讀取但是無法寫入,並且可用於儲存定義每一執行緒「位置」的參數。在一個具體實施例內,特殊暫存器包括每一執行緒(或SM 310內每一執行單元302)一個暫存器,其儲存一執行緒ID;每一執行緒ID暫存器都只能由個別一個執行單元302存取。特殊暫存器也可包括額外暫存器,可由執行TMD 322(或所有LSU 303)所代表之相同處理任務的所有執行緒讀取,其儲存一CTA識別碼、該CTA維度、該CTA所屬方格的維度(或若TMD 322編碼一佇列任務而非一方格任務時的佇列位置)以及CTA被指派至的TMD 322之識別碼。
若TMD 322為一方格TMD,則執行TMD 322會導致啟動並執行固定數量的CTA,來處理佇列525內所儲存的固定數量資料。CTA的數量依照方格寬度、高度與深度的乘積來指定。該固定數量的資料可儲存在TMD 322內,或TMD 322可儲存將由CTA處理的資料之指標。TMD 322也儲存該等CTA所執行程式的開始位址。
若TMD 322為佇列TMD,則使用TMD 322的佇列功能,表示要處理的資料量並不需要固定。佇列記錄儲存指派給TMD 322之CTA所處理的資料。該等佇列記錄也代表執行緒執行期間由另一TMD 322產生的子代任務,藉此提供巢狀並行。一般來說,執行緒的執行或包括該執行緒的CTA執行會中止,直到子代任務執行完成為止。該佇列可儲存在TMD 322內,或與TMD 322分開,在此案例中TMD 322儲存該佇列的 佇列指標。有利的是,由該子代任務產生的資料可寫入該佇列,同時代表該子代任務的TMD 322正在執行。該佇列可實施為一圓形佇列,如此資料總量並不受限於該佇列的大小。
屬於一方格的CTA具有暗示的方格寬度、高度和深度參數,指示該方格內個別CTA的位置。在初始化期間會寫入特殊暫存器,以回應透過前端212從裝置驅動程式103接收的命令,並且在一處理任務期間不會改變。前端212排程執行每一處理任務。每一CTA都關聯於一特定TMD 322,以便同時執行一或多個任務。此外,單一GPC 208可同時執行多個任務。
一參數記憶體(未顯示)儲存可由相同CTA(或任何LSU 303)內任何執行緒讀取但無法寫入的執行時間參數(常數)。在一個具體實施例內,裝置驅動程式103在導引SM 310開始執行使用這些參數的任務之前,提供參數至該參數記憶體。任何CTA內的任何執行緒(或SM 310內的任何執行單元302)都可透過記憶體介面214存取全域記憶體。全域記憶體的部分可儲存在L1快取320內。
每一執行緒都使用本機暫存檔304當成暫存空間;每一暫存器都分配給一個執行緒專用,並且任何本機暫存檔304內的資料都只能由該暫存器被分配到的執行緒存取。本機暫存檔304可實施為實體上或邏輯上區分成P個通路的暫存檔,每一通路都具有某些數量的記錄(在此每一記錄都可儲存例如32位元的字元)。一個通路指派給N個執行單元302以及P個載入儲存單元LSU 303的每一個,並且不同通路內的對應記錄可填入執行相同程式的不同執行緒之資料,來幫助SIMD執行。通路的不同部分可分配給G個同時執行緒群組中不同的執行緒群組,如此本機暫存檔304內的一已知記錄只能由特定執行緒存取。在一個具體實施例內,本機暫存檔304內的特定記錄被保留用於儲存執行緒識別碼,實施特殊暫存器之一者。此外, 一統一L1快取375儲存N個執行單元302以及P個載入儲存單元LSU 303的每一通路之統一或常數值。
共享記憶體306可由單一CTA內的執行緒存取;換言之,共享記憶體306內任何位置都可由相同CTA內任何執行緒(或SM 310內任何處理引擎)來存取。共享記憶體306可實施為具有互連的一共享暫存檔或共享晶片上快取記憶體,允許任何處理引擎從該共享記憶體內任何位置讀取或寫入。在其他具體實施例內,共享的狀態空間可映射至晶片外記憶體的每一CTA區域,並且快取在L1快取320內。參數記憶體可實施為該相同共享暫存檔或實施共享記憶體306的共享快取記憶體內一指定區段,或實施為LSU 303具有唯讀存取的一個別共享暫存檔或晶片上快取記憶體。在一個具體實施例內,實施該參數記憶體的區域也用於儲存CTA ID和任務ID,以及CTA和方格維度或佇列位置,實施特殊暫存器的部份。SM 310內每一LSU 303都耦合至統一位址映射單元352,將提供用於載入與儲存統一記憶體空間內所指定指令的一位址轉換為每一分散記憶體空間內的一位址。因此,利用指定該統一記憶體空間內一位址,可使用一指令來存取任何本機、共享或全域記憶體空間。
每一SM 310內的L1快取320都可用於快取私用的每一執行緒之本機資料,並且也快取每一應用程式之全域資料。在某些具體實施例內,每一CTA共享資料可快取在L1快取320內。LSU 303可透過一記憶體與快取互連380耦合至共享記憶體306以及L1快取320。
解決執行緒發散情況
第四圖為根據本發明的一個具體實施例,較詳細例示第三C圖中包繞排程器與指令單元312之方塊圖。如上述,包繞排程器與指令單元312設置成使用SM 310內的功能單元,包括執行單元302和LSU 303,發出與執行一已知執行緒群組內的執行緒,來處理這些執行緒。如所示,包繞排程器與指令單 元312包括指令擷取402、發行邏輯404、位址發散單元406、多重發行佇列408以及分支單元410。指令擷取402耦合至發行邏輯404。發行邏輯404耦合至本機暫存檔304(此處未顯示)以及至位址發散單元406。位址發散單元406耦合至多重發行佇列408以及至分支單元410。多重發行佇列408具有與發行邏輯404之一回饋連接,而分支單元410具有與指令擷取402之一回饋連接。
指令擷取402為一硬體單元,設置成從第三C圖內所示之指令L1快取370中擷取指令,同時處理一已知執行緒群組內的執行緒。從指令L1快取370擷取的指令對應至該執行緒群組內的該等執行緒,可用SIMD或SIMT方式由SM 310內的功能單元所執行。這些指令可為任何一種指令,包括單一發行指令類型以及多重發行指令類型。指令擷取402緩衝傳入的指令,並將這些指令饋送至發行邏輯404。
發行邏輯404為一硬體單元,其設置成決定接收自指令擷取402的指令是否為單一發行指令或多重發行指令。發行邏輯404決定所接收指令為單一發行指令時,發行邏輯404將與這些指令相關聯的執行緒發行至本機暫存檔304。然後SM 310內的功能單元讀取本機暫存檔304並執行這些執行緒。
發行邏輯404將這些所接收指令識別為多重發行指令時,發行邏輯404將該等多重發行指令指引至位址發散單元406。位址發散單元406為一硬體單元,設置成偵測與該等已接收指令相關聯的執行緒間之發散。偵測時,位址發散單元406執行「發現」處理,揭露一執行緒群組內的執行緒是否發散,如底下更詳細說明。
在一個具體實施例內,執行發現處理時,位址發散單元406(i)導致執行緒群組內每一執行緒都發行至本機暫存檔304,然後(ii)分析本機暫存檔304來決定所有這些執行緒是否將目標定在一個記憶體位置,或超過一個記憶體位置。該執行 緒群組內的該等執行緒之目標只有一個記憶體位置時,位址發散單元406決定這些執行緒並未發散。該等執行緒的目標超過一個記憶體位置時,位址發散單元406決定這些執行緒發散。精通此技術人士將了解,該記憶體位置可在任何記憶體資源內,並且可為例如暫存檔本身內的一記錄。
在另一個具體實施例內,執行發現處理時,位址發散單元406(i)導致執行緒群組內每一執行緒都發行至本機暫存檔304,然後(ii)分析本機暫存檔304來決定與每一執行緒相關聯的一些障礙。所有執行緒都具有相同數量的障礙時,則這些執行緒可能並未發散。不過在某些執行緒具有和其他執行緒不同數量的障礙時,則這些執行緒發散。
若位址發散單元406決定執行緒群組內的執行緒未發散,則位址發散單元406將與該等執行緒相關聯的指令佇放在多重發行佇列408內。多重發行佇列408為一種硬體單元,其中包括一組插槽,每一插槽都可由與該執行緒群組內一執行緒相對應的一指令所佔用。在一個具體實施例內,儲存在多重發行佇列408中一插槽內的一較低優先順序指令可由傳入的較高優先順序指令從該插槽中驅逐。必要的功能單元可用時,發行邏輯404重新發行與多重發行佇列408內佇放的該等指令相關聯之執行緒來執行。
若位址發散單元406決定執行緒群組內的執行緒發散,則位址發散單元406將這些執行緒分成至少兩個執行緒子集。第一子集包括未發散執行緒,而第二子集包括剩餘的發散執行緒。在一個具體實施例內,位址發散單元406將該等執行緒分成H個子集,該等H個子集的每一個都包括彼此不發散的執行緒。在此具體實施例內,位址發散單元406可將每一該等H個子集分別佇放在多重發行佇列408內。
位址發散單元406可設置成利用許多不同技術,將執行緒群組內的執行緒分成未發散與發散子集。在一個具體實施例 內,位址發散單元406分析本機暫存檔304,並且識別一第一執行緒目標所在的一記憶體位置,然後收集目標為該相同記憶體位置的所有其他執行緒。該第一執行緒與該等已收集執行緒構成未發散執行緒的子集,而剩餘執行緒則構成發散執行緒的子集。精通此技術人士將了解,將執行緒分成未發散與發散子集的任何技術可行方式都可實施。
在將執行緒群組內之執行緒分成未發散與發散執行緒子集後,位址發散單元406立即以上述類似方式,將與未發散執行緒子集相關聯的指令傳送至要佇放的多重發行佇列408,然後發行用於執行。位址發散單元406也將與發散執行緒子集相關聯的指令傳送至分支單元410。
分支單元410為一硬體單元,設置成導致指令擷取402重新擷取並重新發行與位址發散單元406所識別的發散執行緒子集相關聯之指令。在一個具體實施例內,分支單元410包括一執行緒遮罩,其針對每一執行緒記錄該執行緒是否屬於執行緒的未發散子集或發散子集。分支單元410設置成更新該執行緒遮罩,以回應接收一發散執行緒的子集。在一個具體實施例內,位址發散單元406在發現處理期間產生該執行緒遮罩,然後將該執行緒遮罩儲存在分支單元410內。
分支單元410導致指令擷取402重新擷取並重新發行與發散執行緒子集相關聯的指令,接著如上述,位址發散單元406對已接收的發散執行緒子集重複發現處理。如此,位址發散單元406可將發散執行緒子集分成執行緒的未發散與發散次子集,然後以上述方式分開處理這些次子集。
利用將發現處理重複任何次數,即將執行緒分成執行緒的未發散與發散子集,包繞排程器與指令單元312可篩選出所有未發散執行緒子集,然後分開發行每一這種子集用於執行。雖然本文所描述技術已經結合包繞排程器與指令單元312內所含之特定硬體單元來討論,不過精通此技術人士將了解,設置 成運用上述一般方式處理執行緒的任何計算裝置都位於本發明範疇內。
第五圖為根據本發明的一個具體實施例,用於解決執行緒群組內執行緒之間發散的方法步驟流程圖。雖然已經結合第一圖、第二圖、第三A圖、第三B圖、第三C圖和第四圖的系統來描述該等方法步驟,精通此技術人士將了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
如所示,方法500從步驟502開始,在此,指令擷取402擷取來自第三C圖內所示之指令L1快取370的指令。從指令L1快取370擷取的指令對應至由SM 310處理的一執行緒群組內之執行緒,可用SIMD或SIMT方式由SM 310內的功能單元所執行。這些指令可為任何一種指令,包括單一發行指令類型以及多重發行指令類型。
在步驟504上,發行邏輯404決定接收自指令擷取402的指令是否為單一發行指令或多重發行指令。若發行邏輯404決定該等已接收指令為單一發行指令,則方法500前往步驟506,在此,發行邏輯404將與這些指令相關聯的執行緒發行至本機暫存檔304。然後SM 310內的功能單元可存取並執行這些執行緒。若在步驟504上發行邏輯404決定該等已接收指令為多重發行指令,則方法500前往步驟508。
在步驟508上,位址發散單元406決定與多重發行指令相關聯的執行緒是否發散。在決定時,位址發散單元406執行「發現」處理,揭露一執行緒群組內的執行緒是否發散。在一個具體實施例內,執行該發現處理時,位址發散單元406(i)導致該執行緒群組內每一執行緒都發行至本機暫存檔304,然後(ii)分析本機暫存檔304來決定所有這些執行緒是否將目標定在一個記憶體位置,或超過一個記憶體位置。該執行緒群組內的該等執行緒之目標只有一個記憶體位置時,位址發散單元406 決定這些執行緒並未發散。該等執行緒的目標超過一個記憶體位置時,位址發散單元406決定這些執行緒發散。
在另一個具體實施例內,執行發現處理時,位址發散單元406(i)導致執行緒群組內每一執行緒都發行至本機暫存檔304,然後(ii)分析本機暫存檔304來決定與每一執行緒相關聯的一些障礙。所有該等執行緒都具有相同數量的障礙時,則這些執行緒不發散。不過在某些執行緒具有和其他執行緒不同數量的障礙時,則這些執行緒發散。
在步驟508上,若位址發散單元406決定執行緒不發散,則方法500前往步驟506並可發行與執行這些執行緒。在步驟508上,若位址發散單元406決定該等執行緒發散,則方法500前往步驟510。
在步驟510上,位址發散單元406識別未發散執行緒的子集與發散執行緒的子集。在一個具體實施例內,位址發散單元406分析本機暫存檔304,並且識別一第一執行緒目標所在的一記憶體位置,然後收集目標為該相同記憶體位置的所有其他執行緒。該第一執行緒與該等已收集執行緒構成未發散執行緒的子集,而剩餘執行緒則構成發散執行緒的子集。精通此技術人士將了解,將執行緒分成未發散與發散子集的任何技術可行方式都可實施。
在步驟512上,位址發散單元406導致發行並執行未發散執行緒子集內的執行緒。如此,位址發散單元406可將與這些執行緒相關聯的指令佇放在多重發行佇列408內。多重發行佇列408儲存該等指令,直到發行邏輯404可發行對應執行緒至本機暫存檔304由SM 310內之功能單元執行。
在步驟514上,位址發散單元406將與發散執行緒子集相關聯的指令傳送至分支單元410。在回應上,分支單元410導致指令擷取402重新擷取並重新發行這些指令。然後方法回到步驟502,並重複使用發散執行緒的子集當成輸入。
實際上,包繞排程器與指令單元312可多次往返,多次執行方法500。在每一往返中,方法500可接收方法500先前往返期間所識別的發散執行緒子集當成輸入。在此方式中,方法500可重複實施來篩選所有未發散執行緒子集,並個別發行每一這種子集來執行。
這樣的好處是,包繞排程器與指令單元312內的位址發散單元406緩和執行緒發散的效應,藉此避免並行處理單元的廣泛系統故障。雖然本文內以存取本機暫存檔304並且設定目標超過一個記憶體位置或影響不同數量障礙的範疇來描述執行緒發散,不過精通此技術人士將了解,本發明的具體實施例擴展至電腦系統100內之本機暫存檔304以外的資源或態樣或部分資源。例如,執行緒試圖影響不同障礙(如上述)、存取不同唯讀變數,例如常數、影響多個屬性插值、存取共享記憶體內同一行的多個列、存取一般記憶體的多個列或執行記憶體存取操作,其中通過該等執行緒的資料寬度超過與記憶體子系統相關聯的實體匯流排寬度時,則產生執行緒發散。
此外,本發明的一個具體實施例可實施當成搭配電腦系統使用的程式產品。該程式產品的程式定義具體實施例(包括本文所述的方法)的功能,並且可包含在電腦可讀取儲存媒體上。例示的電腦可讀取儲存媒體包括但不受限於:(i)其上資訊永久儲存的不可抹寫儲存媒體(例如電腦內的唯讀記憶體裝置,例如小型碟片唯讀記憶體(CD-ROM,Compact Disc Read Only Memory)光碟機可讀取的CD-ROM光碟、快閃記憶體、唯讀記憶體(ROM)晶片或任何一種固態非揮發性半導體記憶體);以及(ii)其上儲存可變資訊的可抹寫儲存媒體(例如磁碟機或硬碟內的軟磁碟或任何一種固態隨機存取半導體記憶體)。
在此已經參考特定具體實施例在以上說明本發明。不過精通此技術的人士將會了解,在不背離申請專利範圍內提出之本發明廣泛精神以及範疇下,可進行許多修改與變更。因此前述 說明與圖式僅供參考而不做限制。
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‧‧‧分割單元
230‧‧‧處理叢集陣列
220‧‧‧動態隨機存取記憶體
300‧‧‧任務管理單元
302‧‧‧執行單元
303‧‧‧載入儲存單元
306‧‧‧共享記憶體
340‧‧‧工作分配單元
321‧‧‧排程器表
322‧‧‧任務中繼資料
345‧‧‧任務表
305‧‧‧管線管理員
328‧‧‧記憶體管理單元
312‧‧‧包繞排程器與指令單元
304‧‧‧本機暫存檔
310‧‧‧串流多重處理器
320‧‧‧L1快取
330‧‧‧工作分配交叉開關
335‧‧‧L1.5快取
315‧‧‧紋理單元
325‧‧‧預先掃描場化作業
352‧‧‧統一位址映射單元
370‧‧‧指令L1快取
375‧‧‧統一L1快取
380‧‧‧記憶體與快取互連
402‧‧‧指令擷取
404‧‧‧發行邏輯
406‧‧‧位址發散單元
408‧‧‧多重發行佇列
410‧‧‧分支單元
如此上面簡單彙總可詳細了解本發明上述特色的方式,本發明的更特定說明則參照示例具體實施例,某些具體實施例說明於附圖內。不過吾人應該注意,附圖只說明本發明的典型具體實施例,因此並不對發明範疇產生限制,本發明容許其他等效具體實施例。
第一圖為例示設置來實施本發明一或多個態樣的電腦系統方塊圖;第二圖為根據本發明的一個具體實施例,用於第一圖中電腦系統的一並行處理子系統之方塊圖;第三A圖為根據本發明的一個具體實施例,第二圖中前端的方塊圖;第三B圖為根據本發明的一個具體實施例,第二圖中並行處理單元之一者內一般處理叢集的方塊圖;第三C圖為根據本發明的一個具體實施例,第三B圖中串流多重處理器一部分的方塊圖;第四圖為根據本發明的一個具體實施例,詳細例示第三C圖中包繞排程器與指令單元之方塊圖;以及第五圖為根據本發明的一個具體實施例,用於解決執行緒群組內執行緒之間發散的方法步驟流程圖。

Claims (10)

  1. 一種用於解決在一並行處理單元上執行的一執行緒群組內執行緒之間發散之電腦實施方法,該方法包含:擷取與該等執行緒相關聯的指令;將該等執行緒分成未發散執行緒子集以及至少一個發散執行緒子集;以及導致發行該未發散執行緒子集在該並行處理單元上執行。
  2. 如申請專利範圍第1項之電腦實施方法,其中將該等執行緒分成該未發散執行緒子集與該至少一個發散執行緒子集包含:將該等執行緒發行至一暫存檔,該暫存檔與設置來執行執行緒的一或多個功能單元耦合;分析該暫存檔,以決定該等執行緒設置成存取超過一個記憶體位置;識別一或多個該等執行緒設置來存取的一第一記憶體位置;將該等一或多個執行緒組織為該未發散執行緒子集;以及將該等其他執行緒組織為該至少一個發散執行緒子集。
  3. 如申請專利範圍第2項之電腦實施方法,其中該第一記憶體位置包含該暫存檔內的一記錄。
  4. 如申請專利範圍第1項之電腦實施方法,進一步包含:將該未發散執行緒子集儲存在一多重發行佇列內;以及該並行處理單元可用時,從該多重發行佇列中擷取該未發散執行緒子集。
  5. 如申請專利範圍第1項之電腦實施方法,其中該等執行緒分成一個發散執行緒子集,並另包含: 導致重新擷取與該一個發散執行緒子集相關聯的指令;將該一個發散執行緒內的該等執行緒分成一未發散執行緒的次子集以及一發散執行緒的次子集;以及導致發行該未發散執行緒的次子集在該並行處理單元上執行。
  6. 如申請專利範圍第1項之電腦實施方法,針對該執行緒群組內每一執行緒,另包含更新與該執行緒群組相關聯的一執行緒遮罩,來反映該執行緒是屬於該未發散執行緒子集或該至少一個發散執行緒子集。
  7. 如申請專利範圍第1項之電腦實施方法,其中將該等執行緒分成至少一個發散執行緒子集包含:將該等執行緒分成H個未發散執行緒子集,H為大於一的整數,並且導致發行每一該等H個未發散執行緒子集分別在該並行處理單元上執行。
  8. 如申請專利範圍第7項之電腦實施方法,另包含導致發行每一該等H個未發散執行緒子集分別在該PPU上執行,並且在該發散執行緒子集已經發行之後。
  9. 如申請專利範圍第1項之電腦實施方法,其中該未發散執行緒子集由存取一共用資源或一計算裝置內資源的一共用態樣或部分之一或多個執行緒所構成。
  10. 一種設置來解決在一並行處理單元上執行的一執行緒群組內執行緒之間發散之計算裝置,該裝置包含:一處理單元,其設置成:擷取與該等執行緒相關聯的指令;將該等執行緒分成未發散執行緒子集以及至少一個發散執行緒子集;以及導致發行該未發散執行緒子集在該並行處理單元上執行。
TW102101081A 2012-01-11 2013-01-11 解決執行緒發散的方法及系統 TWI466027B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US13/348,544 US9606808B2 (en) 2012-01-11 2012-01-11 Method and system for resolving thread divergences

Publications (2)

Publication Number Publication Date
TW201342240A true TW201342240A (zh) 2013-10-16
TWI466027B TWI466027B (zh) 2014-12-21

Family

ID=48652734

Family Applications (1)

Application Number Title Priority Date Filing Date
TW102101081A TWI466027B (zh) 2012-01-11 2013-01-11 解決執行緒發散的方法及系統

Country Status (4)

Country Link
US (1) US9606808B2 (zh)
CN (1) CN103207774B (zh)
DE (1) DE102013100179A1 (zh)
TW (1) TWI466027B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI502489B (zh) * 2012-12-11 2015-10-01 Nvidia Corp 叢集多階暫存檔的暫存器分配

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170365237A1 (en) * 2010-06-17 2017-12-21 Thincl, Inc. Processing a Plurality of Threads of a Single Instruction Multiple Data Group
US10152329B2 (en) * 2012-02-09 2018-12-11 Nvidia Corporation Pre-scheduled replays of divergent operations
US9606797B2 (en) * 2012-12-21 2017-03-28 Intel Corporation Compressing execution cycles for divergent execution in a single instruction multiple data (SIMD) processor
KR101603752B1 (ko) * 2013-01-28 2016-03-28 삼성전자주식회사 멀티 모드 지원 프로세서 및 그 프로세서에서 멀티 모드를 지원하는 방법
US9652284B2 (en) * 2013-10-01 2017-05-16 Qualcomm Incorporated GPU divergence barrier
GB2522102B (en) * 2013-11-19 2020-11-18 Advanced Risc Mach Ltd A computer implemented system and method for generating a layout of a cell defining a circuit component
US9659125B2 (en) 2014-01-28 2017-05-23 Arm Limited Computer implemented system and method for generating a layout of a cell defining a circuit component
US9921847B2 (en) * 2014-01-21 2018-03-20 Nvidia Corporation Tree-based thread management
GB2524063B (en) 2014-03-13 2020-07-01 Advanced Risc Mach Ltd Data processing apparatus for executing an access instruction for N threads
US9952876B2 (en) 2014-08-26 2018-04-24 International Business Machines Corporation Optimize control-flow convergence on SIMD engine using divergence depth
US9652262B2 (en) * 2014-10-09 2017-05-16 The Regents Of The University Of Michigan Operation parameter control based upon queued instruction characteristics
US10026142B2 (en) * 2015-04-14 2018-07-17 Intel Corporation Supporting multi-level nesting of command buffers in graphics command streams at computing devices
US10242419B2 (en) * 2015-09-02 2019-03-26 Intel Corporation Compiler optimization to reduce the control flow divergence
CN109712268B (zh) * 2018-12-13 2022-01-04 北京遥测技术研究所 一种高速飞行器黑障区数据测量处理方法和处理器
US11816500B2 (en) * 2019-03-15 2023-11-14 Intel Corporation Systems and methods for synchronization of multi-thread lanes
US20200409695A1 (en) * 2019-06-28 2020-12-31 Advanced Micro Devices, Inc. Compute unit sorting for reduced divergence

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7477255B1 (en) * 2004-04-12 2009-01-13 Nvidia Corporation System and method for synchronizing divergent samples in a programmable graphics processing unit
US7401206B2 (en) * 2004-06-30 2008-07-15 Sun Microsystems, Inc. Apparatus and method for fine-grained multithreading in a multipipelined processor core
US7339592B2 (en) * 2004-07-13 2008-03-04 Nvidia Corporation Simulating multiported memories using lower port count memories
US7630388B2 (en) * 2005-05-04 2009-12-08 Arm Limited Software defined FIFO memory for storing a set of data from a stream of source data
US7634637B1 (en) 2005-12-16 2009-12-15 Nvidia Corporation Execution of parallel groups of threads with per-instruction serialization
CN100495346C (zh) * 2006-08-21 2009-06-03 英业达股份有限公司 多核多中央处理器的执行线程分配方法
US8108625B1 (en) * 2006-10-30 2012-01-31 Nvidia Corporation Shared memory with parallel access and access conflict resolution mechanism

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI502489B (zh) * 2012-12-11 2015-10-01 Nvidia Corp 叢集多階暫存檔的暫存器分配
US9229717B2 (en) 2012-12-11 2016-01-05 Nvidia Corporation Register allocation for clustered multi-level register files

Also Published As

Publication number Publication date
US9606808B2 (en) 2017-03-28
CN103207774B (zh) 2016-04-13
US20130179662A1 (en) 2013-07-11
DE102013100179A1 (de) 2013-07-11
TWI466027B (zh) 2014-12-21
CN103207774A (zh) 2013-07-17

Similar Documents

Publication Publication Date Title
TWI466027B (zh) 解決執行緒發散的方法及系統
TWI624791B (zh) 用於在多緒處理單元中改善性能之技術
US10255228B2 (en) System and method for performing shaped memory access operations
US8938598B2 (en) Facilitating simultaneous submission to a multi-producer queue by multiple threads with inner and outer pointers
EP2483772B1 (en) Trap handler architecture for a parallel processing unit
US10007527B2 (en) Uniform load processing for parallel thread sub-sets
US9262174B2 (en) Dynamic bank mode addressing for memory access
US9348762B2 (en) Technique for accessing content-addressable memory
TWI489385B (zh) 一種用於預先擷取快取線的電腦實作方法與子系統
US20130198760A1 (en) Automatic dependent task launch
US9697006B2 (en) Technique for performing memory access operations via texture hardware
TWI489392B (zh) 多個應用程式分享的圖形處理單元
US9798543B2 (en) Fast mapping table register file allocation algorithm for SIMT processors
TWI525438B (zh) 透過貼圖硬體執行記憶體存取操作之技術
US20140232729A1 (en) Power efficient attribute handling for tessellation and geometry shaders
TWI489289B (zh) 分散作業的預先排程重播
US8656093B1 (en) Supporting late DRAM bank hits
US9442759B2 (en) Concurrent execution of independent streams in multi-channel time slice groups
TW201351276A (zh) 計算工作的排程和執行
TW201432573A (zh) 工作佇列型圖形處理單元工作創建
US9262348B2 (en) Memory bandwidth reallocation for isochronous traffic
US8307165B1 (en) Sorting requests to the DRAM for high page locality
US9817668B2 (en) Batched replays of divergent operations
US9665920B1 (en) Simultaneous execution of compute and graphics applications