TWI588653B - 針對記憶體存取的動態記憶列模式定址 - Google Patents

針對記憶體存取的動態記憶列模式定址 Download PDF

Info

Publication number
TWI588653B
TWI588653B TW102111426A TW102111426A TWI588653B TW I588653 B TWI588653 B TW I588653B TW 102111426 A TW102111426 A TW 102111426A TW 102111426 A TW102111426 A TW 102111426A TW I588653 B TWI588653 B TW I588653B
Authority
TW
Taiwan
Prior art keywords
memory
column
thread
address
mapped
Prior art date
Application number
TW102111426A
Other languages
English (en)
Other versions
TW201403321A (zh
Inventor
邁克爾 費特曼
史都華德 格列 卡爾頓
道格拉斯J 哈恩
拉杰史華蘭 薩爾瓦內斯恩
詩利緒 加德雷
史蒂芬 詹姆斯 海因里希
Original Assignee
輝達公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 輝達公司 filed Critical 輝達公司
Publication of TW201403321A publication Critical patent/TW201403321A/zh
Application granted granted Critical
Publication of TWI588653B publication Critical patent/TWI588653B/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/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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent 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
    • 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/3888Concurrent 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
    • G06F9/38885Divergence aspects

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)
  • Multi Processors (AREA)

Description

針對記憶體存取的動態記憶列模式定址
本發明一般係關於並行處理,尤其係關於支援多列記憶體存取的動態記憶列位址映射之並行架構。
在單一指令多重執行緒(SIMT,single-instruction multiple-thread)處理環境中,執行緒都放入P並行執行緒群組內,被稱為經線(warp),執行相同程式。雖然一執行緒群組的該等P個執行緒同時執行該程式的每一指令,不過一執行緒群組的每一執行緒都使用自己的資料與暫存器獨立執行該指令。該執行緒群組內每一執行緒都設置成使用每一執行緒位址至多列記憶體的記憶列之固定映射,來存取一多列記憶體。若多執行緒需要在相同記憶列內存取比在單一時脈循環內可存取還要多二或更多位置,則存在記憶列衝突情況。
應用程式通常撰寫成當執行緒群組的該等並行執行緒讀寫該多列記憶體時降低記憶列衝突,如此可在單一時脈循環內讀寫該執行緒群組內所有該等並行執行緒的資料。例如:一程式可撰寫成可由一執行緒群組存取資料陣列的一列或一欄,而無任何記憶列衝突。發生記憶列衝突時,對於映射至相同記憶列的位址之存取必須在個別時脈循環內完成,因此降低效能。
因此,業界所需為一種當執行緒群組的並行執行緒存取多列記憶體時避免記憶列衝突之方法。
本發明揭示一種處理用於執行緒群組中並行執行緒的記憶體存取要求之系統及方法,其中該要求存取支援不同記憶列位元寬度的多列記憶體。每一執行緒位址都根據定義每一記憶列位元寬度的記憶列模 式,映射至記憶體的記憶列。應用程式可設置成讀寫一記憶體,存取每列不同數量的位元,例如每列32位元、每列64位元或每列128位元。在每一時脈循環上,可接收一存取要求以及記憶列模式用於該等應用程式之一者,並且該存取要求的每一處理執行緒位址都根據該記憶列模式動態映射,以產生一組記憶列位址。然後使用該等記憶列位址存取該記憶體。相較於使用單一記憶列映射用於所有存取,允許根據指定至每一存取要求的記憶列模式之不同記憶列映射,讓每一應用程式避免記憶列衝突。
本發明方法用於存取一多列記憶體的許多具體實施例包含接收一指定單獨記憶體位址的記憶體存取指令。定義每一記憶列位元寬度的記憶列模式已被接收,並且根據該記憶列模式動態映射單獨記憶體位址,以產生一已映射的單獨記憶體位址。然後將一讀取要求或一寫入要求傳送至該多列記憶體,以針對該已映射的單獨記憶體位址執行該記憶體存取指令。
本發明的許多具體實施例包含用於存取一多列記憶體的一處理子系統。該處理子系統包含一位址產生單元以及連結在該位址產生單元與一多列記憶體之間的一載入/儲存單元。該位址產生單元設置成接收指定一單獨記憶體位址的一記憶體存取指令。該位址產生單元也設置成接收定義每一記憶列位元寬度的一記憶列模式,並且根據該記憶列模式動態映射該單獨記憶體位址以產生一已映射的單獨記憶體位址。該載入/儲存單元設置成將一讀取要求或一寫入要求傳送至該多列記憶體,以針對該已映射的單獨記憶體位址執行該記憶體存取指令。
本發明方法的一項優點在於用於存取一多列記憶體的該位址至記憶列映射可隨每一時脈循環而變。指定用於一執行緒群組內並行執行緒的每一記憶體位址都根據指定用於該存取要求的該記憶列模式,動態映射至一記憶列位址。如此,撰寫在每一記憶列儲存32位元資料時避免記憶列衝突的第一應用程式與撰寫在每一記憶列儲存64位元資料時避免記憶列衝突的第二應用程式比較起來,可使用不同的記憶體位址至記憶列位址映射。總結來說,撰寫由具有第一記憶列大小的一處理器所執行之老舊(舊式)應用程式,在可動態映射位址來支援該第一記憶列大小以及要由一現代 處理器執行的較高位元寬度操作所需較大記憶列大小之該現代處理器上執行時,並不會導致效能降低。
100‧‧‧電腦系統
304‧‧‧本機暫存檔
102‧‧‧中央處理單元
305‧‧‧管線管理員
103‧‧‧裝置驅動程式
306‧‧‧多列共享記憶體
104‧‧‧系統記憶體
310‧‧‧串流多重處理器
105‧‧‧記憶體橋接器
312‧‧‧經線排程器與指令單元
106‧‧‧通訊路徑
315‧‧‧紋理單元
107‧‧‧輸入/輸出橋接器
320‧‧‧L1快取
108‧‧‧使用者輸入裝置
321‧‧‧排程器表
110‧‧‧顯示裝置
322‧‧‧任務中繼資料
112‧‧‧並行處理子系統
325‧‧‧預先光柵運算
113‧‧‧第二通訊路徑
328‧‧‧記憶體管理單元
114‧‧‧系統磁碟
330‧‧‧工作分配橫桿
116‧‧‧開關
335‧‧‧第一點五層快取
118‧‧‧網路配接器
340‧‧‧工作分配單元
120-121‧‧‧外接卡
345‧‧‧任務表
202‧‧‧並行處理單元
370‧‧‧指令L1快取
204‧‧‧本機並行處理記憶體
375‧‧‧載入儲存單元陣列
205‧‧‧輸入/輸出單元
380‧‧‧記憶體與快取互連
206‧‧‧主介面
405‧‧‧位址產生單元
207‧‧‧任務/工作單元
430‧‧‧讀取/寫入介面
208‧‧‧一般處理叢集
440‧‧‧P記憶列
210‧‧‧記憶體橫桿單元
212‧‧‧前端
460‧‧‧已經映射至8個32位元記憶列的32位元資料
214‧‧‧記憶體介面
462‧‧‧已經映射至8個64位元記憶列的32位元資料
215‧‧‧分割單元
230‧‧‧處理叢集陣列
464‧‧‧已經映射至8個64位元記憶列的32位元資料
220‧‧‧動態隨機存取記憶體
300‧‧‧任務管理單元
302‧‧‧執行單元
303‧‧‧載入儲存單元
所以,可以詳細瞭解本發明上述特徵之方式中,本發明的一更為特定的說明簡述如上,其可藉由參照到具體實施例來進行,其中一些例示於所附圖式中。但應注意所附圖式僅例示本發明的典型具體實施例,因此其並非要做為本發明之範圍的限制,本發明自可包含其它同等有效的具體實施例。
第一圖為例示設置來實施本發明一或多個態樣的電腦系統方塊圖;第二圖為根據本發明的一個具體實施例,用於第一圖中該電腦系統的一並行處理子系統之方塊圖;第三A圖為根據本發明的一個具體實施例,第二圖中前端的方塊圖;第三B圖為根據本發明的一個具體實施例,第二圖中並行處理單元之一者內一般處理叢集的方塊圖;第三C圖為根據本發明的一個具體實施例,第三B圖中該串流多重處理器一部分的方塊圖;第四A圖為根據本發明的一個具體實施例,第三C圖中載入/儲存單元(LSU,load/store unit)陣列以及共享記憶體的方塊圖;第四B圖為例示將32位元資料的8x8陣列映射至8個32位元記憶列之概念圖;第四C圖為根據本發明的一個具體實施例,例示將32位元資料的8x8陣列映射至8個64位元記憶列之概念圖;第四D圖為根據本發明的一個具體實施例,例示另一個將32位元資料的8x8陣列映射至8個64位元記憶列之概念圖;以及第五圖揭示根據本發明的一個具體實施例,用於處理一多列記憶體存取要求的方法步驟流程圖。
在以下描述中,揭示許多特定細節以對本發明有更徹底之理解。但是,精通此技術的人士應該了解,在無一或多個該等特定細節之下還是可實施本發明。
系統概觀
第一圖為例示設置來實施本發明一或多個態樣的電腦系統100之方塊圖。電腦系統100包含一中央處理單元(CPU,central processing unit)102,以及通過一互連路徑通訊的一系統記憶體104,其中該路徑可包含一記憶體橋接器105。例如可為北橋晶片的記憶體橋接器105透過匯流排或其他通訊路徑106(例如超傳輸連結),連接至一I/O(輸入/輸出(input/output))橋接器107。例如可為南橋晶片的輸入/輸出橋接器107接收來自一或多個輸入裝置108(例如鍵盤、滑鼠)的使用者輸入,並透過通訊路徑106和記憶體橋接器105將該輸入轉送至CPU 102。一並行處理子系統112透過匯流排或第二通訊路徑113(例如周邊組件互連(PCI,Peripheral Component Interconnect)Express、加速圖形連接埠(Accelerated Graphics Port)或HyperTransport連結)連接至記憶體橋接器105;在一個具體實施例內,並行處理子系統112為傳遞畫素給顯示裝置110(例如傳統陰極射線管或液晶監視器)的圖形子系統。系統磁碟114也連接至輸入/輸出橋接器107。一開關116提供I/O橋接器107與其他組件,像是網路配接器118以及許多外接卡120和121之間的連接。其他組件(未明確顯示),包含萬用序列匯流排(USB,universal serial bus)或其他連接埠連接、CD(compact disc)光碟機、數位影碟(DVD,digital video disc)光碟機、檔案記錄裝置等等,也可連接至輸入/輸出橋接器107。第一圖內顯示的許多通訊路徑,包含特地指名的通訊路徑106和113,都可使用任何合適的協定來實施,例如PCI Express、AGP(加速圖形連接埠)、HyperTransport或任何其他匯流排或點對點通訊協定,以及不同裝置之間的連接都可使用業界內已知的不同協定。
在一個具體實施例內,並行處理子系統112併入將圖形與視訊處理最佳化的電路,包含例如視訊輸出電路,並且構成一圖形處理單元(GPU,graphics processing unit)。在另一具體實施例內,並行處理子系統112併入將一般用途處理最佳化的電路,同時保留底層計算架構,本文內有更 詳細描述。尚且在另一具體實施例內,並行處理子系統112可在單一子系統內合併一或多個其他系統元件,例如結合記憶體橋接器105、CPU 102和輸入/輸出橋接器107來形成一晶片上系統(SoC,system on chip)。
吾人將了解,本文中顯示的該系統為例示,所以可進行改變與修改。包含橋接器的數量與配置、CPU 102的數量以及並行處理子系統112的數量這類連接拓撲可依照需求修改。例如在某些具體實施例內,系統記憶體104直接連接至CPU 102,而不是透過橋接器,並且其他裝置透過記憶體橋接器105以及CPU 102與系統記憶體104通訊。在其他替代拓撲中,並行處理子系統112連接至輸入/輸出橋接器107或直接連接至CPU 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。該等並行處理單元可一致或不同,並且每一並行處理單元都可擁有一專屬的並行處理記憶體裝置或無專屬的並行處理記憶體裝置。並行處理子系統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,如業界內所熟知。在此也可使用其他通訊路徑。一輸入/輸出單元205產生在通訊路徑113上傳輸的封包(或其他信號),也從通訊路徑113上接收所有傳入封包(或其他信號),將該等傳入封包導引至並行處理單元202的適當組件。例如:有關處理任務的指令可導引至主介面206,而有關記憶體操作的指令(例如讀取或寫入並行處理記憶體204)可導引至記憶體橫桿單元210。主介面206讀取每一推送緩衝區,並將該推送緩衝區內儲存的該指令串流輸出至一前端212。
每一並行處理單元202都有利地實施一高並行處理架構。如細節內所示,並行處理單元202(0)包含一處理叢集陣列230,其包含數量為C的一般處理叢集(GPC,general processing cluster)208,其中C1。每一一般處理叢集208都可同時執行大量的(例如數百或數千)執行緒,其中每一執行緒都是一程式的實例。在許多應用當中,不同的一般處理叢集208可分配用於處理不同種類的程式,或用於執行不同種類的計算。一般處理叢集208的分配取決於針對每一種程式或計算所賦予的工作負擔而改變。
一般處理叢集208從任務/工作單元207內的工作分配單元當中接收要執行的處理任務,該工作分配單元接收指標來處理任務,其編碼為任務中繼資料(TMD,task metadata)並儲存在記憶體內。該指標至任務中繼資料包含在指令串流內,其儲存當成一推送緩衝區並由前端212從主介面206接收。可編碼為任務中繼資料的處理任務包含要處理的資料索引,以及定義如何處理該資料的狀態參數與指令(例如要執行哪個程式)。任務/工作單元207從前端212接收任務,並且確定在每一任務中繼資料指定的處理開始之前已經將一般處理叢集208設置成有效狀態。一優先順序可指定給每一任務中繼資料,用來排定該處理任務的執行時間。處理任務也可從處理叢集陣列230接收。選擇性,該任務中繼資料可包含一參數,其控制該任務中繼資料加入處理任務清單(或處理任務指標清單)的頭部或尾部,藉此提供優先順序之上的另一控制等級。
記憶體介面214包含數量為D的分割單元215,這些單元每一個都直接連接至一部分並行處理記憶體204,其中D1。如所示,分割單元215的數量一般等於動態隨機存取記憶體(DRAM,dynamic random access memory)220的數量。在其他具體實施例內,分割單元215的數量可不等於記憶體裝置的數量。精通技術人士將了解,動態隨機存取記憶體220可用其他合適的儲存裝置取代,並且可為一般傳統設計,因此省略其詳細說明。像是畫框緩衝區或紋理地圖這類彩現目標可通過動態隨機存取記憶體220儲存,允許分割單元215並行寫入每一彩現目標的部分,以有效使用並行處理記憶體204的可用頻寬。
一般處理叢集208中之任一者都可處理寫入平行處理記憶體204內任一動態隨機存取記憶體220的資料。橫桿單元210設置成將每一一般處理叢集208的輸出繞送至任意分割單元215的輸入或至用於進一步處理的其他一般處理叢集208。一般處理叢集208透過橫桿單元210與記憶體介面214通訊,來讀取或寫入許多外部記憶體裝置。在一個具體實施例內,橫桿單元210具有一連接至記憶體介面214來與輸入/輸出單元205通訊,以及一連接至本機並行處理記憶體204,藉此讓不同GPC 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執行的處理任務以及子代處理任務。
第三A圖為根據本發明的一個具體實施例,第二圖中任務/工作單元207的方塊圖。任務/工作單元207包含一任務管理單元300以及工作分配單元340。任務管理單元300根據執行優先順序等級來組織要排程的任務。針對每一優先順序等級,任務管理單元300儲存指標清單到對應至排程器表321內之任務的任務中繼資料322,其中該清單可用連結清單來實施。任務中繼資料322可儲存在並行處理記憶體204或系統記憶體104內。任務管理單元300接受任務並且將該等任務儲存在排程器表321內的速率與任務管理單元300排定任務來執行的速率無關,因此任務管理單元300可在排定該等任務之前集中許多任務。然後根據優先順序資訊或使用其 他技術,例如輪轉排程,來排定集中的任務。
工作分配單元340包含一任務表345,其中有插槽讓任務中繼資料322針對執行的任務所佔用。任務管理單元300可排定任務在任務表345內有空插槽時執行。當無空插槽時,未佔用插槽的較高優先順序任務會驅逐佔用插槽的較低優先順序任務。當一任務遭到驅逐時,該任務會停止,並且若該任務尚未執行完畢,則該任務的指標會加入要排定的任務指標清單中,如此稍後會恢復執行該任務。在一任務執行期間產生子代處理任務時,將該子代任務的指標加入要排定的任務指標清單內。由在處理叢集陣列230內執行的任務中繼資料322可產生一子代任務。
與從前端212的任務/工作單元207所接收的任務不同,子代任務從處理叢集陣列230接收。子代任務並未插入推送緩衝區或傳輸至該前端。當子代任務已經產生或該子代任務的資料已經儲存在記憶體內時,並不會通知中央處理單元102。透過推送緩衝區提供的該等任務與子代任務間之另一差異在於,透過推送緩衝區提供的該等任務由該應用程式定義,而該等子代任務則在該等任務執行期間動態產生。
任務處理概觀
第三B圖為根據本發明的一個具體實施例,第二圖中並行處理單元202之一者內一般處理叢集208的方塊圖。每一一般處理叢集208都可設置成同時執行大量執行緒,其中「執行緒」一詞代表在特定輸入資料集上執行的特定程式之實例。在某些具體實施例內,單一指令、多重資料(SIMD,single-instruction,multiple-data,SIMD)指令發行技術用於支援大量執行緒的並行執行,而不用提供多個獨立指令單元。在其他具體實施例內,單一指令、多重執行緒(SIMT,single-instruction,multiple-thread)技術用於支援大量一般同步執行緒的並行執行,使用共用指令單元,其設置成發出指令至每一一般處理叢集208內的處理引擎集。不同於一單一指令、多重資料執行引擎,其中所有處理引擎一般都執行一致的指令,單一指令、多重執行緒執行允許不同執行緒更迅速遵循分散的執行路徑通過一已知執行緒程式。業界內精通技術人士將了解,單一指令、多重資料處理區域代表一單一指令、多重執行緒處理區域的功能子集。
透過將處理任務分配至串流多重處理器(SM,streaming multiprocessor)310的管線管理員305可有利地控制一般處理叢集208的操作。管線管理員305也可設置成利用指定串流多重處理器310所輸出已處理資料的目的地,控制一工作分配橫桿330。
在一個具體實施例內,一般處理叢集208之每一者都包含數量為M的串流多重處理器310,其中M1,每一串流多重處理器310都設置成處理一或多個執行緒群組。另外,每一串流多重處理器310有利地包含可管路化的一致功能執行單元集(例如執行單元與載入儲存單元,在第三C圖內顯示為執行單元302以及載入儲存單元303),允許完成先前指令之前發出新指令,如先前技術所知。可提供功能執行單元的任何組合。在一個具體實施例內,該等功能單元支援許多種運算,包含整數與浮點演算(例如加法與乘法)、比較運算、布林運算(AND、OR、XOR)、位元位移和許多代數函數的計算(例如平面插值、三角函數、指數函數以及對數函數等等);並且該相同功能單元硬體可用來執行不同運算。
這一系列指令傳輸至構成一執行緒的特定一般處理叢集208,如本文先前所定義,並且通過串流多重處理器310內並行處理引擎(未顯示)的特定數量同時執行的執行緒之集合在此稱為「經線」或「執行緒群組」。如本文所使用,「執行緒群組」代表在不同輸入資料上同時執行相同程式的執行緒群組,其中該群組的一個執行緒指派給串流多重處理器310內不同的處理引擎。一執行緒群組可包含數量比串流多重處理器310內處理引擎數量還要少的執行緒,在此案例中,某些處理引擎會在循環期間處理該執行緒群組時閒置。執行緒群組也可包含數量比串流多重處理器310內處理引擎數量還要多的執行緒,在此案例中,將在連續時脈循環上進行處理。因為每一串流多重處理器310都可同時支援最多G個執行緒群組,所以在任何已知時間上一般處理叢集208內都可執行最多G*M個執行緒群組。
此外,在串流多重處理器310內可同時啟用複數個相關執行緒群組(在不同執行階段內)。此執行緒群組的集合稱為「合作執行緒陣列」(CTA,cooperative thread array)或「執行緒陣列」。特定合作執行緒陣列的大 小等於m*k,其中k為執行緒群組內同時執行的執行緒數量,通常為串流多重處理器310內並行處理引擎數量的整數倍數,並且m為串流多重處理器310內同時啟用的執行緒群組數量。合作執行緒陣列的大小一般由程式設計師以及該合作執行緒陣列可用的硬體資源數量,例如記憶體或暫存器,來決定。
每一串流多重處理器310都包含第一層(L1)快取(如第三C圖所示),或使用串流多重處理器310之外對應L1快取內的空間,其用於執行負載與儲存操作。每一串流多重處理器310也要存取所有一般處理叢集208之間共享的第二層(L2)快取,並且可用於在執行緒之間傳輸資料。最後,串流多重處理器310也要存取至晶片外「全域」記憶體,其可包含例如並行處理記憶體204及/或系統記憶體104。吾人了解,並行處理單元202之外的任何記憶體都可用來當成全域記憶體。此外,第一點五層(L1.5)快取335可包含在一般處理叢集208內,設置成接收並固定由串流多重處理器310要求透過記憶體介面214從記憶體擷取的資料,包含指令、統一資料以及常數資料,並且將該要求的資料提供給串流多重處理器310。具有一般處理叢集208內多個串流多重處理器310的具體實施例得利於共享共用指令和在L1.5快取335內快取的資料。
每一個一般處理叢集208都可包含一記憶體管理單元(MMU,memory management unit)328,其設置成將虛擬位址映射至實體位址。在其他具體實施例內,記憶體管理單元328可位於記憶體介面214之內。記憶體管理單元328包含一組頁面表記錄(PTE,page table entry),用於將一拼貼以及選擇性一快取線索引的虛擬位址映射至實體位址。記憶體管理單元328可包含能夠位於多處理器串流多重處理器310或L1快取或一般處理叢集208內的位址轉譯後備緩衝器(TLB,translation lookaside buffer)或快取。該實體位址經過處理來分配本機存取的表面資料,以便讓有效要求交錯於分割單元215之間。該快取線索引可用於決定一快取線的要求是否命中或未命中。
在圖形與計算應用當中,一般處理叢集208可經過設置,如此每一串流多重處理器310都連結至一紋理單元315,用於執行紋理映射操 作,例如決定紋理樣本位置、讀取文例資料以及篩選該紋理資料。紋理資料從內部紋理L1快取(未顯示)讀取,或在某些具體實施例內從串流多重處理器310內的該L1快取讀取,並且依照需求從所有一般處理叢集208之間共享的L2快取、並行處理記憶體204或系統記憶體104擷取。每一串流多重處理器310都輸出處理過的任務至工作分配橫桿330,以便將該處理過的任務提供至另一一般處理叢集208供進一步處理,或透過橫桿單元210將該處理過的任務儲存在L2快取、並行處理記憶體204或系統記憶體104內。preROP(預先光柵運算)325設置成從串流多重處理器310接收資料、將資料引導至分割單元215內的ROP單元,並且執行顏色混合、組織畫素顏色資料以及執行位址轉譯的最佳化。
吾人將了解,本文中顯示的該核心架構為例示,所以可進行改變與修改。任何數量的處理單元,例如串流多重處理器310或紋理單元315、預先光柵運算325都可包含在一般處理叢集208內。進一步如第二圖內所示,並行處理單元202可包含任意數量功能彼此類似的一般處理叢集208,如此執行行為並不取決於接收特定處理任務的一般處理叢集208。進一步,每一個一般處理叢集208都得利於與其他一般處理叢集208無關的操作,運用分離並分散的處理單元、L1快取,來執行一或多個應用程式的任務。
精通此技術人士將了解,第一圖、第二圖、第三A圖和第三B圖內描述的架構並非用於限制本發明範疇,本說明書內的技術可在任何正確設置的處理單元上實施,在不背離本發明範疇之下包含但不受限於一或多個中央處理單元、一或多個多核心中央處理單元、一或多個並行處理單元202、一或多個一般處理叢集208、一或多個圖形或特殊用途處理單元等等。
在本發明的具體實施例內,吾人想要使用一計算系統的並行處理單元202或其他處理器,運用執行緒陣列來執行一般用途計算。該執行緒陣列內的每一執行緒都可指派一個獨一的執行緒識別碼(「執行緒ID」),其可在該執行緒執行期間存取該執行緒。該執行緒ID可定義為一維度或多維度數值,控制該執行緒處理行為的許多態樣。例如:一執行緒 ID可用於決定設定一執行緒的哪個輸入資料部分要處理及/或決定設定一執行緒的哪個輸出資料部分要產生或寫入。
每個執行緒指令的序列可包含至少一個指令,其定義該代表性執行緒與該執行緒陣列的一或多個其他執行緒之間的合作行為。例如:每一執行緒指令的順序可包含將在該順序內特定點上的該代表執行緒之運算執行中斷,直到一或多個其他執行緒到達該特定點上為止之指令、讓該代表執行緒將一或多個其他執行緒可存取的資料儲存至一共享記憶體內之指令、讓該代表執行緒根據其執行緒ID自動讀取與更新一共享記憶體內一或多個該等其他執行緒已經存取過的資料之指令等等。該合作執行緒陣列程式也可包含一指令,計算該共享記憶體內所要讀取資料的位址,其中該位址為執行緒ID的函數。利用定義合適的功能並且提供同步技術,資料可利用合作執行緒陣列的一個執行緒寫入共享記憶體內一已知位置,並且以可預測方式用相同合作執行緒陣列的不同執行緒從該位置當中讀取。因此,支援在執行緒之間共享的任何想要的資料圖案,並且一合作執行緒陣列內的任何執行緒都可與相同合作執行緒陣列內任何其他執行緒共享資料。在合作執行緒陣列的執行緒之間共享的資料範圍(若有的話)由該合作執行緒陣列程式決定;如此吾人了解在使用合作執行緒陣列的特定應用當中,根據該合作執行緒陣列程式,合作執行緒陣列的執行緒彼此之間會或不會實際共享資料,並且在本文中可同時使用「合作執行緒陣列」與「執行緒陣列」等詞。
第三C圖為根據本發明的一個具體實施例,第三B圖中串流多重處理器310的方塊圖。串流多重處理器310包含一指令L1快取370,其設置成透過L1.5快取335自記憶體接收指令與常數。經線排程器與指令單元312接收來自指令L1快取370的指令與常數,並且根據該等指令與常數控制本機暫存檔304以及串流多重處理器310功能單元。串流多重處理器310功能單元在載入儲存單元陣列375內包含N個執行(執行或處理)單元302以及P個載入儲存單元(LSU,load-store unit)303。
串流多重處理器310提供具備不同存取階層的晶片上(內部)資料儲存。特殊暫存器(未顯示)可由載入儲存單元303讀取但是無法寫入, 並且可用於定義每一執行緒「位置」的參數。在一個具體實施例內,特殊暫存器包含每一執行緒(或串流多重處理器310內每一執行單元302)一個暫存器,其儲存一執行緒ID;每一執行緒ID暫存器都只能由個別一個執行單元302存取。特殊暫存器也可包含額外暫存器,可由執行任務中繼資料322(或由所有載入儲存單元303)所呈現相同處理任務的所有執行緒讀取,其儲存一合作執行緒陣列識別碼、該合作執行緒陣列維度、該合作執行緒陣列所屬方格的維度(或若任務中繼資料322編碼一佇列任務而非一方格任務時的佇列位置)以及指派合作執行緒陣列的任務中繼資料322之識別碼。
若任務中繼資料322為一方格任務中繼資料,則執行任務中繼資料322會導致啟動並執行固定數量的合作執行緒陣列,來處理佇列內所儲存的固定數量資料。合作執行緒陣列的數量依照方格寬度、高度與深度的乘積來指定。該固定數量的資料可儲存在任務中繼資料322內,或任務中繼資料322可儲存將由合作執行緒陣列處理的資料之指標。任務中繼資料322也儲存由該合作執行緒陣列執行的程式之開始位址,以及定義共享記憶體306的每一記憶列位元寬度之記憶列模式。該記憶列模式控制每一執行緒位址如何映射至多列共享記憶體306的不同記憶列。
若任務中繼資料322為佇列任務中繼資料,然後使用任務中繼資料322的佇列功能,表示要處理的資料量並不需要固定。佇列記錄儲存指派給任務中繼資料322由合作執行緒陣列處理的資料。該等佇列記錄也呈現執行緒執行期間由另一任務中繼資料322產生的子代任務,藉此提供巢狀並行。一般來說,執行緒的執行或包含該執行緒的合作執行緒陣列會中止,直到子代任務執行完成為止。該佇列可儲存在任務中繼資料322內,或與任務中繼資料322分開,在此案例中任務中繼資料322儲存至該佇列的佇列指標。有利的是,由該子代任務產生的資料可寫入該佇列,同時任務中繼資料322代表已經執行的該子代任務。該佇列可實施為一圓形佇列,如此資料總量並不受限於該佇列的大小。
屬於一方格的合作執行緒陣列具有暗示的方格寬度、高度和深度參數,指示該方格內個別合作執行緒陣列的位置。在初始化期間會寫入特殊暫存器,以回應透過前端212從裝置驅動程式103接收命令,並且 在一處理任務執行期間不會改變。前端212排程執行每一處理任務。每一合作執行緒陣列都關聯於一特定任務中繼資料322,以便同時執行一或多個任務。此外,單一一般處理叢集208可同時執行多個任務。
一參數記憶體(未顯示)儲存可由相同合作執行緒陣列(或任何載入儲存單元303)內任何執行緒讀取但無法寫入的執行時間參數(常數)。在一個具體實施例內,裝置驅動程式103在導引串流多重處理器310開始執行使用這些參數的任務之前,提供參數至該參數記憶體。任何合作執行緒陣列內的任何執行緒(或串流多重處理器310內的任何執行單元302)都可透過記憶體介面214存取全域記憶體。全域記憶體的一部分可儲存在L1快取320內。
每一執行緒都使用本機暫存檔304當成伸展空間;每一暫存器都分配給一個執行緒專用,並且任何本機暫存檔304內的資料都只能由分配給該暫存器的該執行緒存取。本機暫存檔304可實施為實體上或邏輯上區分成P個通路的暫存檔,每一通路都具有某些數量的記錄(在此每一記錄都可儲存例如32位元字)。一個通路指派給該N個執行單元302以及P個載入儲存單元LSU 303的每一個,並且不同通路內的對應記錄可填入執行相同程式的不同執行緒之資料,來幫助單一指令、多重資料執行。通路的不同部分可分配給該G個同時執行緒群組中不同的執行緒,如此本機暫存檔304內的一已知記錄只能由特定執行緒存取。在一個具體實施例內,本機暫存檔304內的特定記錄保留用於儲存執行緒識別碼,實施該等特殊暫存器之一者。
共享記憶體306可由單一合作執行緒陣列內的執行緒存取;換言之,共享記憶體306內任何位置都可由相同合作執行緒陣列內的任何執行緒(或串流多重處理器310內的任何處理引擎)來存取。共享記憶體306可實施為具有互連的一多列共享暫存檔或共享晶片上快取記憶體,允許任何處理引擎從共享記憶體306內的任何位置讀取或寫入。建構共享記憶體306所用的記憶列數等於一執行緒群組內的執行緒數,如此每一執行緒都可同時存取共享記憶體306。
在其他具體實施例內,共享的狀態空間可映射至晶片外記憶 體的每一合作執行緒陣列區域,並且快取在L1快取320內。該參數記憶體可實施為該相同共享暫存檔或實施共享記憶體306的共享快取記憶體內的一指定區段,或實施為載入儲存單元303具有唯讀存取的一個別共享暫存檔或晶片上快取記憶體。在一個具體實施例內,實施該參數記憶體的區域也用於儲存該合作執行緒陣列ID和任務ID,以及合作執行緒陣列和方格尺寸或佇列位置,實施該特殊暫存器的部分。載入儲存單元陣列375內的每一載入儲存單元303都包含一位址產生單元(顯示於第四A圖內),將提供用於載入與儲存統一記憶體空間內所指定指令的一位址轉換至每一分散記憶體空間內的一位址。因此,利用指定該統一記憶體空間內的一位址,可使用一指令來存取任何該本機、共享或全域記憶體空間。
每一串流多重處理器310內的L1快取320都可用於快取私用每一直行緒本機資料,並且也快取每一應用程式全域資料。在某些具體實施例內,該每一合作執行緒陣列共享資料可快取在L1快取320內。載入儲存單元303可透過一記憶體與快取互連380連結至共享記憶體306以及L1快取320。
在應用程式與編譯器等級上,個別記憶體間隔都在單一統一位址間隔內。因此,使用統一的記憶體存取指令,取代針對每一個別記憶體間隔的載入與儲存指令。C/C++程式可使用一個統一指標以及一個統一存取指令,有效存取三個別位址間隙之任一者。範例載入指令格式為:LD.32 Rd,[Ra+offset];在P個並行執行緒的群組上執行,並且在每一執行緒暫存器Ra加上偏移的總和所指定之每一統一位元組位址上,從記憶體載入具有32位元資料的每一執行緒之暫存器Rd。範例儲存指令格式為:ST.32[Ra+offset],Rb;在P個並行執行緒的群組上執行,並且在每一執行緒暫存器Ra加上偏移的總和所指定之每一統一位元組位址上,將來自每一執行緒暫存器Rb的32位元資料儲存至記憶體。
執行單元302設置成處理32、64和128位元資料,如此該等載入與儲存指令分別讀取與寫入64和128位元資料。雖然共享記憶體306的某些具體實施例使用32位元寬記憶列建構,最近,共享記憶體306使用64或128位元寬記憶列建構。「舊式」應用程式撰寫成避免記憶列衝突,假 設在包含使用64或128位元寬記憶列建構的共享記憶體306之非舊式並行處理單元202上執行時,使用32位元寬記憶列建構的共享記憶體306可能導致記憶列衝突。不是要求舊式應用程式修改成避免記憶列衝突,而是一記憶列模式可指定成動態控制每一執行緒位址映射至共享記憶體306的記憶列。如此,該記憶列模式可用於讓舊式應用程式在較新硬體上執行,而不會招致該等舊式應用程式由舊式硬體執行時也不會發生的記憶列衝突,例如使用32位元寬記憶列的舊式並行處理單元202。
動態記憶列定址
共享記憶體306的每一記憶列都為可獨立定址的記憶體,由靜態隨機存取記憶體(SRAM,static random access memory)共同實施,不過其他實施也可能。在共享記憶體306的舊式具體實施例內,每一連續32位元文字都儲存在連續記憶列內,並且每一記憶列都具有獨立控制的位址。每一32位元文字都關聯於一執行緒群組的不同執行緒。共享記憶體306的非舊式具體實施例使用64位元寬記憶列建構,如此每一執行緒都可讀取或寫入64位元值。當執行舊式應用程式並且兩執行緒的兩相鄰32位元值都儲存在同一個64位元寬記憶列內時,則該等兩執行緒必須指定相同位址,在相同時脈循環上存取該等32位元值。當該等兩執行緒具有不同位址都映射至該相同記憶列時會發生記憶列衝突。相較之下,當該舊式應用程式在舊式硬體上執行並且32位元值都儲存在相鄰記憶列內時,與一執行緒相關連的每一位址都映射至不同記憶列並且不會發生記憶列衝突。總結來說,在舊式硬體上只需要單一時脈循環就能執行來存取共享記憶體306的一指令,可能需要兩個時脈循環才能在沒有記憶列模式功能的較新硬體上執行。雖然參考共享記憶體306來描述記憶體存取以及記憶列模式,該記憶列模式也可用於不同合作執行緒陣列之間未共享的多列記憶體之記憶體存取。
第一記憶列模式以保留假設每記憶列32位元的記憶列衝突特性,映射位址至記憶列。當已使用該第一記憶列模式時,共享記憶體306或另一多列記憶體以每邏輯記憶列有4位元組(4BB模式)的情況操作。第二記憶列模式以保留假設每記憶列64位元的記憶列衝突特性來映射位址。當 已使用該第二記憶列模式時,該多列記憶體以每邏輯記憶列有8位元組(8BB模式)的情況操作。其他模式也可用於支援每記憶列不同位元數。
如該等第一和第二記憶列模式所例示,請考慮只具有8邏輯記憶列而每一列64位元的多列記憶體具體實施例,表格1顯示連續32位元文字0至15如何儲存在該多列記憶體一列中的8個邏輯記憶列內。
利用以下一般等式描述從每一執行緒記憶體位址至儲存位置,例如每一執行緒映射記憶體位址,的映射。針對此範例,以下常數參數以及函數都適用於該第一和該第二記憶列模式:kBytesPerWord=4 kWordsPerLogicalBank=2 kNumLogicalBanks=8其中該/運算元表示整數除法功能、該%運算元表示整數模數功能並且位址以位元組指定。雖然支援4BB和8BB記憶列模式,不過以下等式並不受限於這兩記憶列模式。例如:使用kWordsPerLogicalBank=4以及kNumLogicalBanks=4導致有效並且自洽映射通過該等相同邏輯記憶列。請注意,實體記憶列寬度只必須小於或等於該邏輯記憶列寬度。
以下等式描述一邏輯記憶體列內一位元組位址(byteAddr)映射至儲存體以及4BB模式的記憶列內一文字。
記憶列=(byteAddr/kBytesPerWord)% kNumLogicalBanks;文字=(byteAddr/(kNumLogicalBanks * kBytesPerWord))% kWordsPerLogicalBank;表格2顯示與文字邊界對齊的位元組位址如何映射至4BB記憶列模式的每一列內之邏輯記憶列以及一半。
表格2 位元組位址映射至4BB記憶列模式內的記憶列
以下等式描述一邏輯記憶體列內一位元組位址(byteAddr)映射至儲存體以及8BB記憶列模式的記憶列內一文字。
記憶列=(byteAddr/(kBytesPerWord * kWordsPerLogicalBank)% kNumLogicalBanks;文字=(byteAddr/kBytesPerWord)% kWordsPerLogicalBank;表格3顯示與文字邊界對齊的位元組位址如何映射至8BB記憶列模式的每一列內邏輯記憶列以及一半。
如先前所解釋,串流多重處理器310支援同時執行多個經線,其中該等經線彼此相當接近(屬於合作執行緒陣列)、隸屬於不同合作執行緒陣列的彼此不太接近或屬於不同合作執行緒陣列方格的彼此無關聯。雖然由單一合作執行緒陣列方格針對相同串流多重處理器310上所產生的該等經線進行該記憶列模式靜態選擇相當合理,不過當所有經線都使用該 相同記憶列模式時,不同方格所產生的經線效能可能降低。例如:第一方格的該等經線可執行32位元存取,並且第二方格的經線可執行最多64位元或128位元存取。若兩方格的經線都在相同串流多重處理器310上執行,則該等經線之一者會遭受意外記憶列衝突。若該第二方格的執行延遲到該第一方格執行完成之後,則串流多重處理器310內佔用的經線會降低,在無指令處理時產生等待氣泡,即時脈循環。
該記憶列模式可指定用於每一存取要求,即用於每一經線,如此根據該4BB記憶列模式、該8BB記憶列模式或不同記憶列模式,映射該等每一執行緒位址。該記憶列模式儲存在每一方格的任務中繼資料322內,如此相同的記憶列模式用於執行任務中繼資料322的所有經線。在其他具體實施例內,該記憶列模式可指定為該載入或儲存程式指令的一部分,或該記憶列模式可指定為該多列記憶體的不同部分。
不管該記憶列模式如何提供用於一存取要求,使用一個記憶列模式寫入的該實際位置將不需要與使用不同記憶列模式讀取相同的實際位置。該動態記憶列模式的特色為允許舊式應用程式執行時不招致額外記憶列衝突,即由較新硬體執行時,維持或改善該舊式應用程式的效能。因此,若小心確認經線內的一致性,例如在應用程式內提供像是障礙指令這類邊界點,則可在特定應用程式執行期間變更該記憶列模式。當針對使用相同記憶列模式的一個方格啟用所有經線時,該等經線仍舊可與來自使用不同記憶列模式(由串流多重處理器310執行期間)的其他方格所啟動之經線自由交錯。
最後,強迫該記憶列模式成與指定用於該方格或應用程式的該記憶列模式不同之特定設定。強迫的設定可用於除錯、描述以及自動調整。
第四A圖為根據本發明的一個具體實施例,第三C圖中載入儲存單元375陣列的方塊圖。如所示,載入儲存單元陣列375包含不同的載入儲存單元303以及一位址產生單元405。在單一指令、多重執行緒架構內,類似於第三A圖至第三C圖中所述,單一指令,例如一載入或儲存存取要求,廣播至搭配該經線主動遮罩的P並行執行緒之一執行緒群組(經 線)。位址產生單元405接收每一存取要求的經線位址、該經線的一主動遮罩以及該記憶列模式。共享記憶體306透過記憶體與快取互連380連結至載入儲存單元陣列375,並且包含一讀取/寫入介面430和P記憶列440。
該主動遮罩指出已經啟用經線內哪些個別執行緒,來執行用於該經線的該指令。主動執行緒執行該指令,並且非主動執行緒不執行該指令。在程式執行期間由於分支等等發生離散時,執行緒可變成主動與非主動。最多P個主動執行緒同時執行該指令。P執行緒的一演算指令由P並行執行單元302執行。P執行緒的一記憶體載入/儲存指令由P並行載入儲存單元303執行。如此P執行緒的記憶體指令接收P位址,其可為P或更少不同的記憶體位址。
位址產生單元405根據該記憶列模式,執行用於該存取要求的位址計算任務,例如位址映射操作。在一個具體實施例內,位址產生單元405可設置成在多個循環上處理來自一經線的一存取要求,如此在該多循環的每一循環期間處理該等執行緒的子集。例如:當該經線包含32個執行緒時,可在4個循環上處理8個執行緒的子集。位址產生單元405也決定一經線的該等每一執行緒映射記憶體位址之間是否存在任何記憶列衝突。重點是,根據該主動遮罩未啟動的執行緒之記憶體位址不會導致一記憶列衝突。
位址產生單元405輸出不會招致記憶列衝突的該等主動執行緒之記憶體位址映射至載入儲存單元303。然後載入儲存單元303將包含一或更多該等已映射記憶體位址的一讀取或寫入要求傳輸至快取互連308,以完成該經線內該等主動並行執行緒的該存取要求。單一時脈循環內所傳輸的單一記憶體位址最大數量通常受限於該記憶體架構,以及載入儲存單元陣列375與記憶體與快取互動308之間的該介面。
在一個具體實施例內,位址產生單元405可設置成只輸出在單一存取要求時載入儲存單元303可傳輸的已映射記憶體位址數量至載入儲存單元303。當一經線的已映射記憶體位址數量大於該數量時,位址產生單元405輸出一重播要求至經線排程器與指令單元312。然後經線排程器與指令單元312將重新提交該存取要求在稍後執行,並保留額外時脈循環用 於執行該載入指令,以容納載入儲存單元303所需的多存取要求之傳輸。此時忽略針對同一經線的任何後續指令,或避免執行,直到該存取要求重播並且接著由載入儲存單元陣列375執行之後。
第四B圖為例示將32位元資料的8x8陣列映射至8個32位元記憶列之概念圖。已經映射至8個32位元記憶列的32位元資料460為每列內使用一個32位元文字之襯墊(顯示為「填入」)的第一映射範例,如此可存取該8x8陣列的整列或欄,而不招致任何記憶列衝突。該陣列內的每一元件都用列:欄來表示,該陣列的第一列包含元件0:0、0:1、0:2、0:3、0:4、0:5、0:6和0:7,該陣列的第一欄包含元件0:0、1:0、2:0、3:0、4:0、5:0、6:0和7:0。
第四C圖為根據本發明的一個具體實施例,例示將32位元資料的8x8陣列映射至8個64位元記憶列之概念圖。已經映射至8個64位元記憶列的32位元資料462為每列內也使用一個32位元文字的襯墊,並且將該32位元資料線性映射在每個寬度64位元的記憶列內之第二映射範例。此第二映射為將舊式硬體要執行的32位元資料之8x8陣列,儲存在包含使用8BB記憶列模式並且64位元寬取代32位元寬之記憶列的硬體內之結果。
這樣存取陣列中相同列內的元件就不會有衝突。特別針對任何已知列N,可同時存取所有N:[0...7]而不會招致記憶列衝突。相較之下,存取該陣列中相同欄內的元件會有衝突,即當存取已知欄M的[0...7]:M時。粗體字元顯示產生記憶列衝突的元件。尤其是,欄的記憶列0內之記憶列衝突=1、欄的記憶列1內=3、欄的記憶列2內=5並且欄的記憶列3內=7。
第四D圖為根據本發明的一個具體實施例,例示另一個將32位元資料的8x8陣列映射至8個64位元記憶列之概念圖。已經映射至8個64位元記憶列的32位元資料464為每列內也使用一個32位元文字的襯墊,並且將該32位元資料映射在每個寬度64位元的記憶列內之第三映射範例。此第三映射與該第二映射不同,該第三映射將該32位元資料中每一記憶列分成一半低和一半高。此第三映射為將舊式硬體要執行的32位元資 料之8x8陣列,儲存在包含使用4BB記憶列模式並且64位元寬取代32位元寬之記憶列的硬體內之結果。該陣列內資料的每一列都用不同圖案表示。如此可存取該8x8陣列的每一列與每一欄,而不會招致記憶列衝突。
而NxM陣列以外的其他資料排列都可使用8BB記憶列模式儲存在32、64或128位元記憶列內,避免當存取該資料時招致記憶列衝突。其他排列的範例包含印刷模板圖案。
第五圖揭示根據本發明的一個具體實施例,用於處理一載入指令的方法步驟流程圖。雖然已經結合第一圖、第二圖、第三A圖、第三B圖和第三C圖的系統來描述該等方法步驟,精通技術人士將了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
方法500從步驟505開始,在此位址產生單元405接收記憶體存取要求,該要求包含用於該經線內每一個別執行緒的單獨記憶體位址、一記憶列模式以及用於該經線的一主動遮罩。在步驟510上,位址產生單元405決定該記憶列模式是否是舊式記憶列模式,例如該4BB記憶列模式,並且若是,則在步驟520上,位址產生單元405根據該舊式記憶列模式動態映射該等單獨記憶體位址,以產生該第一執行緒群組內每一個別執行緒的一已映射單獨記憶體位址。
在其中強迫該記憶列模式成與指定用於該方格或應用程式的該記憶列模式不同之特定設定之具體實施例內,該特定設定控制位址產生單元405是前往步驟520或步驟515。
若在步驟510上,位址產生單元405決定該記憶列模式並非舊式記憶列模式,則位址產生單元405決定該記憶列模式為非舊式記憶列模式,例如該8BB記憶列模式,並且在步驟515上,位址產生單元405根據該非舊式記憶列模式動態映射該等單獨記憶體位址,以產生該第一執行緒群組內每一個別執行緒的一已映射單獨記憶體位址。
在步驟525上,位址產生單元405決定該第一執行緒群組的二或更多該等已映射單獨記憶體位址之間是否存在記憶列衝突。若位址產生單元405決定不存在記憶列衝突,則在步驟535上位址產生單元405傳輸一讀取或寫入要求至該多列記憶體,以在單一存取循環內處理該存取要 求。否則在步驟530上,位址產生單元405傳輸一讀取或寫入要求至該多列記憶體存取,以在多循環內處理該存取要求。在一個具體實施例內,記憶列衝突存在時,位址產生單元405不會傳輸任何讀取或寫入要求至該多列記憶體,而是發出一重播要求至經線排程器與指令單元312,如此可保留多循環用於處理該存取要求。
本發明方法的一項優點在於用於存取一多列記憶體之該位址至記憶列映射可隨每一時脈循環而變。指定用於一執行緒群組內並行執行緒的每一記憶體位址都根據一記憶列模式,動態映射至一記憶列位址。如此,撰寫在每一記憶列儲存32位元資料時避免記憶列衝突的第一應用程式與撰寫在每一記憶列儲存64位元資料時避免記憶列衝突的第二應用程式比較起來,可使用不同的記憶體位址至記憶列位址映射。總結來說,撰寫由具有第一記憶列大小的一處理器所執行之舊式應用程式,在可動態映射位址來支援該第一記憶列大小以及要由一現代處理器執行的較高位元寬度操作所需較大記憶列大小之該現代處理器上執行時,並不會導致效能降低。
本發明的一個具體實施例可實施當成搭配電腦系統使用的程式產品。該程式產品的程式定義該等具體實施例(包含本文所述的方法)的功能,並且可包含在電腦可讀取儲存媒體上。例示的電腦可讀取儲存媒體包含但不受限於:(i)其上資訊永久儲存的不可抹寫儲存媒體(例如電腦內的唯讀記憶體裝置,例如小型碟片唯讀記憶體(CD-ROM,compact disc read only memory)光碟機可讀取的CD-ROM光碟、快閃記憶體、唯讀記憶體(ROM,read only memory)晶片或任何一種固態非揮發性半導體記憶體);以及(ii)其上儲存可變資訊的可抹寫儲存媒體(例如磁碟機或硬碟內的磁碟或任何一種固態隨機存取半導體記憶體)。
在此已經參考特定具體實施例說明本發明。不過精通此技術的人士將會了解,在不背離後附申請專利範圍內公佈之本發明廣泛精神以及領域下,可進行許多修改與變更。因此前述說明與圖式僅供參考而不做限制。
303‧‧‧載入儲存單元
304‧‧‧本機暫存檔
306‧‧‧多列共享記憶體
312‧‧‧經線排程器與指令單元
375‧‧‧載入儲存單元陣列
380‧‧‧記憶體與快取互連
405‧‧‧位址產生單元
430‧‧‧讀/寫介面
440‧‧‧P記憶列

Claims (10)

  1. 一種處理子系統,包括:一位址產生單元,其設置成:接收包含在複數個記憶體存取指令內的一第一記憶體存取指令,其中一記憶列模式被同時指定用於該複數個記憶體存取指令內的每一個記憶體存取指令,及該第一記憶體存取指令指定一單獨記憶體位址;接收一記憶列模式,其定義該第一記憶體存取指令的每一記憶列位元寬度,其中當該記憶列模式為一第一數值時,該記憶列模式指定一第一記憶體位址至記憶列映射,及當該記憶列模式為一第二數值時,該記憶列模式指定一第二記憶體位址至記憶列映射;以及根據該記憶列模式動態映射該單獨記憶體位址,以產生一已映射的單獨記憶體位址;以及一載入/儲存單元,其連結與該位址產生單元與一多列記憶體之間,並且設置成將一讀取要求或一寫入要求傳送至該多列記憶體,以執行該第一記憶體存取指令。
  2. 如申請專利範圍第1項之處理子系統,其中:該第一記憶體存取指令由一第一執行緒與一第一執行緒群組內額外執行緒平行執行,指定該單獨記憶體位址用於該執行緒群組內的該第一執行緒,該第一記憶體存取指令指定額外單獨記憶體位址,包含用於該第一執行緒群組內之每一額外執行緒的一單獨記憶體位址,以及該每一記憶列位元寬度都關聯於該第一執行緒群組;以及該位址產生單元另設置成根據該記憶列模式動態映射該單獨記憶體位址與該額外單獨記憶體位置,以產生用於該第一執行緒以及該第一執行緒群組內之每一額外執行緒的一已映射單獨記憶體位址。
  3. 如申請專利範圍第2項之處理子系統,其中該第一執行緒群組內之該第一執行緒的一第一已映射單獨記憶體位址以及該第一執行緒群組內之一第二執行緒的一第二已映射單獨記憶體位址都映射至該多列記憶體的一第一記憶列。
  4. 如申請專利範圍第3項之處理子系統,其中該第一已映射單獨記憶體位址包含在一第一存取循環期間傳輸至該多列記憶體的該讀取要求或該寫入要求內,並且該第二已映射單獨記憶體位址包含在一第二存取循環期間傳輸至該多列記憶體的一第二讀取要求或一第二寫入要求內。
  5. 如申請專利範圍第1項之處理子系統,其中該位址產生單元另設置成:接收一第二記憶體存取指令,其指定一第二單獨記憶體位址;接收一第二記憶列模式,其定義該一第二每一記憶列位元寬度;以及根據該第二記憶列模式動態映射該第二單獨記憶體位址,以產生一第二已映射的單獨記憶體位址,以及該載入/儲存單元另設置成將一第二讀取要求或一第二寫入要求傳送至該多列記憶體,以針對該第二已映射的單獨記憶體位址執行該第二記憶體存取指令。
  6. 如申請專利範圍第2項之處理子系統,其中該位址產生單元另設置成:接收該第一執行緒群組的一主動遮罩,指出該第一執行緒群組內的執行緒應該執行該第一記憶體存取指令;以及決定當已啟動的該第一執行緒之一第一已映射單獨記憶體位址以及尚未啟動的一第二執行緒之一第二已映射單獨記憶體位址都映射至該多列記憶體的一第一記憶列時,該第一執行緒群組內部存在一記憶列衝突。
  7. 如申請專利範圍第1項之處理子系統,其中該每一記憶列位元寬為32並且一第二每一記憶列位元寬為64。
  8. 如申請專利範圍第1項之處理子系統,其中該每一記憶列位元寬為64並且一第二每一記憶列位元寬為128。
  9. 如申請專利範圍第1項之處理子系統,其中資料的一NxM陣列已儲存在該多列記憶體內,並且該第一記憶體存取指令讀取或寫入該NxM陣列的一欄或一列,而不會招致一記憶列衝突。
  10. 如申請專利範圍第1項之處理子系統,其中該記憶列模式指定成當該多列記憶體的每一記憶列為該每一記憶列位元寬的N倍時,存取該多列 記憶體的每一記憶列內儲存之資料,而不會招致一記憶列衝突。
TW102111426A 2012-04-05 2013-03-29 針對記憶體存取的動態記憶列模式定址 TWI588653B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US13/440,945 US9262174B2 (en) 2012-04-05 2012-04-05 Dynamic bank mode addressing for memory access

Publications (2)

Publication Number Publication Date
TW201403321A TW201403321A (zh) 2014-01-16
TWI588653B true TWI588653B (zh) 2017-06-21

Family

ID=49210115

Family Applications (1)

Application Number Title Priority Date Filing Date
TW102111426A TWI588653B (zh) 2012-04-05 2013-03-29 針對記憶體存取的動態記憶列模式定址

Country Status (4)

Country Link
US (1) US9262174B2 (zh)
CN (1) CN103365631B (zh)
DE (1) DE102013205886A1 (zh)
TW (1) TWI588653B (zh)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9626218B1 (en) * 2014-03-10 2017-04-18 Altera Corporation Repartitioning and reordering of multiple threads into subsets based on possible access conflict, for sequential access to groups of memory banks in a shared memory
US9720696B2 (en) 2014-09-30 2017-08-01 International Business Machines Corporation Independent mapping of threads
US9946588B2 (en) * 2014-12-17 2018-04-17 International Business Machines Corporation Structure for reducing power consumption for memory device
US9996354B2 (en) * 2015-01-09 2018-06-12 International Business Machines Corporation Instruction stream tracing of multi-threaded processors
US9977678B2 (en) 2015-01-12 2018-05-22 International Business Machines Corporation Reconfigurable parallel execution and load-store slice processor
US10133576B2 (en) 2015-01-13 2018-11-20 International Business Machines Corporation Parallel slice processor having a recirculating load-store queue for fast deallocation of issue queue entries
CN105262680A (zh) * 2015-10-21 2016-01-20 浪潮(北京)电子信息产业有限公司 一种应用于云存储系统的多线程nas网关
US20170301382A1 (en) * 2016-04-14 2017-10-19 Cavium, Inc. Method and apparatus for shared multi-port memory access
US10552211B2 (en) * 2016-09-02 2020-02-04 Intel Corporation Mechanism to increase thread parallelism in a graphics processor
CN114003547B (zh) 2017-03-14 2023-12-19 珠海市芯动力科技有限公司 可重构并行处理
US10877757B2 (en) * 2017-11-14 2020-12-29 Nvidia Corporation Binding constants at runtime for improved resource utilization
US11023241B2 (en) 2018-08-21 2021-06-01 Advanced Micro Devices, Inc. Systems and methods for selectively bypassing address-generation hardware in processor instruction pipelines
CN109547355B (zh) * 2018-10-17 2022-05-06 中国电子科技集团公司第四十一研究所 一种基于万兆以太网口接收机的存储解析装置及方法
US10996949B2 (en) * 2019-05-10 2021-05-04 International Business Machines Corporation Address generation for high-performance vector processing
US11397578B2 (en) * 2019-08-30 2022-07-26 Advanced Micro Devices, Inc. Selectively dispatching waves based on accumulators holding behavioral characteristics of waves currently executing
US11836527B2 (en) 2021-08-02 2023-12-05 Nvidia Corporation Accelerating table lookups using a decoupled lookup table accelerator in a system on a chip
US11704067B2 (en) * 2021-08-02 2023-07-18 Nvidia Corporation Performing multiple point table lookups in a single cycle in a system on chip
US20240330212A1 (en) * 2023-03-29 2024-10-03 Qualcomm Incorporated Memory organization and access for efficient matrix operations
CN116955044B (zh) * 2023-09-12 2023-12-22 北京开源芯片研究院 处理器的缓存工作机制的测试方法、装置、设备及介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100235590A1 (en) * 2009-03-16 2010-09-16 Mosys, Inc. Multi-bank Multi-port Architecture
US7805587B1 (en) * 2006-11-01 2010-09-28 Nvidia Corporation Memory addressing controlled by PTE fields
TW201116065A (en) * 2009-10-29 2011-05-01 Mediatek Inc Memory address mapping method and memory address mapping circuit
TW201214280A (en) * 2010-08-17 2012-04-01 Intel Corp Methods and apparatuses for re-ordering data

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7363422B2 (en) * 2000-01-05 2008-04-22 Rambus Inc. Configurable width buffered module
US7266634B2 (en) * 2000-01-05 2007-09-04 Rambus Inc. Configurable width buffered module having flyby elements
US6889304B2 (en) * 2001-02-28 2005-05-03 Rambus Inc. Memory device supporting a dynamically configurable core organization
KR100532471B1 (ko) * 2003-09-26 2005-12-01 삼성전자주식회사 입출력 데이터 위스 조절이 가능한 메모리 장치 및 그위스 조절 방법
KR100790446B1 (ko) * 2006-06-30 2008-01-02 주식회사 하이닉스반도체 스택뱅크 구조를 갖는 반도체 메모리 장치
US8392669B1 (en) 2008-03-24 2013-03-05 Nvidia Corporation Systems and methods for coalescing memory accesses of parallel threads
US20100076941A1 (en) * 2008-09-09 2010-03-25 Microsoft Corporation Matrix-based scans on parallel processors

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7805587B1 (en) * 2006-11-01 2010-09-28 Nvidia Corporation Memory addressing controlled by PTE fields
US20100235590A1 (en) * 2009-03-16 2010-09-16 Mosys, Inc. Multi-bank Multi-port Architecture
TW201116065A (en) * 2009-10-29 2011-05-01 Mediatek Inc Memory address mapping method and memory address mapping circuit
TW201214280A (en) * 2010-08-17 2012-04-01 Intel Corp Methods and apparatuses for re-ordering data

Also Published As

Publication number Publication date
CN103365631A (zh) 2013-10-23
DE102013205886A1 (de) 2013-10-10
US20130268715A1 (en) 2013-10-10
US9262174B2 (en) 2016-02-16
TW201403321A (zh) 2014-01-16
CN103365631B (zh) 2016-03-16

Similar Documents

Publication Publication Date Title
TWI588653B (zh) 針對記憶體存取的動態記憶列模式定址
TWI529626B (zh) 在複數執行緒處理單元中的效率式記憶體虛擬化
TWI512466B (zh) 在複數執行緒處理單元中的效率式記憶體虛擬化
TWI525437B (zh) 在複數執行緒處理單元中的效率式記憶體虛擬化
TWI624791B (zh) 用於在多緒處理單元中改善性能之技術
US8938598B2 (en) Facilitating simultaneous submission to a multi-producer queue by multiple threads with inner and outer pointers
US8982140B2 (en) Hierarchical memory addressing
TWI531974B (zh) 管理巢狀執行串流的方法和系統
US8751771B2 (en) Efficient implementation of arrays of structures on SIMT and SIMD architectures
TWI466027B (zh) 解決執行緒發散的方法及系統
US10007527B2 (en) Uniform load processing for parallel thread sub-sets
US8595425B2 (en) Configurable cache for multiple clients
US9710306B2 (en) Methods and apparatus for auto-throttling encapsulated compute tasks
TWI489392B (zh) 多個應用程式分享的圖形處理單元
US20130198419A1 (en) Lock-free fifo
US9798543B2 (en) Fast mapping table register file allocation algorithm for SIMT processors
TWI525438B (zh) 透過貼圖硬體執行記憶體存取操作之技術
TW201439770A (zh) 透過貼圖硬體執行記憶體存取操作之技術
US9626191B2 (en) Shaped register file reads
US9348751B2 (en) System and methods for distributing a power-of-two virtual memory page across a non-power-of two number of DRAM partitions
TW201432573A (zh) 工作佇列型圖形處理單元工作創建
TW201351276A (zh) 計算工作的排程和執行
US10235208B2 (en) Technique for saving and restoring thread group operating state
US8698814B1 (en) Programmable compute engine screen mapping
US9665920B1 (en) Simultaneous execution of compute and graphics applications