TWI624791B - 用於在多緒處理單元中改善性能之技術 - Google Patents
用於在多緒處理單元中改善性能之技術 Download PDFInfo
- Publication number
- TWI624791B TWI624791B TW102136783A TW102136783A TWI624791B TW I624791 B TWI624791 B TW I624791B TW 102136783 A TW102136783 A TW 102136783A TW 102136783 A TW102136783 A TW 102136783A TW I624791 B TWI624791 B TW I624791B
- Authority
- TW
- Taiwan
- Prior art keywords
- task
- subtasks
- processing
- memory
- engine
- Prior art date
Links
- 238000012545 processing Methods 0.000 title claims abstract description 230
- 238000000034 method Methods 0.000 title claims abstract description 49
- 230000015654 memory Effects 0.000 claims abstract description 206
- 238000003860 storage Methods 0.000 claims description 5
- 238000012544 monitoring process Methods 0.000 claims 1
- 230000010076 replication Effects 0.000 abstract description 39
- 239000000872 buffer Substances 0.000 description 27
- 238000007726 management method Methods 0.000 description 25
- 238000010586 diagram Methods 0.000 description 24
- 238000004891 communication Methods 0.000 description 20
- 230000008569 process Effects 0.000 description 12
- 238000012546 transfer Methods 0.000 description 12
- 238000009826 distribution Methods 0.000 description 9
- 238000005227 gel permeation chromatography Methods 0.000 description 9
- 239000000463 material Substances 0.000 description 9
- 230000008901 benefit Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 238000010968 computed tomography angiography Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012913 prioritisation Methods 0.000 description 3
- 230000011218 segmentation Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 238000004040 coloring Methods 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000012884 algebraic function Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000006185 dispersion Substances 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000015607 signal release Effects 0.000 description 1
- 230000011273 social behavior Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent 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]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5017—Task decomposition
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
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)
- Multi Processors (AREA)
- Image Processing (AREA)
- Advance Control (AREA)
Abstract
本發明揭示一種多執行緒處理引擎,其包括耦合至一或多個處理引擎(例如複製引擎、GPC等等)的一硬體前置處理器,其利用將任務分成較小子任務,並且根據該等任務的優先權排定該處理引擎上的子任務,來實施預先清空技術。利用限制該等子任務的大小,可快速執行較高優先權任務,不用切換該處理引擎的關聯狀態。可根據一臨界大小或考慮其他因素,例如該記憶體系統的實體邊界,來分割任務。
Description
本發明一般係關於排程,尤其係關於在多執行緒處理單元中改善效能之技術。
一般而言,電腦系統於多個應用程式之間共享硬體。在中央處理單元(CPU,central processing unit)內,一應用程式會執行到一事件導致一關聯切換至不同應用程式為止。一關聯切換可因為特定操作條件而觸發,例如到達該執行流內需要不同處理或硬體單元的某些動作之特定點、分配給一處理的時間已經到期或系統接著需要執行更高優先權處理(即是預先清空)。
目前有許多常用方式來實施一關聯切換。在一個實施方式當中,該CPU可在指令邊界上停止處理、將關聯狀態推送到一堆疊上並且載入不同關聯。在圖形處理單元(GPU,graphics processing unit)所實施的方式中,該GPU停止發出新的指令,並且等待目前的工作完成通過一管線的處理(即是等待閒置或WFI)。在此方式中,該GPU不需要儲存任何關聯狀態,因為已經發出的工作已經可以完成處理。在GPU的另一個實施方式當中,該GPU可停止處理目前管線中的所有工作、將該關聯狀態寫入記憶體並且載入一不同關聯。
一般而言,GPU關聯狀態要遠大於CPU關聯狀態。此外,GPU通常實施要花費數百或數千時脈循環來完成的較長管線。如此,在上面揭示的後兩種方式中,導入較大關聯切換將導致延遲的結果。在該第一種方式中(該WFI方式),先前發出的指令需要在該管線中完成處理,這在可發出不同關聯所伴隨的新指令之前要耗費數百或數千時脈循環。在第二
種方式中,儲存該大型GPU關聯狀態也會耗費數百甚至數千時脈循環。
因此,業界需要一種更有效率的方式,用於在具有大型圖形管線的GPU上執行多執行緒運算。
本發明的一個具體實施例揭示一種用於改善多執行緒處理引擎內效能之方法。該方法包括步驟:接收要由一處理引擎執行的一第一任務;將該第一任務分成第一組子任務;以及將來自該第一組子任務的至少一子任務發出至該處理引擎進行處理,其中該第一組子任務內的每一子任務都小於一臨界大小。該方法另包括步驟:接收要由該處理引擎執行的一第二任務(該第二任務具有高於該第一任務的優先權);將該第二任務分成第二組子任務;以及利用在將來自該第一組子任務的所有該等子任務發出給該處理引擎進行處理之前,將來自該第二組子任務的至少一子任務發出給該處理引擎來預先清空該第一任務,其中該第二組子任務中每一子任務都小於該臨界大小。
本發明的另一個具體實施例揭示一種用於改善多執行緒處理引擎內效能之系統。該系統包括一或多個處理引擎,其設置成執行任務,以及包括一前置處理器,其耦合至該等一或多個處理引擎。該前置處理器設置成執行上面揭示的該方法。本發明的另一個具體實施例揭示一種計算裝置,其包括一或多個處理引擎,其設置成執行任務,以及包括一前置處理器,其耦合至該等一或多個處理引擎。該計算裝置的該前置處理器設置成執行上面揭示的該方法。
本發明的一個優點在於,每一獨立處理引擎上的關聯切換並非必要,因此該等處理引擎不用實施複雜的排程邏輯即/或具備關聯切換能力。本發明係藉由利用小任務完成執行,簡單預先清空應用程式,然後切換至較高優先權任務來完成。此外,該技術對於程式設計師來說已經完全透明化,其可產生任何大小的任務,而不用擔心系統內可能產生延遲,造成無法執行較高優先權任務。
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‧‧‧DRAM
230‧‧‧處理叢集陣列
300‧‧‧任務管理單元
302‧‧‧執行單元
303‧‧‧LSU
304‧‧‧本機暫存檔
305‧‧‧管線管理員
306‧‧‧共享記憶體
310‧‧‧串流多重處理器
312‧‧‧經線排程器與指令單
元
315‧‧‧紋理單元
320‧‧‧L1快取
321‧‧‧排程器表
322‧‧‧TMD
325‧‧‧preROP
328‧‧‧MMU
330‧‧‧工作分配橫桿
335‧‧‧第一點五層快取
340‧‧‧工作分配單元
345‧‧‧任務表
352‧‧‧統一位址映射單元
370‧‧‧指令L1快取
380‧‧‧記憶體與快取互連
410‧‧‧前置處理器
420‧‧‧排序清單
450‧‧‧複製引擎
510‧‧‧記憶體區塊
511‧‧‧第一子任務
512‧‧‧第二子任務
513-517‧‧‧子任務
520‧‧‧矩形
521-535‧‧‧子任務
如此上面簡單彙總可詳細了解本發明上述特色的方式,本發
明的更特定說明則參照具體實施例,某些具體實施例說明於附圖內。不過吾人應該注意,附圖只說明本發明的典型具體實施例,因此並不對發明領域產生限制,本發明承認其他等效具體實施例。
第一圖為例示設置來實施本發明一或多個態樣的電腦系統方塊圖;第二圖為根據本發明的一個具體實施例,用於第一圖中該電腦系統的一並行處理子系統之方塊圖;第三A圖為根據本發明的一個具體實施例說明第二圖中前端的方塊圖;第三B圖為根據本發明的一個具體實施例說明第二圖中並行處理單元之一者內一般處理叢集的方塊圖;第三C圖為根據本發明的一個具體實施例說明第三B圖中該串流多重處理器一部分的方塊圖;第四圖例示根據本發明一個具體實施例說明第二圖的並行處理單元(PPU,parallel processing unit);第五A圖和第五B圖例示根據本發明一個具體實施例,用於將一任務分成一組子任務的兩種方法;以及第六圖為根據本發明的一個具體實施例,用於改善多執行緒處理引擎內效能的方法步驟流程圖。
為了清晰起見,在合適的地方使用一致的參考編號,來指定圖式之間共用的相同元件。本說明書假設,一個具體實施例的特徵不需要進一步說明,就可併入其他具體實施例內。
在以下描述中,揭示許多特定細節以對本發明有更徹底之理解。但是,精通此技術的人士應該了解,在無一或多個該等特定細節之下還是可實施本發明。
第一圖為本發明一或多個態樣的電腦系統100之方塊圖的一個實施例。電腦系統100包括一中央處理單元(CPU,central processing unit)
102,以及通過一互連路徑通訊的一系統記憶體104,其中該路徑可包括一記憶體橋接器105。例如可為北橋晶片的記憶體橋接器105透過匯流排或其他通訊路徑106(例如超傳輸連結),連接至一I/O(輸入/輸出)橋接器107。例如可為南橋晶片的I/O橋接器107接收來自一或多個使用者輸入裝置108(例如鍵盤、滑鼠)的使用者輸入,並透過通訊路徑106和記憶體橋接器105將該輸入轉送至CPU 102。一並行處理子系統112透過匯流排或第二通訊路徑113(例如特快周邊組件互連(PCIe,Peripheral Component Interconnect 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的一命令串流之記憶體內緩衝區),開始在該資料結構內處理該指令串流。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的一般處理叢集(general processing cluster,GPC)208,其中C1。每一GPC 208都可同時執行大量的(例如數百或數千)執行緒,其中每一執行緒都是一程式的實例
(instance)。在許多應用當中,不同的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的輸出繞送(route)至任意分割單元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同樣可程式編輯(programmable)來執行有關廣泛應用的處理任務,包括但不受限於線性與非線性資料傳輸、視訊及/或音訊資料篩選、模型化運算(例如套用實體規則來決定位置、速度以及其他物體屬性)、影像彩現運算(例如曲線細分著色、影點著色、幾何著色及/或畫素著色程式)等等。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都可設置成同時執行大量執行緒,其中「執行緒」一詞代表在特定輸入資料集上執行的特定程式之實例。在某些具體實施例內,單一指令、多重資料(single-instruction,multiple-data,SIMD)指令發行技術用於支援大量執行緒的並行執行,而不用提供多個獨立指令單元。在其他具體實施例內,單一指令、多重執行緒(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之外的任何記憶體都可用來當成全域記憶體。除此之外,1.5層(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包括一組頁面表記錄(page table entry,PTE),用於將一拼貼以及選擇性一快取線索引的虛擬位址映射至實體位址。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,如此執行行為將不取決於接收特定處理任務的GPC 208。進一步,每一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個載入儲存單元(load-store unit,LSU)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,來處理佇列內所儲存的固定數量資料。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的位置。在初始化期間會寫入特殊暫存器,以回應從裝置驅動程式103透過前端212所接收命令,並且在一處理任務期間不會改變。前端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快取320儲存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。
任務管理單元300管理要排程為TMD群組陣列並儲存在該排程器表321內的計算任務。一TMD群組為具有相同排程優先順序的計算任務集合。TMD群組或優先順序層級的數量可為一個或更多。在每一TMD群組內,該等計算任務之個別優先順序層級係可儲存在一清單內,其可用一已連結清單實施。假設為一已連結清單實施,該已連結清單內每一輸入都儲存至記憶體內一TMD 322的任務指標,以及至該個別已連結清單內下一個輸入的指標。該已連結清單針對每一TMD群組儲存頭指標與尾指標。不具有任務的TMD群組具有相等的頭指標與尾指標,並且一空位元設定為TRUE。
從主介面206接收計算任務時,任務管理單元300將該等計算任務插入一TMD群組。除非一特殊TMD位元被設定要該任務加入該已連結清單的頭部,否則將對應至該計算任務的該TMD 322之任務指標加入該群組已連結清單的尾部。即使一TMD群組內所有任務都具有相同排程優先順序層級,該TMD群組已連結清單的頭部還是任務管理單元300所選擇的第一計算任務,並且依此排定來執行。如此,相較於相同優先順序等級上的其他計算任務,該已連結清單頭部上的該計算任務具有相對較高的優先順序。類似地,在該已連結清單內每一連續計算任務都具有與該已連結清單內先前計算任務相關較低優先順序相同的優先順序層級。因此,任務管理單元300可用彼此之間相對的輸入順序來排定TMD群組內的該等計算任務(假設並無特定標記加入該TMD群組的頭部)。因為該TMD群組指定為該TMD結構的一部分,則一計算任務的TMD群組在該計算任務執行時無法改變。計算任務也可從處理叢集陣列230接收。
計算任務根據之前排定的該計算任務優先順序等級被收集至群組,允許將由任務管理單元300接收計算任務的速率與將計算任務輸
出至工作分配單元340用於執行的速率脫鉤。任務管理單元300通常可接受來自一或多個推送緩衝器並由主介面206輸出的計算任務,其接受速率高於輸出給工作分配單元340執行的該等計算任務之速率。來自不同推送緩衝器的輸入屬於獨立串流,通常由相同的應用程式產生,以便具有多組相依任務,但是在某些具體實施例內,多重應用程式可寫入至該推送緩衝器。任務管理單元300可設置來緩衝排程器表格321內的該等計算任務,稍後從排程器表格321選擇一或多個計算任務來輸出至工作分配單元340。利用緩衝之後選擇該等計算任務,任務管理單元可根據更多資訊與從已接收計算任務當中所選擇的一計算任務做比較來做出選擇。例如:任務管理單元300可緩衝在高優先順序任務之前已經接收的許多低優先順序任務。該緩衝讓任務管理單元300選擇在低優先順序任務之前先輸出高優先順序任務。
任務管理單元300可使用許多不同技術來執行選擇排定該等計算任務:循環、優先順序或分割優先順序排程。針對每一不同排程技術,選擇一計算任務要排程時,該已選取計算任務會從儲存該已選取計算任務的TMD群組當中移除。不管排程技術為何,任務管理單元300都可利用選擇適當群組的已連結清單內第一記錄,快速選擇一計算任務。利用簡單改變該等TMD群組連結清單內任務指標的順序,任務管理單元300就可輕易組織,並且若需要,重新排列該等計算任務。因此,該等計算任務可用一順序來排程及/或執行,該順序與任務管理單元300從主介面206接收該等任務指標的順序不同。
最簡單的排程法則為讓任務管理單元300將該計算任務排在每一群組前頭(若該群組內存在一計算任務),並且以循環方式輪過該等群組。另一個排程技術為優先順序排程,其用嚴格的優先順序來選擇該等計算任務。任務管理單元300從至少具有一個計算任務的最高優先順序TMD群組當中,從頭開始,選擇一計算任務。
第四圖例示根據本發明一個具體實施例說明第二圖的PPU 202(0)。如第四圖內所示,PPU 202(0)包括一I/O單元205,其接收要由PPU
202(0)的一或多個處理引擎執行之工作(即是任務)。例如:I/O單元205可接收有關指引至主介面206的處理任務之指令,或有關透過橫桿單元210指引至記憶體介面214的記憶體存取操作(即是讀取/寫入操作)之指令。有關處理任務的指令可指定一或多個推送緩衝區,其包括由PPU 202(0)執行的指令串流。主介面206讀取來自每一推送緩衝區的指令,並將該推送緩衝區內儲存的該指令串流傳輸至該適當處理引擎。例如:某些指令可關於圖形彩現任務,其透過一前端單元212和一任務/工作單元207(未明確顯示)傳輸至處理叢集陣列230。其他指令係關於資料傳輸任務(即是複製操作),傳輸至一或多個複製引擎450。
複製引擎450設置成執行複製操作,將資料從一個記憶體位置移動到另一個記憶體位置。例如:複製引擎450(0)可接收一指令,指出16MB的記憶體區塊應該從PP記憶體204(0)複製到系統記憶體104。一種複製指令包括一來源位址、一目的地位址以及要複製的資料長度。另一種複製指令包括參數,指出要從一來源陣列複製到一目的地陣列的2D位址陣列(即是一複製矩形指令)。複製引擎450可與處理叢集陣列230同時執行。為了執行複製操作,複製引擎450設置橫桿210,如此可在該複製指令內屬於其他指定記憶體位置之間執行記憶體讀取和寫入。資料可從DRAM 220複製到該複製引擎,然後傳輸至該目的地位址(例如從複製引擎450到系統記憶體104),或複製引擎450可設置該橫桿,如此該資料直接傳輸至I/O單元205,並且透過通訊路徑113傳輸至系統記憶體104。
以往,應用程式所指定的複製操作大小受限於實體記憶體大小,例如:一應用程式可傳輸指令至PPU 202(0),指定複製操作需要從PP記憶體204將1GB記憶體區塊複製到系統記憶體104。在複製引擎450(0)處理該指令時,複製引擎450(0)設置橫桿210存取一特定記憶體分割(例如記憶體分割215(0)),用於和儲存至少部分1GB記憶體區塊的DRAM通訊(例如DRAM 220(0))。然後,複製引擎450(0)傳輸一記憶體讀取要求至DRAM 220(0),藉此存取1GB記憶體區塊的第一256位元。複製引擎450(0)接收DRAM 220(0)輸出的256位元資料輸出,以回應該記憶體讀取要求。然後複製引擎450(0)設置橫桿210,如此複製引擎450(0)可透過I/O單元205
傳輸一寫入要求至系統記憶體104,將資料的該256位元儲存在該目的地位址上。然後,複製引擎450(0)設定橫桿210與DRAM 220(0)通訊,並且傳輸一第二記憶體讀取要求至DRAM 220(0),以存取1GB記憶體區塊的下一個256位元。DRAM 220(0)輸出該下一個256位元資料至複製引擎450(0),其透過I/O單元205將包括資料的該下一個256位元之一寫入要求傳輸至系統記憶體104。複製引擎450(0)繼續此方式,直到記憶體的整個1GB區塊都已經從DRAM 220(0)(或若該區塊跨越多個DRAM單元時其他DRAM單元)傳輸至系統記憶體104。在替代具體實施例內,複製引擎450(0)可利用設置I/O單元205和橫桿210,設置記憶體介面214在DRAM 220(0)與系統記憶體104之間執行直接記憶體傳輸,如此DRAM 220(0)可直接與I/O單元205通訊,並且不用透過複製引擎450(0),直接傳輸一寫入指令至系統記憶體104。在其他具體實施例內,複製引擎450具有一管線結構,可同時執行多個複製指令。例如:與第一複製操作相關聯的第一讀取指令可發出至DRAM 220。在已經擷取與該第一讀取指令相關聯的資料時,與一第二複製操作相關聯的一第二讀取指令可發出至DRAM 220。在這種具體實施例內,一較高優先權複製操作可發出至一複製引擎,如此在已經完成執行一較低優先權複製操作之前執行該較高優先權複製操作。
吾人將了解,複製操作要耗費不少時脈循環來完成,這取決於要複製的記憶體區塊大小。傳統複製引擎不會實施預先清空,意味著一旦複製操作已經傳輸至該複製引擎,則在另一個複製操作可傳輸至該複製引擎之前,應該執行該完整複製操作。換言之,一較高優先權應用程式輸出一複製操作至PPU 202(0)時,直到與一較低優先權應用程式相關聯的該先前排程複製操作完成之後,才會開始執行該較高優先權複製操作。本說明書有許多方式解決這種長延遲週期。
首先,該長延遲週期應該利用加入預先清空能力定址至PPU 202(0)的每一獨立處理引擎(例如複製引擎450(0)、複製引擎450(1)、GPC 208(0)等等),藉此讓與較高優先權應用程式相關聯的操作預先清空與較低優先權相關聯的操作。例如:利用包括額外優先權排程邏輯及/或關聯切換邏輯,可將預先清空能力加入一處理引擎。複製引擎450可追蹤多個複製
操作,並且使用精通技術人士所熟知的排程演算法,在較低優先權複製操作之前執行較高優先權複製操作。不過,這些硬體等級變更會增加PPU 202(0)內每一處理引擎的大小與複雜度。增加大小意味著增加成本以及更耗電,並且從該額外邏輯產生熱量。因此,吾人並不見得想在每一獨立處理引擎內實施預先清空。
第二,利用限制每一獨立應用程式所進行複製操作(或其他處理任務)的大小,就可解決該長延遲週期的狀況。此方式需要程式設計師管理處理任務的大小,如此不會將與長延遲週期相關聯的大型任務傳輸至PPU 202(0)。此方式並非所要,因為這會讓程式設計更複雜,需要該應用程式手動排程數百或數千個別操作,而非傳送一個操作至PPU 202。此外,裝置驅動程式103及/或PPU 202內可能需要加入額外邏輯,以確定複製操作不會超出會觸發造成長延遲週期結果的臨界大小。若未加入此邏輯,則程式設計師只要在PPU 202上排定不允許低延遲預先清空的大型處理任務即可。
上面揭示的該兩種方式並非所要,因為會非必要增加PPU 202(0)的複雜度與大小,或因為其暴露過多該預先清空實施至該應用程式等級,依賴程式設計師才能進行有效率的操作。如此,本說明書內描述的該技術實施一種不同的方式,在應用程式與PPU 202(0)的許多處理引擎之間導入一硬體實施前置處理器410。前置處理器410設置成接收從一或多個應用程式傳輸至PPU 202(0)的任務,並且由高優先權任務實施低優先權任務的預先清空。前置處理器410利用將任務分成一組較小子任務來實施預先清空,如此每一子任務彼此之間都能獨立發出每一子任務。每一子任務的大小受限於臨界大小,如此由處理引擎執行的該子任務在該處理引擎執行不同子任務之前並不會造成長延遲週期的結果。在一個具體實施例內,前置處理器410包括用於追蹤任務狀態的邏輯。例如:前置處理器410可包括用於儲存任務狀態的暫存器,如此記憶體區塊內要佔用的下一個記憶體位置關聯於一複製操作時,前置處理器410可將任務狀態儲存在PP記憶體204內。
例如:為了例示複製引擎450的操作,主介面206可接收一
複製操作,當成推送緩衝區內含指令串流的一部分。該複製操作可將要佔用的大量記憶體區塊從PP記憶體204指定至系統記憶體104。在傳統系統內,該主介面可解碼至少部分該指令,以決定該指令應該傳輸至該等可用複製引擎之一者,並且整個複製操作應該傳輸至第一複製引擎。然後該複製引擎應執行該複製操作,直到佔用整個記憶體區塊進入系統記憶體。
相較之下,第四圖的主介面206實施一硬體前置處理器410,將該複製操作分成與複製操作相關聯的多個子任務,用於該初始複製操作所指定的小塊記憶體區塊。例如:一複製操作可要求將要佔用的大量256MB記憶體區塊從PP記憶體204至系統記憶體104。前置處理器410傳輸一複製指令至複製引擎450(0),用於256MB記憶體區塊的頭4kB記憶體。然後,前置處理器410利用將該複製指令內含的該啟動記憶體位址增加4kB來修改該原始複製操作,並且儲存該已修改的複製指令,直到複製引擎450(0)已經完成執行第一4kB複製操作。然後,前置處理器410傳輸一新複製指令至複製引擎450(0),用於下一個4kB記憶體,以此類推。不過,若主介面206在已經佔用記憶體的整個256MB區塊之前接收來自較高優先權應用程式之另一個複製操作,則前置處理器410利用將傳輸與該較高優先權複製操作相關聯的一第一複製指令至複製引擎450(0),而非傳輸與該較低優先權複製操作相關聯的該下一個後續複製指令,預先清空該較低優先權複製操作。如此,在相對較少量時脈循環內,較高優先權應用程式可在已知處理引擎上執行特地任務預先清空,因為並不會有超過最大數量時脈循環的該特定任務會分配給該處理引擎。在此方式中,實施預先清空相關聯的延遲週期,比起在執行無邊界任務(例如儲存關聯狀態並且載入一個別關聯來執行該較高優先權任務)的處理引擎內直接實施預先清空要小很多,並且不需要程式設計師利用限制傳輸至PPU 202的任務大小,來手動管理預先清空延遲。
在某些具體實施例中,一應用程式產生的複製操作可在該複製操作完成時,指定要由複製引擎450執行的額外操作(例如信號釋放、觸發岔斷、清除記憶體等等)。這些額外操作可包括在傳輸至複製引擎450的該複製指令內,當成該指令內的額外位元,或可在該複製指令之後當成個
別指令傳送。前置處理器410可設置成排定與已知任務的該等子任務有關之額外操作,例如:若已經在該原始複製操作內指定該等額外操作,前置處理器410可設置每一該等子任務,如此只有該原始任務的最終子任務包括該等額外操作。
在一個具體實施例內,前置處理器410追蹤一排序清單420內根據優先權排列的等待中操作。前置處理器410設置成排定該最高優先權等待操作。在另一個具體實施例內,主介面206包括一些FIFO(未顯示),每一FIFO都關聯於一已知優先權等級。當主介面206接收任務時,該等任務會加入與該等任務優先權等級相關聯的特定FIFO。然後前置處理器410選擇包括至少一個等待任務要排定在該可用處理引擎上的該最高優先權FIFO之內。該等待任務分成一組較小子任務,並且該等子任務排定在該適當處理引擎上。
在某些具體實施例內,從許多處理引擎非同步操作主介面206。換言之,在將該任務排定在一已知處理引擎上的主介面206與執行該任務的處理引擎之間會有些延遲。在這種具體實施例內,每一處理引擎都可儲存一些用於執行的等待任務。例如:複製引擎450(0)可包括一FIFO,其中最多儲存8個等待的複製指令。因此,主介面206可傳輸最多8個複製指令至複製引擎450(0),這些指令以複製引擎450(0)接收到該等複製指令的順序來執行。主介面206也可在已經執行該等複製指令時,傳輸其他指令或操作至其他處理引擎,例如處理叢集陣列230。在某些情況下吾人將了解,吾人想要傳輸多個子任務至一已知處理引擎,以避免排程與執行之間既有延遲所導致的閒置時間。
主介面206可同時管理許多任務,用於複數個不同的處理引擎。在每一時脈循環內,主介面206可檢查特定處理引擎,以決定該處理引擎是否閒置(若是,即是可用於執行新的子任務)。在一個具體實施例內,主介面206和該等處理引擎具有一專用介面,例如單一線路互連,指出該處理引擎是否閒置。在另一個具體實施例內,主介面206與該等處理引擎透過現有雙向通訊匯流排通訊,可讓該等處理引擎傳送一指令至主介面206,指出該處理引擎是否閒置。在另一個具體實施例內,主介面206和處
理引擎實施一分數型流控介面。例如:若複製引擎450(0)包括用於儲存複數個所要執行的複製指令之FIFO,則複製引擎450(0)可發出一些分數至主介面206,在此分數反應出複製引擎450(0)內FIFO之內開槽之數量。當前置處理器410發出複製指令至複製引擎450(0)時,主介面206記下分數,並且當複製引擎450(0)完成先前傳送至複製引擎450(0)的複製指令執行時,則新分數傳送至主介面206,可以用來指出該FIFO內另一槽已經可用。
根據PPU 202內處理單元的數量,在主介面206可排定該處理引擎上該下一個子任務,則該處理引擎可閒置一些時脈循環。因此在一個具體實施例內,前置處理器410設置成,只要有至少兩個子任務備妥用於執行,則確定已經儲存兩個或更多子任務讓已知處理引擎執行。例如:複製引擎450(0)可包括一FIFO,其中最多儲存8個用於後續執行的複製指令。閒置時,則複製引擎450(0)可執行來自FIFO的下一個複製指令,不用等待由主介面206發出新指令。如果不是這樣安排的話,複製引擎450(0)可能只在將該閒置狀態通訊至主介面206後,並且等待前置處理器410發出該下一個複製指令時被利用,就會浪費許多循環。複製引擎450(0)內的該FIFO可啟用更有效率的執行,允許複製引擎450(0)開始處理下一個子任務,而前置處理器410決定接下來哪個子任務應該傳送至複製引擎450(0),以及目前執行的操作是否應該由較高優先權應用程式預先清空。在一個具體實施例內,可程式設計的暫存器設定一預定時間內一處理引擎上等待的子任務數量。例如:該暫存器可指出任何預定時間內應該儲存4個子任務,由一處理引擎執行。根據該暫存器內之值,前置處理器410可將FIFO內儲存的一設定數量複製指令傳送至複製引擎450(0)。在每一複製指令完成執行時,前置處理器410將一新複製指令傳送至複製引擎450(0),如此該FIFO在任何時間上都具有大約設定數量的等待中複製指令備妥用於執行。換言之,該暫存器之值設定可儲存供一處理引擎執行的尚未執行子任務之臨界數量。該處裡引擎內未處理子任務的數量少於未處理子任務的臨界數量時,則該處理引擎可用就可被認定是可利用的。保持未處理子任務的臨界數量可設定,將在最大時脈循環數中完成已知任務的預先清空(即是因為未處理子任務的最大大小與最大數量指出一處理引擎將閒置的最長時間)。
如上面連結第四圖的討論,前置處理器410將任務分成一組較小的子任務,如此子任務可傳輸至一處理引擎,不用由來自較高優先權應用程式的不同任務預先清空之前,將該處理引擎分配來完成整個任務。在一個具體實施例內,前置處理器410根據每一子任務的臨界大小簡單區分該等任務。不過在進一步具體實施例內,前置處理器410可設置成額外考慮其他用來區分任務的標準。
第五A圖和第五B圖例示根據本發明一項具體實施例,用於將一任務分成一組子任務的兩種方法。如第五A圖內所示,一複製操作可指出複製引擎450(0)應該將記憶體區塊510從PP記憶體204複製到系統記憶體104。該指令指定該複製操作可包括用於PP記憶體204內該記憶體區塊510的一開始位址(例如0x07005800)、用於系統記憶體104內記憶體目的地區塊的一開始位址以及與該記憶體區塊相關聯的一長度(例如24,064位元組)。如所示,每一獨特記憶體位址都為參照記憶體單一位元組的32位元位址,不過在本發明範疇內可考慮其他定址架構,例如64位元定址,或每一32位元位址都參照四個記憶體的位元組(即是32位元)。
在一個具體實施例內,前置處理器410設置成將該複製操作分成一組較小的複製操作,執行小於或等於臨界值,例如4kB(即是4096位元組)的資料複製。例如:一系統100可使用4kB分頁,實施一統一虛擬記憶體架構。因為完成4kB複製操作的延遲並不長,並且來自該複製操作的資料(假設該操作已經對準分頁)包括在單一記憶體分頁內,所以在4kB分頁或更小分頁上執行資料複製操作將更有效率。除了將每一子任務限制在小於或等於該臨界值的複製操作以外,前置處理器410設置成將該等複製操作對準該實體記憶體的邊界。適當記憶體對準允許更有效率的記憶體存取,例如:GDDR5 SDRAM(圖形雙資料率同步動態隨機存取記憶體)實施32位元資料匯流排,具備一8n預先擷取架構,允許每一記憶體存取要求讀取或寫入256位元(即是32位元組)。不過,為了在單一記憶體要求中讀取256位元至該GDDR5 DRAM,該256位元必須對準32位元組邊界。
如第五A圖內所示,第一子任務511具有0x07005800的開始位址,其對準32位元組邊界(即是在邊界內,該記憶體位址的五個最低有
效位元為零)。不過,第一子任務511的開始位址並未對準4kB記憶體邊界(例如一分頁邊界)。因此,前置處理器410產生一複製指令用於第一子任務511,其中包括第一子任務511的開始位址、該第一子任務的目的地位址(等於該原始複製操作的該目的地位址)以及2kB的長度,這對應至第一子任務511的該開始位址與下一個4kB記憶體邊界之間的差異。然後前置處理器410將第一子任務511的該複製指令傳輸至複製引擎450(0)來執行,並且利用第一子任務511的長度(即是2kB)遞增該原始位址與目的地位址,以及遞減該原始複製操作的長度,來修改該原始複製操作,這樣呈現出要複製當成該原始複製操作的剩餘記憶體區塊。
複製引擎450(0)已經備妥用於執行另一個複製指令(即是因為複製引擎450(0)閒置或在等待指令的FIFO內包括有空槽),前置處理器410產生另一個複製指令給該已修改複製操作的下一個子任務。前置處理器410產生一複製指令給第二子任務512,該指令包括第二子任務512的開始位址(即是0x07006000)、該第二子任務的目的地位址以及長度。因為剩餘的複製操作關聯於大於4kB臨界值的一記憶體區塊,所以前置處理器410將第二子任務的長度設定為4kB。第二子任務512的該複製指令已經傳輸至複製引擎450(0),並且該已修改複製操作利用將該來源位址與目的地位址遞增第二子任務512的長度(即是4kB)並且遞減該已修改複製操作的長度,再度修改。
前置處理器410繼續發出複製指定至與該額外子任務(即是子任務513、514、515、516和517)有關的複製引擎450(0)。最後一個子任務517關聯於小於4kB臨界大小的記憶體區塊之複製操作。因此如第五A圖內所示,最後一個子任務517的該複製指令具有1536位元組的長度,將要複製的剩餘記憶體呈現為該原始複製操作的一部分。
吾人將了解,在將該原始任務分成子任務組合的處理期間,主介面206可接收來自較高優先權應用程式的另一個任務。例如:在前置處理器410傳輸與第二子任務512相關聯的該複製指令之後,主介面206可接收來自較高優先權應用程式的新任務。來自該較高優先權應用程式的新任務可為用於不同記憶體區塊的一複製操作。因為該新任務的優先權高
於該原始任務,前置處理器410將該新任務分成子任務集合,取代將與第三子任務513相關聯的一複製指令傳輸至複製引擎450(0),前置處理器410將關於該新任務的該第一子任務之一複製指令傳輸至複製引擎450(0)。然後前置處理器410可傳輸與該新任務的其他子任務相關聯之後續複製指令,直到完成執行該新任務。一旦複製引擎450(0)可用,前置處理器410將該原始複製操作的第三子任務513傳輸至複製引擎450(0)。然後前置處理器410完成將有關該原始複製操作剩餘子任務的複製指令傳輸至複製引擎450(0),直到已經完全執行該完整複製操作。
在另一個具體實施例內,如第五B圖內所示,可在一矩形(即是以列與欄方式排列的記憶體2D陣列)上執行某種記憶體複製操作。每一矩形都可由一開始記憶體位置(即是矩形內的左上角記憶體位址)以及一水平尺寸和一垂直尺寸(例如相異記憶體位址或位元組的數量)所指定。以此方式存取記憶體位址具有效率,因為可針對複數個連續記憶體位置存取特定記憶體列位址或欄位址,並且該欄位址或列位址分別可遞增,以便更有效率擷取後續資料(而不改變該列位址或欄位址)。例如:矩形520代表一記憶體區塊的複製操作,該區塊的水平尺寸為272位元組並且垂直尺寸為160位元組。
針對矩形520,前置處理器410將該複製操作分成複數個子任務(即是521、522等等),每一都對應至一較小記憶體矩形的複製操作。例如在此具體實施例內,可複製的最大矩形為64位址寬(即是水平)乘64位址高(即是垂直)。該臨界矩形的總大小為4kB。首先,前置處理器410應該將該矩形分成64列或較少的較小矩形(例如子任務521至525、子任務526至530以及子任務531至535)。然後,該較小矩形進一步分成子任務,其對應至小於或等於該臨界大小的矩形。該等子任務可對準特定記憶體邊界,例如:第一子任務521對應至一複製矩形指令48位址寬乘64位址高(對準64位元組邊界),第二子任務522對應至一複製矩形指令64位址寬乘64位址高,以此類推。因為該原始複製矩形指令的該水平尺寸並未對準64位元組邊界,則第五子任務525對應至一複製矩形指令32位址寬乘64位址高。例如:在PP記憶體204內可實施訊框緩衝器當成記憶體位址的2D陣
列,每一4kB區塊都儲存訊框緩衝器的16像素乘16像素拼貼之資料,其中每一像素包括16位元組的資料(例如每通道RGBA 32位元)。
吾人應該了解,上面揭示的許多複製操作可在一虛擬記憶體架構內實施。例如:矩形520可代表虛擬記憶體內的一資料結構,其中每一對準的子矩形(例如子任務521、522等等)對應至不同虛擬記憶體分頁,因此該原始複製矩形操作不會與實體記憶體內相鄰記憶體區塊相關聯(雖然每一拼貼儲存在相鄰實體記憶體位置的4kB區塊內)。
第六圖為根據本發明的一個具體實施例,用於改善多執行緒處理引擎內效能的方法步驟流程圖。雖然已經結合第一圖至第五圖的系統來描述該等方法步驟,精通此技術人士將了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
如所示,方法600從步驟602開始,在此主介面206接收要由一處理引擎執行的第一任務。在一個具體實施例內,主介面206內的前置處理器410讀取來自一或多個推送緩衝區的指令。該等指令可包括複製操作(即是任務),其要傳輸至一複製引擎450(0)。例如:該第一任務可為一複製操作,當由複製引擎450(0)執行時,導致複製引擎450(0)將資料從第一記憶體位置移動至第二記憶體位置。在步驟604上,主介面206將該第一任務分成第一組子任務。在一個具體實施例內,前置處理器410產生新的複製指令組合,其由複製引擎450(0)執行時,導致複製引擎450(0)將關聯於該原始複製操作的資料部分移動至該第二記憶體位置的部份。在步驟606上,主介面206將該第一組子任務內的至少一個子任務發出至該處理引擎。在一個具體實施例內,前置處理器410將與該第一任務相關聯的第一子任務(即是複製指令)傳輸至複製引擎450(0)。複製引擎450(0)執行該第一子任務,藉此複製與該原始複製操作相關聯的該記憶體區塊第一部分。在複製引擎450(0)變成可用時,額外子任務(即是複製指令)發出至複製引擎450(0)。在一個具體實施例內,主介面206一次發出一個子任務至該處理引擎。在另一個具體實施例內,該處理引擎可包括一佇列或FIFO,如此主介面206一次發出二或多個子任務至該處理引擎。
在步驟608上,在主介面206已經完成執行與該第一任務相
關聯的每一子任務之前,藉此完整執行該原始任務,主介面206接收該處理引擎要執行的一第二任務,其中該第二任務關聯於比第一任務還要高優先權的應用程式。在步驟610上,主介面206將該第二任務分成第二組子任務。在步驟612上,為了該處理引擎上該第一任務的預先清空執行,主介面206在將該第一組子任務內每一子任務發出至該處理引擎之前,將該第二組子任務內至少一個子任務發出至該處理引擎。例如:在從該推送緩衝器將與第一複製操作相關聯的複數個複製指令傳送至複製引擎450(0)之後,主介面206將與一第二、或是較高優先權複製操作至該處理引擎相關聯的複數個複製指令發出至複製引擎450(0)。在與該第二(具有較高優先權)複製操作相關聯的每一複製指令都已經在複製引擎450(0)內完成執行之後,主介面206可恢復將與該第一複製操作相關聯的任何剩餘複製指令傳輸至複製引擎450(0)。
吾人將了解,本發明範疇並不受限於並行處理引擎(PPU,parallel processing engine)202的複製指令以及複製引擎450,許多種處理引擎可使用中間硬體單元,例如前置處理器410,來實施預先清空技術。例如:GPC 208執行圖形任務,例如在一組頂點上執行頂點著色器(即是圖形程式)。前置處理器410可實施一演算法,用於接收定義在3D模型內定義兩或多個圖元(即是三角形、方形、三角形長條、網狀等等)的一組頂點,並且將該網狀打破成一組較小網狀傳輸至GPCs 208。前置處理器410可實施來增加預先清空能力給任何一種處理引擎,接收可分成較小子任務的輸入。
總結來說,一多執行緒處理引擎可利用包括一中間硬體單元,將二或多個任務分成更小子任務,並且根據該等任務的優先權,排定該二或多個任務的子任務,以便在一或多個處理單元(例如複製引擎、GPC等等)內實施預先清空技術。利用限制該等子任務的大小,則該處理引擎可用來執行一較高優先權任務之前的該延遲週期可受控制,以確定快速並且有效率地執行該較高優先權任務。
本發明的一個優點在於,每一獨立處理引擎上的關聯切換並非必要,因此該等處理引擎不用實施複雜的排程邏輯即/或具備關聯切換能力。利用小任務完成執行,簡單預先清空應用程式,然後切換至較高優先
權任務。此外,該技術對於程式設計師來說已經完全透明化,其可產生任何大小的任務,而不用擔心系統內可能產生延遲,造成無法執行較高優先權任務。
在此已經參考特定具體實施例說明本發明。不過精通此技術的人士將會了解,在不背離申請專利範圍內公佈之本發明廣泛精神以及領域下,可進行許多修改與變更。因此前述說明與圖式僅供參考而不做限制。
因此,本發明具體實施例的範疇公布於以下的申請專利範圍之內。
Claims (10)
- 一種用於改善多執行緒處理引擎內效能之電腦實施方法,該方法包括:接收要由一處理引擎執行的一第一任務;將該第一任務分成一第一組子任務,其中該第一組子任務內每一子任務都小於一臨界大小;從該第一組子任務中發出至少一子任務至該處理引擎進行處理;接收要由該處理引擎執行的一第二任務,其中該第二任務具有高於該第一任務的一優先權;將該第二任務分成一第二組子任務,其中該第二組子任務內每一子任務都小於一臨界大小;利用在將來自該第一組子任務的所有該等子任務發出給該處理引擎進行處理之前,將來自該第二組子任務的至少一子任務發出給該處理引擎來預先清空該第一任務;以及將來自該第二組子任務的至少一子任務發出至該處理引擎之後,將來自該第一組子任務的至少一額外子任務發出至該處理引擎進行處理。
- 如申請專利範圍第1項之方法,其中該第一任務包括一複製操作並且該處理引擎為一複製引擎。
- 如申請專利範圍第2項之方法,其中將該第一任務分成該第一組子任務包括將由該複製操作指定的一來源記憶體區塊分成二或多個記憶體子區塊,並且產生二或多個複製指令供對應至該等二或多個記憶體子區塊的該複製引擎執行。
- 如申請專利範圍第3項之方法,其中該等記憶體子區塊對準一記憶體邊界。
- 如申請專利範圍第3項之方法,其中該複製操作包括一複製矩形操作,並且該等記憶體子區塊包括記憶體的二維陣列。
- 如申請專利範圍第1項之方法,其中該第一任務包括與複數個圖元相關聯的一圖形操作,並且該第一組子任務內的該等子任務包括與該等複數個圖元相關聯的不同圖元子集合相關聯之至少兩圖形操作。
- 如申請專利範圍第1項所述之方法,另包括根據優先權追蹤一排序清單內該第一任務與該第二任務。
- 如申請專利範圍第1項之方法,其中將該第一任務分成該第一組子任務包括:根據該第一任務產生小於或等於該臨界大小的一第一子任務;修改該第一任務來產生一已修改第一任務;監控該處理引擎,以決定該處理引擎何時可用於進一步處理;以及該處理引擎可用時,根據該已修改第一任務產生小於或等於該臨界大小的一第二子任務,其中該處裡引擎內未處理子任務的數量少於未處理子任務的一臨界數量時,則該處理引擎可用於進一步處理。
- 如申請專利範圍第1項之方法,另包括將二或多個子任務傳輸至該處理引擎,進行儲存供以後執行。
- 一種用於改善多執行緒處理引擎內效能之計算裝置,該裝置包括:一或多處理引擎,其設置成執行任務;以及一前置處理器,其耦合至該等一或多處理引擎,並且設置成:接收要由一處理引擎執行的一第一任務;將該第一任務分成一第一組子任務,其中該第一組子任務內每一子任務都小於一臨界大小;從該第一組子任務中發出至少一子任務至該處理引擎進行處理;接收要由該處理引擎執行的一第二任務,其中該第二任務具有高於該第一任度的優先權;將該第二任務分成一第二組子任務,其中該第二組子任務內每一子任務都小於一臨界大小;利用在將來自該第一組子任務的所有該等子任務發出給該處理引擎進行處理之前,將來自該第二組子任務的至少一子任務發出給該處理引擎來預先清空該第一任務;以及將來自該第二組子任務的至少一子任務發出至該處理引擎之後,將來自該第一組子任務的至少一額外子任務發出至該處理引擎進行處 理。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/651,131 | 2012-10-12 | ||
US13/651,131 US10095526B2 (en) | 2012-10-12 | 2012-10-12 | Technique for improving performance in multi-threaded processing units |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201423600A TW201423600A (zh) | 2014-06-16 |
TWI624791B true TWI624791B (zh) | 2018-05-21 |
Family
ID=50383316
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW102136783A TWI624791B (zh) | 2012-10-12 | 2013-10-11 | 用於在多緒處理單元中改善性能之技術 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10095526B2 (zh) |
CN (1) | CN103729167A (zh) |
DE (1) | DE102013016871A1 (zh) |
TW (1) | TWI624791B (zh) |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9483423B2 (en) * | 2013-05-17 | 2016-11-01 | Nvidia Corporation | Techniques for assigning priorities to memory copies |
US9542238B2 (en) * | 2013-05-23 | 2017-01-10 | Nxp Usa, Inc. | Systems and methods for direct memory access coherency among multiple processing cores |
US20150134933A1 (en) * | 2013-11-14 | 2015-05-14 | Arm Limited | Adaptive prefetching in a data processing apparatus |
US9589311B2 (en) * | 2013-12-18 | 2017-03-07 | Intel Corporation | Independent thread saturation of graphics processing units |
US9530174B2 (en) | 2014-05-30 | 2016-12-27 | Apple Inc. | Selective GPU throttling |
US20160021196A1 (en) * | 2014-07-17 | 2016-01-21 | Microsoft Corporation | Processing changes in a multi-tenant system |
US9996386B2 (en) * | 2014-07-23 | 2018-06-12 | Intel Corporation | Mid-thread pre-emption with software assisted context switch |
CN106325995B (zh) | 2015-06-19 | 2019-10-22 | 华为技术有限公司 | 一种gpu资源的分配方法及系统 |
US10120938B2 (en) * | 2015-08-01 | 2018-11-06 | MapScallion LLC | Systems and methods for automating the transmission of partitionable search results from a search engine |
KR102480016B1 (ko) * | 2015-08-18 | 2022-12-21 | 삼성전자 주식회사 | 다수의 맵핑 단위를 이용하는 불휘발성 메모리 시스템 및 그 동작방법 |
CN106547611A (zh) * | 2015-09-16 | 2017-03-29 | 中兴通讯股份有限公司 | 基于业务流的任务调度方法及装置 |
US9842376B2 (en) | 2015-09-29 | 2017-12-12 | Qualcomm Incorporated | Graphics processing unit preemption with pixel tile level granularity |
JP6532385B2 (ja) * | 2015-11-02 | 2019-06-19 | キヤノン株式会社 | 情報処理システムおよびその制御方法、並びにプログラム |
US10409560B1 (en) * | 2015-11-18 | 2019-09-10 | Amazon Technologies, Inc. | Acceleration techniques for graph analysis programs |
US10180916B2 (en) * | 2015-12-03 | 2019-01-15 | Nvidia Corporation | Managing copy operations in complex processor topologies |
US10275275B2 (en) * | 2015-12-03 | 2019-04-30 | Nvidia Corporation | Managing copy operations in complex processor topologies |
CN105892996A (zh) * | 2015-12-14 | 2016-08-24 | 乐视网信息技术(北京)股份有限公司 | 一种批量数据处理的流水线作业方法及装置 |
US10263909B2 (en) * | 2016-05-27 | 2019-04-16 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | System, method, and computer program for managing network bandwidth by an endpoint |
US10387207B2 (en) * | 2016-12-06 | 2019-08-20 | International Business Machines Corporation | Data processing |
US10372507B2 (en) * | 2016-12-31 | 2019-08-06 | Intel Corporation | Compute engine architecture to support data-parallel loops with reduction operations |
US10649956B2 (en) * | 2017-04-01 | 2020-05-12 | Intel Corporation | Engine to enable high speed context switching via on-die storage |
US10282812B2 (en) * | 2017-04-09 | 2019-05-07 | Intel Corporation | Page faulting and selective preemption |
US10325341B2 (en) | 2017-04-21 | 2019-06-18 | Intel Corporation | Handling pipeline submissions across many compute units |
US10346166B2 (en) * | 2017-04-28 | 2019-07-09 | Intel Corporation | Intelligent thread dispatch and vectorization of atomic operations |
CN107239334B (zh) * | 2017-05-31 | 2019-03-12 | 清华大学无锡应用技术研究院 | 处理不规则应用的方法及装置 |
CN107333282B (zh) * | 2017-06-05 | 2021-02-19 | 惠州Tcl移动通信有限公司 | 一种基于gpp的5g终端通用平台优化方法及系统 |
CN107861766B (zh) * | 2017-06-26 | 2021-04-23 | 平安普惠企业管理有限公司 | 应用启动方法、装置及计算机可读存储介质 |
US10459751B2 (en) * | 2017-06-30 | 2019-10-29 | ATI Technologies ULC. | Varying firmware for virtualized device |
US10754706B1 (en) | 2018-04-16 | 2020-08-25 | Microstrategy Incorporated | Task scheduling for multiprocessor systems |
CN110838990A (zh) * | 2018-08-17 | 2020-02-25 | 上海诺基亚贝尔股份有限公司 | 一种在c-ran中对层1进行加速的方法和装置 |
US10901647B2 (en) * | 2019-03-19 | 2021-01-26 | Intel Corporation | Distributed copy engine |
US11106495B2 (en) * | 2019-06-13 | 2021-08-31 | Intel Corporation | Techniques to dynamically partition tasks |
CN110958183B (zh) * | 2019-10-24 | 2022-02-25 | 中国科学院计算技术研究所 | 一种异构系统的带宽利用率提升方法及系统 |
US11403729B2 (en) * | 2020-02-28 | 2022-08-02 | Advanced Micro Devices, Inc. | Dynamic transparent reconfiguration of a multi-tenant graphics processing unit |
CN111651351B (zh) * | 2020-05-29 | 2022-11-18 | 成都新潮传媒集团有限公司 | 一种基于Jenkins的软件性能测试方法及计算机主设备 |
US11416176B2 (en) * | 2020-06-23 | 2022-08-16 | Western Digital Technologies, Inc. | Function processing using storage controllers for load sharing |
CN112685158B (zh) * | 2020-12-29 | 2023-08-04 | 杭州海康威视数字技术股份有限公司 | 一种任务调度方法、装置、电子设备及存储介质 |
CN112765128B (zh) * | 2020-12-31 | 2023-10-03 | 北京知因智慧科技有限公司 | 基于repl的数据开发方法、系统和电子设备 |
CN115134658B (zh) * | 2022-05-27 | 2024-05-14 | 阿里巴巴云计算(北京)有限公司 | 视频处理方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6260058B1 (en) * | 1994-07-19 | 2001-07-10 | Robert Bosch Gmbh | Process for controlling technological operations or processes |
TWI299465B (en) * | 2003-04-21 | 2008-08-01 | Ibm | Simultaneous multithread processor and method therefor |
US7506134B1 (en) * | 2006-06-16 | 2009-03-17 | Nvidia Corporation | Hardware resource based mapping of cooperative thread arrays (CTA) to result matrix tiles for efficient matrix multiplication in computing system comprising plurality of multiprocessors |
US20110292057A1 (en) * | 2010-05-26 | 2011-12-01 | Advanced Micro Devices, Inc. | Dynamic Bandwidth Determination and Processing Task Assignment for Video Data Processing |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5055999A (en) * | 1987-12-22 | 1991-10-08 | Kendall Square Research Corporation | Multiprocessor digital data processing system |
US6606704B1 (en) | 1999-08-31 | 2003-08-12 | Intel Corporation | Parallel multithreaded processor with plural microengines executing multiple threads each microengine having loadable microcode |
US7370156B1 (en) * | 2004-11-04 | 2008-05-06 | Panta Systems, Inc. | Unity parallel processing system and method |
US7730119B2 (en) * | 2006-07-21 | 2010-06-01 | Sony Computer Entertainment Inc. | Sub-task processor distribution scheduling |
US8438351B2 (en) * | 2007-06-06 | 2013-05-07 | Hewlett-Packard Development Company, L.P. | Binary level update of compressed read-only file systems |
US8990812B2 (en) * | 2008-07-07 | 2015-03-24 | Infosys Limited | Task decomposition with throttled message processing in a heterogeneous environment |
US20100205606A1 (en) * | 2009-02-12 | 2010-08-12 | Panzer Adi | System and method for executing a complex task by sub-tasks |
US8069446B2 (en) * | 2009-04-03 | 2011-11-29 | Microsoft Corporation | Parallel programming and execution systems and techniques |
US8074093B1 (en) * | 2011-06-03 | 2011-12-06 | Johnson Daniel L | Method and system for optimizing the completion of computing operations |
-
2012
- 2012-10-12 US US13/651,131 patent/US10095526B2/en active Active
-
2013
- 2013-10-11 TW TW102136783A patent/TWI624791B/zh active
- 2013-10-11 DE DE102013016871.6A patent/DE102013016871A1/de active Pending
- 2013-10-14 CN CN201310479294.6A patent/CN103729167A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6260058B1 (en) * | 1994-07-19 | 2001-07-10 | Robert Bosch Gmbh | Process for controlling technological operations or processes |
TWI299465B (en) * | 2003-04-21 | 2008-08-01 | Ibm | Simultaneous multithread processor and method therefor |
US7506134B1 (en) * | 2006-06-16 | 2009-03-17 | Nvidia Corporation | Hardware resource based mapping of cooperative thread arrays (CTA) to result matrix tiles for efficient matrix multiplication in computing system comprising plurality of multiprocessors |
US20110292057A1 (en) * | 2010-05-26 | 2011-12-01 | Advanced Micro Devices, Inc. | Dynamic Bandwidth Determination and Processing Task Assignment for Video Data Processing |
Also Published As
Publication number | Publication date |
---|---|
US10095526B2 (en) | 2018-10-09 |
TW201423600A (zh) | 2014-06-16 |
CN103729167A (zh) | 2014-04-16 |
US20140109102A1 (en) | 2014-04-17 |
DE102013016871A1 (de) | 2014-04-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI624791B (zh) | 用於在多緒處理單元中改善性能之技術 | |
TWI529626B (zh) | 在複數執行緒處理單元中的效率式記憶體虛擬化 | |
TWI512466B (zh) | 在複數執行緒處理單元中的效率式記憶體虛擬化 | |
TWI525437B (zh) | 在複數執行緒處理單元中的效率式記憶體虛擬化 | |
TWI466027B (zh) | 解決執行緒發散的方法及系統 | |
US10255228B2 (en) | System and method for performing shaped memory access operations | |
US9262174B2 (en) | Dynamic bank mode addressing for memory access | |
US9710306B2 (en) | Methods and apparatus for auto-throttling encapsulated compute tasks | |
US20130198760A1 (en) | Automatic dependent task launch | |
US9921873B2 (en) | Controlling work distribution for processing tasks | |
TWI488118B (zh) | 處理系統中動態產生任務的傳訊、排序和執行 | |
US9069609B2 (en) | Scheduling and execution of compute tasks | |
TWI489392B (zh) | 多個應用程式分享的圖形處理單元 | |
TWI525438B (zh) | 透過貼圖硬體執行記憶體存取操作之技術 | |
US20110072177A1 (en) | Virtual channels for effective packet transfer | |
TW201439770A (zh) | 透過貼圖硬體執行記憶體存取操作之技術 | |
US9798544B2 (en) | Reordering buffer for memory access locality | |
US9715413B2 (en) | Execution state analysis for assigning tasks to streaming multiprocessors | |
TW201337829A (zh) | 暫存器檔案型讀取 | |
US9442759B2 (en) | Concurrent execution of independent streams in multi-channel time slice groups | |
TW201432573A (zh) | 工作佇列型圖形處理單元工作創建 | |
TW201351276A (zh) | 計算工作的排程和執行 | |
TW201346576A (zh) | 分散作業的預先排程重播 | |
US9262348B2 (en) | Memory bandwidth reallocation for isochronous traffic | |
TW201342229A (zh) | 分散操作的批次重播 |