国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      共享虛擬存儲器的制作方法

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

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