TWI489392B - 多個應用程式分享的圖形處理單元 - Google Patents

多個應用程式分享的圖形處理單元 Download PDF

Info

Publication number
TWI489392B
TWI489392B TW102116389A TW102116389A TWI489392B TW I489392 B TWI489392 B TW I489392B TW 102116389 A TW102116389 A TW 102116389A TW 102116389 A TW102116389 A TW 102116389A TW I489392 B TWI489392 B TW I489392B
Authority
TW
Taiwan
Prior art keywords
application
workload
gpu
memory
indicator
Prior art date
Application number
TW102116389A
Other languages
English (en)
Other versions
TW201407482A (zh
Inventor
Christopher Michael Cameron
Timothy James Murray
Joel Adam Scherpelz
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 TW201407482A publication Critical patent/TW201407482A/zh
Application granted granted Critical
Publication of TWI489392B publication Critical patent/TWI489392B/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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)

Description

多個應用程式分享的圖形處理單元
本發明一般係關於計算應用程式,尤其係關於在具有多核心的圖形處理單元(GPU,graphics processing unit)上同時執行許多計算應用程式。
當前共享許多計算應用程式之間一GPU上可用硬體資源的方法需要該計算應用程式與一中央資源管理器通訊,尤其是該中央資源管理器接收來自該計算應用程式的工作負載,並且將該等工作負載傳輸至該GPU來執行。接著,該GPU控制該等計算應用程式之間的同步,並且允許該GPU一次只執行單一計算應用程式的執行緒。這些執行緒會在同步操作期間變成無回應,這樣讓軟體程式設計師難以維持整體系統回應性以及正確負載平衡。再者,需要該GPU針對每一交易執行一範圍切換,成為執行不同計算應用程式的執行緒,這造成GPU閒置。一般伴隨於計算應用程式並且在一範圍切換發生時必須儲存(接著重新載入)的大量狀態集合會加劇此問題。
因此,業界需要一種更有效在一GPU上執行許多計算應用程式之技術。
本發明的一個具體實施例揭示一種在一圖形處理單元(GPU,graphics processing unit)上執行許多應用程式之電腦實施方法。該方法包括以下步驟:建立一第一連線至一第一應用程式以及一第二連線至一第二應用程式;建立該第一應用程式與該第二應用程式共享的一萬用處理範圍;將一第一工作負載指標器傳輸至已分配給該第一應用程式的一第一佇列,其中該第一工作負載指標器指向該第一應用程式產生的一第一工作負載;將一第二工作負載指標器傳輸至已分配給該第二應用程式的一第二佇列,其中該第二工作負載指標器指向該第二應用程式產生的一第二工作負載;將該第一工作負載指標器傳輸至該GPU內的一第一GPU佇列;以及將該第二工作負載指標器傳輸至該GPU內的一第二GPU佇列,其中該GPU設置成根據該萬用處理範圍執行該第一工作負載與該第二工作負載。
本發明揭示具體實施例的一項優點為可讓軟體開發工程師選擇有多少計算應用程式同時共享一GPU。尤其是,本發明的具體實施例可讓該GPU真正同時執行複數個計算應用程式及其相關聯的該等執行緒。每一該等計算應用程式都必須存取一GPU驅動程式內一伺服器管理的一萬用處理範圍,其中該等計算應用程式設置成與上述之GPU驅動程式通訊。結果,由傳統GPU實施來建立「同時」執行多個應用程式的假象造成之範圍切換次數可減少,這樣降低該GPU的負擔並且增加整體效能。
100‧‧‧電腦系統
101‧‧‧程式碼
102‧‧‧中央處理單元
103‧‧‧裝置驅動程式
104‧‧‧系統記憶體
105‧‧‧記憶體橋接器
106‧‧‧通訊路徑
107‧‧‧輸入/輸出橋接器
108‧‧‧使用者輸入裝置
110‧‧‧顯示裝置
112‧‧‧並行處理子系統
113‧‧‧第二通訊路徑
114‧‧‧系統磁碟
116‧‧‧開關
118‧‧‧網路配接器
120-121‧‧‧外接卡
202‧‧‧並行處理單元
204‧‧‧本機並行處理記憶體
205‧‧‧輸入/輸出單元
206‧‧‧主介面
207‧‧‧任務/工作單元
208‧‧‧一般處理叢集
210‧‧‧記憶體橫桿單元
212‧‧‧前端
214‧‧‧記憶體介面
215‧‧‧分割單元
230‧‧‧處理叢集陣列
220‧‧‧動態隨機存取記憶體
300‧‧‧任務管理單元
302‧‧‧執行單元
303‧‧‧載入儲存單元
304‧‧‧本機暫存檔
305‧‧‧管線管理員
306‧‧‧共享記憶體
310‧‧‧串流多重處理器
312‧‧‧經線排程器與指令單元
315‧‧‧紋理單元
320‧‧‧第一層快取
321‧‧‧排程器表
322‧‧‧任務中繼資料
325‧‧‧預先光柵運算
328‧‧‧記憶體管理單元
330‧‧‧工作分配橫桿
335‧‧‧第一點五層快取
340‧‧‧工作分配單元
345‧‧‧任務表
352‧‧‧統一位址映射單元
370‧‧‧指令第一層快取
380‧‧‧記憶體與快取互連
401‧‧‧計算應用程式
402‧‧‧使用者模式驅動程式
404‧‧‧伺服器
406‧‧‧佇列
407‧‧‧萬用處理範圍
所以,可以詳細瞭解本發明上述特徵之方式中,本發明的一更為特定的說明簡述如上,其可藉由參照到具體實施例來進行,其中一些例示於所附圖式中。但應注意所附圖式僅例示本發明的典型具體實施例, 因此其並非要做為本發明之範圍的限制,本發明自可包含其它同等有效的具體實施例。
第一圖為例示設置來實施本發明一或多個態樣的電腦系統方塊圖;第二圖為根據本發明的一個具體實施例,用於第一圖中該電腦系統的一並行處理子系統之方塊圖;第三A圖為根據本發明的一個具體實施例,第二圖中前端的方塊圖;第三B圖為根據本發明的一個具體實施例,第二圖中並行處理單元之一者內一般處理叢集的方塊圖;第三C圖為根據本發明的一個具體實施例,第三B圖中該串流多重處理器一部分的方塊圖;第四圖根據本發明的一個具體實施例,例示詳述該通訊路徑以及複數個計算應用程式、一裝置驅動程式以及一並行處理子系統之間互動之方塊圖。
第五A圖至第五B圖例示一傳統裝置驅動程式與根據本發明具體實施例設置的一裝置驅動程式間之效能比較。
第六圖根據本發明的一個具體實施例,例示在一使用者模式驅動程式與一裝置驅動程式之間建立通訊之方法。
第七圖根據本發明的一個具體實施例,例示在設置成從許多使用者模式驅動程式接收工作要求的一裝置驅動程式內建立一伺服器之方法。
第八圖根據本發明的一個具體實施例,例示將由許多使用者模式驅動程式所產生的工作要求發出給一並行處理子系統之方法。
在以下描述中,揭示許多特定細節以對本發明有更徹底之理解。但是,精通技術人士應該了解,在無一或多個該等特定細節之下還是可實施本發明。
系統概觀
第一圖為例示設置來實施本發明一或多個態樣的電腦系統100之方塊圖。電腦系統100包含一中央處理單元(CPU,central processing unit)102,以及通過一互連路徑通訊的一系統記憶體104,其中該路徑可包含一記憶體橋接器105。系統記憶體104包含一作業系統(未例示)的執行影像、一裝置驅動程式103和設置成由並行處理子系統112執行的程式碼101。在一個具體實施例內,程式碼101代表其中併入要在並行處理子系統112上執行的程式編輯指令之CUDATM 程式碼。在本發明的範圍內,「程式碼」一詞表示可使用一處理器執行的任何電腦程式碼、指令及/或函數。例如在許多具體實施例內,該程式碼可包含C程式碼、C++程式碼等等。在一個具體實施例內,該程式碼可包含計算機語言的語言擴展(例如C、C++等等的擴展)。
該作業系統提供管理與協調電腦系統100操作的詳細指令。裝置驅動程式103提供詳細指令來管理與協調並行處理子系統112,尤其是本說明書內的並行處理單元之操作。更進一步,裝置驅動程式103可提供編譯工具,產生專門針對並行處理子系統112內含的該等並行處理單 元優化之機器程式碼。裝置驅動程式103可與NVIDIA Corporation所提供的CUDATM 框架結合提供。
例如可為北橋晶片的記憶體橋接器105透過匯流排或其他通訊路徑106(例如超傳輸(HyperTransport)連結),連接至一I/O(輸入/輸出)橋接器107。例如可為南橋晶片的I/O橋接器107接收來自一或多個使用者輸入裝置108(例如鍵盤、滑鼠)的使用者輸入,並透過通訊路徑106和記憶體橋接器105將該輸入轉送至CPU 102。並行處理子系統112透過匯流排或第二通訊路徑113(例如周邊組件互連(PCI,Peripheral Component Interconnect)Express、加速圖形連接埠(Accelerated Graphics Port)或超傳輸連結)耦合至記憶體橋接器105;在一個具體實施例內,並行處理子系統112為傳遞畫素給顯示裝置110(任何傳統陰極射線管、液晶顯示器、發光二極體顯示器等等)的圖形子系統。系統磁碟114也連接至I/O橋接器107,並且可設置成儲存內容與應用程式以及資料,供CPU 102以及並行處理子系統112使用。系統磁碟114提供非揮發性儲存裝置給應用程式與資料,並且可包含固定式或可移除式硬碟機、快閃記憶體裝置以及CD-ROM(小型光碟唯讀記憶體,compact disc read-only-memory)、DVD-ROM(數位多用途光碟-ROM,digital versatile disc-ROM)、藍光、HD-DVD(高傳真DVD,high definition DVD)或其他磁性、光學或固態儲存裝置。
一開關116提供I/O橋接器107與其他組件,像是網路配接器118以及許多外接卡120和121之間的連接。其他組件(未明確顯示),包含萬用序列匯流排(USB,universal serial bus)或其他連接埠連接、小型光碟(CD,compact disc)光碟機、數位多用途光碟(DVD,digital versatile disc)機、 影片記錄裝置等等,也可連接至I/O橋接器107。第一圖內顯示的許多通訊路徑,包含特地指名的通訊路徑106和113,都可使用任何合適的協定來實施,例如PCI Express、AGP(加速圖形連接埠)、超傳輸或任何其他匯流排或點對點通訊協定,以及不同裝置之間的連接都可使用業界內已知的不同協定。
在一個具體實施例內,並行處理子系統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,其中D 1。如所示,分割單元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,任務表345具有插槽(slot)讓TMD 322針對執行的任務所佔用。任務管理單元300可排定任務在任務表345內有空插槽時執行。當無空插槽時,未佔用插槽的較高優先順序任務會驅逐佔用插槽的較低優先順序任務。當一任務遭到驅逐時,該任務會停止,並且若該任務尚未執行完畢,則該任務的指標會加入要排定的任務指標清單中,如此該任務可在稍後被恢復執行。當在一任務執行期間產生子代處理任務時,將該子代任務的指標加入要排定的任務指標清單內。由在處理叢集陣列230內執行的TMD 322可產生一子代任務。
與從前端212的任務/工作單元207所接收的任務不同,子代任務從處理叢集陣列230接收。子代任務並未插入推送緩衝區或傳輸至該前端。當子代任務已經產生或該子代任務的資料已經儲存在記憶體內時,並不會通知CPU 102。透過推送緩衝區提供的該等任務與子代任務間之另一差異在於,透過推送緩衝區提供的該等任務由該應用程式定義,而該等子代任務則在該等任務執行期間動態產生。
任務處理概觀
第三B圖為根據本發明的一個具體實施例,第二圖中PPU 202之一者內GPC 208的方塊圖。每一GPC 208都可設置成同時執行大量執行緒,其中「執行緒」一詞代表在特定輸入資料集上執行的特定程式之實例(instance)。在某些具體實施例內,單一指令、多重資料(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),允許在完成先前指令之前發出新指令。任何組合之功能執行單元可被包含在SM 310內。在一個具體實施例內,該等功能執行單元可支援許多種運算,包含整數與浮點演算(例如加法與乘法)、比較運算、布林運算(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可包含能夠位於多重處理器SM 310或L1快取或GPC 208內的位址轉譯後備緩衝區(TLB,translation lookaside buffer)或快取。該實體位址被處理來分配本機存取的表面資料,以便讓有效要求交錯 於分割單元215之間。該快取線索引可用於決定一快取線的要求是否命中或未命中。
在圖形與計算應用當中,GPC 208可經過設置,如此每一SM 310都耦合至一紋理單元315,用於執行紋理映射操作,例如決定紋理樣本位置、讀取紋理資料以及篩選該紋理資料。紋理資料從內部紋理L1快取(未顯示)讀取,或在某些具體實施例內從SM 310內的L1快取讀取,並且依照需求從所有GPC 208共享的L2快取、並行處理記憶體204或系統記憶體104擷取。每一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,如此執行行為並不取決於究竟是哪一個GPC208接收到特定之處理任務。進一步,每一GPC 208都得利於與其他GPC 208無關的操作,其運用分離並分散的處理單元、L1快取,來執行一或多個應用程式的任務。
精通此技術人士將了解,第一圖、第二圖、第三A圖和第三B圖內描述的架構並非用於限制本發明範疇,本說明書內的技術可在任 何正確設置的處理單元上實施,在不悖離本發明範疇之下包含但不受限於一或多個CPU、一或多個多核心CPU、一或多個PPU 202、一或多個GPC 208、一或多個圖形或特殊用途處理單元等等。
在本發明的具體實施例內,吾人想要使用一計算系統的PPU 202或其他處理器,運用執行緒陣列來執行一般用途計算。該執行緒陣列內的每一執行緒都可指派一個獨一的執行緒識別碼(「執行緒ID」),其可在該執行緒執行期間存取該執行緒。該執行緒ID可定義為一維度或多維度數值,控制該執行緒處理行為的許多態樣。例如:一執行緒ID可用於決定設定一執行緒的哪個輸入資料部分要處理及/或決定設定一執行緒的哪個輸出資料部分要產生或寫入。
每個執行緒指令的序列可包含至少一個指令,其定義該代表性執行緒與該執行緒陣列的一或多個其他執行緒之間的合作行為。例如:每一執行緒指令的順序可包含將在該順序內特定點上的讓該代表執行緒之運算執行中斷,直到一或多個其他執行緒到達該特定點上為止之指令、讓該代表執行緒將一或多個其他執行緒可存取的資料儲存至一共享記憶體內之指令、讓該代表執行緒根據其執行緒ID基本上讀取與更新儲存在一共享記憶體內的一或多個該等其他執行緒已經存取過的資料之指令等等。該CTA程式也可包含一指令,計算該共享記憶體內所要讀取資料的位址,其中該位址為執行緒ID的函數。利用定義合適的功能並且提供同步技術,資料可利用CAT的一個執行緒寫入共享記憶體內的一已知位置,並且以可預測方式用相同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由CAT處理的資料。該等佇列記錄也呈現執行緒執行期間由另一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當成伸展空間(scratch space);每一暫存器都分配給一個執行緒專用,並且任何本機暫存檔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區域,並且快取(cached)在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。
多個應用程式分享的GPGPU
第四圖根據本發明的一個具體實施例,例示詳述該通訊路徑以及複數個計算應用程式401、裝置驅動程式103以及一PPU 202之間互動之方塊圖。在第四圖內,每一計算應用程式401都代表不同編譯的使用者程式碼101,其在CPU 102的控制之下並且與裝置驅動程式103互動,這將計算應用程式401產生的工作引導至PPU 202內的GPC 208來進行處理。如本說明書內所述,GPC 208內的SM 310執行透過TMD 322遞送的已產生工作負載。如所示,每一計算應用程式401都關聯於一使用者模式驅動程式(UMD,user mode driver)402,在某些情況下,其包含由裝置驅動程式103提供的功能子集,並且可讓UMD 402與裝置驅動程式103通訊。如底下結合第六圖進一步詳細說明,每一計算應用程式401由CPU 102初始化時,透過應用程式編輯介面(API,application programming interface)呼叫與該相關聯的UMD 402通訊,其包含在計算應用程式401取得的程式碼101內。
另如第四圖內所示為一伺服器404,其在裝置驅動程式103的控制之下執行,並且與複數個UMD 402互動。尤其是,伺服器404在接收來自一UMD 402的初始要求後執行PPU 202內的工作,建立一特定佇列406,其上UMD 402可推送要執行的該工作,這些的細節都結合以下的第七圖來說明。伺服器404也管理在該等計算應用程式401之間共享的一萬用處理範圍407,這提供一記憶體佇池給計算應用程式401。計算應用程式401可根據針對處理所生產工作的要求,分配不同的記憶體佇池部分。裝置驅動程式103設置成例如使用一循環技術傳播來自每一佇列406的工作,並且將該工作推送至具有容量接收新工作的TMD 322,這些的細節都結合以下的第八圖來說明。本說明書內描述的該等技術提供超過傳統方式的許多效能增益,底下結合第五A圖至第五B圖描述這些範例。
第五A圖例示一種PPU 202。在裝置驅動程式的控制之下,運用傳統方式將來自許多計算應用程式401的工作分配給一PPU 202。如先前所述,傳統裝置驅動程式讓只有單一計算應用程式的執行緒可由PPU 202內含GPC 208的SM 310執行。結果,計算應用程式401「同時」執行需要PPU 202經常執行之範圍切換,這是會導致延遲的高負擔操作,例如時間T2、T4和T6。再者,當一計算應用程式未產生足夠的工作來利用GPC 208內含的每一SM 310,這些未運用的SM 310會閒置,即使其他計算應用程式已經發出要執行的工作。
如第五A圖內所示,多個計算應用程式在傳統裝置驅動程式的控制之下,發出工作給PPU 202。在時間T1上,由計算應用程式CA_1產生的工作運用GPC 208(1-3)的SM 310(1-6),但是因為並無工作讓GPC 208(4)的SM 310(7-8)執行,所以GPC 208(4)的SM 310(7-8)將會閒置。這適用於即使已經由計算應用程式CA_2產生工作時,在第五A圖內例示的範例中,需要兩個SM 310來執行(例如GPC 208(4)的閒置SM 310(7-8))。取而代之,要處理計算應用程式CA_2產生的該工作,PPU 202必須在時間T2上發出範圍切換,如上述,這是一種高負載操作,需要計算應用程式CA_1的處理範圍被洗出(flushed out)並儲存到記憶體內,接著將計算應用程式CA_2的該處理範圍載入記憶體內。
在時間T3上,SM 310(1-2)處理計算應用程式CA_2產生的該工作,並且SM 310(3-8)閒置,即使計算應用程式CA_3和CA_4已經發出工作並且等待執行。時間T4-T7例示由並行處理子系統112執行的示範操作,以便在CA_2產生的工作執行之後,執行計算應用程式CA_3和CA_4產生的剩餘工作。如所示,這些操作包含額外範圍切換以及閒置GPC 208內的SM 310,將造成沒有效率的結果。
第五B圖例示一比較範例案例,其中多個計算應用程式在裝置驅動程式103的控制之下發出工作給一PPU 202,該驅動程式設置成實施本發明的具體實施例。尤其是,本發明的具體實施例可讓多個計算應用程式的執行緒真正由PPU 202內含的GPC 208的SM 310同時執行。例如:在第五B圖內的時間T1上,與計算應用程式CA_1相關聯的執行緒由SM 310(1-7)執行,而與計算應用程式CA_2相關聯的執行緒由SM 310(7-8)執行。計算應用程式CA_1與CA_2之間在SM 310(7)上的重疊例示本發明具體實施例提供的功能性,這牽涉到由單一SM 310內兩個不同計算應用程式所產生執行的工作,因為每一SM 310都可包含複數個執行單元302,如上 面結合第三B圖所述。因為在本發明的具體實施例設置之下,每一計算應用程式都共享相同的萬用處理範圍407,PPU 202可轉換成處理計算應用程式CA_3和CA_4(時間T2),其中與計算應用程式CA_3相關聯的執行緒由SM 310(1-4)執行,並且與計算應用程式CA_4相關聯的執行緒由SM 310(5-8)執行。如此,減少傳統技術所需的範圍切換負擔,並且進一步,在某些情況下,當計算應用程式401產生的工作總量符合或超出PPU 202的容量時,則可完整運用PPU 202內含的每一GPC 208。
第六圖根據本發明的一個具體實施例,例示在一UMD 402與一裝置驅動程式103之間建立通訊之方法。雖然已經結合第一圖、第二圖、第三A圖、第三B圖、第三C圖和第四圖的系統來描述該等方法步驟,精通技術人士將了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
如所示,方法600從步驟602開始,在此UMD 402接收來自一計算應用程式401的一初始要求,其在CPU 102的控制之下執行。在一個範例中,計算應用程式401為一CUDA應用程式,其參考與UMD 402相關聯以及裝置驅動程式103內含之功能性,其中UMD 402的功能性由CPU 102執行,並且裝置驅動程式103的功能性由並行處理子系統112執行。
在步驟604上,UMD 402要求例如透過靜態參數,建立至裝置驅動程式103,就是至UMD 402的連線。在步驟606上,UMD 402向裝置驅動程式103要求一伺服器位址,例如由裝置驅動程式103執行的伺服器404之位址,如此可佇存由計算應用程式401產生的工作要求,供一 PPU 202處理。在步驟608上,UMD 402識別由計算應用程式401建立的一工作負載。在步驟610上,UMD 402將對該工作負載的指標器通訊至伺服器404,這在底下結合第七圖有詳細說明,接著推送至伺服器404中對應至UMD 402的佇列406內。在步驟612上,UMD 402針對由計算應用程式401產生的額外工作負載,進入一聆聽模式。然後根據步驟610,將對於已經產生的每一額外工作負載之指標器通訊至佇列406。當計算應用程式401終止時,相關聯的UMD 402也終止,並且方法600結束。
第七圖根據本發明的一個具體實施例,例示在設置成從許多UMD 402接收工作要求的一裝置驅動程式103內建立一伺服器404之方法。雖然已經結合第一圖、第二圖、第三A圖、第三B圖、第三C圖、第四圖和第六圖的系統來描述該等方法步驟,精通技術人士將了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
如所示,方法700從步驟702開始,在此裝置驅動程式103接收來自UMD 402的一要求來建立一連線。此要求對應至上面結合第六圖所述的步驟604,其中UMD 402要求建立至裝置驅動程式103的連線。在步驟704上,裝置驅動程式103建立至UMD 402的連線。
在步驟706上,裝置驅動程式103從UMD 402接收對於當前伺服器,即是伺服器404的位址之要求。在步驟708上,裝置驅動程式103決定是否已經執行伺服器404,即是否已經初始化伺服器404。在步驟708上,若裝置驅動程式103決定並未執行伺服器404,則裝置驅動程式103前往步驟710,在此裝置驅動程式103啟動伺服器404並產生一位址給伺服器404,如此UMD 402(以及後續要求連線至伺服器404的任何額外UMD 402)可存取伺服器404。
在步驟712上,裝置驅動程式103建立一萬用處理範圍407,這由UMD 402以及發出要求由並行處理子系統112處理工作的任何後續UMD 402共享。如先前所描述,萬用處理範圍407可讓計算應用程式401真正由一PPU 202同時執行。在步驟714上,裝置驅動程式103產生一佇列406,其對應至在步驟702上要求建立連線的UMD 402。在步驟716上,裝置驅動程式103將伺服器404的該伺服器位址回傳至UMD 402。
在步驟718上,裝置驅動程式103從UMD 402接收一工作負載的指標器,例如在第六圖內方法600的步驟610上由UMD 402發出之指標器。在步驟720上,裝置驅動程式103將該指標器推送至佇列406上。然後已經推送至個別佇列406上的工作要求之該等指標器,搭配由其他UMD 402代表的裝置驅動程式103所推送至其他佇列406上的其他工作要求之指標器,將被發送至PPU 202進行處理,底下結合第八圖詳細說明。
第八圖根據本發明的一個具體實施例,例示將由許多UMD 402產生的工作要求發出給一PPU 202之方法。雖然已經結合第一圖、第二圖、第三A圖、第三B圖、第三C圖、第四圖、第六圖和第七圖的系統來描述該等方法步驟,精通技術人士將了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
如所示,方法800從步驟802開始,在此裝置驅動程式103決定在伺服器404是否已經建立一或更多佇列406。
在步驟804上,裝置驅動程式103將一第一佇列406設定為一當前佇列406。在步驟805上,裝置驅動程式103決定當前佇列406是否 空白。在步驟805上,若裝置驅動程式103決定當前佇列406並未空白,則方法前往步驟806。在步驟806上,裝置驅動程式103傳播來自當前佇列406的一工作負載指標器。在步驟808上,裝置驅動程式103將該傳播的工作負載指標器通訊至一TMD 322。然後根據上面結合第一圖、第二圖、第三A圖、第三B圖、第三C圖和第四圖描述的技術,至該傳播指標器所指引的工作負載由PPU 202處理。
在步驟810上,裝置驅動程式103決定伺服器404內是否有額外佇列406。在步驟810上,若裝置驅動程式103決定伺服器404內存在下一個佇列406,則方法800前往步驟812,在此裝置驅動程式103將下一個佇列406設定為當前佇列406。然後針對當前佇列406重複方法步驟805-810,如此儲存在不同佇列406內的指標器以組織化的方式傳送至TMD 322。
不過,若裝置驅動程式103決定並無下一個佇列406,即不執行計算應用程式401,則方法800結束。
雖然在方法800內,裝置驅動程式103實施一循環方式發出許多UMD 402產生的工作要求,本發明的具體實施例並不受限,並且可實施其他種方式,例如裝置驅動程式103為多執行緒並且可與許多UMD 402產生的工作要求並行發出。
總結來說,本發明揭示的具體實施例可讓軟體開發工程師選擇有多少計算應用程式401同時共享並行處理子系統112內的一PPU 202,並且進一步讓複數個計算應用程式401及其隨附的該等執行緒真正由PPU 202同時執行。每一計算應用程式401都必須存取裝置驅動程式103內伺服 器404管理的一萬用處理範圍407,其中計算應用程式401設置成以此通訊。
所揭示具體實施例的一項優點為由傳統裝置驅動程式實施來建立「同時」執行多個應用程式的假象造成之範圍切換次數可減少,這樣降低該PPU 202的負擔並且增加整體效能。再者,本發明的具體實施例可在處理由許多計算應用程式401產生的工作時,增加PPU 202內含之GPC 208內當前運用的SM 310之平均數量。尤其是,目前允許GPC 208內在傳統方式中於單一計算應用程式401無法完全運用所有SM 310時會閒置之SM 310執行與不同計算應用程式401相關聯的執行緒。如此相較於先前技術,本發明的具體實施例可顯著提高PPU 202的整體效能。
本發明的一個具體實施例可實施當成搭配電腦系統使用的程式產品。該程式產品的程式定義該等具體實施例(包含本文所述的方法)的功能,並且可包含在各種電腦可讀取儲存媒體上。例示的電腦可讀取儲存媒體包含但不受限於:(i)其上資訊永久儲存的不可抹寫儲存媒體(例如電腦內的唯讀記憶體裝置,例如小型碟片唯讀記憶體(CD-ROM,compact disc read only memory)光碟機可讀取的CD-ROM光碟、快閃記憶體、唯讀記憶體(ROM,read only memory)晶片或任何一種固態非揮發性半導體記憶體);以及(ii)其上儲存可變資訊的可抹寫儲存媒體(例如磁碟機或硬碟內的磁碟或任何一種固態隨機存取半導體記憶體)。
在此已經參考特定具體實施例說明本發明。不過精通此技術的人士將會了解,在不背離後附申請專利範圍內公佈之本發明廣泛精神以及領域下,可進行許多修改與變更。因此前述說明與圖式僅供參考而不做限制。
因此,本發明具體實施例的範疇公佈於以下的申請專利範圍之內。

Claims (10)

  1. 一種用於在一圖形處理單元(GPU)上執行複數個應用程式之電腦實施方法,該方法包括:建立一第一連線至一第一應用程式以及一第二連線至一第二應用程式;建立該第一應用程式與該第二應用程式共享的一萬用處理範圍;將一第一工作負載指標器傳輸至已分配給該第一應用程式的一第一佇列,其中該第一工作負載指標器指向該第一應用程式產生的一第一工作負載;將一第二工作負載指標器傳輸至已分配給該第二應用程式的一第二佇列,其中該第二工作負載指標器指向該第二應用程式產生的一第二工作負載;將該第一工作負載指標器傳輸至該GPU內的一第一GPU佇列;以及將該第二工作負載指標器傳輸至該GPU內的一第二GPU佇列,其中該GPU設置成根據該萬用處理範圍執行該第一工作負載與該第二工作負載。
  2. 如申請專利範圍第1項之方法,其中該萬用處理範圍包含一記憶體佇池為該第一應用程式與該第二應用程式所共享。
  3. 如申請專利範圍第2項之方法,其中從該記憶體佇池分配給該第一應用程式的記憶體總量不等於從該記憶體佇池分配給該第二應用程式的記憶體總量。
  4. 如申請專利範圍第1項之方法,其中該第一工作負載包括由該GPU的第一組一或更多處理核心執行的一或更多合作執行緒陣列,並且該第二工作負載包括由該GPU的第二組一或更多處理核心執行的一或更多合作執行緒陣列。
  5. 如申請專利範圍第1項之方法,其中透過個別使用者模式驅動程式建立該第一連線與該第二連線,分別由該第一應用程式與該第二應用程式存取。
  6. 如申請專利範圍第1項之方法,其中從該第一應用程式接收該第一指標器,並且從該第二應用程式接收該第二指標器。
  7. 如申請專利範圍第1項之方法,另包括:建立至一第三應用程式的一第三連線;將一第三工作負載指標器傳輸至已分配給該第三應用程式的一第三佇列,其中該第三工作負載指標器指向該第三應用程式產生的一第三工作負載;以及將該第三工作負載指標器傳輸給該GPU內的一第三GPU佇列,其中該GPU設置成中止執行該第一工作負載與該第二工作負載,並且執行該第三工作負載,而不用切換至與該萬用處理範圍不同的一處理範圍。
  8. 如申請專利範圍第7項之方法,其中該GPU設置成根據該處理範圍執行該第三工作負載。
  9. 一種用於在一圖形處理單元(GPU)上執行複數個應用程式之系統,該系統包括:一中央處理單元(CPU);該GPU;以及 一裝置驅動程式,其設置成:建立一第一連線至一第一應用程式以及一第二連線至一第二應用程式;建立該第一應用程式與該第二應用程式共享的一萬用處理範圍;將一第一工作負載指標器傳輸至已分配給該第一應用程式的一第一佇列,其中該第一工作負載指標器指向該第一應用程式產生的一第一工作負載;將一第二工作負載指標器傳輸至已分配給該第二應用程式的一第二佇列,其中該第二工作負載指標器指向該第二應用程式產生的一第二工作負載;將該第一工作負載指標器傳輸至該GPU內的一第一GPU佇列;以及將該第二工作負載指標器傳輸至該GPU內的一第二GPU佇列;其中該GPU設置成根據該萬用處理範圍執行該第一工作負載與該第二工作負載。
  10. 如申請專利範圍第9項之系統,其中該萬用處理範圍包含該GPU內的一記憶體佇池為該第一應用程式與該第二應用程式所共享。
TW102116389A 2012-05-09 2013-05-08 多個應用程式分享的圖形處理單元 TWI489392B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US13/467,781 US9626216B2 (en) 2012-05-09 2012-05-09 Graphics processing unit sharing between many applications

Publications (2)

Publication Number Publication Date
TW201407482A TW201407482A (zh) 2014-02-16
TWI489392B true TWI489392B (zh) 2015-06-21

Family

ID=49475716

Family Applications (1)

Application Number Title Priority Date Filing Date
TW102116389A TWI489392B (zh) 2012-05-09 2013-05-08 多個應用程式分享的圖形處理單元

Country Status (4)

Country Link
US (1) US9626216B2 (zh)
CN (1) CN103425534A (zh)
DE (1) DE102013208421A1 (zh)
TW (1) TWI489392B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10162405B2 (en) 2015-06-04 2018-12-25 Intel Corporation Graphics processor power management contexts and sequential control loops
TWI546779B (zh) 2015-11-06 2016-08-21 財團法人工業技術研究院 串流資料的編碼排程方法、裝置與電腦可讀取媒體
US10725805B2 (en) * 2015-11-25 2020-07-28 International Business Machines Corporation Provisioning based on workload displacement
US10216681B2 (en) * 2015-12-01 2019-02-26 Dell Products, Lp System and method for managing workloads and hot-swapping a co-processor of an information handling system
US11609791B2 (en) * 2017-11-30 2023-03-21 Advanced Micro Devices, Inc. Precise suspend and resume of workloads in a processing unit
CN109388495A (zh) * 2018-11-01 2019-02-26 北京视甄智能科技有限公司 一种基于单gpu卡的图像并发处理方法、装置及系统
CN109542628B (zh) * 2018-12-12 2023-03-14 中国航空工业集团公司西安航空计算技术研究所 一种基于状态机的层次化gpu资源管理系统
US11074109B2 (en) * 2019-03-27 2021-07-27 Intel Corporation Dynamic load balancing of compute assets among different compute contexts
WO2021012257A1 (en) * 2019-07-25 2021-01-28 Qualcomm Incorporated Methods and apparatus to facilitate a unified framework of post-processing for gaming
DE102019216110A1 (de) * 2019-10-18 2021-04-22 Continental Automotive Gmbh Schedulingverfahren und Schedulingvorrichtung

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW201120754A (en) * 2009-08-31 2011-06-16 Ibm Multi-core/thread work-group computation scheduler
TW201140451A (en) * 2009-12-24 2011-11-16 Ibm Goal oriented performance management of workload utilizing accelerators
US8082426B2 (en) * 2008-11-06 2011-12-20 Via Technologies, Inc. Support of a plurality of graphic processing units

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7586492B2 (en) * 2004-12-20 2009-09-08 Nvidia Corporation Real-time display post-processing using programmable hardware
US8200796B1 (en) * 2005-05-05 2012-06-12 Digital Display Innovations, Llc Graphics display system for multiple remote terminals
US7475197B1 (en) * 2005-10-25 2009-01-06 Nvidia Corporation Cross process memory management
US7697007B1 (en) * 2005-12-19 2010-04-13 Nvidia Corporation Predicated launching of compute thread arrays
US7746350B1 (en) * 2006-06-15 2010-06-29 Nvidia Corporation Cryptographic computations on general purpose graphics processing units
CN101526934A (zh) * 2009-04-21 2009-09-09 浪潮电子信息产业股份有限公司 一种gpu与cpu复合处理器的组建方法
KR101651871B1 (ko) * 2009-12-28 2016-09-09 삼성전자주식회사 멀티코어 시스템 상에서 단위 작업을 할당하는 방법 및 그 장치
US8782645B2 (en) * 2011-05-11 2014-07-15 Advanced Micro Devices, Inc. Automatic load balancing for heterogeneous cores

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8082426B2 (en) * 2008-11-06 2011-12-20 Via Technologies, Inc. Support of a plurality of graphic processing units
TW201120754A (en) * 2009-08-31 2011-06-16 Ibm Multi-core/thread work-group computation scheduler
TW201140451A (en) * 2009-12-24 2011-11-16 Ibm Goal oriented performance management of workload utilizing accelerators

Also Published As

Publication number Publication date
US9626216B2 (en) 2017-04-18
CN103425534A (zh) 2013-12-04
US20130300655A1 (en) 2013-11-14
DE102013208421A1 (de) 2013-11-14
TW201407482A (zh) 2014-02-16

Similar Documents

Publication Publication Date Title
TWI489392B (zh) 多個應用程式分享的圖形處理單元
TWI624791B (zh) 用於在多緒處理單元中改善性能之技術
TWI531974B (zh) 管理巢狀執行串流的方法和系統
TWI529626B (zh) 在複數執行緒處理單元中的效率式記憶體虛擬化
TWI512466B (zh) 在複數執行緒處理單元中的效率式記憶體虛擬化
TWI466027B (zh) 解決執行緒發散的方法及系統
TWI490782B (zh) 來源運算元收集器快取的方法和裝置
TWI588653B (zh) 針對記憶體存取的動態記憶列模式定址
TWI498819B (zh) 執行成型記憶體存取作業的系統和方法
TWI533222B (zh) 處理任務的工作分配控制
US20190146817A1 (en) Binding constants at runtime for improved resource utilization
US9069609B2 (en) Scheduling and execution of compute tasks
TWI502489B (zh) 叢集多階暫存檔的暫存器分配
US10489200B2 (en) Hierarchical staging areas for scheduling threads for execution
US11663767B2 (en) Power efficient attribute handling for tessellation and geometry shaders
US9798544B2 (en) Reordering buffer for memory access locality
TW201337829A (zh) 暫存器檔案型讀取
US20130185725A1 (en) Scheduling and execution of compute tasks
US9489245B2 (en) Work-queue-based graphics processing unit work creation
US9135081B2 (en) Work-queue-based graphics processing unit work creation
TWI501156B (zh) 多頻時間切面組
TW201351276A (zh) 計算工作的排程和執行
US10235208B2 (en) Technique for saving and restoring thread group operating state