TWI475386B - 有記憶體分配限制的協同處理器的虛擬記憶體結構 - Google Patents

有記憶體分配限制的協同處理器的虛擬記憶體結構 Download PDF

Info

Publication number
TWI475386B
TWI475386B TW102116393A TW102116393A TWI475386B TW I475386 B TWI475386 B TW I475386B TW 102116393 A TW102116393 A TW 102116393A TW 102116393 A TW102116393 A TW 102116393A TW I475386 B TWI475386 B TW I475386B
Authority
TW
Taiwan
Prior art keywords
buffer
memory
thread
coprocessor
threads
Prior art date
Application number
TW102116393A
Other languages
English (en)
Other versions
TW201416856A (zh
Inventor
Luke Durant
Ze Long
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 TW201416856A publication Critical patent/TW201416856A/zh
Application granted granted Critical
Publication of TWI475386B publication Critical patent/TWI475386B/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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/251Local memory within processor subsystem
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/253Centralized memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

有記憶體分配限制的協同處理器的虛擬記憶體結構
本發明一般係關於動態記憶體分配,尤其係關於有記憶體分配限制的協同處理器之虛擬記憶體結構。
某些傳統協同處理器具有記憶體分配限制,並且無法在程式執行期間動態分配記憶體。這些傳統協同處理器必須在程式開始執行之前分配給該程式的最大記憶體數量。不過針對某些程式,並無法知道執行期間所需的最大記憶體數量。在執行期間,若分配給該程式的記憶體數量不足,則該程式無法執行。
因此,業界所需為一種在執行期間提供額外記憶體給一程式之技術。
在處理任務執行期間動態分配額外記憶體的系統及方法,可讓該處理任務消耗該處理任務開始執行之前並未分配的額外記憶體。
許多本發明用於在執行期間分配記憶體給一程式的方法之多種具體實施例包含分配一第一記憶體內的一第一緩衝區,其可在一協同處理器執行期間存取複數個執行緒。在該協同處理器上執行一處理任務期間,通知在一中央處理單元上執行的一工作執行緒,告知該第一緩衝區已滿。在執行期間已經分配第二記憶體內無法存取該等複數個執行緒的一交換緩衝區之第一部分,並且該第一緩衝區已經交換進入該交換緩衝區的該第一部分。
當一程式由不支援記憶體分頁或交換的協同處理器執行時,在該程式執行期間動態分配記憶體。該記憶體由支援記憶體分頁或交 換的不同處理器上執行之工作執行緒動態執行。
100‧‧‧電腦系統
102‧‧‧中央處理單元
103‧‧‧裝置驅動程式
104‧‧‧系統記憶體
105‧‧‧記憶體橋接器
106‧‧‧通訊路徑
107‧‧‧輸入/輸出橋接器
108‧‧‧使用者輸入裝置
110‧‧‧顯示裝置
112‧‧‧並行處理子系統
113‧‧‧第二通訊路徑
114‧‧‧系統磁碟
116‧‧‧開關
118‧‧‧網路配接器
120-121‧‧‧外接卡
202‧‧‧並行處理單元
204‧‧‧本機並行處理記憶體
205‧‧‧輸入/輸出單元
206‧‧‧主介面
207‧‧‧任務/工作單元
208‧‧‧一般處理叢集
210‧‧‧記憶體橫桿單元
212‧‧‧前端
214‧‧‧記憶體介面
215‧‧‧分割單元
230‧‧‧處理叢集陣列
220‧‧‧動態隨機存取記憶體
300‧‧‧任務管理單元
340‧‧‧工作分配單元
321‧‧‧排程器表
322‧‧‧任務中繼資料
345‧‧‧任務表
400‧‧‧虛擬記憶體結構
405‧‧‧協同處理器
410‧‧‧協同處理器以及主控處理器
412‧‧‧取得緩衝區
413‧‧‧放置緩衝區
415‧‧‧通訊緩衝區
401‧‧‧交換緩衝區
401‧‧‧交換記憶體
402‧‧‧交換狀態
416‧‧‧放置緩衝區空白通知
418‧‧‧放置緩衝區空白完成
420‧‧‧取得緩衝區已滿通知
422‧‧‧取得緩衝區已滿完成
所以,可以詳細瞭解本發明上述特徵之方式中,本發明的一更為特定的說明簡述如上,其可藉由參照到具體實施例來進行,其中一些例示於所附圖式中。但應注意所附圖式僅例示本發明的典型具體實施例,因此其並非要做為本發明之範圍的限制,本發明自可包含其它同等有效的具體實施例。
第一圖為例示設置來實施本發明一或多個態樣的電腦系統方塊圖;第二圖為根據本發明的一個具體實施例,用於第一圖中該電腦系統的一並行處理子系統之方塊圖;第三圖為根據本發明的一個具體實施例,第二圖中任務/工作單元的方塊圖;第四A圖為根據本發明的一個具體實施例,例示無法存取至一協同處理器的記憶體以及可存取至該協同處理器的記憶體之概念圖;第四B圖根據本發明的一個具體實施例,例示第四A圖的通訊緩衝區;第四C圖例示根據本發明的一個具體實施例,在一程式執行期間由該協同處理器動態分配額外記憶體的方法;第五A圖根據本發明的一個具體實施例,例示清空第四A圖中該放置緩衝區之方法;以及第五B圖根據本發明的一個具體實施例,例示填滿第四A圖中該取得緩衝區之方法。
在以下描述中,揭示許多特定細節以對本發明有更徹底之理解。但是,精通技術人士應該了解,在無一或多個該等特定細節之下還是可實施本發明。在其他實例中,並未描述已知特性以避免模糊本發明。
系統概觀
第一圖為例示設置來實施本發明一或多個態樣的電腦系統 100之方塊圖。電腦系統100包含一中央處理單元(CPU,central processing unit)102,以及透過一互連路徑通訊的一系統記憶體104,其中該路徑可包含一記憶體橋接器105。例如可為北橋晶片的記憶體橋接器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(加速圖形連接埠,Accelerated Graphics Port)、超傳輸或任何其他匯流排或點對點通訊協定,以及不同裝置之間的連接都可使用業界內已知的不同協定。
在一個具體實施例內,並行處理子系統112併入將圖形與視訊處理最佳化的電路,包含例如視訊輸出電路,並且構成一圖形處理單元 (GPU,graphics processing unit)。在另一具體實施例內,並行處理子系統112併入將一般用途處理最佳化的電路,同時保留底層計算架構。在另一具體實施例內,並行處理子系統112可在單一子系統內合併一或多個其他系統元件,例如結合記憶體橋接器105、CPU 102和I/O橋接器107來形成一晶片上系統(SoC,system on chip)。
吾人將了解,本文中顯示的該系統為例示,所以可進行改變與修改。包含橋接器的數量與配置、CPU 102的數量以及並行處理子系統112的數量這類連接拓撲可依照需求修改。例如在某些具體實施例內,系統記憶體104直接連接至CPU 102,而不是透過橋接器,並且其他裝置透過記憶體橋接器105以及CPU 102與系統記憶體104通訊。在其他拓撲中,並行處理子系統112連接至I/O橋接器107或直接連接至CPU 102,而不是連接至記憶體橋接器105。在其他具體實施例內,I/O橋接器107和記憶體橋接器105可整合成為單一晶片,替代現有的一或多個分散裝置。大型組件可包含二或多個CPU 102以及二或多個並行處理子系統112。本文中顯示的該等特定組件為選擇性;例如可支援任何數量的外接卡或周邊裝置。在某些具體實施例內,開關116並不需要存在,並且網路配接器118和外接卡120、121都直接連接至I/O橋接器107。
第二圖例示根據本發明一個具體實施例的並行處理子系統112。如所示,並行處理子系統112包含一或多個並行處理單元(PPU,parallel processing unit)202,每一個都耦合至本機並行處理(PP,parallel processing)記憶體204。一般來說,並行處理子系統包含數量為U的PPU,其中U1。(本文中多個類似物件都用相同之參考號碼標示,而物件究竟是多個類似物件中的哪一個則是用括號內的數字標示。)PPU 202以及並行處理記憶體204可使用一或多個積體電路裝置來實施,例如可程式處理器、特殊應用積體電路(ASIC,application specific integrated circuit)或記憶體裝置,或以任何其他技術可行方式。
請再次參閱第一圖及第二圖,在一些具體實施例內,並行處理子系統112內的某些或全部PPU 202為具有彩現管線的圖形處理器,其可設置成執行許多操作,這些操作有關透過記憶體橋接器105和第二通訊 路徑113,從CPU 102及/或系統記憶體104供應的圖形資料產生畫素資料、與本機並行處理記憶體204(可用來當成圖形記憶體,包含例如傳統畫框緩衝區)互動來儲存與更新畫素資料、傳遞畫素資料給顯示裝置110等等。在某些具體實施例內,並行處理子系統112可包含操作當成圖形處理器的一或多個PPU 202,以及用於一般用途計算的一或多個其他PPU 202。該等PPU可一致或不同,並且每一PPU都可擁有一專屬的並行處理記憶體裝置或無專屬的並行處理記憶體裝置。並行處理子系統112內的一或多個PPU 202可輸出資料至顯示裝置110,或並行處理子系統112內的每一PPU 202都可輸出資料至一或多個顯示裝置110。
在操作上,CPU 102為電腦系統100的主要處理器,控制與協調其他系統組件的操作。尤其是,CPU 102發出指令控制PPU 202的操作。在某些具體實施例內,CPU 102將每一PPU 202的指令串流寫入至一資料結構(第一圖或第二圖內未明確顯示),其可位於系統記憶體104內、並行處理記憶體204內或可存取CPU 102和PPU 202的其他儲存位置內。每一資料結構的指標已經寫入一推送緩衝區,開始在該資料結構內處理該指令串流。PPU 202讀取來自一或多個推送緩衝區的指令串流,然後非同步於CPU 102的操作來執行指令。利用應用程式透過裝置驅動程式103來控制不同推送緩衝區的排程,指定每一推送緩衝區的執行優先順序。
此時請回頭參閱第二圖以及第一圖,每一PPU 202都包含一I/O(輸入/輸出)單元205,其透過連接至記憶體橋接器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都可同時執行大量的(例如數百或數千)執行緒,其中每一執行緒都是一程式的實例(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同樣可程式編輯來執行有關廣泛應用的處理任務,包含但不受限於線性與非線性資料傳輸、視訊及/或音訊資料篩選、模型化運算(例如套用實體規則來決定位置、速度以及其他物體屬性)、影像彩現運算(例如曲線細分著色、影點著色、幾何著色及/或畫素著色程式)等等。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都可設置成同時執行大量執行緒,其中「執行緒」一詞代表在特定輸入資料集上執行的特定程式之實例。在某些具體實施例內,單一指令、多重資料(SIMD,single-instruction,multiple-data)指令發行技術用於支援大量執行緒的並行執行,而不用提供多個獨立指令單元。在其他具體實施例內,單一指令、多重執行緒(SIMT,single-instruction,multiple-thread)技術用於支援大量一般同步執行緒的並行執行,使用共用指令單元,其設置成發出指令至每一GPC 208內的處理引擎集。不同於一SIMD執行區域,其中所有處理引擎一般都執行一致的指令,SIMT執行允許不同執行緒透過一已知執行緒程式更迅速遵循分散的執行路徑。業界內精通技術人士將了解,SIMD處理區域代表一SIMT處理區域的功能子集。
在一個具體實施例內,每一GPC 208都包含數量為M的串流多重處理器,每一都設置成處理一或多個執行緒群組。這一系列指令傳輸至構成一執行緒的特定GPC 208,如本文先前所定義,並且通過串流多重處理器內的並行處理引擎的特定數量同時執行的執行緒之集合在此稱為「經線」或「執行緒群組」。如本文所使用,「執行緒群組」代表在不同輸入資料上同時執行相同程式的執行緒群組,其中該群組的一個執行緒指派給串流多重處理器內不同的處理引擎。一執行緒群組可包含數量比串流多重處理器內處理引擎數量還要少的執行緒,在此案例中,某些處理引擎會在循環期間處理該執行緒群組時閒置。執行緒群組也可包含數量比串流多 重處理器內處理引擎數量還要多的執行緒,在此案例中,將在連續時脈循環上進行處理。因為每一串流多重處理器都可同時支援最多G個執行緒群組,所以在任何已知時間上GPC 208內都可執行最多G*M個執行緒群組。
此外,在串流多重處理器內可同時啟用複數個相關執行緒群組(在不同執行階段內)。此執行緒群組的集合稱為「合作執行緒陣列」(CTA,cooperative thread array)或「執行緒陣列」。特定CTA的大小等於m*k,其中k為執行緒群組內同時執行的執行緒數量,通常為串流多重處理器內的並行處理引擎數量的整數倍數,並且m為串流多重處理器內同時啟用的執行緒群組數量。CTA的大小一般由程式設計師以及該CTA可用的硬體資源數量,例如記憶體或暫存器,來決定。
每一串流多重處理器都包含第一層(L1)快取,或使用串流多重處理器之外對應L1快取內的空間,其用於執行負載與儲存操作。每一串流多重處理器也要存取所有GPC 208共享的第二層(L2)快取,並且可用於在執行緒之間傳輸資料。最後,串流多重處理器也要存取至晶片外「全域」記憶體,其可包含例如並行處理記憶體204及/或系統記憶體104。吾人了解,PPU 202之外的任何記憶體都可用來當成全域記憶體。
每一GPC 208都可包含一記憶體管理單元(MMU,memory management unit),其設置成將虛擬位址映射至實體位址。在其他具體實施例內,該MMU可位於記憶體介面214之內。該MMU包含一組頁面表記錄(PTE,page table entry),用於將一虛擬位址映射至一拼貼或是一快取線索引的實體位址。該MMU可包含位址轉譯後被緩衝區(TLB,address translation lookaside buffer)或快取。該實體位址經過處理來分配本機存取的表面資料,以便讓要求有效地交錯於分割單元215之間。該快取線索引可用於決定一快取線的要求是否命中或未命中。
吾人將了解,本文中顯示的該核心架構為例示,所以可進行改變與修改。例如雖然只顯示一個GPC 208,一PPU 202可包含任意數量功能彼此類似的GPC 208,如此執行行為並不取決於接收特定處理任務的GPC 208。進一步,每一GPC 208都得利於運用分離並分散的處理單元、L1快取等等,進行與其他GPC 208無關的操作。
精通此技術人士將了解,第一圖、第二圖和第三圖內描述的架構並非用於限制本發明範疇,本說明書內的技術可在任何正確設置的處理單元上實施,在不悖離本發明範疇之下包含但不受限於一或多個CPU、一或多個多核心CPU、一或多個PPU 202、一或多個GPC 208、一或多個圖形或特殊用途處理單元等等。
在本發明的具體實施例內,吾人想要使用一計算系統的PPU 202或其他處理器,運用執行緒陣列來執行一般用途計算。該執行緒陣列內的每一執行緒都可指派一個獨一的執行緒識別碼(「執行緒ID」),其可在執行期間存取該執行緒。該執行緒ID可定義為一維度或多維度數值,控制該執行緒處理行為的許多態樣。例如:一執行緒ID可用於決定設定一執行緒的哪個輸入資料部分要處理及/或決定設定一執行緒的哪個輸出資料部分要產生或寫入。
每個執行緒指令的序列可包含至少一個指令,其定義該代表性執行緒與該執行緒陣列的一或多個其他執行緒之間的合作行為。例如:每一執行緒指令的順序可包含將在該順序內特定點上的該代表執行緒之運算執行將被中斷,直到一或多個其他執行緒到達該特定點上為止之指令、讓該代表執行緒將一或多個其他執行緒可存取的資料儲存至一共享記憶體內之指令、讓該代表執行緒根據其執行緒ID基本上讀取與更新儲存在一共享記憶體內一或多個該等其他執行緒已經存取過的資料之指令等等。該CTA程式也可包含一指令,計算該共享記憶體內所要讀取資料的位址,其中該位址為執行緒ID的函數。利用定義合適的功能並且提供同步技術,資料可利用CTA的一個執行緒寫入共享記憶體內的一已知位置,並且以可預測方式用相同CTA的不同執行緒從該位置當中讀取。因此,任何所想要之在執行緒之間共享的資料方式均有機會得到支援,並且一CTA內的任何執行緒都可與相同CTA內任何其他執行緒共享資料。在CTA執行緒之間共享的資料內容(若有的話)由該CTA程式決定;如此吾人了解在使用CTA的特定應用當中,根據該CTA程式,CTA的執行緒彼此之間會或不會共享資料,並且在本文中可同時使用「CTA」與「執行緒陣列」等詞。
多重並行任務排程
多重處理任務可在GPC 208上同時執行,並且一處理任務可在執行期間產生一或多個「子代」處理任務。任務/工作單元207接收該等任務,並且動態排定要由GPC 208執行的處理任務以及子代處理任務。
第三圖為根據本發明的一個具體實施例,第二圖中任務/工作單元207的方塊圖。任務/工作單元207包含一任務管理單元300以及工作分配單元340。任務管理單元300根據執行優先順序等級來組織要排程的任務。針對每一優先順序等級,任務管理單元300儲存任務指標的清單到對應至排程器表321內任務的TMD 322,其中該清單可用連結清單來實施,此後的敘述均假設一已連結的清單實施了上述之清單。TMD 322為代表一任務的中繼資料,例如執行該任務所需的組態資料以及狀態資訊。TMD 322可儲存在可由並行處理子系統112存取的PP記憶體204或系統記憶體104內。任務管理單元300接受任務並且將該等任務儲存在排程器表321內的速率與任務管理單元300排定任務來執行的速率無關,可讓任務管理單元300根據優先權資訊或使用其他技術來排定任務。
工作分配單元340包含一任務表345,其中有插槽(slot)讓TMD 322針對執行的任務所佔用。任務管理單元300可排定任務在任務表345內有空插槽時執行。當無空插槽時,未佔用插槽的較高優先順序任務會驅逐佔用插槽的較低優先順序任務。當任務遭到驅逐時,該任務停止,並且若該任務尚未執行完成,則將該任務加入排程器表321內的一連結清單中。當已經產生一子代處理任務時,則將該子代處理任務加入排程器表321內的一連結清單中。當該任務已經被驅逐時,則該任務會從一槽中移除。
TMD 322包覆一處理任務的中繼資料,包含網隔維度。該網格維度(n,m),其中n和m為整數,指定執行來處理該任務的CTA數量,例如:網格維度1,1指出單一CTA,而網格維度2,1或1,2指出兩個CTA。網格可擁有超過兩個維度,並且在該TMD內指定所有維度的大小。每一CTA都需要某些架構資源才能執行,該架構資源可包含每一任務記憶儲存體、每一CTA共享記憶體、每一執行緒本機記憶體、暫存器、CTA識別碼、執行緒群組數、執行緒數、處理資源或一任務可消耗的任何其他可量化架構資源的一部分。
工作分配單元340追蹤用於處理一任務所需的可用資源,並且在某些情況下,可消耗的最大量資源受到限制。因為PPU 202並未設置成支援動態記憶體分配、記憶體分頁或記憶體交換,所以由PPU 202執行一應用程式之前,需要分配(或保留)儲存該特定應用程式的每一任務資料所需之該記憶體。因為一已知處理任務可產生一些子代任務,並且該等子代任務的數量未知,因此不可能每次都能精確預測判斷出任務執行期間將消耗的記憶體最大量。這項挑戰的一種解決方案為限制每一CTA能夠消耗的記憶體總量。工作分配單元340可設置成確定每一CTA限制的記憶體總量成為啟動每一該CTA的先決條件,否則該CTA的狀態可能無法儲存並接著復原。另一個解決方案為提供一種在該等任務執行期間可動態分配記憶體的機制,如此一CTA可消耗的記憶體總量不受限制。
虛擬記憶體結構
如先前所解釋,某些協同處理器裝置,例如PPU 202,在PPU 202上執行緒執行一應用程式的程式碼時,並無能力分配記憶體。因此,PPU 202上執行的該等執行緒所使用之所有記憶體,都必須由主控處理器,也就是CPU 102在任何PPU 202上開始執行之前分配。PPU 202也無法依需求分入或分出記憶體片段,如此限制在PPU 202上執行的應用程式於執行緒運行期間,不能使用超過與PPU 202相關聯的實體記憶體。
雖然這種限制對於目標在傳統圖形處理器的許多應用程式而言已經可以接受,但還是想要有更有彈性的解決方案。尤其是,PPU 202的該巢狀並行能力,加入從已經在PPU 202上運行的執行緒中啟動新子代任務之能力。雖然單次啟動新任務或子代任務的記憶體總量並不大,但巢狀並行允許執行緒啟動任何無限數量的新子代任務。因此,即使單一任務所需的記憶體總量也無法預測。虛擬記憶體結構可用於已經啟動一任務之後執行動態記憶體分配。
該虛擬記憶體結構可實施,塑造出先進先出佇列結構或一記憶體佇池。該虛擬記憶體結構設置成可無限成長,即使在既不能動態分配記憶體也不能分配可交換(可分頁)記憶體的協同處理器(例如PPU 202)上運行時。增加該虛擬記憶體結構內記憶體總量的能力,允許使用PPU 202可 用的一佇列或記憶體佇池來儲存無限數量的元件,儘管如此,在開始執行應用程式的任何任務之前,只需要少量記憶體分配即可。當應用程式執行期間將建立的子代任務數量為未知時,隨著新任務啟動的記憶體動態分配就相當關鍵。在許多情況下,應用程式執行期間所需的最大記憶體數量可能為未知,或顯著大於已經分配給PPU 202的記憶體。
塑造出一佇列的虛擬記憶體結構可具有任何標準佇列介面,例如push_tail()和pop_head(),但是與電路內實施的佇列不同的是將不受限於該佇列內任何固定最大元件數量。類似地,塑造出一佇池的虛擬記憶體結構可具有任何標準存取介面,例如put_entry()和get_entry(),但是也不受限於該佇池內任何固定的最大元件數量。該虛擬記憶體結構只需要在執行緒開始在PPU 202上執行之前,已經預先分配給PPU 202的某些少量記憶體即可。當該預先分配記憶體用完時,一執行時間(runtime)處理將該預先分配記憶體內儲存的某些資料遷移至PPU 202無法存取並且由CPU 102動態分配,以及CPU 102可存取但是PPU 202無法存取的記憶體。在一個具體實施例內,PPU 202設置成生產稍後將由PPU 202消耗運用的資料。當所生產的資料超出該預先分配記憶體容量時,該資料會遷移至額外記憶體。支援動態記憶體分配與分頁的主控處理器CPU 102提供額外記憶體,超出已經預先分配給該應用程式並且可由PPU 202存取的記憶體。當在PPU 202上執行的執行緒要求從該虛擬佇列結構中移除(彈出或取得)一元件時,該執行時間將來自該記憶體並且PPU 202無法存取的資料遷移至該預先分配記憶體,並且若有需要,將該資料回傳給該執行緒。
在PPU 202上執行的該等執行緒都不會發現該進行中的執行時間以及由該虛擬記憶體結構執行的資料遷移。對於在PPU 202上執行的執行緒而言,該虛擬記憶體結構僅呈現為不受限於PPU 202的正常記憶體限制之佇列或佇池。換言之,該虛擬記憶體結構可持續成長到大於預先分配給PPU 202的該記憶體,或甚至大於與PPU 202相關聯的該實體記憶體(PP記憶體204)。
第四A圖為根據本發明的一個具體實施例,例示包含無法存取至一協同處理器的記憶體以及可存取至該協同處理器的記憶體之一虛 擬記憶體結構400的概念圖。虛擬記憶體結構400包含協同處理器405無法存取的該記憶體,以及協同處理器410可存取的該記憶體。主控處理器,CPU 102可分配CPU 102和該協同處理器都可存取的記憶體,在此該協同處理器為一或更多個PPU 202。CPU 102和該協同處理器可存取的記憶體,例如協同處理器410可存取的記憶體可為固定式系統記憶體,即是系統記憶體104的一部分。系統記憶體104可直接耦合至CPU 102,或透過記憶體橋接器105耦合至CPU 102。系統記憶體104透過通訊路徑113間接耦合至並行處理子系統112。
如本說明書內所示,可存取一詞表示一部分記憶體已經分配或保留供在CPU 102或PPU 202上執行的一特定程式所使用。雖然系統記憶體104與PP記憶體204之間的連接可提供CPU 102與系統記憶體104及/或PP記憶體204之間傳遞信號(讀取與寫入要求)之機制,不過當部分系統記憶體104及/或PP記憶體204分配給在CPU 102上執行的特定程式時,則考慮只能由CPU 102存取系統記憶體104和PP記憶體204。類似地,雖然系統記憶體104與PP記憶體204之間的連接可提供PPU 202與系統記憶體104及/或PP記憶體204之間傳遞信號之機制,不過當部分系統記憶體104及/或PP記憶體204分配給在PPU 202上執行的特定程式時,則考慮只能由PPU 202存取系統記憶體104和PP記憶體204。一般而言,在PPU 202上執行的應用程式分配給PP記憶體204的部分,並且在CPU 102上執行的應用程式分配給系統記憶體104的部分,以將記憶體存取延遲降至最低。不過,在PPU 202上執行的應用程式依然可分配給系統記憶體104的部分,並且在CPU 102上執行的應用程式可分配給PP記憶體204的部分。
CPU 102支援系統記憶體104或PP記憶體204內的記憶體分頁或交換,並且可動態分配記憶體以及可分配可以分頁或可以交換的記憶體。該協同處理器(PPU 202)不可動態分配記憶體及/或不支援記憶體分頁或交換,並且不可分配可以分頁或可以交換的記憶體。因此,開始應用程式之前,裝置驅動程式103分配協同處理器以及主控處理器410可存取的該記憶體,供該應用程式執行期間該PPU 202使用。協同處理器以及主控處理器410可存取的記憶體總量於分配時間點時設定,因此分配取得緩衝 區412、放置緩衝區413以及通訊緩衝區415內可用的記憶體總量都在分配時間點時得到設定。該協同處理器與CPU 102都可讀取或寫入取得緩衝區412、放置緩衝區413以及通訊緩衝區415。
在該應用程式由PPU 202執行期間,執行緒產生任務,呈現為協同處理器和主控處理器410可存取的記憶體內所儲存之資料。該等產生的任務將在未來消耗或處理,並且用於儲存所產生任務的該記憶體則放入放置緩衝區413內。放置緩衝區413可設置成儲存針對部分實體記憶體的指標器。取得緩衝區412可設置成儲存針對部分實體記憶體的指標器,該部分儲存代表一(已產生的)處理任務要由一執行緒處理之資料。當一執行緒要求一處理任務時,該執行緒從取得緩衝區412內移除(「彈出」或「取得」)儲存在協同處理器與主控處理器410可存取的記憶體部分內之一處理任務。
當虛擬記憶體結構400塑造一佇列時,其中維持執行緒將記憶體分配推送至放置緩衝區413的順序,並且在稍後的時間點上,該等記憶體分配以先進先出的順序從取得緩衝區412彈出。當虛擬記憶體結構400塑造成一佇池時,由在PPU 202上執行的一執行緒插入放置緩衝區413內的資料(已產生的處理任務)所消耗之該等記憶體分配,可由該相同執行緒或PPU 202上執行的不同執行緒,以不同順序從取得緩衝區412當中擷取。
因為有限數量的記憶體已經分配給取得緩衝區412和放置緩衝區413,則取得緩衝區412可變成空白並且放置緩衝區413可變成全滿。在CPU 102上執行的一工作執行緒透過通訊緩衝區415監控取得緩衝區412和放置緩衝區413的狀態。該工作執行緒保證排定至少偶而輪詢(poll)該通訊緩衝區415。該工作執行緒設置成依照需求動態分配交換記憶體401,提供額外記憶體分配給在該協同處理器上執行的該等執行緒。在一交換狀態402內,該工作執行緒維持指定給該交換記憶體401的狀態資訊,例如交換記憶體的實體位置。交換記憶體401內記憶體總量一開始為零,隨著重新填入取得緩衝區412的需求而增加,並且隨著記憶體分配釋出而降低(當處理任務完成後執行緒離開時)。交換記憶體401只能由CPU 102讀取或寫入。
該協同處理器上執行的一執行緒可使用pop_head()和push_tail()方法,從取得緩衝區412擷取一處理任務,並且要求一記憶體分配將一處理任務儲存至放置緩衝區413。當虛擬記憶體結構400塑造一佇列時,取得緩衝區412為該佇列的開頭、交換記憶體401(若有)是該佇列的中間並且放置緩衝區413是該佇列的尾端。該佇列的大小隨著該工作執行緒動態增加交換記憶體401的大小而成長。
第四B圖根據本發明的一個具體實施例,例示第四A圖的通訊緩衝區415。當一協同處理器執行緒要求一記憶體分配,並將該記憶體分配(產生的處理任務或其他資料)插入放置緩衝區413,而放置緩衝區413已滿時,該執行緒利用在通訊緩衝區415內撰寫一放置緩衝區空白通知416來告知該工作執行緒。在CPU 102上執行的該工作執行緒將連續、定期或在收到其他非同步通知(例如接收自CPU 102的一岔斷)時,讀取該放置緩衝區空白通知416。當該工作執行緒決定一協同處理器執行緒已經利用撰寫(或設定)放置緩衝區空白通知416張貼一通知時,該工作執行緒會清空該放置緩衝區空白通知416。
若交換記憶體401沒有足夠容量儲存放置緩衝區413,則該工作執行緒可將額外記憶體動態分配成為交換記憶體401。從該協同處理器無法存取的記憶體當中分配交換記憶體401成為所需的額外記憶體。該工作執行緒更新交換狀態402,以便追蹤交換記憶體401內新分配的額外記憶體。交換記憶體401內的該等分配可使用一連結清單來追蹤,然後該工作執行緒消耗交換記憶體401的部分容量,將放置緩衝區413的該等內容複製到交換記憶體401。在該工作執行緒將放置緩衝區413的該等內容移動至交換記憶體401之後,該協同處理器可存取的放置緩衝區413之該等內容不再可由該協同處理器存取,因為交換記憶體401儲存在該協同處理器無法存取的該記憶體內。當該協同處理器需要該等內容時,該等內容可從交換記憶體401移入取得緩衝區412。
一旦該工作執行緒已經清空放置緩衝區413,該工作執行緒在通訊緩衝區415內撰寫放置緩衝區空白完成418,通知該協同處理器執行緒,放置緩衝區413已經清空。然後該協同處理器執行緒讀取並清除放置 緩衝區空白完成418。放置緩衝區空白完成418可為通訊緩衝區415上的單一位元,可由在CPU 102上執行的該工作執行緒寫入,並且由協同處理器執行緒讀取並清除。
當一協同處理器執行緒嘗試取得先前儲存在虛擬記憶體結構400內的資料,例如現在準備開始從取得緩衝區412執行一處理任務並且取得緩衝區412為空白時,該執行緒利用在通訊緩衝區415內撰寫一取得緩衝區已滿通知420來告知該工作執行緒。在CPU 102上執行的該工作執行緒連續、定期或在收到其他非同步通知時(例如接收自CPU 102的一岔斷),讀取該取得緩衝區已滿通知420。當該工作執行緒決定一協同處理器執行緒已經利用撰寫(或設定)取得緩衝區已滿通知420張貼一通知時,該工作執行緒會清空該取得緩衝區已滿通知420。取得緩衝區已滿通知420可為通訊緩衝區415上的單一位元,可由協同處理器執行緒寫入,並且由在CPU 102上執行的該工作執行緒讀取並清除。
若交換記憶體401空白,則該工作執行緒決定放置緩衝區413是否並未空白,並且若是,則該工作執行緒將一或更多已產生的任務從放置緩衝區413移動至取得緩衝區412。檢查放置緩衝區413之前,該工作執行緒檢查交換記憶體401是否為空白,即是交換記憶體401內未儲存已產生的任務,如此當虛擬記憶體結構400如同一佇列時,維持虛擬記憶體結構400內儲存資料的該FIFO順序。若交換記憶體401並未空白,則根據交換狀態402,該工作執行緒複製交換記憶體401內儲存的已產生任務至取得緩衝區412。交換狀態402已經更新,指示填滿取得緩衝區412的交換記憶體401部分可用於分配。在一個具體實施例內,該部分交換記憶體401可從該記憶體內解除分配,不讓協同處理器405存取,或從交換記憶體401當中釋出。
一旦該工作執行緒已經重新填入取得緩衝區412,該工作執行緒在通訊緩衝區415內撰寫取得緩衝區已滿完成422,通知該協同處理器執行緒該取得緩衝區412已經填滿。然後該協同處理器執行緒讀取並清除取得緩衝區已滿完成422。取得緩衝區已滿完成422可為通訊緩衝區415上的單一位元,可由在CPU 102上執行的該工作執行緒寫入,並且由協同處 理器執行緒讀取並清除。
在該協同處理器上執行的該等執行緒使用交握型通訊協定,透過通訊緩衝區415與該工作執行緒通訊。另外可使用確定CPU 102與PPU 202之間通訊連貫性的其他交握型機制。此外,因為多重協同處理器執行緒試圖同時接收來自取得緩衝區412的資料及/或同時將資料(例如一已產生任務結構)插入放置緩衝區413,則該資料應該使用基本操作插入與回傳,以保證一致的虛擬記憶體結構400。更進一步,應該取得一鎖定,以確定只有單一協同處理器執行緒存取通訊緩衝區415,通知該工作執行緒重新填入取得緩衝區412或清空放置緩衝區413。在該工作執行緒利用撰寫通訊緩衝區415完成該交握時,確認該重新填入或清空操作已經完成之後,才可釋放該鎖定。雖然使用該鎖定技術使得對虛擬記憶體結構400進行單一生產者單一消費者存取,不過其他更複雜的多重生產者多重消費者協定一樣可被實施。
第四C圖例示根據本發明的一個具體實施例,在一程式執行期間由一協同處理器動態分配額外記憶體的方法440。雖然已經結合第一圖、第二圖、第三圖、第四A圖和第四B圖的系統來描述該等方法步驟,精通技術人士將了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。
在步驟445上,裝置驅動程式103(例如一CUDA裝置驅動程式)分配一第一緩衝區,就是第一記憶體內放置緩衝區413,在例如一或更多PPU 202這類協同處理器上執行時可由複數個執行緒存取。該第一記憶體為協同處理器以及主控處理器410可存取的記憶體,如第四A圖上所示。在步驟450上,裝置驅動程式103分配一第二緩衝區,即該第一記憶體內的取得緩衝區412。在步驟455上,裝置驅動程式103分配並初始化一第三緩衝區,即該第一記憶體內的通訊緩衝區415。通訊緩衝區415可被初始化來清除與該等第一和第二緩衝區相關聯的該等通知,並且清除該工作執行緒已經完成該等通知之處理的該等指示。
在步驟460上,由該協同處理器執行一處理任務。在步驟465上,一協同處理器執行緒決定若一記憶體要求失敗,即若放置緩衝區 413已滿或若取得緩衝區412空白。在步驟465上,若該記憶體要求成功,該協同處理器執行緒將一產生的任務插入放置緩衝區413,或從取得緩衝區412接收一產生的任務,並且繼續在步驟460上執行該處理任務。在步驟465上,若該記憶體要求失敗,則在步驟470上該協同處理器執行緒通知在CPU 102上執行的一工作執行緒,告知該第一緩衝區已滿或該第二緩衝區空白。
在步驟475上,該工作執行緒動態分配一第二記憶體內交換緩衝區401的第一部分,其無法由當放置緩衝區413已滿時儲存至放置緩衝區413的執行期間該等複數個執行緒存取。該第二記憶體為協同處理器405無法存取的記憶體。若交換緩衝區401是空白,該工作執行緒先將該協同處理器無法存取的記憶體動態分配至交換緩衝區401。當取得緩衝區412是空白時,該工作執行緒分配儲存已產生任務的交換緩衝區401之第一部分,來交換進入取得緩衝區412。在步驟480上,該工作執行緒在取得緩衝區412空白時將交換緩衝區401的第一部分交換進入取得緩衝區412,並且在放置緩衝區413已滿時將放置緩衝區413交換進入交換緩衝區401的第一部分,藉此在該處理任務執行期間讓該協同處理器可存取交換緩衝區401的第一部分。
第五A圖根據本發明的一個具體實施例,例示清空放置緩衝區413之方法。雖然已經結合第一圖、第二圖、第三圖、第四A圖和第四B圖的系統來描述該等方法步驟,精通技術人士將了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。在步驟555上,一協同處理器執行緒要求分配放置緩衝區413用於儲存資料,例如一任務結構。在步驟510上,該協同處理器執行緒決定放置緩衝區413是否已滿,並且若否,在步驟565上,該協同處理器執行緒執行基本操作,將一記憶體分配返回至放置緩衝區413。運用一基本操作,確定當多重協同處理器執行緒嘗試同時插入資料至放置緩衝區413時,每一分配都返回放置緩衝區413內的一個並且唯一的槽內。
在步驟560上,若該協同處理器執行緒決定放置緩衝區413已滿,則在步驟570上,該協同處理器執行緒嘗試鎖定至放置緩衝區413 的存取,如此在置放緩衝區413進行清空處理的期間,任何其他協同處理器執行緒都無法存取該放置緩衝區413。在步驟575上,該協同處理器執行緒決定是否已經獲得該鎖定,若否,則該協同處理器執行緒回到步驟560。否則,該協同處理器執行緒獲得該鎖定,並且在步驟580上,該協同處理器執行緒將放置緩衝區413已滿的狀況通知在CPU 102上執行的該工作執行緒。在步驟585上,該協同處理器執行緒利用讀取放置緩衝區清空完成418,決定該工作執行緒是否已經清空放置緩衝區413。步驟585會重複執行到該協同處理器執行緒決定放置緩衝區413已經完成清空為止。然後在步驟590上,該協同處理器執行緒將該分配返回至放置緩衝區413。在步驟590上,該協同處理器執行緒解除放置緩衝區413的鎖定,允許其他協同處理器執行緒存取放置緩衝區413,包含在步驟570上無法獲得該鎖定的任何協同處理器執行緒。
第五B圖根據本發明的一個具體實施例,例示填滿取得緩衝區412之方法500。雖然已經結合第一圖、第二圖、第三圖、第四A圖和第四B圖的系統來描述該等方法步驟,精通技術人士將了解,設置來執行該等方法步驟(以任何順序)的任何系統都在本發明範疇內。在步驟505上,一協同處理器執行緒要求來自取得緩衝區412的資料。在步驟510上,該協同處理器執行緒決定取得緩衝區412是否為空白(被清空),並且若否,在步驟515上,該協同處理器執行緒執行基本操作,從取得緩衝區412擷取資料。運用一基本操作,確定當多重協同處理器執行緒嘗試同時從取得緩衝區412接收資料時,將擷取的每一該資料提供給一個並且唯一的協同處理器執行緒。
在步驟510上,若該協同處理器執行緒決定取得緩衝區412已滿,則在步驟520上,該協同處理器執行緒嘗試鎖定取得緩衝區412的存取,如此在取得緩衝區412重新填入處理期間,任何其他協同處理器執行緒都無法存取該取得緩衝區412。在步驟525上,該協同處理器執行緒決定是否已經獲得該鎖定,若否,則該協同處理器執行緒回到步驟510。否則,該協同處理器執行緒獲得該鎖定,並且在步驟530上,該協同處理器執行緒將取得緩衝區412空白的狀態通知在CPU 102上執行的該工作執行緒。 在步驟535上,該協同處理器執行緒利用讀取取得緩衝區已滿完成422,決定該工作執行緒是否已經填滿取得緩衝區412。步驟535會重複到該協同處理器執行緒決定取得緩衝區412已經被填滿為止。然後在步驟540上,該協同處理器執行緒接收來自取得緩衝區412的資料。在步驟545上,該協同處理器執行緒解除取得緩衝區412的鎖定,允許其他協同處理器執行緒存取取得緩衝區412,包含在步驟520上無法獲得該鎖定的任何協同處理器執行緒。
總結來說,開始執行一程式之前,一協同處理器將一些記憶體分配給該程式當成一放置緩衝區。該協同處理器執行該程式期間,若因為該放置緩衝區已滿而無法滿足由一執行緒對於將資料儲存在該放置緩衝區內的一要求,則該執行緒通知一工作執行緒。該工作執行緒利用動態分配該協同處理器無法存取的一記憶體內的一交換緩衝區,處理由該執行緒產生的一通知。然後該工作執行緒在該程式執行來清空該放置緩衝區期間,將該放置緩衝區分頁至該交換緩衝區內。該工作執行緒可讓執行緒在一程式由該協同處理器執行期間,動態接收記憶體分配。該程式執行期間可用的記憶體總量並不受分配給該放置緩衝區的記憶體總量限制。
一處理任務執行期間動態分配記憶體的能力,可讓一處理任務產生數量無限制的子代任務,而這些任務也可產生子代任務。換言之,巢狀並行任務的巢狀階層數不受限制。類似地,根據記憶體的固定分配,可產生的子代處理任務數以及每一任務與子代任務可消耗的記憶體總量並不受限。即使當該協同處理器執行不支援記憶體分頁或交換的一應用程式時,該虛擬記憶體結構可在該應用程式執行期間動態分配記憶體。
本發明的一個具體實施例可實施當成搭配電腦系統使用的程式產品。該程式產品的程式定義該等具體實施例(包含本文所述的方法)的功能,並且可包含在多種電腦可讀取儲存媒體上。例示的電腦可讀取儲存媒體包含但不受限於:(i)其上資訊永久儲存的不可抹寫儲存媒體(例如電腦內的唯讀記憶體裝置,例如CD-ROM光碟機可讀取的CD-ROM光碟、快閃記憶體、ROM晶片或任何一種固態非揮發性半導體記憶體);以及(ii)其上儲存可變資訊的可抹寫儲存媒體(例如磁碟機或硬碟內的磁碟或任何一 種固態隨機存取半導體記憶體)。
在此已經參考特定具體實施例說明本發明。不過精通此技術的人士將會了解,在不背離後附申請專利範圍內公佈之本發明廣泛精神以及領域下,可進行許多修改與變更。因此前述說明與圖式僅供參考而不做限制。

Claims (10)

  1. 一種在一執行期間將一記憶體分配給一程式之電腦實施方法,該方法包括:分配一第一記憶體內的一第一緩衝區,可由在一協同處理器上執行的複數個執行緒存取;在該協同處理器上執行一處理任務期間,通知在一中央處理單元上執行的一工作執行緒,告知該第一緩衝區已滿;分配一第二記憶體內的一交換緩衝區的一第一部分,其在該執行期間無法由該等複數個執行緒存取;以及交換該第一緩衝區進入該交換緩衝區的該第一部分內。
  2. 如申請專利範圍第1項之方法,另包括分配該第一記憶體內的一第三緩衝區,其可由該等複數個執行緒存取來產生一取得緩衝區,儲存該處理任務之該執行期間該等複數個執行緒所產生的一資料。
  3. 如申請專利範圍第2項之方法,另包括:在該處理任務於該協同處理器上執行期間;將該第三緩衝區已清空通知該工作執行緒;決定該交換緩衝區已被清空;以及將對應至該第一緩衝區的至少部分該第一記憶體交換進入該第三緩衝區。
  4. 如申請專利範圍第2項之方法,另包括:決定該第三緩衝區已被清空;以及將該第三緩衝區已被清空通知該工作執行緒;以及將該交換緩衝區的該第一部分交換進入對應至該第三緩衝區的部分該第一記憶體。
  5. 如申請專利範圍第1項之方法,另包括在將該第一緩衝區交換進入該交換緩衝區之前:決定該交換緩衝區已被清空;以及將該第二記憶體的一額外部分分配給該交換緩衝區。
  6. 如申請專利範圍第1項之方法,另包括: 分配該第一記憶體內可由該等複數個執行緒存取的一第二緩衝區,來產生一通訊緩衝區;以及初始化該通訊緩衝區。
  7. 如申請專利範圍第1項之方法,另包括在交換之後,將該第一緩衝區未填滿通知該等複數個執行緒。
  8. 如申請專利範圍第1項之方法,其中通知該工作執行緒包括:由該等複數個執行緒之一執行緒寫入,並且由該工作執行緒讀取該通訊緩衝區。
  9. 如申請專利範圍第1項之方法,其中該第一緩衝區為一放置緩衝區,該放置緩衝區係設置成在該處理任務之該執行期間,分配該記憶體給該等複數個執行緒,用於儲存該處理任務之該執行期間產生的至少一額外處理任務。
  10. 如申請專利範圍第1項之方法,其中該第一緩衝區以及該交換緩衝區都設置成一先進先出佇列或一記憶體分配佇池。
TW102116393A 2012-05-09 2013-05-08 有記憶體分配限制的協同處理器的虛擬記憶體結構 TWI475386B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US13/467,611 US8904068B2 (en) 2012-05-09 2012-05-09 Virtual memory structure for coprocessors having memory allocation limitations

Publications (2)

Publication Number Publication Date
TW201416856A TW201416856A (zh) 2014-05-01
TWI475386B true TWI475386B (zh) 2015-03-01

Family

ID=49475718

Family Applications (1)

Application Number Title Priority Date Filing Date
TW102116393A TWI475386B (zh) 2012-05-09 2013-05-08 有記憶體分配限制的協同處理器的虛擬記憶體結構

Country Status (4)

Country Link
US (1) US8904068B2 (zh)
CN (1) CN103389944A (zh)
DE (2) DE102013208423B4 (zh)
TW (1) TWI475386B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI601017B (zh) * 2016-01-20 2017-10-01 后旺科技股份有限公司 複合式硬碟的交握方法
US10002106B2 (en) 2016-04-20 2018-06-19 Allone Solution Co., Ltd. Handshaking method of hybrid hard-disk drive

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101950282B (zh) * 2010-08-30 2012-05-23 中国科学院计算技术研究所 一种多处理器系统及其同步引擎
US9396030B2 (en) * 2013-03-13 2016-07-19 Samsung Electronics Co., Ltd. Quota-based adaptive resource balancing in a scalable heap allocator for multithreaded applications
US20140331014A1 (en) * 2013-05-01 2014-11-06 Silicon Graphics International Corp. Scalable Matrix Multiplication in a Shared Memory System
US10089240B2 (en) * 2014-12-26 2018-10-02 Wisconsin Alumni Research Foundation Cache accessed using virtual addresses
US9785480B2 (en) 2015-02-12 2017-10-10 Netapp, Inc. Load balancing and fault tolerant service in a distributed data system
WO2017190266A1 (zh) * 2016-05-03 2017-11-09 华为技术有限公司 管理转址旁路缓存的方法和多核处理器
GB2551529B (en) * 2016-06-21 2018-09-12 Advanced Risc Mach Ltd Switching between private cache and shared memory to handle atomic operations
CN107885666B (zh) * 2016-09-28 2021-07-20 华为技术有限公司 一种内存管理方法和装置
US10552321B2 (en) 2017-08-04 2020-02-04 Microsoft Technology Licensing, Llc Flexible buffer sizing in graphics processors
US10560394B2 (en) * 2017-09-22 2020-02-11 Cisco Technology, Inc. Dynamic transmission side scaling
US10713746B2 (en) * 2018-01-29 2020-07-14 Microsoft Technology Licensing, Llc FIFO queue, memory resource, and task management for graphics processing
TWI650648B (zh) * 2018-02-09 2019-02-11 慧榮科技股份有限公司 系統晶片及存取系統晶片中記憶體的方法
US10719268B2 (en) 2018-06-29 2020-07-21 Microsoft Technology Licensing, Llc Techniques for safely and efficiently enqueueing and dequeueing data on a graphics processor
US10628072B2 (en) * 2018-08-21 2020-04-21 Samsung Electronics Co., Ltd. Scalable architecture enabling large memory system for in-memory computations
US10459849B1 (en) 2018-08-31 2019-10-29 Sas Institute Inc. Scheduling operations in an access-controlled region of memory
US10871996B2 (en) * 2018-10-17 2020-12-22 Oracle International Corporation Detection, modeling and application of memory bandwith patterns
US10909652B2 (en) * 2019-03-15 2021-02-02 Intel Corporation Enabling product SKUs based on chiplet configurations
US11893266B2 (en) 2019-05-03 2024-02-06 University of Pittsburgh—of the Commonwealth System of Higher Education Method and apparatus for adaptive page migration and pinning for oversubscribed irregular applications
CN110417514B (zh) * 2019-07-22 2022-02-01 北京地平线机器人技术研发有限公司 数据发送方法和装置、数据接收方法和装置
JP7280508B2 (ja) * 2019-09-19 2023-05-24 富士通株式会社 情報処理装置、情報処理方法および仮想マシン接続管理プログラム
EP3857371A1 (en) * 2019-12-19 2021-08-04 Google LLC Resource management unit for capturing operating system configuration states and memory management
WO2021126216A1 (en) 2019-12-19 2021-06-24 Google Llc Resource management unit for capturing operating system configuration states and offloading tasks
US12056382B2 (en) 2020-05-26 2024-08-06 Qualcomm Incorporated Inference in memory
CN112822494A (zh) * 2020-12-30 2021-05-18 稿定(厦门)科技有限公司 双缓冲编码系统及其控制方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080162859A1 (en) * 2007-01-03 2008-07-03 International Business Machines Corporation Systems and methods for reclaiming resident buffers on demand
TWI317477B (en) * 2003-06-24 2009-11-21 Research In Motion Ltd Detection of out of memory and graceful shutdown
US20100312985A1 (en) * 2009-06-09 2010-12-09 Rostedt Steven D Mechanism for a Lockless Ring Buffer in Overwrite Mode
TWI340572B (en) * 2005-05-02 2011-04-11 Broadcom Corp Total dynamic sharing of a transaction queue

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6076137A (en) * 1997-12-11 2000-06-13 Lexar Media, Inc. Method and apparatus for storing location identification information within non-volatile memory devices
US6909443B1 (en) * 1999-04-06 2005-06-21 Microsoft Corporation Method and apparatus for providing a three-dimensional task gallery computer interface
US6931641B1 (en) * 2000-04-04 2005-08-16 International Business Machines Corporation Controller for multiple instruction thread processors
US7155727B2 (en) * 2001-06-19 2006-12-26 Sun Microsystems, Inc. Efficient data buffering in a multithreaded environment
WO2003023656A1 (en) * 2001-09-13 2003-03-20 Jda Software Group, Inc Database interface architecture with time-based load balancing in a real-time environment
US20050120351A1 (en) * 2003-10-31 2005-06-02 De Bonet Jeremy S. System and method for a synchronized shared buffer architecture for multimedia players
US7603544B2 (en) * 2004-12-23 2009-10-13 Intel Corporation Dynamic allocation of a buffer across multiple clients in multi-threaded processor without performing a complete flush of data associated with allocation
US7937534B2 (en) * 2005-12-30 2011-05-03 Rajesh Sankaran Madukkarumukumana Performing direct cache access transactions based on a memory access data structure
US20090183161A1 (en) * 2008-01-16 2009-07-16 Pasi Kolinummi Co-processor for stream data processing
US9015446B2 (en) * 2008-12-10 2015-04-21 Nvidia Corporation Chipset support for non-uniform memory access among heterogeneous processing units
US8127074B2 (en) * 2009-06-09 2012-02-28 Red Hat, Inc. Mechanism for a reader page for a ring buffer
US8572617B2 (en) * 2009-07-21 2013-10-29 Sas Institute Inc. Processor-implemented systems and methods for event handling
US9952977B2 (en) * 2009-09-25 2018-04-24 Nvidia Corporation Cache operations and policies for a multi-threaded client
US8752018B2 (en) * 2011-06-21 2014-06-10 Nvidia Corporation Emitting coherent output from multiple threads for printf

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI317477B (en) * 2003-06-24 2009-11-21 Research In Motion Ltd Detection of out of memory and graceful shutdown
TWI340572B (en) * 2005-05-02 2011-04-11 Broadcom Corp Total dynamic sharing of a transaction queue
US20080162859A1 (en) * 2007-01-03 2008-07-03 International Business Machines Corporation Systems and methods for reclaiming resident buffers on demand
US20100312985A1 (en) * 2009-06-09 2010-12-09 Rostedt Steven D Mechanism for a Lockless Ring Buffer in Overwrite Mode

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI601017B (zh) * 2016-01-20 2017-10-01 后旺科技股份有限公司 複合式硬碟的交握方法
US10002106B2 (en) 2016-04-20 2018-06-19 Allone Solution Co., Ltd. Handshaking method of hybrid hard-disk drive

Also Published As

Publication number Publication date
DE102013208423B4 (de) 2023-08-03
CN103389944A (zh) 2013-11-13
DE102013022712B4 (de) 2024-04-18
DE102013208423A1 (de) 2013-11-14
US20130305009A1 (en) 2013-11-14
US8904068B2 (en) 2014-12-02
TW201416856A (zh) 2014-05-01

Similar Documents

Publication Publication Date Title
TWI475386B (zh) 有記憶體分配限制的協同處理器的虛擬記憶體結構
TWI529626B (zh) 在複數執行緒處理單元中的效率式記憶體虛擬化
TWI488118B (zh) 處理系統中動態產生任務的傳訊、排序和執行
TWI525437B (zh) 在複數執行緒處理單元中的效率式記憶體虛擬化
TWI512466B (zh) 在複數執行緒處理單元中的效率式記憶體虛擬化
TWI624791B (zh) 用於在多緒處理單元中改善性能之技術
TWI531974B (zh) 管理巢狀執行串流的方法和系統
TWI490779B (zh) 無鎖的先進先出裝置
TWI509519B (zh) 維持公平和秩序的資源管理子系統
US9542227B2 (en) Parallel dynamic memory allocation using a lock-free FIFO
TWI588653B (zh) 針對記憶體存取的動態記憶列模式定址
TWI533222B (zh) 處理任務的工作分配控制
US9710306B2 (en) Methods and apparatus for auto-throttling encapsulated compute tasks
TWI489392B (zh) 多個應用程式分享的圖形處理單元
CN103226481A (zh) 自动从属任务启动
TW201413456A (zh) 處理巢狀串流事件的方法和系統
US9417881B2 (en) Parallel dynamic memory allocation using a lock-free pop-only FIFO
TWI503750B (zh) 運算任務狀態的封裝
TWI525438B (zh) 透過貼圖硬體執行記憶體存取操作之技術
TW201333829A (zh) 分配運算工作的參考運數器
TW201432573A (zh) 工作佇列型圖形處理單元工作創建
TW201351276A (zh) 計算工作的排程和執行
US10235208B2 (en) Technique for saving and restoring thread group operating state

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees