共享虛擬存儲器的制造方法
【專利摘要】本發(fā)明的多個實施例提供了用于CPU-GPU平臺的編程模型。特別是,本發(fā)明的多個實施例提供用于集成和分離設(shè)備的統(tǒng)一編程模型。該模型也可以統(tǒng)一地對多個GPU卡和混合GPU系統(tǒng)(分離的和集成的)工作。這允許軟件銷售商編寫單個應(yīng)用堆棧并使其面向所有不同的平臺。此外,本發(fā)明的實施例提供了在CPU和GPU之間的共享存儲器模型。代替了共享整個虛擬地址空間,僅僅虛擬地址空間的一部分需要被共享。這允許在分離的和集成的設(shè)置中的高效實施。
【專利說明】共享虛擬存儲器
[0001] 本申請是PCT國際申請?zhí)枮镻CT/US2009/063368、中國國家申請?zhí)枮?200980154460. 7、題為"共享虛擬存儲器"的申請的分案申請。
【背景技術(shù)】
[0002] 這通常涉及共享虛擬存儲器實施方式。
[0003] 計算工業(yè)正在朝向多樣性的平臺體系結(jié)構(gòu)發(fā)展,該平臺體系結(jié)構(gòu)由通用CPU以及 作為分離設(shè)備或集成設(shè)備而附連的可編程GPU所構(gòu)成。這些GPU通過連續(xù)或非連續(xù)互連來 連接,具有不同的工業(yè)標準體系結(jié)構(gòu)(ISA)并可使用它們自己的操作系統(tǒng)。
[0004] 由通用處理器(CPU)以及圖形處理器(GPU)的組合所組成的計算平臺已經(jīng)無處不 在,特別是在客戶機計算空間中。如今,幾乎所有桌面和筆記本平臺都載有一個或多個CPU 以及集成或分離的GPU。例如,一些平臺具有與集成圖形芯片組成對的處理器,而其余的使 用通過諸如PCI-Express之類的接口連接的分離圖形處理器。一些平臺載有CPU和GPU的 組合。例如,它們中的一些包括更為集成的CPU-GPU平臺,而其他的包括圖形處理器以補償 集成GPU供給。
[0005] 這些CPU-GPU平臺可提供在圖形處理、醫(yī)療成像、數(shù)據(jù)挖掘、以及其他領(lǐng)域的非圖 形工作負載上的極大的性能提升。大量的數(shù)據(jù)并行GPU可被用于獲取代碼的高度并行部分 上的高吞吐量。多樣性的CPU-GPU平臺可具有多個獨特的體系結(jié)構(gòu)約束,諸如 :
[0006] *GPU可以集成和分離的方式連接。例如,一些圖形處理器與芯片組集成。另一方 面,其他當前的GPU以分離方式通過諸如PCI-Express之類的接口附連。雖然硬件可提供 CPU和集成圖形處理器之間的緩存一致性,但是對分離的GPU卻很難如此。系統(tǒng)也可具有混 合配置,其中低功率低性能GPU與CPU集成,且具有更高性能的分離GPU。最終,平臺也可具 有多個GPU卡。
[0007] *CPU和GPU可具有不同的操作系統(tǒng)。例如,處理器可具有它自己的操作系統(tǒng)內(nèi)核。 這意味著虛擬存儲器翻譯機制在CPU和GPU之間可能是不同的。相同的虛擬地址可能被通 過CPU和GPU上的兩個不同的頁表被同時映射到兩個不同的物理地址。這也意味著系統(tǒng)環(huán) 境(加載器、鏈接器、等等)在CPU和GPU之間可以是不同的。例如,加載器可將應(yīng)用加載 在CPU和GPU上的不同基地址。
[0008] *CPU和GPU可具有不同的ISA,并因此相同的代碼可能無法在兩個處理器上運行。 [0009] 附圖簡述
[0010] 圖1是根據(jù)一個實施例的CPU-GPU存儲器模型的圖示。
[0011] 圖2是用于增加了所有權(quán)權(quán)限的共享存儲器模型的一個實施例的流程圖。
[0012] 圖3是共享存儲器模型的一個實施例的流程圖。
[0013] 圖4是利用PCI開口的共享存儲器模型的一個實施例的流程圖。
[0014] 圖5是利用PCI開口的共享存儲器模型的一個實施例的流程圖。
[0015] 圖6是操作中的共享存儲器模型的一個實施例的流程圖。
[0016] 詳細描述
[0017] 本發(fā)明的多個實施例提供了用于CPU-GPU平臺的編程模型。特別是,本發(fā)明的多 個實施例提供用于集成和分離設(shè)備的統(tǒng)一編程模型。該模型也可以統(tǒng)一地對多個GPU卡和 混合GPU系統(tǒng)(分離的和集成的)工作。這允許軟件銷售商編寫單個應(yīng)用堆棧并將使其面 向所有不同的平臺。此外,本發(fā)明的實施例提供了在CPU和GPU之間的共享存儲器模型。 代替了共享整個虛擬地址空間,僅僅一部分虛擬地址空間需要被共享。這允許在分離的和 集成的設(shè)置中的有效實現(xiàn)。進一步的,語言注釋可被用于區(qū)分必須被運行在GPU上的代碼。 語言支持可被擴展為包括諸如函數(shù)指針之類的特征。
[0018] 共享存儲器模型的諸實施例提供了新穎的編程式樣。特別是,數(shù)據(jù)結(jié)構(gòu)可以在CPU 和GPU之間無縫共享,并且可以從一端向另一端傳遞指針而不要求任何格式編組。例如,在 一個實施例中,游戲引擎和包括物理、人工智能(AI)以及渲染。物理和AI代碼最好在CPU 上執(zhí)行,而渲染最好在GPU上執(zhí)行。諸如場景圖片之類的數(shù)據(jù)結(jié)構(gòu)可能需要在CPU和GPU 之間共享。在一些當前的編程環(huán)境中這樣的執(zhí)行模型可能是行不通的,因為場景圖片需要 被來來回回地串行化(或格式編組)。然而在共享存儲器模型的諸實施例中,場景圖片可簡 單地位于共享存儲器中,并可被CPU和GPU共同訪問。
[0019] 在一個實施例中,實現(xiàn)了包括語言和運行時支持的完全編程環(huán)境。多個高度并行 的非圖形負載可經(jīng)由端口與該環(huán)境對接。該實現(xiàn)可工作在多樣性的操作系統(tǒng)上,即,在CPU 和GPU上運行不同操作系統(tǒng)。此外,可在CPU和GPU之間允許用戶級通信。這可使得應(yīng)用 堆棧更為高效,因為可以消除CPU-GPU通信中的0S驅(qū)動器堆棧的開銷。該編程環(huán)境可經(jīng)由 端口與兩個不同的多樣性CPU-GPU平臺模擬器對接--一個模擬作為分離設(shè)備附加到CPU 的GPU,另一個模擬集成CPU-GPU平臺。
[0020] 總之,CPU-GPU平臺的編程模型的諸實施例可以:
[0021] ?為分離的、集成的、多GPU卡和混合GPU配置提供統(tǒng)一編程模型。
[0022] ?在CPU和GPU之間提供共享存儲器語義,允許在CPU和GPU之間自由地傳遞指針 并共享數(shù)據(jù)結(jié)構(gòu)。
[0023] ?被實現(xiàn)在具有CPU和GPU上不同的ISA和不同操作系統(tǒng)的多樣性的CPU-GPU平 臺中。
[0024] ?在CPU和GPU之間使能用戶級通信,因此使得應(yīng)用堆棧更為高效。
[0025] 存儲器樽型
[0026] 圖1是根據(jù)一個實施例的GPU-CPU存儲器模型的圖示。在一個實施例中,存儲器 模型100提供CPU110和GPU120之間的共享虛擬地址窗口 130,諸如以分割全局地址空間 (PGAS)語言。在CPU100和GPU120之間共享的任何數(shù)據(jù)結(jié)構(gòu)通常必須被編程者分配在該 空間130中。本系統(tǒng)可提供將數(shù)據(jù)分配在該空間130中的特殊存儲器分配(malloc)函數(shù)。 靜態(tài)變量可被注釋以類型量詞,以使它們被分配在共享窗口 130中。然而,與PGAS語言不 同,在共享窗口中沒有親和力(affinity)的概念。這是因為在共享空間130中的數(shù)據(jù)隨著 它被每個處理器所使用而在CPU和GPU高速緩存之間遷移。也與PGAS實現(xiàn)方式不同,指針 的表示在共享和私有空間中不發(fā)生改變。剩余的虛擬地址空間對CPU110和GPU120而言是 私有的。默認地,數(shù)據(jù)被分配在該空間130中,且對另一側(cè)不可見。該分割地址空間方式可 削減需要保持一致性的存儲量,并實現(xiàn)對分離設(shè)備的更為高效的實施。
[0027] 該存儲器模型的實施例可被擴展到多GPU和混合配置中。特別是,共享虛擬地址 窗口可以跨所有的設(shè)備而擴展。被分配在該共享地址窗口 130中的任何數(shù)據(jù)結(jié)構(gòu)可對所有 代理而言都是可見的,且該空間中的指針可以自由地交換。此外,每個代理具有其自有的私 有存儲器。
[0028] 由于多個原因,可使用共享地址空間中的釋放一致性。第一,本系統(tǒng)僅僅需要記住 連續(xù)釋放指針之間的所有寫入,而不是單獨寫入的序列。這更易于在釋放點進行批量轉(zhuǎn)換 (諸如,在同一時間對若干頁),這在分離配置中很重要。第二,這允許存儲器更新被完全保 持在本地直到釋放點,這在分離配置中很重要。第三,釋放一致性模型可以對CPU-GPU平臺 的編程模式是良好的匹配,因為存在自然釋放和獲取點。例如,從CPU到GPU的調(diào)用是一個 這樣的點。在調(diào)用之前使得任何CPU更新對GPU可見可能不起到任何作用,并且對向CPU 更新如何變得可見強加任何命令都是沒有意義的,只要它們都在GPU開始執(zhí)行之前是可見 的既可。進一步的,所提出的C/C++存儲器模型可被容易地映射到共享存儲器空間。通常, 非競爭程序可能不受共享存儲器空間的弱連續(xù)性模型的影響。該實現(xiàn)方式可能不需要被限 制在為競爭程序提供更強的保證。然而,不同的實施例可選擇為共享空間提供不同的連續(xù) 性模型。
[0029] 圖2是用于增加了所有權(quán)權(quán)限的共享存儲器模型的一個實施例的流程圖。順序 200可被實現(xiàn)在固件、軟件或硬件中。軟件實施例可被存儲在諸如光盤、磁盤或半導(dǎo)體存儲 器之類的計算機可讀介質(zhì)上。特別是,可向共享存儲器模型的諸實施例添加所有權(quán)權(quán)限以 實現(xiàn)進一步的一致性優(yōu)化。在共享虛擬地址窗口中,CPU或GPU可指定其擁有特定的地址 塊(框210)。如果在共享窗口中的地址范圍是由CPU所擁有的(框220),那么CPU知道 無法訪問那些地址并因此不需要維持那些地址與GPU的一致性(框230)。例如,這可 以避免向GPU發(fā)送任何監(jiān)聽或其他一致性信息。對于GPU擁有的地址也一樣。如果GPU訪 問CPU擁有的地址,那么該地址變?yōu)榉菗碛械模▽τ贕PU擁有的地址存在對稱的行為)?;?者,由GPU (CPU)對CPU (GPU)擁有的地址的訪問可以觸發(fā)錯誤情況。
[0030] 本發(fā)明的諸實施例可提供這些所有權(quán)權(quán)限以利用公共CPU-GPU使用模型。例如, CPU首先訪問一些數(shù)據(jù)(諸如,初始化數(shù)據(jù)結(jié)構(gòu)),并且隨后將其轉(zhuǎn)交給GPU(諸如,以數(shù)據(jù) 并行方式在數(shù)據(jù)結(jié)構(gòu)上進行計算),并隨后(PU分析計算結(jié)構(gòu),等等。所有權(quán)權(quán)限允許應(yīng)用 通知系統(tǒng)該臨時局部性,并優(yōu)化一致性實施方式。注意到,這些所有權(quán)權(quán)限是優(yōu)化提示,并 且本系統(tǒng)可以合法地忽略這些提示。
[0031] 私有化和全局化
[0032] 在一個實施例中,共享數(shù)據(jù)可通過從共享空間復(fù)制到私有空間而被私有化。不含 指針數(shù)據(jù)結(jié)構(gòu)可簡單地通過復(fù)制存儲器內(nèi)容而被私有化。當復(fù)制含指針數(shù)據(jù)結(jié)構(gòu)時,指向 共享數(shù)據(jù)的指針必須被轉(zhuǎn)換為指向私有數(shù)據(jù)的指針。
[0033] 私有數(shù)據(jù)可以通過從私有空間復(fù)制到共享空間并對其他計算可見而被全局化。不 含指針數(shù)據(jù)結(jié)構(gòu)可簡單地通過復(fù)制存儲器內(nèi)容而被全局化。當復(fù)制含指針數(shù)據(jù)結(jié)構(gòu)時,指 向私有數(shù)據(jù)的指針必須被轉(zhuǎn)換為指向共享數(shù)據(jù)的指針(私有化示例的相反示例)。
[0034] 例如,在一個實施例中,考慮在私有和共享空間中的節(jié)點鏈表。對于私有鏈表的類 型定義是標準的:
[0035]
【權(quán)利要求】
1. 一種異構(gòu)CPU和GPU系統(tǒng)平臺,包括: 中央處理器CPU和圖形處理器GPU的組合,所述CPU包括第一高速緩存,所述GPU包括 第二高速緩存,在CPU和GPU之間提供高速緩存一致性; 共享物理存儲器,可由CPU和GPU訪問,所述共享物理存儲器將虛擬存儲器空間映射為 是對CPU和GPU都可訪問的; 其中所述共享物理存儲器存儲數(shù)據(jù)結(jié)構(gòu); 其中所述CPU將指向所述數(shù)據(jù)結(jié)構(gòu)的指針傳遞到所述GPU ; 其中所述GPU在所述數(shù)據(jù)結(jié)構(gòu)上執(zhí)行計算以獲得一結(jié)果;以及 其中所述CPU讀取所述計算的所述結(jié)果。
2. 如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括: 所述數(shù)據(jù)結(jié)構(gòu)是包括指針的數(shù)據(jù)結(jié)構(gòu),并且其中CPU和GPU將所述包括指針的數(shù)據(jù)結(jié) 構(gòu)在CPU的高速緩存和GPU的高速緩存之間遷移。
3. 如權(quán)利要求1所述的系統(tǒng),其特征在于,CPU將指針定義為位于所述虛擬存儲器空間 中。
4. 如權(quán)利要求3所述的系統(tǒng),其特征在于,通過將數(shù)據(jù)結(jié)構(gòu)復(fù)制到從共享空間復(fù)制到 所述共享物理存儲器以及將數(shù)據(jù)結(jié)構(gòu)從所述共享物理存儲器復(fù)制出來,CPU和GPU將所述 數(shù)據(jù)結(jié)構(gòu)在CPU的高速緩存和GPU的高速緩存之間遷移。
5. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述GPU訪問指針參考而不需要任何數(shù)據(jù)格 式編組。
6. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述數(shù)據(jù)結(jié)構(gòu)是場景圖片,并且所述GPU基 于所述指針而訪問所述場景圖片。
7. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述GPU進一步將所述數(shù)據(jù)結(jié)構(gòu)寫回共享物 理存儲器空間,并且所述CPU進一步從共享物理存儲器空間讀取所述數(shù)據(jù)結(jié)構(gòu)。
8. 如權(quán)利要求7所述的系統(tǒng),其特征在于,所述CPU通過參考與所述CPU相關(guān)聯(lián)的頁表 或翻譯后備緩沖器,而將所述數(shù)據(jù)結(jié)構(gòu)分配入所述虛擬存儲器空間中的一地址。
9. 如權(quán)利要求8所述的系統(tǒng),其特征在于,所述GPU通過參考與所述GPU相關(guān)聯(lián)的頁表 或翻譯后備緩沖器,而訪問所述地址處的所述數(shù)據(jù)結(jié)構(gòu)。
10. 如權(quán)利要求1所述的系統(tǒng),其特征在于: 所述CPU進一步從與所述CPU的頁表中的虛擬存儲器地址相關(guān)聯(lián)的第一物理存儲器地 址中讀取所述數(shù)據(jù)結(jié)構(gòu);以及 所述GPU進一步從與所述GPU的頁表中的虛擬存儲器地址相關(guān)聯(lián)的第二物理存儲器地 址中讀取所述數(shù)據(jù)結(jié)構(gòu)。
11. 如權(quán)利要求10所述的系統(tǒng),其特征在于: 所述第一物理地址空間對所述GPU是不可訪問的;以及 所述第二物理地址空間對所述CPU是不可訪問的。
12. 如權(quán)利要求11所述的系統(tǒng),其特征在于,所述CPU將所述第一地址空間與所述共享 物理存儲器的至少一部分中的內(nèi)容相同步。
13. 如權(quán)利要求12所述的系統(tǒng),其特征在于,當?shù)谝贿M程到達第一釋放點時,所述CPU 同步所述第一地址空間。
14. 權(quán)利要求13所述的系統(tǒng),其特征在于,所述第一釋放點包括釋放互斥體或命中屏 障體。
15. 權(quán)利要求1所述的系統(tǒng),其特征在于,所述CPU使用指示所述虛擬存儲器地址的標 記來訪問所述數(shù)據(jù)結(jié)構(gòu),并將所述標記復(fù)制到所述共享物理存儲器。
【文檔編號】G06F12/10GK104298621SQ201410562398
【公開日】2015年1月21日 申請日期:2009年11月5日 優(yōu)先權(quán)日:2008年11月13日
【發(fā)明者】H·陳, Y·高, 周小成, S·閆, P·張, J·方, A·孟德爾森, B·薩哈, 莫罕·拉賈戈帕蘭 申請人:英特爾公司