TW201342229A - 分散操作的批次重播 - Google Patents

分散操作的批次重播 Download PDF

Info

Publication number
TW201342229A
TW201342229A TW101147437A TW101147437A TW201342229A TW 201342229 A TW201342229 A TW 201342229A TW 101147437 A TW101147437 A TW 101147437A TW 101147437 A TW101147437 A TW 101147437A TW 201342229 A TW201342229 A TW 201342229A
Authority
TW
Taiwan
Prior art keywords
thread
threads
replay
pipeline
memory
Prior art date
Application number
TW101147437A
Other languages
English (en)
Inventor
Michael Fetterman
Jack Hilaire Choquette
Omkar Paranjape
Anjana Rajendran
Eric Lyell Hill
Stewart Glenn Carlton
Rajeshwaran Selvanesan
Douglas J Hahn
Steven James Heinrich
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 TW201342229A publication Critical patent/TW201342229A/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/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
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling

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)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本發明的一個具體實施例揭示一種最佳方式來在並行處理子系統內執行分散操作的重播操作。尤其是,串流多處理器(SM)包含一多階段管線,其設置來透過重播迴圈批次進行二或更多重播處理操作。多階段管線內的邏輯元件偵測目前的管線階段是否存取一共享的資源,例如載入來自一共享記憶體的資料。若該等執行緒存取分散在多條快取線的資料,則該多階段管線批次進行二或多個重播操作,其中該等重播操作依序插入該管線。好處在於,需要二或多個重播操作的分散操作有較低延遲。在記憶體存取操作需要傳輸超過兩條快取線來服務所有執行緒之處,完成所有重播操作所需的時脈循環次數減少。

Description

分散操作的批次重播
本發明一般係關於電腦架構,尤其係關於分散操作的批次重播。
【相關技術】
並列處理系統內的共用實踐為設計一種同時執行一些執行緒的處理器。每一執行緒都可在處理器內一分離執行管線內執行。這種執行緒全都需要執行相同指令順序時(一般每一執行緒都具有不同資料),則有實質利益來共享執行緒的控制結構。例如只必須擷取一個指令,然後所有執行緒都執行相同指令。在單指令多執行緒(SIMT,Single instruction multi-thread)處理器以及單指令多資料(SIMD,Single instruction multi-data)處理器上可發現這種操作。
當執行並行執行時,不同的執行緒可存取一共用資源,例如一共享的記憶體,如此可導致該等執行緒遭遇資源衝突。例如:該等執行緒可執行一記憶體存取操作,例如一載入指令,其中該組記憶體位置跨越二或多條快取線。這種載入指令可稱為「分散」操作,因為許多執行緒所需的記憶體位置在分散的快取線上。在此情況下,該管線傳輸某些執行緒所存取的快取線之一者,並且這些執行緒可完成該記憶體存取操作。不過,指向不同快取線內位置的其他執行緒並不會完成該記憶體存取操作並且維持無作用。如此在單次通過該管線之下,某些執行緒可完成該記憶體存取操作,而其他執行緒則否。在缺乏裝置來處理多執行循環之下,操作無法成功完成。
一種實施多重執行循環的方式為:將該指令重新插入該處理管線的先前階段,並且針對無法從其目標記憶體位址位置存取資料的執行緒再次執行該載入指令。這種技術稱為「重播」操作。基本上,在該管線執行於目前循環中無法完成的操作之 階段內,該管線針對至少內涵一個目標位址的每一快取線「重播」該載入指令一次,直到每一執行緒執行該相關記憶體存取操作。在此處理期間,運用一部分該管線來完成該重播操作。因此,直到所有重播操作都已經完成之前,該管線會停止運作以避免新指令輸入該管線。此方式的一項缺點在於直到完成所有重播操作之前,該管線會停止運作。在管線內上游指令不會前進,直到釋放該管線停止運作狀態,這會降低整體系統效能。另外的缺點為該並行處理系統無法在一個管線階段延遲之中,將所有管線階段停止運作。若該並行處理系統無法即時將該管線停止運作,則可能不正確忽略輸入該管線的一或多個新指令,或可能忽略該重播操作。在這兩案例中,該新指令或該重播操作都無法正確完成。
實施多重執行循環的其他方式為將該指令重新插回該管線遠端。運用此方式,已經「重播」的該等指令與新指令會在該管線內交錯,降低管線停止運作的頻率,藉此提高管線效能。不過此方式的一項缺點為會增加所重播指令的延遲,例如:考慮具有同時執行32個執行緒的處理器,在分散載入操作中,該等32個執行緒的該目標位址位置可分散在32條不同的快取線上。若重播已經插回一個管線階段,則該管線會停止運作31個管線循環,同時執行該31個重播操作。插回該重播六管線階段,增加已經重播至六個管線階段乘上31個重播操作或186個管線循環之延遲。
如先前所例示,業界內所需一種更有效率執行分散操作的重播操作之方法。
本發明的一個具體實施例揭示一種用於重播一記憶體存取操作的電腦實施方法。一載入儲存單元從設置成執行多階段管線內指令的執行緒群組中選擇一第一執行緒與一第二執行 緒,其中該第一執行緒與該第二執行緒都尚未執行該指令。然後,該載入儲存單元選擇第一組執行緒關聯於該第一執行緒。然後,該載入儲存單元選擇第二組執行緒關聯於該第二執行緒。該載入儲存單元將關聯於該第一執行緒與該第一組執行緒的一第一重播操作插入該多階段管線,來執行該指令。然後該載入儲存將關聯於該第二執行緒與該第二組執行緒的重播操作插入該多階段管線來執行該指令,其中該第二執行緒與該第二組執行緒相對於該第一執行緒與該第一組執行緒依序插入該多階段管線內。
所揭示技術的一項優點為降低完成一分散操作的延遲,其中該等執行緒需要存取通過記憶體內多條快取線的資料。進一步,相對於將後續重播操作插回該管線之前等待一重播清除該管線,將兩個或更多重播操作當成批次群組連續插入時,可更有效率使用該管線。
在以下描述中,揭示許多特定細節以對本發明有更徹底之理解。但是,精通此技術的人士應該了解,在無一或多個該等特定細節之下還是可實施本發明。
系統概觀
第一圖為例示設置來實施本發明一或多個態樣的電腦系統100之方塊圖。電腦系統100包含一中央處理單元(CPU,Central processing unit)102,以及通過一互連路徑通訊的一系統記憶體104,其中該路徑可包含一記憶體橋接器105。例如可為北橋晶片的記憶體橋接器105透過匯流排或其他通訊路徑106(例如超傳輸連結),連接至一I/O(輸入/輸出)橋接器107。例如可為南僑晶片的I/O橋接器107接收來自一或多個使用者輸入裝置108(例如鍵盤、滑鼠)的使用者輸入,並透過通訊路徑106和記憶體橋接器105將該輸入轉送至CPU 102。 一並行處理子系統112透過匯流排或第二通訊路徑113(例如周邊組件互連(PCI)Express、加速圖形連接埠(Accelerated Graphics Port)或HyperTransport連結)連接至記憶體橋接器105;在一個具體實施例內,並行處理子系統112為傳遞畫素給顯示裝置110(例如傳統陰極射線管或液晶監視器)的圖形子系統。系統磁碟114也連接至I/O橋接器107。一開關116提供I/O橋接器107與其他組件,像是網路配接器118以及許多外接卡120和121之間的連接。其他組件(未明確顯示),包含萬用序列匯流排(USB,Universal serial bus)或其他連接埠連接、CD光碟機、DVD光碟機、檔案記錄裝置等等,也可連接至I/O橋接器107。第一圖內顯示的許多通訊路徑,包含特地指名的通訊路徑106和113,都可使用任何合適的協定來實施,例如PCI Express、AGP(加速圖形連接埠)、HyperTransport或任何其他匯流排或點對點通訊協定,以及不同組件之間的連接都可使用業界內已知的不同協定。
在一個具體實施例內,並行處理子系統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,其透過連接至記憶體橋接器105(或在替代具體實施例內,直接至CPU 102)的通訊路徑113,與電腦系統100的剩餘組件通訊。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可程式編成來執行與廣泛應用程式有關的處理任務,包含但不受限於:線性與非線性資料傳輸、視訊及/或音訊資料的篩選、成形操作(例如套用物理規則來決定物體的位置、速度以及其他屬性)、影像彩現操作(例如Tessellation(曲面細分)著色器、頂點著色器、幾何著色器及/或畫素著色器程式)等等。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 303),允許完成先前指令之前發出新指令,如先前技術所知。本發明可提供任何功能執行單元組合。在一個具體實施例內,該等功能單元支援許多操作,包含整數與浮點運算(例如加法與乘法)、比較操作、布林值運算(AND、OR、XOR)、位元位移以及許多代數函數(例如平面插值、三角函數、指數函數和對數函數等);並且可運用相同的功能單元硬體來執行不同操作。
這一系列指令傳輸至特定GPC 208會構成一執行緒,如本文先前所定義,並且通過SM 310內並行處理引擎(未顯示)的特定數量同時執行的執行緒之集合在此稱為「經線」或「執行緒群組」。如本文所使用,「執行緒群組」代表在不同輸入資料上同時執行相同程式的執行緒群組,其中該群組的一個執行緒指派給SM 310內不同的處理引擎。一執行緒群組可包含數 量比SM 310內處理引擎數量還要少的執行緒,在此案例中,某些處理引擎會在循環期間處理該執行緒群組時閒置。執行緒群組也可包含數量比SM 310內處理引擎數量還要多的執行緒,在此案例中,將在連續時脈循環上進行處理。因為每一SM 310都可同時支援最多G個執行緒群組,所以在任何已知時間上GPC 208內都可執行最多G*M個執行緒群組。
此外,在SM 310內可同時啟用複數個相關執行緒群組(在不同執行階段內)。此執行緒群組的集合稱為「協作執行緒陣列」(CTA,Cooperative thread array)或「執行緒陣列」。特定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可包含位址轉譯後備緩衝器(TLB,Translation lookaside buffers),或可位於多處理器SM 310、L1快取或GPC 208內的快取。該實體位址經過處理來分配本機存取的表面資料,以便讓有效要求交錯於分割單元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(預先光柵運算)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。
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內的任何執行單元)都可透過記憶體介面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。
分散操作的批次重播
第四圖例示根據本發明的一個具體實施例,設置來實施分散操作的批次重播之一多階段管線400。如所示,多階段管線400包含管線階段402、邏輯元件404、批次重播單元406以及重播多工器408。在許多具體實施例內,多階段管線400可位於串流多重處理器(SM)310的一執行單元302或一LSU 303內,如第三C圖內所示。
管線階段402會在其通過多階段管線400時儲存許多指令的中間結果。管線階段402將該中間結果儲存在多階段管線400的每一時脈循環開頭。在許多進度階段上,多階段管線400內可存在多重指令。例如:一指令輸入該多階段管線,並且在一特定時脈循環開始時存入管線階段402(0)。在該下一個時脈循環開始時,此指令前往管線階段402(1),而另一指令輸入該多階段管線並存入管線階段402(0)。每一指令通常針對多階段管線400的每一時脈循環進入一個管線階段402。
邏輯元件404分開管線階段402。邏輯元件404可執行SM 310所需的任何功能,包含但不受限於算數運算、邏輯運算以及載入/儲存操作。例如:儲存至管線階段402(0)的指令呈現為至邏輯元件404(0)的輸入。在延遲週期之後,邏輯元件404(0)呈現為至管線階段402(1)輸入的功能結果。然後此結果在多階段管線400的下一個時脈循環上儲存於管線階段402(1)內。在此方式中,該指令依照沿著管線階段402的該指令進程,執行邏輯元件404決定的許多功能。該指令用每一時脈循環前進通過多階段管線400,直到該指令已經通過所有管線階段402。一般而言,通過多階段管線400的總延遲等於多階段管線400內管線階段402的數量乘上連續管線時脈循環之間的時間週期。通過邏輯元件404的延遲通常較低,以便將到管線階段402的時脈循環時間降至最低,藉此將管線效能最大化。一旦該指令到達管線階段402(S-1),則LSU 303決定該指令為一記憶體存取操作。LSU 303傳送至少一個執行緒所參照的快取 線,並服務存取相同快取線的所有執行緒。若該指令為一分散操作,則依照定義,某些執行緒保留未服務,如本文先前所描述。在這種情況下,LSU 303選擇一或多個刺激執行緒用於一重播操作,其中一刺激執行緒為未服務執行緒之任一者。每一刺激執行緒依序呈現一刺激執行緒家族,其中依照與該刺激執行緒家族相關聯的該刺激執行緒,該刺激執行緒家族包含需要存取相同快取線的該執行緒集合。在某些案例中,該刺激執行緒家族並不具有該對應刺激執行緒以外的成員。與該等選取刺激執行緒相關聯的重播操作會批次重播,並透過重播迴圈410傳送至批次重播單元406。
批次重播單元406透過一重播迴圈410接收批次重播操作,並將該不同的重播操作插回多執行緒管線400。同樣的,實施重播操作,用於依照一分散操作結果,牽涉到需要由不同執行緒存取的多重快取線之記憶體存取操作。批次重播單元406將最多B個連續重播操作透過重播多工器408的輸入416插入多階段管線400,其中B為一已知批次當中可以處理的重播操作最大數量。在一特定批次處理當中的該重播操作依序通過多階段管線400,一旦該批次內的一重播操作到達邏輯元件404(S-1),則LSU 303決定是否留有任何未服務的執行緒。若有,則LSU 303以上面討論的方式準備最多B個重播操作的另一批次。
重播多工器408選擇在管線階段402(0)上,允許一或多個新指令412或一或多個重播操作進入多階段管線400內。重播多工器408受到重播指示器414的控制。一開始,重播指示器414設定為選擇重播多工器408的輸入418,如此在重播多工器408的輸入418上出現一傳入的新指令412,則新指令412傳送通過重播多工器408的輸入418並呈現在第一管線階段402(0)的該輸入上。依照上述,若LSU 303偵測到一分散操作,則需要一或多個重播操作,以便完成該指令通過所有執行緒。 在這種案例中,LSU 303評估重播指示器414,用於選擇重播多工器408的輸入416。在反應上,來自批次重播單元406的一或多個重播操作通過重播迴圈410,並允許通過重播多工器408來在多階段管線400內處理。一旦重播操作已經進入多階段管線400,LSU 303會移除重播指示器414,允許新指令412透過重播多工器408的輸入418再次進入多階段管線400。一旦該等重播操作已經通過多階段管線400來處理,則LSU 303決定是否所有執行緒都已經服務。若有某些執行緒仍舊未服務,則LSU 303評估重播指示器414,將重播操作的另一批次通過重播迴圈410,然後移除重播指示器414。該處理持續到所有執行緒都已經服務,也就是所有執行緒都已經執行內含該記憶體存取操作的該指令。
以下範例例示批次重播操作如何在示範多階段管線400內處理,其中B=2。新指令412可透過重播多工器408的輸入418進入多階段管線400。然後該指令可在下一個時脈循環上儲存於管線階段402(0)內。然後該指令可處理通過邏輯元件404(0),產生一中間結果。該中間結果可在下一個時脈循環上儲存於管線階段402(1)內。該指令可通過多階段管線400,直到該指令到達管線階段402(S-1),然後呈現給邏輯元件404(S-1)。LSU 303可偵測該指令已經程式編輯來在多階段管線400的此階段期間,啟始一記憶體存取操作,例如從共享記憶體載入一資料。一旦已經執行該記憶體存取操作,並且若該指令為一分散操作,則某些執行緒會維持未服務。
在這種情況下,LSU 303可從仍舊需要服務的執行緒之間最多選擇兩個刺激執行緒。這兩個重播操作可透過重播迴圈410傳輸至批次重播單元406。LSU 303可評估重播指示器414,如此重播操作可透過重播多工器408從批次重播單元406繞送出來,並儲存在管線階段402(0)內。這兩個重播操作的第一個可在管線階段402(0)上插入多階段管線400。一個時脈循 環之後,該第一重播可儲存在管線階段402(1)內,並且該第二重播可在管線階段402(0)上插入多階段管線400。LSU 303可移除重播指示器414並釋放多階段管線400,允許新指令412進入多階段管線400。該兩重播操作可前進通過多階段管線400,管線402分開直到第一重播到達邏輯元件404(S-1)。此時LSU 303再次決定是否有額外執行緒需要服務,若是,則準備另一批次重播。該處理持續到所有執行緒都已經服務為止。
如此,其中最大重播批次大小B=2,並且重播迴圈410的長度為六個管線階段,所以不需要重播操作的一記憶體存取操作可在單一次通過或六個時脈循環內從管線階段402(0)通過至402(S)。在需要單一重播之處,該記憶體存取操作可在兩次通過或十二個時脈循環內從管線階段402(0)通過至402(S)。若需要兩個重播操作,則第二重播可在第一重播的一個循環之後插入重播迴圈410,產生總共十三時脈循環的延遲。需要三或四個重播操作的一記憶體存取操作可分別產生十八或十九個時脈循環的延遲,以此類推。
吾人將了解,本文中顯示的該架構僅為例示,所以可進行改變與修改。例如:本文內描述的技術適用於具有任何長度重播迴圈410的多階段管線400,並不限制重播迴圈410包含六個管線階段402。在另一範例中,本文內描述的架構呈現在串流多處理器310的載入儲存單元303內多階段管線的範疇之下。該架構可運用關聯於中央處理單元(CPU)、一般處理單元(GPU)或在任何其他技術有利計算環境內,並無限制。
在另一範例中,最大重播批次B大於2時有較高效率。在實際方面,在B=S時可完整運用重播迴圈410。精通技術人士將了解,B的最佳值由重播迴圈410的長度S,也就是指令前進通過多階段管線400的天性,以及其他因素所決定。尚且在另一範例中,一批次操作內的重播操作一般在連續時脈週期上插入多階段管線400內,如此一批次內相鄰重播操作依照 管線階段402前進通過多階段管線400。不過,連續插入可發生在超過一個時脈循環的其他間隔上。尚且在另一範例中,本文內描述的該技術以LSU 303的範疇呈現,但可套用至存取共享資源的任何多階段管線400。此外,本文內描述的該技術假設在完成與該記憶體存取操作相關聯的所有重播操作時釋放該管線。不過,多階段管線400可設計成讓新指令412與重播操作交錯,進一步改善效能。
本文內描述的該技術係運用記憶體存取操作通過多重執行緒來說明,其中該等執行緒透過分散的快取線存取記憶體位置。該等技術具有充分彈性,可運用於存在分散操作的其他應用當中。在一個範例中,本文內描述的該等技術並不受限於執行緒的執行,而是可運用在透過多次往返通過多階段管線中一或多個階段來進行之任何操作當中。在另一範例中,該等執行緒或其他操作可分散在快取線以外的資源上,如此得利於批次重播操作。這種資源可包含但不受限於快取標籤、快取資料、共享的記憶體。尚且在另一範例中,本文內描述的該等技術在執行緒分散在超過一條快取線時運用重播操作。在某些應用當中,一多階段管線可在任何已經往返期間擷取超過一條快取線。在執行緒通過擷取多條快取線時無法用單次往返擷取的資源之處,仍舊可運用批次重播操作。
精通技術人士將了解其中決定刺激執行緒並選擇用於處理的方法。在一個範例中,刺激執行緒以及對應刺激執行緒家族的總數都在相同時脈循環內決定。一或多個執行緒可標示用於目前通過該多階段管線400的往返中之處理,而剩餘執行緒維持未服務直到稍後往返。在另一範例中,可在一已知時脈循環期間選擇單一刺激執行緒。在此刺激執行緒開始處理時,若有任何下一個刺激執行緒都可在接下來的時脈循環當中選擇。如此,可依照需求一次一個決定刺激執行緒,直到所有執行緒都已經服務。除了這兩種方式以外,可運用選擇刺激執行 緒以及決定刺激執行緒家族的任何技術有利方法。任何合理的標準都可用來選擇用於處理的一特定執行緒,其中已經選擇多個刺激執行緒。如此,可從需要服務的該等執行緒之間隨機選擇一刺激執行緒。另外,可根據哪個執行緒產生最大刺激執行緒家族,或用任何其他合理方式,選擇一刺激執行緒。
第五圖為根據本發明的一個具體實施例,用於在一多階段管線400內執行批次重播操作的方法步驟之流程圖。雖然已經結合第一圖至第四圖的系統來描述該等方法步驟,精通技術人士將了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
方法從步驟502開始,在此LSU 303接收一記憶體存取操作,如此一指令從一指定位址上的一共享記憶體載入一資料值。每一執行緒都可程式編輯成從相同或不同快取線上的位址載入資料。在步驟504上,LSU 303從需要服務來完成該記憶體存取操作的許多執行緒之間選擇一刺激執行緒。該刺激執行緒可根據一些條件或政策來選擇,包含但不受限於選擇一快取線上具有最多目標位址用於該特定記憶體存取操作的一執行緒。在步驟506上,LSU 303決定該刺激執行緒家族。依照與該刺激執行緒家族相關聯的該刺激執行緒,該刺激執行緒家族包含需要存取相同快取線的該執行緒集合。在某些案例中,該刺激執行緒家族並不具有該對應刺激執行緒以外的成員。在步驟508上,LSU 303利用傳輸由該刺激執行緒定址的該快取線,執行該刺激執行緒家族的該記憶體存取操作,並且完成該刺激執行緒家族內所有執行緒的該記憶體存取操作。
在步驟510上,LSU 303決定是否還有任何尚未服務的殘留執行緒。一未服務的執行緒就是尚未完成該記憶體存取操作的執行緒。若無執行緒未服務,則終止該方法。若有尚未服務的執行緒,則該方法前往步驟512,其中LSU 303從未服務執行緒集合中選擇一下一個刺激執行緒。在步驟514上,LSU 303 決定由下一個刺激執行緒代表的該刺激執行緒家族。在步驟516上,LSU 303決定所選取的刺激執行緒數量是否等於B,其中B為重播迴圈410內可批次的重播操作最大數量。若已經選擇B個執行緒,則該方法前往步驟520,在此LSU 303利用將B個刺激執行緒集合(及其家族)依序插入重播多工器408,來執行該集合的該記憶體存取操作。若已經選擇少於B個執行緒,然後該方法前往步驟518,在此LSU 303決定是否服務尚未服務也未選取的額外執行緒。若仍舊有其他執行緒,則該方法返回步驟512,在此選擇另一刺激執行緒。若沒有額外執行緒,則該方法前往步驟520,在此LSU 303利用將刺激執行緒的最終集合(及其家族)依序插入重播多工器408,來執行該集合的該記憶體存取操作。在步驟520上執行該記憶體存取操作之後,該方法返回步驟510,在此該處理繼續直到所有執行緒都已經服務,此時終止該方法。
總結來說,所揭示技術提供一種最佳方式來在並行處理子系統內執行分散操作的重播操作。尤其是,串流多處理器(SM)310包含一多階段管線400,其設置來透過重播迴圈410批次進行二或更多重播處理操作。多階段管線400內的邏輯元件404偵測目前的管線階段402是否存取一共享的資源,例如載入來自一共享記憶體的資料。若該等執行緒存取分散在兩條快取線上的資料,則在該第一往返通過多階段管線400期間服務執行緒的第一家族。服務剩餘執行緒需要單一重播操作。若該等執行緒存取分散在超過兩條快取線上的資料,則在該第一往返通過多階段管線400期間服務執行緒的第一家族。在此案例中,服務剩餘執行緒需要二或更多重播操作。多階段管線400批此進行通過重播迴圈410的二或多個重播操作,在此該等重播操作依序插入該管線內。若在第一批次重播之後需要服務額外執行緒,則繼續該處理直到已經服務所有執行緒。
好處在於,需要二或多個重播操作的分散操作有較低延 遲。在記憶體存取操作需要傳輸超過兩條快取線來服務所有執行緒之處,完成所有重播操作所需的時脈循環次數減少。因為二或多個重播操作同時前進通過重播迴圈410,如此多階段管線400的運用更有效率。此外,在重播插入點上等待進入多階段管線400的新指令412可經歷較少由該重播操作所引起的延遲。
雖然上述指向本發明的具體實施例,不過可想出不背離本發明基本領域以及底下申請專利範圍的其他與進一步具體實施例。
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‧‧‧處理叢集陣列
300‧‧‧任務管理單元
302‧‧‧執行單元
303‧‧‧載入儲存單元
304‧‧‧本機暫存檔
305‧‧‧管線管理員
306‧‧‧共享記憶體
310‧‧‧串流多重處理器
312‧‧‧經線排程器與指令單元315紋理單元
321‧‧‧排程器表
320‧‧‧L1快取
322‧‧‧任務中繼資料
325‧‧‧預先光柵運算
328‧‧‧記憶體管理單元
330‧‧‧工作分配交叉開關
335‧‧‧第一點五層快取
340‧‧‧工作分配單元
345‧‧‧任務表
352‧‧‧統一位址映射單元
370‧‧‧指令L1快取
380‧‧‧記憶體與快取互連
400‧‧‧多階段管線
402‧‧‧管線階段
404‧‧‧邏輯元件
406‧‧‧批次重播單元
408‧‧‧重播多工器
410‧‧‧重播迴圈
412‧‧‧新指令
414‧‧‧重播指示器
416‧‧‧輸入
418‧‧‧輸入
525‧‧‧佇列
如此上面簡單彙總可詳細了解本發明上述特色的方式,本發明的更特定說明則參照具體實施例,某些具體實施例說明於附圖內。不過吾人應該注意,附圖只說明本發明的典型具體實施例,因此並不對發明領域產生限制,本發明承認其他等效具體實施例。
第一圖為例示設置來實施本發明一或多個態樣的電腦系統方塊圖;第二圖為根據本發明的一個具體實施例,用於第一圖中該電腦系統的一並行處理子系統之方塊圖;第三A圖為根據本發明的一個具體實施例,第二圖中前端的方塊圖;第三B圖為根據本發明的一個具體實施例,第二圖中並行處理單元之一者內一般處理叢集的方塊圖;第三C圖為根據本發明的一個具體實施例,第三B圖中該串流多重處理器一部分的方塊圖;第四圖例示根據本發明的一個具體實施例,設置來實施分散操作的批次重播之一多階段管線;以及第五圖為根據本發明的一個具體實施例,用於在一多階段 管線內執行批次重播操作的方法步驟之流程圖。
400‧‧‧多階段管線
402‧‧‧管線階段
404‧‧‧邏輯元件
406‧‧‧批次重播單元
408‧‧‧重播多工器
410‧‧‧重播迴圈
412‧‧‧新指令
414‧‧‧重播指示器
416‧‧‧輸入
418‧‧‧輸入

Claims (10)

  1. 一種用於重播一共用資源存取操作之電腦實施方法,該方法包含:從設置成執行一多階段管線內一指令的一執行緒群組中選擇一第一執行緒與一第二執行緒,其中該第一執行緒與該第二執行緒都尚未執行該指令;選擇一第一組執行緒來關聯於該第一執行緒;選擇一第二組執行緒來關聯於該第二執行緒;將關聯於該第一執行緒與該第一組執行緒的一第一重播操作插入該多階段管線,來執行該指令;以及將關聯於該第二執行緒與該第二組執行緒的一第二重播操作插入該多階段管線來執行該指令,其中該第二重播操作相對於該第一重播操作依序插入該多階段管線。
  2. 如申請專利範圍第1項之方法,其中該第一執行緒與該第一組執行緒內每一執行緒都設置成存取一第一共用共享的資源,並且該第二執行緒與該第二組執行緒內每一執行緒都設置成存取一第二共用共享的資源。
  3. 一種用於重播一共用資源存取操作之子系統,其包含:一載入儲存單元(LSU)設置成:從設置成執行一多階段管線內一指令的一執行緒群組中選擇一第一執行緒與一第二執行緒,其中該第一執行緒與該第二執行緒都尚未執行該指令;選擇一第一組執行緒來關聯於該第一執行緒;選擇一第二組執行緒來關聯於該第二執行緒;將關聯於該第一執行緒與該第一組執行緒的一第一重播操作插入該多階段管線,來執行該指令;以及將關聯於該第二執行緒與該第二組執行緒的一第二重播操作插入該多階段管線來執行該指令,其中該第二重播操作相對於該第一重播操作依序插入該多階段管線。
  4. 如申請專利範圍第3項之子系統,其中該共同資源為一快 取線。
  5. 如申請專利範圍第3項之子系統,其中該第一執行緒與該第一組執行緒不會與該第二執行緒與該第二組執行緒共用執行緒。
  6. 如申請專利範圍第3項之子系統,其中同時選取該第一組執行緒與該第一執行緒,並且同時選取該第二組執行緒與該第二執行緒。
  7. 如申請專利範圍第3項之子系統,其中關聯於該第二執行緒和該第二組執行緒的該第二重播操作在關聯於該第一執行緒和該第一組執行緒的該第一重播操作之一管線階段之後插入該多階段管線。
  8. 如申請專利範圍第3項之子系統,其中該第一執行緒與該第一組執行緒內每一執行緒都設置成存取一第一共用共享的資源,並且該第二執行緒與該第二組執行緒內每一執行緒都設置成存取一第二共用共享的資源。
  9. 如申請專利範圍第8項之子系統,其中關聯於該第一執行緒和該第一組執行緒的該第一重播操作以及關聯於該第二執行緒和該第二組執行緒的該第二重播操作都在該多階段管線的一第一階段之後,透過一管線階段插入該多階段管線。
  10. 如申請專利範圍第8項之子系統,其中一第二指令相對於關聯於該第二執行緒和該第二組執行緒的該第二重播操作依序插入該多階段管線。
TW101147437A 2011-12-16 2012-12-14 分散操作的批次重播 TW201342229A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US13/329,066 US9817668B2 (en) 2011-12-16 2011-12-16 Batched replays of divergent operations

Publications (1)

Publication Number Publication Date
TW201342229A true TW201342229A (zh) 2013-10-16

Family

ID=48522299

Family Applications (1)

Application Number Title Priority Date Filing Date
TW101147437A TW201342229A (zh) 2011-12-16 2012-12-14 分散操作的批次重播

Country Status (4)

Country Link
US (1) US9817668B2 (zh)
CN (1) CN103218253B (zh)
DE (1) DE102012222552B4 (zh)
TW (1) TW201342229A (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10152329B2 (en) * 2012-02-09 2018-12-11 Nvidia Corporation Pre-scheduled replays of divergent operations

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6385715B1 (en) * 1996-11-13 2002-05-07 Intel Corporation Multi-threading for a processor utilizing a replay queue
US6499085B2 (en) 2000-12-29 2002-12-24 Intel Corporation Method and system for servicing cache line in response to partial cache line request
US8077174B2 (en) * 2005-12-16 2011-12-13 Nvidia Corporation Hierarchical processor array
US9678775B1 (en) 2008-04-09 2017-06-13 Nvidia Corporation Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
US8086801B2 (en) * 2009-04-08 2011-12-27 International Business Machines Corporation Loading data to vector renamed register from across multiple cache lines
US8458440B2 (en) * 2009-09-25 2013-06-04 Nvidia Corporation Deferred complete virtual address computation for local memory space requests
US8266383B1 (en) * 2009-09-28 2012-09-11 Nvidia Corporation Cache miss processing using a defer/replay mechanism

Also Published As

Publication number Publication date
DE102012222552B4 (de) 2020-06-04
DE102012222552A1 (de) 2013-06-20
US9817668B2 (en) 2017-11-14
CN103218253A (zh) 2013-07-24
CN103218253B (zh) 2016-09-14
US20130159684A1 (en) 2013-06-20

Similar Documents

Publication Publication Date Title
TWI624791B (zh) 用於在多緒處理單元中改善性能之技術
TWI466027B (zh) 解決執行緒發散的方法及系統
US8732713B2 (en) Thread group scheduler for computing on a parallel thread processor
TWI498819B (zh) 執行成型記憶體存取作業的系統和方法
US9436504B2 (en) Techniques for managing the execution order of multiple nested tasks executing on a parallel processor
TWI493451B (zh) 使用預解碼資料進行指令排程的方法和裝置
US10007527B2 (en) Uniform load processing for parallel thread sub-sets
TWI489385B (zh) 一種用於預先擷取快取線的電腦實作方法與子系統
TWI501150B (zh) 無指令解碼而排程指令的方法和裝置
US9710306B2 (en) Methods and apparatus for auto-throttling encapsulated compute tasks
US20130198760A1 (en) Automatic dependent task launch
US9069609B2 (en) Scheduling and execution of compute tasks
US9626216B2 (en) Graphics processing unit sharing between many applications
US8539130B2 (en) Virtual channels for effective packet transfer
US9626191B2 (en) Shaped register file reads
US9798544B2 (en) Reordering buffer for memory access locality
US9715413B2 (en) Execution state analysis for assigning tasks to streaming multiprocessors
TWI489289B (zh) 分散作業的預先排程重播
US9442759B2 (en) Concurrent execution of independent streams in multi-channel time slice groups
TW201351276A (zh) 計算工作的排程和執行
US9262348B2 (en) Memory bandwidth reallocation for isochronous traffic
TW201342229A (zh) 分散操作的批次重播