两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

共享虛擬存儲(chǔ)器的制作方法

文檔序號(hào):6596157閱讀:543來源:國(guó)知局
專利名稱:共享虛擬存儲(chǔ)器的制作方法
共享虛擬存儲(chǔ)器
背景技術(shù)
這通常涉及共享虛擬存儲(chǔ)器實(shí)施方式。計(jì)算工業(yè)正在朝向多樣性的平臺(tái)體系結(jié)構(gòu)發(fā)展,該平臺(tái)體系結(jié)構(gòu)由通用CPU以及作為分離設(shè)備或集成設(shè)備而附連的可編程GPU所構(gòu)成。這些GPU通過連續(xù)或非連續(xù)互連來連接,具有不同的工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)并可使用它們自己的操作系統(tǒng)。由通用處理器(CPU)以及圖形處理器(GPU)的組合所組成的計(jì)算平臺(tái)已 經(jīng)無處不在,特別是在客戶機(jī)計(jì)算空間中。如今,幾乎所有桌面和筆記本平臺(tái)都載有一個(gè)或多個(gè)CPU以及集成或分離的GPU。例如,一些平臺(tái)具有與集成圖形芯片組成對(duì)的處理器,而其余的使用通過諸如PCI-Express之類的接口連接的分離圖形處理器。一些平臺(tái)載有CPU和GPU的組合。例如,它們中的一些包括更為集成的CPU-GPU平臺(tái),而其他的包括圖形處理器以補(bǔ)償集成GPU供給。這些CPU-GPU平臺(tái)可提供在圖形處理、醫(yī)療成像、數(shù)據(jù)挖掘、以及其他領(lǐng)域的非圖形工作負(fù)載上的極大的性能提升。大量的數(shù)據(jù)并行GPU可被用于獲取代碼的高度并行部分上的高吞吐量。多樣性的CPU-GPU平臺(tái)可具有多個(gè)獨(dú)特的體系結(jié)構(gòu)約束,諸如 GPU可以集成和分離的方式連接。例如,一些圖形處理器與芯片組集成。另一方面,其他當(dāng)前的GPU以分離方式通過諸如PCI-Express之類的接口附連。雖然硬件可提供CPU和集成圖形處理器之間的緩存一致性,但是對(duì)分離的GPU卻很難如此。系統(tǒng)也可具有混合配置,其中低功率低性能GPU與CPU集成,且具有更高性能的分離GPU。最終,平臺(tái)也可具有多個(gè)GPU卡。
CPU和GPU可具有不同的操作系統(tǒng)。例如,處理器可具有它自己的操作系統(tǒng)內(nèi)核。這意味著虛擬存儲(chǔ)器翻譯機(jī)制在CPU和GPU之間可能是不同的。相同的虛擬地址可能被通過CPU和GPU上的兩個(gè)不同的頁表被同時(shí)映射到兩個(gè)不同的物理地址。這也意味著系統(tǒng)環(huán)境(加載器、鏈接器、等等)在CPU和GPU之間可以是不同的。例如,加載器可將應(yīng)用加載在CPU和GPU上的不同基地址。
CPU和GPU可具有不同的ISA,并因此相同的代碼可能無法在兩個(gè)處理器上運(yùn)行。附圖簡(jiǎn)述圖I是根據(jù)一個(gè)實(shí)施例的CPU-GPU存儲(chǔ)器模型的圖示。圖2是用于增加了所有權(quán)權(quán)限的共享存儲(chǔ)器模型的一個(gè)實(shí)施例的流程圖。圖3是共享存儲(chǔ)器模型的一個(gè)實(shí)施例的流程圖。圖4是利用PCI開口的共享存儲(chǔ)器模型的一個(gè)實(shí)施例的流程圖。圖5是利用PCI開口的共享存儲(chǔ)器模型的一個(gè)實(shí)施例的流程圖。圖6是操作中的共享存儲(chǔ)器模型的一個(gè)實(shí)施例的流程圖。詳細(xì)描述本發(fā)明的多個(gè)實(shí)施例提供了用于CPU-GPU平臺(tái)的編程模型。特別是,本發(fā)明的多個(gè)實(shí)施例提供用于集成和分離設(shè)備的統(tǒng)一編程模型。該模型也可以統(tǒng)一地對(duì)多個(gè)GPU卡和混合GPU系統(tǒng)(分離的和集成的)工作。這允許軟件銷售商編寫單個(gè)應(yīng)用堆棧并將使其面向所有不同的平臺(tái)。此外,本發(fā)明的實(shí)施例提供了在CPU和GPU之間的共享存儲(chǔ)器模型。代替了共享整個(gè)虛擬地址空間,僅僅一部分虛擬地址空間需要被共享。這允許在分離的和集成的設(shè)置中的有效實(shí)現(xiàn)。進(jìn)一步的,語言注釋可被用于區(qū)分必須被運(yùn)行在GPU上的代碼。語言支持可被擴(kuò)展為包括諸如函數(shù)指針之類的特征。共享存儲(chǔ)器模型的諸實(shí)施例提供了新穎的編程式樣。特別是,數(shù)據(jù)結(jié)構(gòu)可以在CPU和GPU之間無縫共享,并且可以從一端向另 一端傳遞指針而不要求任何格式編組。例如,在一個(gè)實(shí)施例中,游戲引擎和包括物理、人工智能(Al)以及渲染。物理和Al代碼最好在CPU上執(zhí)行,而渲染最好在GPU上執(zhí)行。諸如場(chǎng)景圖片之類的數(shù)據(jù)結(jié)構(gòu)可能需要在CPU和GPU之間共享。在一些當(dāng)前的編程環(huán)境中這樣的執(zhí)行模型可能是行不通的,因?yàn)閳?chǎng)景圖片需要被來來回回地串行化(或格式編組)。然而在共享存儲(chǔ)器模型的諸實(shí)施例中,場(chǎng)景圖片可簡(jiǎn)單地位于共享存儲(chǔ)器中,并可被CPU和GPU共同訪問。在一個(gè)實(shí)施例中,實(shí)現(xiàn)了包括語言和運(yùn)行時(shí)支持的完全編程環(huán)境。多個(gè)高度并行的非圖形負(fù)載可經(jīng)由端口與該環(huán)境對(duì)接。該實(shí)現(xiàn)可工作在多樣性的操作系統(tǒng)上,即,在CPU和GPU上運(yùn)行不同操作系統(tǒng)。此外,可在CPU和GPU之間允許用戶級(jí)通信。這可使得應(yīng)用堆棧更為高效,因?yàn)榭梢韵鼵PU-GPU通信中的OS驅(qū)動(dòng)器堆棧的開銷。該編程環(huán)境可經(jīng)由端口與兩個(gè)不同的多樣性CPU-GPU平臺(tái)模擬器對(duì)接一一個(gè)模擬作為分離設(shè)備附加到CPU的GPU,另一個(gè)模擬集成CPU-GPU平臺(tái)??傊?,CPU-GPU平臺(tái)的編程模型的諸實(shí)施例可以 為分離的、集成的、多GPU卡和混合GPU配置提供統(tǒng)一編程模型。 在CPU和GPU之間提供共享存儲(chǔ)器語義,允許在CPU和GPU之間自由地傳遞指針并共享數(shù)據(jù)結(jié)構(gòu)。 被實(shí)現(xiàn)在具有CPU和GPU上不同的ISA和不同操作系統(tǒng)的多樣性的CPU-GPU平臺(tái)中。 在CPU和GPU之間使能用戶級(jí)通信,因此使得應(yīng)用堆棧更為高效。存儲(chǔ)器模型圖I是根據(jù)一個(gè)實(shí)施例的GPU-CPU存儲(chǔ)器模型的圖示。在一個(gè)實(shí)施例中,存儲(chǔ)器模型100提供CPU 110和GPU 120之間的共享虛擬地址窗口 130,諸如以分割全局地址空間(PGAS)語言。在CPU 100和GPU 120之間共享的任何數(shù)據(jù)結(jié)構(gòu)通常必須被編程者分配在該空間130中。本系統(tǒng)可提供將數(shù)據(jù)分配在該空間130中的特殊存儲(chǔ)器分配(malloc)函數(shù)。靜態(tài)變量可被注釋以類型量詞,以使它們被分配在共享窗口 130中。然而,與PGAS語言不同,在共享窗口中沒有親和力(affinity)的概念。這是因?yàn)樵诠蚕砜臻g130中的數(shù)據(jù)隨著它被每個(gè)處理器所使用而在CPU和GPU高速緩存之間遷移。也與PGAS實(shí)現(xiàn)方式不同,指針的表示在共享和私有空間中不發(fā)生改變。剩余的虛擬地址空間對(duì)CPU 110和GPU 120而言是私有的。默認(rèn)地,數(shù)據(jù)被分配在該空間130中,且對(duì)另一側(cè)不可見。該分割地址空間方式可削減需要保持一致性的存儲(chǔ)量,并實(shí)現(xiàn)對(duì)分離設(shè)備的更為高效的實(shí)施。該存儲(chǔ)器模型的實(shí)施例可被擴(kuò)展到多GPU和混合配置中。特別是,共享虛擬地址窗口可以跨所有的設(shè)備而擴(kuò)展。被分配在該共享地址窗口 130中的任何數(shù)據(jù)結(jié)構(gòu)可對(duì)所有代理而言都是可見的,且該空間中的指針可以自由地交換。此外,每個(gè)代理具有其自有的私有存儲(chǔ)器。由于多個(gè)原因,可使用共享地址空間中的釋放一致性。第一,本系統(tǒng)僅僅需要記住連續(xù)釋放指針之間的所有寫入,而不是單獨(dú)寫入的序列。這更易于在釋放點(diǎn)進(jìn)行批量轉(zhuǎn)換(諸如,在同一時(shí)間對(duì)若干頁),這在分離配置中很重要。第二,這允許存儲(chǔ)器更新被完全保持在本地直到釋放點(diǎn),這在分離配置中很重要。第三,釋放一致性模型可以對(duì)CPU-GPU平臺(tái)的編程模式是良好的匹配,因?yàn)榇嬖谧匀会尫藕瞳@取點(diǎn)。例如,從CPU到GPU的調(diào)用是一個(gè)這樣的點(diǎn)。在調(diào)用之前使得任何CPU更新對(duì)GPU可見可能不起到任何作用,并且對(duì)向CPU更新如何變得可見強(qiáng)加任何命令都是沒有意義的,只要它們都在GPU開始執(zhí)行之前是可見的既可。進(jìn)一步的,所提出的C/C++存儲(chǔ)器模型可被容易地映射到共享存儲(chǔ)器空間。通常,非競(jìng)爭(zhēng)程序可能不受共享存儲(chǔ)器空間的弱連續(xù)性模型的影響。該實(shí)現(xiàn)方式可能不需要被限制在為競(jìng)爭(zhēng)程序提供更強(qiáng)的保證。然而,不同的實(shí)施例可選擇為共享空間提供不同的連續(xù)性模型。圖2是用于增加了所有權(quán)權(quán)限的共享存儲(chǔ)器模型的一個(gè)實(shí)施例的流程圖。順序 200可被實(shí)現(xiàn)在固件、軟件或硬件中。軟件實(shí)施例可被存儲(chǔ)在諸如光盤、磁盤或半導(dǎo)體存儲(chǔ)器之類的計(jì)算機(jī)可讀介質(zhì)上。特別是,可向共享存儲(chǔ)器模型的諸實(shí)施例添加所有權(quán)權(quán)限以實(shí)現(xiàn)進(jìn)一步的一致性優(yōu)化。在共享虛擬地址窗口中,CPU或GPU可指定其擁有特定的地址塊(框210)。如果在共享窗口中的地址范圍是由CPU所擁有的(框220),那么CPU知道GPU無法訪問那些地址并因此不需要維持那些地址與GPU的一致性(框230)。例如,這可以避免向GPU發(fā)送任何監(jiān)聽或其他一致性信息。對(duì)于GPU擁有的地址也一樣。如果GPU訪問CPU擁有的地址,那么該地址變?yōu)榉菗碛械?對(duì)于GPU擁有的地址存在對(duì)稱的行為)?;蛘?,由GPU(CPU)對(duì)CPU (GPU)擁有的地址的訪問可以觸發(fā)錯(cuò)誤情況。本發(fā)明的諸實(shí)施例可提供這些所有權(quán)權(quán)限以利用公共CPU-GPU使用模型。例如,CPU首先訪問一些數(shù)據(jù)(諸如,初始化數(shù)據(jù)結(jié)構(gòu)),并且隨后將其轉(zhuǎn)交給GPU(諸如,以數(shù)據(jù)并行方式在數(shù)據(jù)結(jié)構(gòu)上進(jìn)行計(jì)算),并隨后CPU分析計(jì)算結(jié)構(gòu),等等。所有權(quán)權(quán)限允許應(yīng)用通知系統(tǒng)該臨時(shí)局部性,并優(yōu)化一致性實(shí)施方式。注意到,這些所有權(quán)權(quán)限是優(yōu)化提示,并且本系統(tǒng)可以合法地忽略這些提示。私有化和全局化在一個(gè)實(shí)施例中,共享數(shù)據(jù)可通過從共享空間復(fù)制到私有空間而被私有化。不含指針數(shù)據(jù)結(jié)構(gòu)可簡(jiǎn)單地通過復(fù)制存儲(chǔ)器內(nèi)容而被私有化。當(dāng)復(fù)制含指針數(shù)據(jù)結(jié)構(gòu)時(shí),指向共享數(shù)據(jù)的指針必須被轉(zhuǎn)換為指向私有數(shù)據(jù)的指針。私有數(shù)據(jù)可以通過從私有空間復(fù)制到共享空間并對(duì)其他計(jì)算可見而被全局化。不含指針數(shù)據(jù)結(jié)構(gòu)可簡(jiǎn)單地通過復(fù)制存儲(chǔ)器內(nèi)容而被全局化。當(dāng)復(fù)制含指針數(shù)據(jù)結(jié)構(gòu)時(shí),指向私有數(shù)據(jù)的指針必須被轉(zhuǎn)換為指向共享數(shù)據(jù)的指針(私有化示例的相反示例)。例如,在一個(gè)實(shí)施例中,考慮在私有和共享空間中的節(jié)點(diǎn)鏈表。對(duì)于私有鏈表的類型定義是標(biāo)準(zhǔn)的typedef struct {int val ;// 僅僅是 int 字段Node*next ;}Node ;
對(duì)于共享鏈表的類型定義如下所示。注意,指向下一節(jié)點(diǎn)的指針被定義為放置在共享空間中。用戶必須明確地聲明類型的私有和共享版本。typedef struct {shared int val ;shared Node*shared next ;} shared Node ;現(xiàn)在用戶可通過下面的代碼而明確地將私 有鏈表復(fù)制到共享空間…myNode = (shared Node*) sharedMal Ioc ( );//指向私有鏈表的頭指針myNode- > val = head- > valmyNode- > next = (shared Node*) sharedMal Ioc ( );…由編譯器使用的運(yùn)行時(shí)API如下示出//分配并釋放私有地址空間中的存儲(chǔ)器Maps to regular mallocvoid*privateMalloc(int);void privateFree(void*);Il從共享空間分配并釋放。shared void*sharedMalloc(size_t size);void sharedFree(shared void氺ptr);Il對(duì)于共享存儲(chǔ)器的存儲(chǔ)器連續(xù)性void sharedAcquire ();void sharedRelease ();最后,運(yùn)行時(shí)也為互斥體(mutex)和屏障體(barrier)提供API,以允許應(yīng)用執(zhí)行顯式同步。這些結(jié)構(gòu)經(jīng)常分配在共享區(qū)域中。本語言提供了自然獲取和釋放點(diǎn)。例如,從CPU向GPU的調(diào)用是CPU上的釋放點(diǎn)緊接著在GPU上的獲取點(diǎn)。類似地,從GPU的返回是在GPU上的釋放點(diǎn)以及在CPU上的獲取點(diǎn)。獲取互斥體(mutex)的所有權(quán)并釋放互斥體(mutex)分別是處理器進(jìn)行互斥(mutex)操作的獲取點(diǎn)和釋放點(diǎn),而命中屏障體(barrier)并通過屏障體(barrier)也是釋放點(diǎn)和獲取點(diǎn)。在一個(gè)實(shí)施例中,運(yùn)行時(shí)系統(tǒng)可為所有權(quán)的獲取和釋放提供API調(diào)用。例如,sharedMemoryAcquire ()和sharedMemoryRelease ()可以獲取并釋放整個(gè)存儲(chǔ)器范圍的所有權(quán)?;蛘?,系統(tǒng)可提供 sharedMemoryAcquire (addr, len)和 sharedMemoryRelease (addr,Ien)以獲取特定地址范圍內(nèi)的所有權(quán)。實(shí)現(xiàn)在一個(gè)實(shí)施例中,編譯器生成兩種二進(jìn)制代碼一一個(gè)用于在GPU上執(zhí)行,而另一個(gè)用于CPU執(zhí)行。生成兩種不同的可執(zhí)行代碼,因?yàn)閮蓚€(gè)操作系統(tǒng)可能具有不同的可執(zhí)行代碼格式。GPU 二進(jìn)制代碼包含將在GPU上執(zhí)行的代碼,而CPU 二進(jìn)制代碼包含CPU函數(shù)。運(yùn)行時(shí)庫包括CPU和GPU部分,其與CPU和GPU應(yīng)用二進(jìn)制代碼相鏈接以創(chuàng)建CPU和GPU可執(zhí)行代碼。當(dāng)CPU 二進(jìn)制代碼開始執(zhí)行時(shí),它調(diào)用運(yùn)行時(shí)函數(shù),該運(yùn)行時(shí)函數(shù)加載GPU可執(zhí)行代碼。CPU和GPU 二進(jìn)制代碼都創(chuàng)建用于CPU-GPU通信的虛擬線程。實(shí)施CPU-GPU共享存儲(chǔ)器 圖3是共享存儲(chǔ)器模型的一個(gè)實(shí)施例的流程圖。順序300可被實(shí)現(xiàn)在固件、軟件或硬件中。在一個(gè)實(shí)施例中,CPU和GPU可具有不同的頁表以及不同的虛擬到物理存儲(chǔ)器翻譯(框310)。因此,為了在CPU和GPU之間(諸如,在釋放點(diǎn))同步虛擬地址V的內(nèi)容,不同物理地址的內(nèi)容(諸如,CPU上的Pl和GPU上的P2)被同步(框320)。然而,CPU可能不具有對(duì)GPU頁表的訪問權(quán)(且因此不知道P2),并且GPU不具有對(duì)CPU頁表的訪問權(quán)因此不知道Pl。這個(gè)問題可通過以新穎的方式來使用PCI開口而解決。圖4是利用PCI開口的共享存儲(chǔ)器模型的一個(gè)實(shí)施例的流程圖。序列400可被實(shí)現(xiàn)在固件、軟件或硬件中。在初始化時(shí),PCI開口空間的一部分可被映射到應(yīng)用的用戶空間,并且以任務(wù)隊(duì)列、消息隊(duì)列以及復(fù)制緩沖器來例示(框410)。當(dāng)需要復(fù)制頁(例如,從CPU到GPU)時(shí)(框420),運(yùn)行時(shí)將頁復(fù)制到PCI開口復(fù)制緩沖器中,并使用虛擬地址和進(jìn)程標(biāo)識(shí)符對(duì)緩沖器進(jìn)行標(biāo)記(框430)。在GPU側(cè),虛擬線程通過使用虛擬地址標(biāo)記將緩沖器的內(nèi)容復(fù)制到它的地址空間(框440)。因此,該復(fù)制可以以2步進(jìn)程來執(zhí)行一CPU從其地址空間復(fù)制到CPU和GPU都可訪問的公共緩沖器(PCI開口),而GPU從該公共緩沖器提取頁到其地址空間。GPU-CPU復(fù)制可以類似方式來完成。因?yàn)殚_口是插針存儲(chǔ)器,如果CPU或GPU進(jìn)程發(fā)生上下文切換,開口的內(nèi)容不會(huì)丟失。這允許兩個(gè)處理器異步地執(zhí)行,這是非常關(guān)鍵的,因?yàn)閮蓚€(gè)處理器可能具有不同的操作系統(tǒng)并且因此上下文切換可能不是同步的。進(jìn)一步的,開口空間可被映射到應(yīng)用的用戶空間中,由此實(shí)現(xiàn)用戶級(jí)的CPU-GPU通信。這使得應(yīng)用堆棧比起通過OS驅(qū)動(dòng)器堆棧而目聞效得多。本發(fā)明的諸實(shí)施例可使用傳統(tǒng)軟件DSM和CPU-GPU平臺(tái)之間的另一個(gè)差別。傳統(tǒng)DSM被設(shè)計(jì)為規(guī)模在中型或大型群集。相反,CPU-GPU系統(tǒng)是非常小規(guī)模的群集。超過手持大小的GPU卡和CPU插槽在未來被良好使用幾乎不太可能。此外,PCI開口提供了在不同處理器之間的方便共享的物理存儲(chǔ)器空間。本發(fā)明的諸實(shí)施例能夠集中許多數(shù)據(jù)結(jié)構(gòu)并使得實(shí)施更為高效。圖5是利用PCI開口的共享存儲(chǔ)器模型的一個(gè)實(shí)施例的流程圖。序列500可被實(shí)現(xiàn)在固件、軟件或硬件中。參考框510,將包括與共享地址區(qū)域中的頁有關(guān)的元數(shù)據(jù)的目錄放置在PCI開口中。元數(shù)據(jù)描述了 CPU或GPU是否保持頁的貴重副本(該頁的主頁),包含了追蹤頁的更新次數(shù)的版本號(hào)、在更新頁之前獲取的互斥體(mutexes)、以及各種元數(shù)據(jù)。該目錄可由頁的虛擬地址來索引(框520)。CPU和GPU運(yùn)行時(shí)系統(tǒng)都維持類似的私有結(jié)構(gòu),該私有結(jié)構(gòu)包含頁的本地訪問許可以及頁的本地版本號(hào)。圖6是操作中的共享存儲(chǔ)器模型的一個(gè)實(shí)施例的流程圖。序列500可被實(shí)現(xiàn)在固件、軟件或硬件中。在一個(gè)實(shí)施例中,序列600可被實(shí)現(xiàn)在固件、軟件或硬件中。當(dāng)GPU執(zhí)行獲取操作時(shí)(框610),對(duì)應(yīng)的頁可被設(shè)置為在GPU上是不可訪問的¢20)。在后續(xù)的讀取操作時(shí),如果在最后一次GPU獲取之后頁已經(jīng)被CPU更新并釋放(630),則GPU上的頁面錯(cuò)誤管理器從CPU復(fù)制頁(框640)。目錄和私有版本號(hào)可被用于確定該情況。該頁隨后被設(shè)置為只讀(框650)。在后續(xù)的寫入操作時(shí),頁錯(cuò)誤管理器創(chuàng)建頁的備份副本,將頁標(biāo)記為可讀寫并遞增頁的本地版本號(hào)(框660)。在釋放點(diǎn),使用頁的備份副本執(zhí)行差異處理(diff),并將更改發(fā)送到主頁位置,同時(shí)遞增目錄版本號(hào)(框670)。差異處理(diff)操作計(jì)算兩個(gè)頁(即,頁及其備份)之間存儲(chǔ)器位置的差異,以尋找已經(jīng)被執(zhí)行的更改。CPU操作以對(duì)稱的方式來完成。因此,在獲取點(diǎn)和釋放點(diǎn)之間,GPU和CPU超出它們的本地存儲(chǔ)器和高速緩存而操作并僅僅在顯式同步點(diǎn)上彼此進(jìn)行通信。
在開始時(shí),本實(shí)施方式確定將在CPU和GPU之間共享的地址范圍,并確保該地址范圍一直保持映射(諸如,使用Linux上的_ap)。該地址范圍可以動(dòng)態(tài)地增長(zhǎng),并不需要是連續(xù)的,雖然在64位地址空間中,運(yùn)行時(shí)系統(tǒng)在最開始可能保留連續(xù)的塊。本發(fā)明的諸實(shí)施例可被實(shí)現(xiàn)在基于處理器的系統(tǒng)中,在一個(gè)實(shí)施例中該系統(tǒng)可包括耦合到芯片組的通用處理器。芯片組可耦合到系統(tǒng)存儲(chǔ)器和圖形處理器。圖形處理器可耦合到幀緩沖器,并依次耦合到顯示器。在一個(gè)實(shí)施例中,

圖1-6中示出的本發(fā)明的諸實(shí)施例可被實(shí)現(xiàn)為存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)(諸如,系統(tǒng)存儲(chǔ)器)中的軟件。然而,本發(fā)明的諸實(shí)施例也可被實(shí)現(xiàn)為硬件或固件。本編程模型的諸實(shí)施例提供了用于CPU-GPU平臺(tái)的共享存儲(chǔ)器模型,其實(shí)現(xiàn)了CPU和GPU之間的細(xì)?;恢滦???梢詾榉蛛x配置以及集成配置、以及多GPU和混合配置實(shí)現(xiàn)本統(tǒng)一編程模型。用戶注釋也被用于區(qū)分CPU和GPU執(zhí)行的代碼??稍贑PU和GPU之間提供用戶級(jí)通信,因此消除了 OS驅(qū)動(dòng)器調(diào)用的開銷??梢詾榫幊棠P蛯?shí)現(xiàn)完全的軟件堆棧,包括編譯器和運(yùn)行時(shí)支持。在說明書通篇中提及的“一個(gè)實(shí)施例”、“實(shí)施例”意味著結(jié)合該實(shí)施例所描述的特定特征、結(jié)構(gòu)或特性被包括在本發(fā)明內(nèi)涵蓋的至少一個(gè)實(shí)現(xiàn)中。因此,短語“一個(gè)實(shí)施例”或“在實(shí)施例中”的出現(xiàn)不一定是指同一個(gè)實(shí)施例。此外,還可以以除所示出的特定實(shí)施例以外的其他合適的形式構(gòu)成該特定特征、結(jié)構(gòu)或特性,所有這樣的形式都可以涵蓋在本申請(qǐng)的權(quán)利要求書內(nèi)。盡管本發(fā)明已針對(duì)有限數(shù)量的實(shí)施例作了描述,然而本領(lǐng)域技術(shù)人員將會(huì)從其中領(lǐng)會(huì)到許多修改和變型。所附權(quán)利要求旨在覆蓋所有這樣的修改和變型,只要其落在本發(fā)明的真實(shí)精神和范圍內(nèi)。
權(quán)利要求
1.ー種方法,包括 在CPU和GPU之間共享存儲(chǔ)器語義,包括允許在CPU和GPU之間傳遞指針并共享數(shù)據(jù)結(jié)構(gòu)。
2.如權(quán)利要求I所述的方法,其特征在于,還包括 在CPU和GPU之間共享地址,包括向存儲(chǔ)器空間分配在CPU和GPU之間共享的數(shù)據(jù)結(jié)構(gòu)。
3.如權(quán)利要求I所述的方法,其特征在于,還包括在CPU和GPU之間共享虛擬地址,但使所述虛擬地址被映射到CPU和GPU上不同的物理地址。
4.如權(quán)利要求3所述的方法,其特征在干,向存儲(chǔ)器空間分配在CPU和GPU之間共享的數(shù)據(jù)結(jié)構(gòu)進(jìn)ー步包括使用在存儲(chǔ)器空間中分配數(shù)據(jù)的存儲(chǔ)器分配(malloc)函數(shù)。
5.如權(quán)利要求4所述的方法,其特征在干,向存儲(chǔ)器空間分配在CPU和GPU之間共享的數(shù)據(jù)結(jié)構(gòu)進(jìn)ー步包括靜態(tài)變量的編程者注釋,使它們被分配在共享存儲(chǔ)器空間中。
6.如權(quán)利要求I所述的方法,其特征在于,還包括當(dāng)共享在存儲(chǔ)器空間中的數(shù)據(jù)被CPU或GPU使用吋,將共享在存儲(chǔ)器空間中的數(shù)據(jù)在CPU和GPU存儲(chǔ)器之間按需遷移。
7.如權(quán)利要求I所述的方法,其特征在于,還包括將地址空間分割為CPU和GPU之間的共享地址空間以及對(duì)CPU或GPU私有的剩余地址空間;以及 將默認(rèn)數(shù)據(jù)分配到私有空間,其中所述默認(rèn)數(shù)據(jù)對(duì)另ー側(cè)是不可見的。
8.如權(quán)利要求7所述的方法,其特征在于,指針的表示在共享和私有空間之間不發(fā)生改變。
9.如權(quán)利要求7所述的方法,其特征在于,還包括 CPU或GPU指定其在共享虛擬地址空間中擁有特定的地址塊。
10.如權(quán)利要求7所述的方法,其特征在于,CPU或GPU指定其在共享虛擬地址空間中擁有特定的地址塊進(jìn)一歩包括 當(dāng)共享虛擬地址中的地址范圍由CPU所擁有吋,CPU知道GPU無法訪問那些地址,并且不需要維持那些地址與GPU的一致性;以及 當(dāng)CPU擁有的地址被GPU訪問時(shí),所述地址變?yōu)榉菗碛械摹?br> 11.如權(quán)利要求I所述的方法,其特征在于,還包括 確定CPU和GPU是否具有不同的頁表和不同的虛擬到物理存儲(chǔ)器翻譯;以及 響應(yīng)于不同的頁表和不同的虛擬到物理存儲(chǔ)器翻譯,同步在CPU和GPU之間的虛擬地址內(nèi)容以及不同物理地址的內(nèi)容。
12.如權(quán)利要求11所述方法,其特征在干,響應(yīng)于不同的頁表和不同的虛擬到物理存儲(chǔ)器翻譯,同步在CPU和GPU之間的虛擬地址內(nèi)容以及不同物理地址的內(nèi)容進(jìn)ー步包括 在初始化時(shí),將PCI開ロ的一部分映射到應(yīng)用的用戶空間,并使用任務(wù)隊(duì)列、消息隊(duì)列以及復(fù)制緩沖器來例示所述用戶空間,所述PCI開ロ的一部分是對(duì)CPU和GPU都可訪問的; 對(duì)于從CPU到GPU的頁復(fù)制,將頁從CPU地址空間復(fù)制到PCI開口中,并使GPU從PCI開ロ將頁存取到其地址空間;以及 對(duì)于從GPU到CPU的頁復(fù)制,將頁從GPU地址空間復(fù)制到PCI開口中,并使CPU從PCI開ロ將頁存取到其地址空間。
13.如權(quán)利要求12所述的方法,其特征在于,所述PCI開ロ可以被映射到應(yīng)用的用戶空間,因此實(shí)現(xiàn)了用戶級(jí)CPU和GPU通信。
14.如權(quán)利要求13所述的方法,其特征在于,還包括 將包括與共享地址區(qū)域中的頁有關(guān)的元數(shù)據(jù)的目錄放置在PCI開口中,其中所述元數(shù)據(jù)指示CPU或GPU是否保持頁的主頁,包含了追蹤對(duì)頁的更新次數(shù)的版本號(hào)以及在更新頁之前獲取的互斥體(mutexes)。
15.如權(quán)利要求14所述的方法,其特征在于,所述目錄可以通過頁的虛擬地址來索引。
16.權(quán)利要求I所述的方法,其特征在干,GPU包括離散的設(shè)備或集成的設(shè)備或以不同配置的多個(gè)GPU的組合。
17.權(quán)利要求I所述的方法,其特征在干,進(jìn)ー步包括對(duì)于多個(gè)圖形卡和混合圖形系統(tǒng),統(tǒng)一地共享存儲(chǔ)器語義。
18.—種共享存儲(chǔ)器,其中在CPU和GPU之間共享數(shù)據(jù)結(jié)構(gòu)并且可將指針從ー側(cè)傳遞到另ー側(cè)而不需要要求任何格式編組。
19.如權(quán)利要求18所述的共享存儲(chǔ)器,其特征在干,場(chǎng)景圖片位于共享存儲(chǔ)器中,并且可以由CPU和GPU來訪問。
20.如權(quán)利要求18所述的共享存儲(chǔ)器,其特征在于,在CPU和GPU上運(yùn)行不同的操作系統(tǒng)的情況下實(shí)現(xiàn)所述共享存儲(chǔ)器。
21.如權(quán)利要求18所述的共享存儲(chǔ)器,其特征在于,在GPU以分離設(shè)備附加到CPU上的情況下實(shí)現(xiàn)所述共享存儲(chǔ)器。
22.如權(quán)利要求18所述的共享存儲(chǔ)器,其特征在于,在集成CPU-GPU平臺(tái)中實(shí)現(xiàn)所述共享存儲(chǔ)器。
23.一種存儲(chǔ)指令的計(jì)算機(jī)可讀介質(zhì),當(dāng)指令被執(zhí)行時(shí)使得基于處理器的系統(tǒng) 在CPU和GPU之間共享存儲(chǔ)器語義,包括允許在CPU和GPU之間傳遞指針并共享數(shù)據(jù)結(jié)構(gòu)。
24.如權(quán)利要求23所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,進(jìn)ー步存儲(chǔ)指令以 在CPU和GPU之間共享地址,包括向存儲(chǔ)器空間分配在CPU和GPU之間共享的數(shù)據(jù)結(jié)構(gòu)。
25.如權(quán)利要求24所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,進(jìn)ー步存儲(chǔ)指令以 在CPU和GPU之間共享虛擬地址,并且使所述虛擬地址被映射到CPU和GPU上不同的物理地址。
全文摘要
本發(fā)明的多個(gè)實(shí)施例提供了用于CPU-GPU平臺(tái)的編程模型。特別是,本發(fā)明的多個(gè)實(shí)施例提供用于集成和分離設(shè)備的統(tǒng)一編程模型。該模型也可以統(tǒng)一地對(duì)多個(gè)GPU卡和混合GPU系統(tǒng)(分離的和集成的)工作。這允許軟件銷售商編寫單個(gè)應(yīng)用堆棧并使其面向所有不同的平臺(tái)。此外,本發(fā)明的實(shí)施例提供了在CPU和GPU之間的共享存儲(chǔ)器模型。代替了共享整個(gè)虛擬地址空間,僅僅虛擬地址空間的一部分需要被共享。這允許在分離的和集成的設(shè)置中的高效實(shí)施。
文檔編號(hào)G06F9/46GK102625934SQ200980154460
公開日2012年8月1日 申請(qǐng)日期2009年11月5日 優(yōu)先權(quán)日2008年11月13日
發(fā)明者A·孟德爾森, B·薩哈, H·陳, J·方, P·張, S·閆, Y·高, 周小成, 莫罕·拉賈戈帕蘭 申請(qǐng)人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
武宁县| 甘洛县| 肥城市| 临西县| 平度市| 德格县| 白朗县| 景宁| 乌拉特前旗| 安吉县| 綦江县| 德钦县| 班玛县| 东丰县| 新蔡县| 康乐县| 芦山县| 武鸣县| 漳平市| 安泽县| 旬邑县| 郴州市| 双城市| 嘉义市| 封开县| 方正县| 成武县| 微博| 潮州市| 海林市| 和田市| 张家界市| 巩义市| 获嘉县| 科技| 周口市| 会同县| 静海县| 金乡县| 陕西省| 家居|