背景
當前計算系統(tǒng)常常包括中央處理單元(cpu)和圖形處理器單元(gpu),其也可被稱為視頻處理單元(vpu)。gpu是具有高度平行的結構且一般用于圖形操作例如紋理映射和再現(xiàn)多變形的處理器。圖形命令從cpu發(fā)送到gpu(經(jīng)由gpu驅動器)并在gpu上被執(zhí)行。
在很多情況下,cpu可運行多個虛擬機(vm),每個虛擬機運行操作系統(tǒng)(例如其中在不同vm上運行的操作系統(tǒng)可以是相同的或不同的)。vm由被稱為管理程序(或虛擬機監(jiān)視器,vmm)并控制每個vm對在計算系統(tǒng)內的硬件的訪問的軟件創(chuàng)建和監(jiān)督。因此,在操作系統(tǒng)(在vm上運行)和gpu之間的通信常常通過負責實施安全的管理程序。
下面所述的實施方式僅作為例子被提供且不是解決虛擬化gpu的已知方法的任何或所有缺點的實現(xiàn)的限制。
概述
這個概述被提供來以簡化的形式介紹概念的選擇,其在下面在詳細描述中被進一步描述。這個概述并不打算識別所主張的主題的關鍵特征或必要特征,也不打算用作在確定所主張的主題的范圍時的幫助。
gpu虛擬化的方法包括由管理程序給每個虛擬機(或在vm上運行的操作系統(tǒng))分配標識符,且接著這個標識符用于給從在給定vm上下文內操作的gpu工作負荷得到的每個交易(即在使cpu、gpu和其它外圍設備互連的系統(tǒng)總線上的每個gpu交易)加上標簽。此外,為每個vm提供存儲器資源的專用部分(其可以是gpu寄存器或ram),且同時每個vm可以只看到存儲器的它們的所分配的部分,在gpu內的微處理器可看到所有存儲器。使用根存儲器管理單元來實現(xiàn)訪問控制,根存儲器管理單元由管理程序配置并基于與交易相關的標識符將客戶機物理地址映射到實際存儲器地址。在gpu內的微處理器中運行的軟件涉及管理不同vm的工作負荷(例如不是依賴于在cpu中運行的管理程序軟件來控制并管理工作負荷)。
第一方面提供計算系統(tǒng),其包括:布置成在管理程序的控制下運行多個虛擬機的中央處理單元,以及其中由中央處理單元輸出的交易被分配它所相關的虛擬機的標識符;布置成在由虛擬機使用的虛擬存儲器地址和客戶機物理地址之間轉換的cpu存儲器管理單元;由管理程序配置并布置成基于被分配到交易的虛擬機的標識符在由cpu存儲器管理單元使用的客戶機物理地址和實際物理存儲器地址之間轉換的第一根存儲器管理單元;包括微處理器的圖形處理器單元,以及其中由圖形處理器單元輸出的交易被分配虛擬機的標識符,虛擬機從接收自中央處理單元的觸發(fā)交易繼承該標識符;布置成在由圖形處理器單元使用的虛擬存儲器地址和客戶機物理地址之間轉換的gpu存儲器管理單元;以及由管理程序配置并布置成基于被分配到交易的虛擬機的標識符在由gpu存儲器管理單元使用的客戶機物理地址和實際物理存儲器地址之間轉換的第二根存儲器管理單元;以及其中對存儲器資源的一個或多個部分的訪問作為由根存儲器管理單元執(zhí)行的地址轉換的結果被控制。
第二方面提供一種方法,其包括:由管理程序將存儲器資源的一部分和標識符分配到在中央處理單元上運行的多個虛擬機中的每個;在第一和第二根存儲器管理單元中配置轉換表,其中轉換表基于虛擬機的標識符來定義在客戶機物理地址和實際物理地址之間的轉換,第一根管理單元與中央處理單元相關,而第二根管理單元與圖形處理器單元相關;以及在一個或多個虛擬機的執(zhí)行期間,使用交易所相關的虛擬機的標識符給由中央處理單元輸出的交易加上標簽,并且在根存儲器管理單元內,基于交易被加標簽所用的標識符來轉換在交易中的地址。
另外的方面提供在集成電路制造系統(tǒng)處制造如本文所述的計算系統(tǒng)、集成電路定義數(shù)據(jù)集的方法,集成電路定義數(shù)據(jù)集當其在集成電路制造系統(tǒng)中被處理時配置系統(tǒng)以制造如本文所述的計算系統(tǒng)和計算機可讀存儲介質,其具有存儲在其上的集成電路定義數(shù)據(jù)集,集成電路定義數(shù)據(jù)集當在集成電路制造系統(tǒng)中被處理時配置系統(tǒng)以制造如本文所述的計算系統(tǒng)。
優(yōu)選特征可在適當時被組合,如對技術人員將明顯的,并可與本發(fā)明的任何方面組合。
附圖的簡要說明
本發(fā)明的實施方式將作為例子參考附圖被描述,其中:
圖1是包括cpu和具有嵌入式微處理器的gpu的計算系統(tǒng)的示意圖;
圖2是圖1的系統(tǒng)的操作的示例方法的流程圖;
圖3是圖1的系統(tǒng)的操作的另一示例方法的流程圖;
圖4示出存儲器地址空間的示意圖;以及
圖5示出包括布局處理系統(tǒng)和集成電路產(chǎn)生系統(tǒng)的集成電路制造系統(tǒng)的例子。
共同的參考數(shù)字在全部附圖中用于指示相似的特征。
詳細描述
下面僅通過示例的方式描述本發(fā)明的實施方式。這些例子代表實施本發(fā)明的、申請人當前已知的最佳方式,雖然它們并不是這可被實現(xiàn)的唯一方式。該描述闡述例子的功能和用于構造和操作例子的步驟的順序。然而,相同或等效的功能和順序可由不同的例子完成。
如上所述,在gpu在多個vm之間被共享(例如可以有在cpu上運行的多達8個vm或可以有在cpu上運行的多于8個vm)的場合,在vm上運行的操作系統(tǒng)和gpu之間的所有通信經(jīng)由管理程序進行。這可引入性能懲罰,作為來去管理程序和/或上下文切換(例如,如由管理程序得到的)的額外調用的結果。對此的現(xiàn)有解決方案為每個vm提供專用gpu(即通過復制整個gpu硬件)或將一個或多個上下文專門用于每個vm(例如其中gpu支持多個獨立上下文)。提供多個gpu增加系統(tǒng)的尺寸(和因而成本),且可以是低效的(例如其中8個gpu被提供,且少于8個vm運行)。將一個或多個上下文專門用于每個vm(被稱為“介導透傳(mediatedpass-through)”的技術)在vm當中為gpu調度工作(這對cpu引入往返延遲并使用cpu資源)時仍然涉及cpu且可能需要對在vm上的gpu驅動器的變化。
在本文描述了gpu虛擬化的方法,其中由管理程序(例如在建立時)給每個vm(或在vm上運行的操作系統(tǒng))分配標識符(os_id),且這個os_id接著用于給在vm和gpu之間的每個交易加上標簽(即在使cpu和gpu互連的系統(tǒng)總線上的每個gpu交易)。此外,為每個vm提供專用gpu寄存器,且同時每個vm可以只看到(即訪問)它們自己的gpu寄存器,gpu可看到所有gpu寄存器。os_id和專用gpu寄存器的組合使來自不同vm(和因而不同的操作系統(tǒng))的不同工作(其可以是圖形或計算工作)能夠同時在gpu上(例如在不同的gpu管線中)運行,并消除對從vm到gpu的每個通信涉及管理程序的需要。這導致性能提高。
圖1是包括cpu52和gpu54的計算系統(tǒng)50的示意圖。該圖只示出硬件,且所以沒有示出在cpu上運行的vm和管理程序。gpu54包括gpu核心56,其包括執(zhí)行gpu任務的硬件(例如數(shù)據(jù)流量大師、陰影群集、紋理管線和數(shù)據(jù)后處理模塊)。gpu54還包括控制gpu和在gpu內的存儲器管理單元(mmu)15的操作(并可被稱為gpu客戶機mmu或gpug-mmu以將它與在gpu外部的根和客戶機mmu區(qū)分開)的嵌入式微處理器58。gpu52還包括soc(片上系統(tǒng))接口(socif)112,微處理器58可經(jīng)由soc接口112訪問gpu寄存器114。
gpu寄存器114也可經(jīng)由系統(tǒng)總線116和socif112訪問cpu52,因為它們被映射在mmu(例如cpu根mmu120)中,但如下面更詳細描述的,對不同寄存器的訪問被控制,使得每個vm(被表示為vm0-vmn)可看到單獨專用的一組寄存器126,且管理程序可看到vm不可訪問的另一組寄存器128。相反,在gpu54內的微處理器58可看到所有gpu寄存器114(經(jīng)由socif112)。
系統(tǒng)50還包括三個另外的mmu:cpu客戶機mmu(cpug-mmu)118和兩個根mmu(r-mmu)120、122。這兩個r-mmu120、122(其也可被稱為“系統(tǒng)mmu”、“ipmmu”、“iommu”或“級2mmu”)由在cpu52上運行的管理程序建立(且因此可被描述為由在cpu52上運行的管理程序控制)。每個mmu15、118、120、122執(zhí)行存儲器地址的轉換,并且也可執(zhí)行其它存儲器管理功能。在只有mmu的一個級(而不是圖1所示的兩個級)的更方便的系統(tǒng)中,mmu將虛擬存儲器地址(在cpu/gpu內產(chǎn)生)轉換成物理存儲器地址(反之亦然)。相反,在圖1的系統(tǒng)50中,cpug-mmu118將由vm產(chǎn)生的虛擬地址轉換成客戶機物理地址(和因此名稱客戶機mmu)(并從客戶機物理地址轉換),且這些客戶機物理地址然后由在管理程序的控制下的cpur-mmu120(因此名稱根mmu)轉換成實際物理地址。類似地,gpug-mmu15將由gpu產(chǎn)生的虛擬地址轉換成客戶機物理地址(并從客戶機物理地址轉換),且這些客戶機物理地址然后由也在管理程序的控制下的gpur-mmu122轉換成實際物理地址。雖然兩個r-mmu120、122可能組合,它們仍然在邏輯上分離,因為給定vm具有不同的cpu和gpu訪問要求。
通過控制在r-mmu120、122內執(zhí)行的轉換,管理程序控制什么交易訪問系統(tǒng)總線116。雖然通過cpug-mmu118從虛擬地址到客戶機物理地址的映射由在vm上運行的操作系統(tǒng)管理;管理程序可通過未能在cpur-mmu120中將客戶機物理地址映射到實際物理地址來阻止對系統(tǒng)總線116的訪問。
雖然圖1將r-mmu120、122示為相鄰cpu/gpu的外部部件,在其它例子中,r-mmu120、122可被實現(xiàn)為相關處理器的整體部分(例如cpur-mmu120可被實現(xiàn)為cpu52的整體部分和/或gpur-mmu122可被實現(xiàn)為gpu54的整體部分,例如為gpu核心56的整體部分)。
被分配到vm的gpu寄存器126的組中的每個寄存器(且可被稱為“寄存器塊”)可例如消耗在系統(tǒng)物理地址空間圖中的空間的64kb。這個粒度可被選擇為匹配r-mmu的粒度。將認識到,這些地址不與ram重疊,且因此這些64kb區(qū)實際上不消耗存儲器(僅僅在物理地址映射中的空間)。
由cpur-mmu120產(chǎn)生的物理地址可涉及gpu寄存器114(在這種情況下調用由socif112接收,socif112經(jīng)由系統(tǒng)總線116監(jiān)控相應于gpu寄存器的地址的范圍(或多個地址,其中地址不是連續(xù)的)或涉及在計算系統(tǒng)50內的存儲器124,其中這個存儲器124將驅動器提供到每vm控制接口固件并可包括ram。由gpur-mmu122產(chǎn)生的物理地址可與在計算系統(tǒng)50內的vm驅動器/固件接口存儲器124有關。
將認識到,系統(tǒng)50除了vm驅動器/固件接口存儲器124之外還將包括其它存儲器,例如其它僅cpu存儲器和包含其它gpu設置、紋理和再現(xiàn)緩沖器等的cpu/gpu存儲器,且由存儲器124占據(jù)的地址空間不需要是連續(xù)的(例如其它存儲器可存在于在相鄰塊132之間的間隙中)。
將認識到,其它計算系統(tǒng)可以不包括在圖1中示出的所有功能元件(即在圖1中所示的一個或多個功能元件可被省略),且在一些例子中可包括未在圖1中示出的額外功能元件。例如,圖1所示的系統(tǒng)50上的變化可以不包括socif112,且替代地gpu寄存器114可以是在gpur-mmu122中映射的存儲器(即以實現(xiàn)存儲器映射的寄存器訪問和保護);然而,這在從gpu54中的微處理器58訪問寄存器114時可引入額外的時延。
可參考圖2所示的流程圖描述系統(tǒng)50的操作,圖2示出初始化階段202和操作階段204。在可在系統(tǒng)建立時執(zhí)行的初始化階段202期間或當新vm被提供時,管理程序將存儲器(例如從存儲器124和/或gpu寄存器114)分配到vm,并且也將標識符(os_id)分配到vm(塊206)。os_id可以每個包括m個位,且在各種例子中,os_id每個包括3個位(m=3),使每個os_id能夠識別最多8個vm(雖然如下所述,在各種例子中,os_id之一被分配到管理程序)中的一個。管理程序也在r-mmu120、122(塊208)內建立轉換表(也被稱為“頁表”),其中在客戶機物理地址和真實物理地址之間的轉換取決于os_id,且所以轉換表可根據(jù)os_id由r-mmu120、122編索引或選擇。在分配存儲器和os_id(在塊206中)并建立r-mmu(在塊208中)之后,vm可被加載(塊25)并可開始執(zhí)行(塊212)。
在操作(或執(zhí)行)階段204期間,vm執(zhí)行且在系統(tǒng)總線116上的每個交易由它所相關的vm的os_id識別(塊214)。如下所述,管理程序也可被分配它自己的os_id,使得它可用于確定管理程序可訪問存儲器的哪個部分。因為每個交易被用os_id加標簽,os_id有效地提供地址空間的m個更多位。不起源于vm的交易從觸發(fā)交易繼承它們的os_id,使得來自gpu的輸出繼承提交產(chǎn)生該輸出的gpu任務的vm的os_id。
os_id由r-mmu120、122使用來選擇適當?shù)捻?塊216),且這控制每個vm可訪問存儲器的哪個部分(例如可從存儲器的哪個部分讀取和/或寫到存儲器的哪個部分)。以這種方式,每個vm看到在同一位置上的同一組寄存器(即這些寄存器的虛擬地址可以是相同的,且這些可由cpug-mmu映射到同一客戶機物理地址),但不能在頁面中看到由r-mmu映射到其它vm的寄存器。
結合由管理程序建立的r-mmu使用os_id提供在不同的vm(和因此不同的操作系統(tǒng))之間切換的有效方式,因為管理程序不一定介導每個交易,以便識別它所相關的vm并實施安全措施來防止流氓存儲器訪問(例如由一個vm訪問由其它vm或系統(tǒng)的其它部分寫入的存儲器)。如上所述,可通過未能將客戶機物理地址映射到實際物理地址(在r-mmu中)來阻止對系統(tǒng)總線116的訪問,且這在初始化階段52期間被配置而不是需要每次通過涉及管理程序的交易基礎在交易上執(zhí)行。
為了使單獨的vm可獨立地將gpu任務提交到gpu54而不需要涉及管理程序,在寄存器126的每個專用組中的寄存器之一可以是觸發(fā)在gpu54內的嵌入式微處理器58中的事件的特殊寄存器130(在本文被稱為“kick寄存器”)。在各種例子中,可以只有在相應于這組寄存器126的64kb地址范圍中的單個寄存器。此外,存儲器124的專用部分132(被表示為hd/fi0-hd/fi0)作為每個vm的循環(huán)緩沖器(其可被稱為主機驅動器/固件接口并包括內核命令循環(huán)緩沖器ccb)操作,且這些作為gpu的命令接口來操作,每個vm只訪問它自己的驅動器/固件接口132。如同gpu寄存器114一樣,在gpu54中的微處理器58可看到所有主機驅動器/固件接口132,雖然訪問機制是不同的(存儲器124經(jīng)由gpur-mmu122被訪問,而gpu寄存器114經(jīng)由socif112被訪問)。可參考在圖3中示出的流程圖來描述這些主機驅動器/固件接口132和kick寄存器130的操作。
kick寄存器和主機驅動器/固件接口在虛擬化時被分配到vm,例如在圖2中的塊206中。也在r-mmu內由管理程序建立在kick寄存器和主機驅動器/固件接口的虛擬和客戶機物理地址與它們的實際物理地址之間的映射,作為初始化階段202的部分(例如在塊208中)。
當vm(例如在vm內的圖形應用)希望觸發(fā)gpu任務時,vm在存儲器中建立控制流(塊302),且這可以用常規(guī)方式完成,例如好像vm是具有相關gpu的本機cpu一樣。vm接著將命令寫到一般命令循環(huán)緩沖器(塊304),即在cpu上運行的每個vm可使用相同的虛擬地址和客戶機物理地址來寫命令,以及客戶機物理地址接著由cpur-mmu120映射到hd/fi的vm特定物理地址(塊306),使得命令可被存儲(塊308)。控制流的這個建立(在塊302中)以及存儲命令(在塊304-308中)可在當vm想要將gpu任務提交到gpu時之前被執(zhí)行。
為將gpu任務提交到gpu,vm寫到一般kick寄存器(塊35),其可在各種例子中對在cpu上運行的所有vm是相同的,即在cpu上運行的每個vm可在各種例子中對kick寄存器使用相同的虛擬和客戶機物理地址。如同hd/fi地址一樣,kick寄存器地址由cpur-mmu120映射到正確的vm的kick寄存器的物理地址(塊312),且這可基于由cpur-mmu120接收的os_id連同寫命令,或可使用存在于cpu中的另一機制來基于正執(zhí)行的當前vm選擇正確的映射。如上所述,socif112監(jiān)控相應于gpu寄存器114的地址范圍,且所以檢測寫(塊314)。作為寫到vm特定kick寄存器130的結果,在gpu54內的微處理器58中產(chǎn)生事件(塊316),且這通過微處理器58觸發(fā)任務的運行(塊318)。調用vm的os_id(其直接從被寫入的kick寄存器得到并可存儲在微處理器58內部的寄存器中)傳到在微處理器中運行的任務(塊320)例如作為邊帶信息,且os_id接著用于執(zhí)行轉換并識別那個特定vm的hd/fi的地址(塊322),即os_id用于例如通過偏移對正確的vm接口存儲器的訪問來計算vm的正確地址(如下面更詳細描述的)。這意味著gpu知道哪個vm觸發(fā)事件而不需要信任vm以正確地識別本身或詢問管理程序,因為每個vm借助于cpur-mmu只具有對它自己的kick寄存器的可見性。在識別出正確的hd/fi(在塊322中)后,可從存儲器讀取執(zhí)行gpu任務的所有必要的信息(例如在塊302中寫的控制流和在塊304-308中寫的命令)。微處理器58可從hd/fi讀取以前寫的命令(塊324)并接著基于該命令來訪問所有必要的數(shù)據(jù)。
基于被讀的命令(在塊324中)且如果gpu有容量(例如,如果在所需的gpu核心內的特定管線沒有已經(jīng)執(zhí)行另一gpu任務),則工作負荷可由微處理器在gpu中建立(塊326),且接著gpu可開始工作負荷(塊328)而沒有微處理器的進一步涉及。
如果當kick被接收到時(例如當命令在塊324中被讀取時)gpu(例如所需的gpu管線)已經(jīng)是忙碌的,則它可被微處理器58忽略,在這種情況下,工作負荷將不被建立且任務將不被執(zhí)行。然而在一些示例實現(xiàn)中,可存儲所接收的但不是實施的kick的記錄,使得當在gpu核心內的容量可用時,可做出關于接著要實施哪個gpu任務的決定(例如通過在微處理器內的調度器)。在各種實現(xiàn)中,gpu任務的完成可觸發(fā)對微處理器的中斷(塊320),例如使得在任務中使用的資源可被釋放用于由另一gpu任務使用,且在完成上的這個中斷又可觸發(fā)下一gpu工作負荷的開始,例如使得gpu任務不由kick但由以前的gpu任務(例如利用與所觸發(fā)的gpu任務相同的資源的以前的gpu任務)的完成觸發(fā)。
在上面的描述中,存在被分配到每個vm的kick寄存器。在可選的實現(xiàn)中,可提供由所有vm使用的單個kick寄存器。在這樣的實現(xiàn)中,圖3的方法如上所述開始,并建立控制流(在塊302中)且將命令寫到vm的特定hd/fi(在塊304-308中),vm寫到一般kick寄存器(在塊35中)。在這個實現(xiàn)中,由cpur-mmu執(zhí)行的轉換不是從一般地址到vm特定kick寄存器(如在塊312中的),轉換是從一般地址到單個kick寄存器。如上所述,socif檢測寫到kick寄存器(在塊314中)且事件在微處理器中產(chǎn)生(在塊316中),這觸發(fā)任務的運行(在塊318中)。然而,與在圖3中不同,因為只有單個kick寄存器,調用vm的os_id不能傳遞到任務并用于識別包含相應的命令的hd/fi(即圖3的塊320和322被省略)。替代地,有方法可繼續(xù)進行的兩種不同的方式。在一個實現(xiàn)中,微處理器58檢查所有hd/fi132以識別具有在它里面的新命令的一個hd/fi,使得命令可被讀取(在塊324中),且接著該方法如圖3所示和上面所述的繼續(xù)進行。在其它實現(xiàn)中,調用vm進行管理程序調用且管理程序用作安全代理,附加調用vm的os_id,且接著該方法如圖3所示和上面所述的繼續(xù)進行。
因為微處理器的性能由外部存儲器訪問影響(因為有與每個外部存儲器訪問相關的延遲),與對每個vm有kick寄存器比較,使用單個kick寄存器引入性能懲罰,因為對hd/fi的多個訪問是需要的。
在另一例子中,可使用兩種方法(每vm專用kick寄存器和單個kick寄存器)的混合。在存在比os_id多的vm的這樣的例子中,kick寄存器之一可由超過os_id限制的所有vm使用(例如,對于沒有自己的唯一os_id的所有那些vm)。在這樣的實現(xiàn)中,這些vm的確進行管理程序調用,或在微處理器58上運行的固件代碼知道為這個特殊情況os_id掃描n個vm隊列。
寫到hd/fi內(在塊304-306中)的命令可包括對數(shù)據(jù)被存儲在存儲器中時的存儲器地址的參考(在塊302中)。對存儲器地址的參考可以是以指針的形式。然而在其它例子中,可規(guī)定偏移而不是指針,以便提供更安全的接口,如可參考圖4所述的。
圖4更詳細地示出包括相應于存儲器124的地址的存儲器地址空間的示意圖。在這個例子中,示出gpu寄存器114被映射到的存儲器地址402(在cpur-mmu120中)連同hd/fi132;然而,將認識到,雖然這些gpu寄存器114占據(jù)存儲器地址空間,它們不占據(jù)物理存儲器(即它們不存儲在ram中)。此外,在圖4中示出為每個vm預留的存儲器404的部分(被表示為mem0-memn),且hd/fi132(以及在hd/fi內的ccb)是在存儲器404的部分內的子結構。存儲器404的這些部分在虛擬地址空間中是連續(xù)的,所以它們在微處理器58看來是連續(xù)的,且所以不是提供對任何數(shù)據(jù)的開始的指針,可提供偏移,且微處理器58可使用下式來計算實際存儲器地址:
地址=基本地址+(os_idx部分尺寸)+偏移
以及其中基本地址b是存儲器的部分的起始地址,以及部分尺寸c是一部分的尺寸,如圖4所示。以這種方式,不受信軟件可能從不產(chǎn)生在它們自己的安全容器(mem0-memn)之外的指針。調用者只提供偏移,其在內部使安全容器基本地址被應用(如上面)以及范圍檢查以確保偏移不從它的底部溢出安全容器范圍。
為了使檢測一些惡意行動變得可能,被通過的偏移可在用于計算地址(例如使用上面的方程)之前被處理。例如,可從偏移移除多個位(例如基于孔尺寸和/或os_id),且如果檢測到任何被移除的位改變(例如與標準值比較),微處理器可確定存在惡意活動,并可因此丟棄gpu任務。
所有上面的描述指為從cpu到gpu的調用使用os_id。os_id也可由gpu使用來確定在存儲器中的哪里寫從gpu任務輸出的數(shù)據(jù),并防止寫到被分配到其它vm的存儲器(例如ram)。
來自/到存儲器124的任何gpu讀/寫命令識別由gpug-mmu15轉換成客戶機物理地址的虛擬地址。基于與命令相關的os_id(其中這不是指在gpu上運行的os而是數(shù)據(jù)所相關的并從初始gpu交易繼承的vm),客戶機物理地址接著由gpur-mmu122轉換成真實物理地址。這防止一個vm的gpu任務將數(shù)據(jù)寫到被分配到不同的vm的存儲器內(例如由vm0發(fā)出的任務的數(shù)據(jù)可以只被寫到存儲器部分mem0內),且這意味著數(shù)據(jù)對其它vm不是可用的且不能不注意地蓋寫屬于另一vm的數(shù)據(jù)。
在各種例子中,由cpu傳遞(并相應于調用vm)的os_id可被表示為cpuos_id,而由gpu傳遞(并相應于被調用的vm)的os_id可被表示為gpuos_id。在cpu上運行的管理程序可具有它自己的被分配的os_id,且這些不同的os_id可用于控制對存儲器124的不同部分(或除了存儲器124以外的存儲器,如上所述)的訪問。例如,只有管理程序和gpu可訪問的部分可以只從伴隨有相應于管理程序的預定cpuos_id或gpuos_id的客戶機物理地址映射/映射到該客戶機物理地址,gpu和在cpu上運行的受信軟件(即不是不受信vm)可采用的部分可以只從伴隨有相應于受信執(zhí)行環(huán)境的預定cpuos_id或gpuos_id的客戶機物理地址映射/映射到該客戶機物理地址,以及只有cpu(而不是gpu)可訪問的部分可以只從伴隨有相應于受信執(zhí)行環(huán)境(而不是相應的gpuos_id)的預定cpuos_id的客戶機物理地址映射/映射到該客戶機物理地址。
上面所述的“特殊”寄存器(例如寄存器組126和/或kick寄存器130)使不受信軟件(例如vm或在vm上運行的軟件)能夠直接與gpu對話。雖然gpu不信任由vm本身提供的任何調用者身份信息(因為vm是不受信的),每個vm的單個kick寄存器或專用kick寄存器(或這兩種方法的混合,如上所述)的使用提供不能由流氓vm欺騙的機制且不需要管理程序調用來執(zhí)行“kick”操作。這因此使每個vm(或在vm上運行的每個os)能夠獨立地將在gpu上的工作排隊而沒有管理程序干預,且給所有交易加上標簽的os_id的使用能夠使來自不同vm的gpu任務能夠并行地在不同的gpu管線上運行。
如上所述,雖然有在多個vm之間共享的單個gpu,每個vm具有它自己的驅動器堆棧(即全標準驅動器堆棧,好像它是單個本地機器一樣),所以對于每個vm,它看起來具有專用虛擬化gpu。這與具有多個gpu的soc比較代表成本節(jié)省(例如從芯片面積和效率方面看),例如有具有一個虛擬化gpu而不是n個專用gpu的更不冗余的gpu硬件。此外,使用上面所述的方法,在vm當中切換gpu時存在零軟件開銷。
使用上面所述的方法和裝置,gpu的虛擬化在gpu內部被介導(例如固件在gpu內部運行),且所以這對cpu和對在cpu上運行的vm是透明的。這與其中在“虛擬gpu”之間的介導發(fā)生在主機cpu中的介導透傳相反。
術語“處理器”和“計算機”在本文用于指具有處理能力的任何設備或其部分,使得它可執(zhí)行指令。術語“處理器”可例如包括中央處理單元(cpu)、圖形處理單元(gpu或vpu)、物理處理單元(ppu)、無線電處理單元(rpu)、數(shù)字信號處理器(dsp)、通用處理器(例如通用gpu)、微處理器、設計成加速在cpu外部的任務的任何處理單元等。本領域中的技術人員將認識到,這樣的處理能力合并到很多不同的設備內,且因此術語“計算機”包括機頂盒、媒體播放器、數(shù)字無線電裝置、pc、服務器、移動電話、個人數(shù)字助理和很多其它設備。
本領域中的技術人員將認識到,用于存儲程序指令的存儲設備可分布在網(wǎng)絡當中。例如,遠程計算機可存儲被描述為軟件的過程的例子。本地或終端計算機可訪問遠程計算機并下載軟件的一部分或全部以運行程序??蛇x地,本地計算機可按需要下載軟件的片段或執(zhí)行在本地終端處的一些軟件指令和在遠程計算機(或計算機網(wǎng)絡)處的一些指令。本領域中的技術人員也將認識到,通過利用本領域中的技術人員已知的常規(guī)技術,軟件指令的全部或一部分可由專用電路例如dsp、可編程邏輯陣列等實現(xiàn)。
本文所述的方法可由配置有軟件的計算機執(zhí)行,軟件是以存儲在有形存儲介質上的機器可讀形式、例如以包括用于配置計算機來執(zhí)行所述方法的組成部分的計算機可讀程序代碼的計算機程序的形式或以包括適合于當程序在計算機上運行時執(zhí)行本文所述的任何方法的所有步驟的計算機程序代碼工具的計算機程序的形式,且其中計算機程序可體現(xiàn)在計算機可讀存儲介質上。有形(或非臨時)存儲介質的例子包括磁盤、拇指驅動器、存儲卡等,且并不包括傳播信號。軟件可適合于在并行處理器或串行處理器上執(zhí)行,使得方法步驟可以按任何適當?shù)捻樞蚧蛲瑫r被執(zhí)行。
本文所述的硬件部件可由非臨時計算機可讀存儲介質產(chǎn)生,非臨時計算機可讀存儲介質具有在其上編碼的計算機可讀程序代碼。
意圖也包括“描述”或定義硬件的配置的軟件,其實現(xiàn)上述的模塊、功能、部件、單元或邏輯(如,圖形處理系統(tǒng)202的部件),例如hdl(硬件描述語言)軟件,如對設計集成電路或對配置可編程芯片使用的,以實現(xiàn)期望功能。也就是說,可提供計算機可讀存儲介質,其具有在其上編碼的以集成電路定義數(shù)據(jù)集的形式的計算機可讀程序代碼,其當在集成電路制造系統(tǒng)中被處理時配置系統(tǒng)以制造配置成執(zhí)行本文所述的任何方法的圖形處理系統(tǒng)或制造包括本文所述的任何裝置的圖形處理系統(tǒng)。ic定義數(shù)據(jù)集可以是例如用適當?shù)膆dl寫的計算機代碼例如寄存器傳輸級(rtl)代碼的形式?,F(xiàn)在將關于圖5描述在集成電路制造系統(tǒng)處處理集成電路定義數(shù)據(jù)集以便配置系統(tǒng)以制造圖形處理系統(tǒng)的例子。
圖5示出包括布局處理系統(tǒng)504和集成電路產(chǎn)生系統(tǒng)506的集成電路(ic)制造系統(tǒng)502的例子。ic制造系統(tǒng)502配置成接收ic定義數(shù)據(jù)集(例如定義如在本文的任何例子中所述的圖形處理系統(tǒng)),處理ic定義數(shù)據(jù)集,并根據(jù)ic定義數(shù)據(jù)集(例如其體現(xiàn)如在本文的任何例子中所述的圖形處理系統(tǒng))產(chǎn)生ic。ic定義數(shù)據(jù)集的處理配置ic制造系統(tǒng)502以制造體現(xiàn)如在本文的任何例子中所述的圖形處理系統(tǒng)的集成電路。更具體地,布局處理系統(tǒng)504配置成接收并處理ic定義數(shù)據(jù)集以確定電路布局。從ic定義數(shù)據(jù)集確定電路布局的方法在本領域中是已知的,且例如可涉及合成rtl代碼以例如從邏輯部件(例如nand、nor、and、or、mux和flip-flop部件)方面確定待產(chǎn)生的電路的門級表示。可通過確定邏輯部件的位置信息從電路的門級表示確定電路布局。這可自動地或使用用戶干預來完成,以便優(yōu)化電路布局。當布局處理系統(tǒng)504確定電路布局時,它可將電路布局定義輸出到ic產(chǎn)生系統(tǒng)506。ic產(chǎn)生系統(tǒng)506根據(jù)電路布局定義產(chǎn)生ic,如在本領域中已知的。例如,ic產(chǎn)生系統(tǒng)506可實現(xiàn)半導體器件制造過程以產(chǎn)生ic,這可涉及光刻和化學處理步驟的多步驟序列,在其其間,電子電路通常在由半導體材料制成的晶圓上被創(chuàng)建。電路布局定義可以是掩模的形式,掩??稍诠饪踢^程中用于根據(jù)電路定義產(chǎn)生ic??蛇x地,被提供到ic產(chǎn)生系統(tǒng)506的電路布局定義可以以計算機可讀代碼的形式,ic產(chǎn)生系統(tǒng)506可使用該計算機可讀代碼來形成適當?shù)难谀S糜谠诋a(chǎn)生ic時使用。由ic制造系統(tǒng)502執(zhí)行的不同過程可以都在一個位置上例如由一方實現(xiàn)。可選地,ic制造系統(tǒng)502可以是分布式系統(tǒng),使得一些過程可在不同的位置處被執(zhí)行,并可由不同的方執(zhí)行。例如,可在不同的位置上和/或由不同的方執(zhí)行(i)合成表示ic定義數(shù)據(jù)集的rtl代碼以形成待產(chǎn)生的電路的門級表示、(ii)基于門級表示來產(chǎn)生電路布局、(iii)根據(jù)電路布局形成掩模和(iv)使用掩模制造集成電路的一些階段。
在其它例子中,在集成電路制造系統(tǒng)處的集成電路定義數(shù)據(jù)集的處理可配置系統(tǒng)以制造圖形處理系統(tǒng)而沒有ic定義數(shù)據(jù)集被處理,以便確定電路布局。例如,集成電路定義數(shù)據(jù)集可定義可重配處理器例如fpga的配置,且那個數(shù)據(jù)集的處理可配置ic制造系統(tǒng)以產(chǎn)生具有那個所定義的配置的可重配處理器(如,通過將配置數(shù)據(jù)加載到fpga)。
在一些例子中,集成電路定義數(shù)據(jù)集可包括在由數(shù)據(jù)定義的硬件上運行或與由數(shù)據(jù)集定義的硬件組合的軟件。在圖5中所示的例子中,ic生成系統(tǒng)還可由集成電路定義數(shù)據(jù)集配置成在制造集成電路時根據(jù)在集成電路定義數(shù)據(jù)處定義的程序代碼將固件加載到集成電路上或以其他方式使用集成電路提供程序代碼以供集成電路使用。
存儲在實現(xiàn)所公開的方面時使用的機器可執(zhí)行數(shù)據(jù)的存儲器可以是非臨時介質。非臨時介質可以是易失性的或非易失性的。易失性非臨時介質的例子包括基于半導體的存儲器,例如sram或dram??捎糜趯崿F(xiàn)非易失性存儲器的技術的例子包括光學和磁性存儲器技術、閃存、相變存儲器、電阻性ram。
對“邏輯”的特定提及指執(zhí)行一種或多種功能的結構。邏輯的例子包括布置成執(zhí)行那些功能的電路。例如,這樣的電路可包括晶體管和/或在制造過程中可用的其它硬件元件。作為例子,這樣的晶體管和/或其它元件可用于形成實現(xiàn)和/或包含存儲器例如寄存器、觸發(fā)器或鎖存器、邏輯運算符例如布爾運算、數(shù)學運算符例如加法器、乘法器或移位器和互連的電路或結構。這樣的元件可作為定制電路或標準單元庫、宏或在其它抽象級處被提供。可在特定的布置中使這樣的元件互連。邏輯可包括固定功能的電路,且電路可被編程以執(zhí)行一種或多種功能;這樣的編程可從固件或軟件更新或控制機制提供。被識別為執(zhí)行一種功能的邏輯也可包括實現(xiàn)組成功能或子過程的邏輯。在例子中,硬件邏輯具有實現(xiàn)固定功能操作或多個操作、狀態(tài)機或過程的電路。
本文給出的任何范圍或設備值可擴展或改變而不失去所尋求的效應,如對技術人員將明顯的。
將理解,上面描述的益處和優(yōu)點可涉及一個實施方式或可涉及幾個實施方式。實施方式不限于解決任何或所有所陳述的問題的那些實施方式或具有任何或全部所陳述的益處和優(yōu)點的那些實施方式。
對“一個”項目的任何提及指那些項目中的一個或多個。術語“包括”在本文用于意指包括所識別的方法塊或元件,但這樣的塊或元件并不包括排他列表,且裝置可包含額外的塊或元件,以及方法可包含額外的操作或元件。此外,塊、元件和操作本身并不隱含地是封閉的。
本文描述的方法的步驟可在適當時以任何適當?shù)捻樞蚧蛲瑫r被執(zhí)行。在附圖中的方框之間的箭頭示出方法步驟的一個示例順序,但并不意欲排除其它順序或并行的多個步驟的執(zhí)行。此外,單獨的塊可從任何方法刪除而不偏離本文描述的主題的精神和范圍。上面描述的任何例子的方面可與所描述的其它例子中的任一個的方面組合以形成另外的例子,而不失去所尋求的效應。在附圖的元件被示為由箭頭連接的場合,將認識到,這些箭頭示出在元件之間的通信(包括數(shù)據(jù)和控制消息)的僅僅一個示例流。在元件之間的流可以在任一方向上或在兩個方向上。
將理解,優(yōu)選實施方式的上述描述僅作為例子被給出,以及各種修改可由本領域中的技術人員做出。雖然上面以某個詳細程度或參考一個或多個單獨的實施方式描述了各種實施方式,本領域中的技術人員可對所公開的實施方式進行很多變更而不偏離本發(fā)明的精神或范圍。