專利名稱:一種通用圖形處理器虛擬化的實(shí)現(xiàn)方法、系統(tǒng)及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及虛擬化技術(shù)領(lǐng)域,尤其涉及一種通用圖形處理器(GeneralPurpose Graphic Process Unit, GPGPU)虛擬化的實(shí)現(xiàn)方法、系統(tǒng)及裝置。
背景技術(shù):
隨著圖形處理技術(shù)的發(fā)展,出現(xiàn)了一種可從事通用計(jì)算任務(wù)的專業(yè)圖形處理器 GPGPU,GPGPU可以執(zhí)行與圖形處理無(wú)關(guān)的通用計(jì)算指令。在面對(duì)單指令多數(shù)據(jù)流(Single Instruction Multiple Data, SIMD)并且數(shù)據(jù)處理運(yùn)算量,遠(yuǎn)大于數(shù)據(jù)調(diào)度和傳輸?shù)男枨髸r(shí),GPGPU的運(yùn)算能力和訪存帶寬能力都遠(yuǎn)遠(yuǎn)超過(guò)了中央處理器(CPU),因此形成了 CPU+GPGPU的新型異構(gòu)體系結(jié)構(gòu)。這種新型架構(gòu)表現(xiàn)出了強(qiáng)大的性能優(yōu)勢(shì),并且與CPU相比具有更低的能耗和散熱。目前支持GPGPU的物理實(shí)體為物理顯卡,GPGPU還只能在物理機(jī)上使用,GPGPU的虛擬化目前仍然處于初期階段,不過(guò)可以將物理顯卡通過(guò)硬件I^assthrough的方法給虛擬機(jī)使用,但是模擬的顯卡不能支持GPGPU功能,虛擬機(jī)不能調(diào)用GPGPU編程接口以進(jìn)行運(yùn)算,因此現(xiàn)有技術(shù)中還無(wú)法實(shí)現(xiàn)GPGPU的虛擬化。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明實(shí)施例提供一種通用圖形處理器虛擬化的實(shí)現(xiàn)方法、系統(tǒng)及裝置,用以解決現(xiàn)有技術(shù)無(wú)法實(shí)現(xiàn)GPGPU虛擬化的問(wèn)題。本發(fā)明實(shí)施例提供的一種通用圖形處理器虛擬化的實(shí)現(xiàn)系統(tǒng),包括第一虛擬機(jī),用于讀取總線共享內(nèi)存中第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù),并調(diào)用自身的圖形處理器GPU驅(qū)動(dòng)接口,將該待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算,以及收集所述物理顯卡計(jì)算后的結(jié)果,并將該結(jié)果放入總線共享內(nèi)存中待第二虛擬機(jī)讀?。豢偩€共享內(nèi)存,用于存儲(chǔ)第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù),及第一虛擬機(jī)發(fā)送的計(jì)算后的結(jié)果;第二虛擬機(jī),用于向總線共享內(nèi)存中寫入待處理數(shù)據(jù),及從所述總線共享內(nèi)存中獲取計(jì)算后的結(jié)果;物理顯卡,用于對(duì)第一虛擬機(jī)發(fā)送的待處理數(shù)據(jù)進(jìn)行處理。本發(fā)明實(shí)施例提供的一種通用圖形處理器虛擬化的實(shí)現(xiàn)方法,包括第一虛擬機(jī)讀取總線共享內(nèi)存中第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù);調(diào)用自身的圖形處理器GPU驅(qū)動(dòng)接口,將該待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算;收集計(jì)算后的結(jié)果,將該結(jié)果放入總線共享內(nèi)存中待第二虛擬機(jī)讀取。本發(fā)明實(shí)施例提供的一種通用圖形處理器虛擬化的實(shí)現(xiàn)裝置,所述裝置包括圖形處理器GPU后端模塊,用于讀取總線共享內(nèi)存中第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù),收集計(jì)算后的結(jié)果,將該結(jié)果放入總線共享內(nèi)存中待第二虛擬機(jī)讀??;
GPU驅(qū)動(dòng)模塊,用于調(diào)用自身的圖形處理器GPU驅(qū)動(dòng)接口,將該待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算。本發(fā)明實(shí)施例提供的一種通用圖形處理器虛擬化的實(shí)現(xiàn)方法,所述方法包括第二虛擬機(jī)將待處理數(shù)據(jù)寫入總線共享內(nèi)存;讀取總線共享內(nèi)存中對(duì)該待處理數(shù)據(jù)的計(jì)算后的結(jié)果,其中該計(jì)算結(jié)果為第一虛擬機(jī)通過(guò)物理顯卡計(jì)算并返回的。本發(fā)明實(shí)施例提供的一種通用圖形處理器虛擬化的實(shí)現(xiàn)裝置,所述裝置包括圖形處理器GPU前端發(fā)送模塊,用于將待處理數(shù)據(jù)寫入總線共享內(nèi)存;圖形處理器GPU前端接收模塊,用于讀取總線共享內(nèi)存中對(duì)該待處理數(shù)據(jù)的計(jì)算后的結(jié)果,其中該計(jì)算結(jié)果為第一虛擬機(jī)通過(guò)物理顯卡計(jì)算并返回的。本發(fā)明實(shí)施例提供了一種GPGPU虛擬化的實(shí)現(xiàn)方法、系統(tǒng)及裝置,該方法中,第一虛擬機(jī)讀取總線共享內(nèi)存中第二虛擬機(jī)寫入的待處理數(shù)據(jù),自身調(diào)用GPU驅(qū)動(dòng)接口,將該待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算,收集計(jì)算后的結(jié)果,將該結(jié)果放入總線共享內(nèi)存中待第二虛擬機(jī)讀取。由于第一虛擬機(jī)可以實(shí)現(xiàn)訪問(wèn)物理顯卡,并與第二虛擬機(jī)進(jìn)行信息交互,因此實(shí)現(xiàn)了 GPGPU的虛擬化。
圖1為本發(fā)明實(shí)施例提供的GPGPU虛擬化的實(shí)現(xiàn)系統(tǒng)結(jié)構(gòu)示意圖;圖2為本發(fā)明實(shí)施例提供的GPGPU虛擬化的實(shí)現(xiàn)過(guò)程;圖3為本發(fā)明實(shí)施例提供的GPGPU虛擬化的過(guò)程中實(shí)現(xiàn)多臺(tái)虛擬機(jī)同時(shí)使用物理顯卡的過(guò)程;圖4為本發(fā)明實(shí)施例提供的GPGPU虛擬化的過(guò)程中虛擬機(jī)使用物理顯卡進(jìn)行計(jì)算的過(guò)程;圖5為本發(fā)明實(shí)施例提供的GPGPU虛擬化的詳細(xì)實(shí)現(xiàn)過(guò)程;圖6為本發(fā)明實(shí)施例提供的一種通用圖形處理器虛擬化的實(shí)現(xiàn)裝置的結(jié)構(gòu)示意圖;圖7為本發(fā)明實(shí)施例提供的一種通用圖形處理器虛擬化的實(shí)現(xiàn)裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式
下面結(jié)合說(shuō)明書附圖,對(duì)本發(fā)明實(shí)施例進(jìn)行詳細(xì)說(shuō)明。圖1為本發(fā)明實(shí)施例提供的GPGPU虛擬化的實(shí)現(xiàn)系統(tǒng)結(jié)構(gòu)示意圖,該系統(tǒng)包括第一虛擬機(jī)、第二虛擬機(jī)、總線(Bus)共享內(nèi)存以及物理顯卡。第一虛擬機(jī)11,用于讀取總線共享內(nèi)存中第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù),并調(diào)用自身的圖形處理器GPU驅(qū)動(dòng)接口,將該待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算,以及收集所述物理顯卡計(jì)算后的結(jié)果,并將該結(jié)果放入總線共享內(nèi)存中待第二虛擬機(jī)讀??;Bus共享內(nèi)存12,用于存儲(chǔ)第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù),及第一虛擬機(jī)發(fā)送的計(jì)算后的結(jié)果;第二虛擬機(jī)13,用于向總線共享內(nèi)存中寫入待處理數(shù)據(jù),及從所述總線共享內(nèi)存中獲取計(jì)算后的結(jié)果;物理顯卡14,用于對(duì)第一虛擬機(jī)發(fā)送的待處理數(shù)據(jù)進(jìn)行處理。具體在本發(fā)明實(shí)施例中第一虛擬機(jī)可以為虛擬機(jī)Dom 0,總線共享內(nèi)存可以為 XenBus共享內(nèi)存,第二虛擬機(jī)可以為虛擬機(jī)Dom U。虛擬機(jī)Dom O是Xen虛擬機(jī)部署架構(gòu)中的管理操作者,其負(fù)責(zé)管理連接fenBus共享內(nèi)存的每臺(tái)虛擬機(jī)Dom U,并且能與其他虛擬機(jī)Dom U通過(guò)XenBus共享內(nèi)存進(jìn)行交互,并且可以實(shí)現(xiàn)對(duì)物理顯卡等其他物理器件的訪問(wèn)。上述整個(gè)GPGPU虛擬化的實(shí)現(xiàn)系統(tǒng)可以部署于同一物理機(jī)上,隨著物理機(jī)的啟動(dòng),該虛擬機(jī)Dom O啟動(dòng),通過(guò)虛擬機(jī)Dom O的啟動(dòng)可以啟動(dòng)虛擬機(jī)Dom U。在虛擬機(jī)Dom O中安裝有真實(shí)的顯卡驅(qū)動(dòng),使得該虛擬機(jī)Dom O可以直接訪問(wèn)物理顯卡,而在虛擬機(jī)Dom U的操作系統(tǒng)中模擬一個(gè)支持GPGPU的顯卡驅(qū)動(dòng),使該虛擬機(jī)Dom U的操作系統(tǒng)可以通過(guò)這個(gè)模擬的顯卡驅(qū)動(dòng)認(rèn)為自身安裝了一塊獨(dú)立的顯卡。啟動(dòng)后的虛擬機(jī)Dom U當(dāng)接收到用戶的待處理數(shù)據(jù)后,將該待處理數(shù)據(jù)寫入 XenBus共享內(nèi)存中,虛擬機(jī)Dom O讀取XenBus共享內(nèi)存中該虛擬機(jī)DomU寫入的待處理數(shù)據(jù),由于虛擬機(jī)Dom O中安裝了真實(shí)的顯卡驅(qū)動(dòng),因此該虛擬機(jī)Dom O調(diào)用自身的GPU驅(qū)動(dòng)接口,將該待處理數(shù)據(jù)發(fā)送的物理顯卡進(jìn)行計(jì)算,并將物理顯卡計(jì)算后的結(jié)果寫入fenBus 共享內(nèi)存,虛擬機(jī)Dom U從XenBus共享內(nèi)存中讀取該計(jì)算后的結(jié)果提供給用戶,從而實(shí)現(xiàn) GPGPU的虛擬化。圖2為本發(fā)明實(shí)施例提供的GPGPU虛擬化的實(shí)現(xiàn)過(guò)程,該過(guò)程包括以下步驟S201 第一虛擬機(jī)讀取總線共享內(nèi)存中第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù)。S202 調(diào)用自身的圖形處理器GPU驅(qū)動(dòng)接口,將該待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算。S203:收集計(jì)算后的結(jié)果,將該結(jié)果放入總線共享內(nèi)存中待第二虛擬機(jī)讀取。具體的在本發(fā)明實(shí)施例中,在虛擬機(jī)Dom U中包括GPU前端模塊,并且在虛擬機(jī) Dom O中包括GPU后端模塊,虛擬機(jī)Dom U中的GPU前端模塊包括GPU前端發(fā)送模塊和GPU 前端接收模塊,其實(shí)現(xiàn)與虛擬機(jī)Dom O中的GPU后端模塊的交互。虛擬機(jī)Dom U當(dāng)接收到用戶的待處理數(shù)據(jù)后,其GPU前端發(fā)送模塊將該待處理數(shù)據(jù)寫入XenBus共享內(nèi)存,而虛擬機(jī)Dom O通過(guò)其GPU后端模塊讀取XenBus共享內(nèi)存中該虛擬機(jī)Dom U寫入的待處理數(shù)據(jù)。在虛擬機(jī)Dom O中安裝的真實(shí)的物理顯卡驅(qū)動(dòng),即為該虛擬機(jī)Dom O中安裝的GPU驅(qū)動(dòng)。因此當(dāng)該虛擬機(jī)Dom O的GPU后端模塊獲取到虛擬機(jī)Dom U發(fā)送的待處理數(shù)據(jù)后,虛擬機(jī)Dom O的GPU后端模塊將該待處理數(shù)據(jù)發(fā)送到GPU驅(qū)動(dòng),通過(guò)調(diào)用GPU驅(qū)動(dòng)接口將該待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算。經(jīng)物理顯卡計(jì)算獲得計(jì)算結(jié)果后,該計(jì)算結(jié)果通過(guò)虛擬機(jī)Dom O的GPU驅(qū)動(dòng)被其 GPU后端模塊收集到后,將該計(jì)算結(jié)果寫入XenBus共享內(nèi)存中,虛擬機(jī)Dom U的前端模塊讀取該計(jì)算結(jié)果,并將該計(jì)算結(jié)果返回,從而完成GPGPU的計(jì)算任務(wù)。另外,為了在實(shí)現(xiàn)GPGPU虛擬化的過(guò)程中,實(shí)現(xiàn)多臺(tái)虛擬機(jī)Dom U可以同時(shí)使用物理顯卡資源,在本發(fā)明實(shí)施例中當(dāng)每臺(tái)虛擬機(jī)Dom U啟動(dòng)時(shí),虛擬機(jī)Dom O可以在XenBus 共享內(nèi)存中為每臺(tái)虛擬機(jī)Dom U都分配一塊內(nèi)存空間,使該虛擬機(jī)Dom U可以將接收到的待處理數(shù)據(jù)寫入該內(nèi)存空間,另外為了提高虛擬機(jī)Dom O讀取每臺(tái)虛擬機(jī)Dom U寫入到XenBus共享內(nèi)存中的待處理數(shù)據(jù)的效率,在虛擬機(jī)Dom O中可以針對(duì)每臺(tái)虛擬機(jī)Dom U,在自身為其分配對(duì)應(yīng)的子GPU后端模塊,通過(guò)該子GPU后端模塊實(shí)現(xiàn)與該虛擬機(jī)Dom U的交互。具體的虛擬機(jī)Dom O啟動(dòng)后,根據(jù)連接在XenBus共享內(nèi)存中的虛擬機(jī)Dom U的數(shù)量,為每臺(tái)虛擬機(jī)Dom U在XenBus共享內(nèi)存中分配用于存儲(chǔ)數(shù)據(jù)的地址段的信息。當(dāng)虛擬機(jī)Dom O針對(duì)每臺(tái)虛擬機(jī)Dom U為其分配了 XenBus共享內(nèi)存中的地址段信息后,將該分配的地址段的信息通知給為該虛擬機(jī)Dom U分配的子GPU后端模塊。當(dāng)該虛擬機(jī)Dom U啟動(dòng)后,該虛擬機(jī)Dom U的GPU前端模塊與虛擬機(jī)Dom O的為其分配的子GPU后端模塊連接,獲得為其分配的XenBus共享內(nèi)存中的地址段信息。因此當(dāng)每臺(tái)虛擬機(jī)Dom U啟動(dòng)后,即可獲得自身被分配的)CenBus共享內(nèi)存中的地址段信息,從而便于后續(xù)的待處理數(shù)據(jù)的寫入。當(dāng)虛擬機(jī)Dom U的GPU前端模塊獲取了自身被分配的XenBus共享內(nèi)存中的地址段信息后,該GPU前端模塊將待處理數(shù)據(jù)寫入XenBus共享內(nèi)存中自身被分配的地址段對(duì)應(yīng)的存儲(chǔ)空間中。對(duì)應(yīng)該虛擬機(jī)Dom U的虛擬機(jī)Dom O的子GPU后端模塊根據(jù)該虛擬機(jī)Dom U被分配XenBus共享內(nèi)存中的地址段信息,從XenBus共享內(nèi)存的相應(yīng)地址段對(duì)應(yīng)的存儲(chǔ)空間中讀取該待處理數(shù)據(jù)。該子GPU后端模塊在接收到物理顯卡的計(jì)算結(jié)果后,將該計(jì)算結(jié)果寫入該虛擬機(jī)Dom U在XenBus共享內(nèi)存中被分配的地址段對(duì)應(yīng)的存儲(chǔ)空間中,虛擬機(jī) Dom U的GPU前端模塊從自身被分配的XenBus共享內(nèi)存中的地址段對(duì)應(yīng)的存儲(chǔ)空間中讀取該計(jì)算結(jié)果,并提供給用戶。圖3為本發(fā)明實(shí)施例提供的GPGPU虛擬化的過(guò)程中實(shí)現(xiàn)多臺(tái)虛擬機(jī)同時(shí)使用物理顯卡的過(guò)程,該過(guò)程包括以下步驟S301 虛擬機(jī)Dom U的GPU前端模塊根據(jù)為自身分配的XenBus共享內(nèi)存中的地址段的信息,將接收到的用戶發(fā)送的待處理數(shù)據(jù)寫入該地址段對(duì)應(yīng)的存儲(chǔ)空間中。S302 虛擬機(jī)Dom O中為虛擬機(jī)Dom U分配的子GPU后端模塊,根據(jù)為該虛擬機(jī) Dom U分配的XenBus共享內(nèi)存中的地址段的信息,從該地址段對(duì)應(yīng)的存儲(chǔ)空間中讀取該虛擬機(jī)Dom U發(fā)送的待處理數(shù)據(jù)。S303 虛擬機(jī)Dom O調(diào)用自身的GPU驅(qū)動(dòng)接口,將該子GPU后端模塊讀取的待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算。S304 虛擬機(jī)Dom O的該子GPU后端模塊通過(guò)GPU驅(qū)動(dòng)接口收集計(jì)算后的結(jié)果,根據(jù)為該虛擬機(jī)Dom U分配的XenBus共享內(nèi)存中的地址段的信息,將該計(jì)算后的結(jié)果寫入該地址段對(duì)應(yīng)的存儲(chǔ)空間中。S305 虛擬機(jī)Dom U的GPU前端模塊根據(jù)自身被分配的XenBus共享內(nèi)存中的地址段的信息,從對(duì)應(yīng)地址段的存儲(chǔ)空間中讀取該計(jì)算后的結(jié)果,并將其發(fā)送給用戶。在本發(fā)明實(shí)施例中為了實(shí)現(xiàn)每臺(tái)虛擬機(jī)Dom U在通過(guò)物理顯卡進(jìn)行自身的待處理數(shù)據(jù)的計(jì)算時(shí),不會(huì)造成資源的沖突,提高物理顯卡的利用率,虛擬機(jī)Dom O還可以根據(jù)物理顯卡的資源,為虛擬機(jī)Dom U分配相應(yīng)的資源,以便每臺(tái)虛擬機(jī)只能使用自身被分配范圍內(nèi)的資源,不會(huì)對(duì)其他虛擬機(jī)的正常工作造成影響。由于每臺(tái)虛擬機(jī)Dom U被分配了相應(yīng)的資源配置量,該資源配置量包括GPU核數(shù), 顯存等信息。因此當(dāng)每臺(tái)虛擬機(jī)Dom U接收到相應(yīng)的待處理數(shù)據(jù)后,只有對(duì)該待處理數(shù)據(jù)進(jìn)行處理的資源不大于自身被分配的資源配置量時(shí),才進(jìn)行后續(xù)計(jì)算。具體的所述第二虛擬機(jī)具體用于,接收到待處理數(shù)據(jù)后,判斷對(duì)該待處理數(shù)據(jù)進(jìn)行處理的資源是否不大于自身被分配的資源配置量,當(dāng)對(duì)該待處理數(shù)據(jù)進(jìn)行處理的資源不大于自身被分配的資源配置量時(shí),將所述待處理數(shù)據(jù)寫入Xen總線共享內(nèi)存中。圖4為本發(fā)明實(shí)施例提供的GPGPU虛擬化的過(guò)程中虛擬機(jī)使用物理顯卡進(jìn)行計(jì)算的過(guò)程,該過(guò)程包括以下步驟S401 虛擬機(jī)Dom U接收用戶發(fā)送的待處理數(shù)據(jù)。S402 虛擬機(jī)Dom U的GPU前端模塊判斷對(duì)該待處理數(shù)據(jù)進(jìn)行處理的資源是否不大于自身被分配的資源配置量,當(dāng)判斷結(jié)果為是時(shí),進(jìn)行步驟S403,否則,進(jìn)行步驟S408。S403 虛擬機(jī)Dom U的GPU前端模塊根據(jù)為自身分配的XenBus共享內(nèi)存中的地址段的信息,將接收到的用戶發(fā)送的待處理數(shù)據(jù)寫入該地址段對(duì)應(yīng)的存儲(chǔ)空間中。S404 虛擬機(jī)Dom O中為虛擬機(jī)Dom U分配的子GPU后端模塊,根據(jù)為該虛擬機(jī) Dom U分配的XenBus共享內(nèi)存中的地址段的信息,從該地址段對(duì)應(yīng)的存儲(chǔ)空間中讀取該虛擬機(jī)Dom U發(fā)送的待處理數(shù)據(jù)。S405 虛擬機(jī)Dom O調(diào)用自身的GPU驅(qū)動(dòng)接口,將該子GPU后端模塊讀取的待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算。S406 虛擬機(jī)Dom O的該子GPU后端模塊通過(guò)GPU驅(qū)動(dòng)接口收集計(jì)算后的結(jié)果,根據(jù)為該虛擬機(jī)Dom U分配的XenBus共享內(nèi)存中的地址段的信息,將該計(jì)算后的結(jié)果寫入該地址段對(duì)應(yīng)的存儲(chǔ)空間中。S407 虛擬機(jī)Dom U的GPU前端模塊根據(jù)自身被分配的XenBus共享內(nèi)存中的地址段的信息,從對(duì)應(yīng)地址段的存儲(chǔ)空間中讀取該計(jì)算后的結(jié)果,并將其發(fā)送給用戶。S408 虛擬機(jī)Dom U向用戶返回資源用完的提示信息。在實(shí)現(xiàn)GPGPU虛擬化的過(guò)程中,可能會(huì)存在虛擬機(jī)Dom U和虛擬機(jī)DomO的操作系統(tǒng)異構(gòu),例如虛擬機(jī)Dom U的操作系統(tǒng)為Windows操作系統(tǒng),而虛擬機(jī)Dom O的操作系統(tǒng)為 Linux操作系統(tǒng)。為了實(shí)現(xiàn)在GPGPU虛擬化過(guò)程中,對(duì)相應(yīng)待處理數(shù)據(jù)的計(jì)算,在本發(fā)明實(shí)施例中該虛擬機(jī)域O還用于,當(dāng)所述虛擬機(jī)域U的操作系統(tǒng)與所述虛擬機(jī)域O的操作系統(tǒng)不同時(shí),接收虛擬機(jī)域U通過(guò)Xen總線共享內(nèi)存發(fā)送的GPU代碼,其中所述GPU代碼為所述虛擬機(jī)域U的用戶使用編譯器編譯的,虛擬機(jī)域O采用編譯器將所述GPU代碼編譯為二進(jìn)制對(duì)象,將其進(jìn)行函數(shù)名注冊(cè)。也就是說(shuō)用戶發(fā)送的待處理數(shù)據(jù)可能需要通過(guò)CPU進(jìn)行計(jì)算,也可能需要通過(guò) GPU進(jìn)行計(jì)算,具體的由于用戶對(duì)相應(yīng)的代碼進(jìn)行了編譯,并且確定了相應(yīng)的函數(shù)名,因此當(dāng)用戶是輸入待處理數(shù)據(jù)時(shí),在該待處理數(shù)據(jù)中可以包含對(duì)該待處理數(shù)據(jù)中包含的數(shù)據(jù)信息進(jìn)行處理的函數(shù)名的信息。具體的當(dāng)對(duì)該待處理數(shù)據(jù)中的數(shù)據(jù)信息需要通過(guò)CPU計(jì)算時(shí),該虛擬機(jī)域U可以自身對(duì)該數(shù)據(jù)信息進(jìn)行處理,當(dāng)該待處理數(shù)據(jù)中的數(shù)據(jù)信息需要通過(guò)GPU計(jì)算時(shí),該虛擬機(jī)域U需要將該待處理數(shù)據(jù)發(fā)送到虛擬機(jī)域0,通過(guò)物理顯卡進(jìn)行計(jì)笪弁。另外當(dāng)虛擬機(jī)Dom O和虛擬機(jī)Dom U的操作系統(tǒng)相同時(shí),也是可以按照上述過(guò)程執(zhí)行的。具體的當(dāng)虛擬機(jī)Dom U用戶使用專用的編譯器mynvcc編譯GPGPU代碼,當(dāng)用戶編譯時(shí),編譯器mynvcc將用戶源程序分解為CPU代碼部分和GPU代碼部分。當(dāng)虛擬機(jī)Dom
10U獲取到用戶編譯后的CPU代碼和GPU代碼時(shí),通過(guò)自身的GPU前端模塊將GPU代碼寫入 XenBus共享內(nèi)存。虛擬機(jī)Dom O的對(duì)應(yīng)子GPU后端模塊讀取到該GPU代碼后,使用真實(shí)的編譯器nvcc將GPU代碼編譯為二進(jìn)制對(duì)象,并注冊(cè)相應(yīng)的函數(shù)名。此時(shí)虛擬機(jī)Dom U自身對(duì)用戶編譯后的CPU代碼進(jìn)行處理,通過(guò)Mynvcc調(diào)用編譯器cc對(duì)CPU代碼進(jìn)行編譯,并注冊(cè)相應(yīng)的函數(shù)名。當(dāng)用戶向該虛擬機(jī)Dom U輸入待處理數(shù)據(jù)時(shí),該待處理數(shù)據(jù)中包含函數(shù)名信息以及數(shù)據(jù)信息,虛擬機(jī)Dom U根據(jù)該待處理數(shù)據(jù)中包含的函數(shù)名信息,判斷該待處理數(shù)據(jù)中的數(shù)據(jù)信息是否需要通過(guò)GPU計(jì)算。當(dāng)判斷該待處理數(shù)據(jù)中的數(shù)據(jù)信息需要通過(guò)GPU計(jì)算時(shí), 將該待處理數(shù)據(jù)寫入自身被分配的fenBus共享內(nèi)存中。當(dāng)虛擬機(jī)Dom O讀取到相應(yīng)的待處理數(shù)據(jù)后,根據(jù)該待處理數(shù)據(jù)中包含的函數(shù)名信息,以及自身已注冊(cè)的函數(shù)名信息,調(diào)用該函數(shù)名的函數(shù),將調(diào)用的該函數(shù)及該待處理數(shù)據(jù)中的數(shù)據(jù)信息發(fā)送到物理顯卡上進(jìn)行計(jì)算。由于GPU函數(shù)是在虛擬機(jī)DomU中使用真實(shí)編譯器nvcc進(jìn)行的編譯,所以即使虛擬機(jī)DomU的操作系統(tǒng)與虛擬機(jī)DomO的操作系統(tǒng)異構(gòu), 代碼能仍運(yùn)行。而這一切對(duì)于用戶來(lái)說(shuō)都是透明的。圖5為本發(fā)明實(shí)施例提供的GPGPU虛擬化的詳細(xì)實(shí)現(xiàn)過(guò)程,該過(guò)程包括以下步驟S501 虛擬機(jī)域O啟動(dòng)后讀取GPGPU資源配置參數(shù),獲得每臺(tái)虛擬機(jī)域U被分配的資源配置量,為每臺(tái)虛擬機(jī)域U在Xenbus分配相應(yīng)的地址段空間,并為每個(gè)虛擬機(jī)域U分配對(duì)應(yīng)的子GPU后端模塊。S502 將獲得的所述資源配置量寫入Xenbus共享內(nèi)存,等待該虛擬機(jī)域U啟動(dòng)后獲取該資源配置量。S503 針對(duì)每臺(tái)虛擬機(jī)域U,當(dāng)虛擬機(jī)域U啟動(dòng)后其GPU前端模塊與虛擬機(jī)域O的對(duì)應(yīng)子GPU后端模塊交互,獲取自身被分配的Xenbus共享內(nèi)存的地址段信息,從該對(duì)應(yīng)的地址段內(nèi)讀取自身被分配的資源配置量。在下述步驟之前,在虛擬機(jī)域U和虛擬機(jī)域O之間還要完成,虛擬機(jī)域U將用戶編譯后的GPU代碼發(fā)送到虛擬機(jī)域0,虛擬機(jī)域O根據(jù)接收到的GPU代碼進(jìn)行編譯并注冊(cè)相應(yīng)函數(shù)名,以及虛擬機(jī)域U將用戶編譯后的CPU代碼進(jìn)行編譯后注冊(cè)相應(yīng)函數(shù)名。S504:虛擬機(jī)域U根據(jù)接收到的待處理數(shù)據(jù)中包含的函數(shù)名信息,判斷該待處理數(shù)據(jù)是否需要通過(guò)GPU計(jì)算,當(dāng)判斷結(jié)果為是時(shí),進(jìn)行步驟S505,否則,進(jìn)行步驟S512。S505 當(dāng)該虛擬機(jī)域U的GPU前端接收到待處理數(shù)據(jù)后,判斷對(duì)該待處理數(shù)據(jù)進(jìn)行處理的資源是否不大于自身被分配的資源配置量,當(dāng)判斷結(jié)果為是時(shí),進(jìn)行步驟S506,否則,進(jìn)行步驟S511。S506 虛擬機(jī)Dom U的GPU前端模塊根據(jù)為自身分配的XenBus共享內(nèi)存中的地址段的信息,將接收到的用戶發(fā)送的待處理數(shù)據(jù)寫入該地址段對(duì)應(yīng)的存儲(chǔ)空間中。S507 虛擬機(jī)Dom O中為虛擬機(jī)Dom U分配的子GPU后端模塊,根據(jù)為該虛擬機(jī) Dom U分配的XenBus共享內(nèi)存中的地址段的信息,從該地址段對(duì)應(yīng)的存儲(chǔ)空間中讀取該虛擬機(jī)Dom U發(fā)送的待處理數(shù)據(jù)。S508 虛擬機(jī)Dom O根據(jù)接收到的待處理數(shù)據(jù)中包含的函數(shù)名信息,以及自身已注冊(cè)的函數(shù)名,調(diào)用相應(yīng)函數(shù)名的函數(shù),調(diào)用自身的GPU驅(qū)動(dòng)接口,將調(diào)用的所述函數(shù),及該待處理數(shù)據(jù)中包含的數(shù)據(jù)信息發(fā)送到物理顯卡上進(jìn)行計(jì)算。S509 虛擬機(jī)Dom O的該子GPU后端模塊通過(guò)GPU驅(qū)動(dòng)接口收集計(jì)算后的結(jié)果,根據(jù)為該虛擬機(jī)Dom U分配的XenBus共享內(nèi)存中的地址段的信息,將該計(jì)算后的結(jié)果寫入該地址段對(duì)應(yīng)的存儲(chǔ)空間中。S510 虛擬機(jī)Dom U的GPU前端模塊根據(jù)自身被分配的XenBus共享內(nèi)存中的地址段的信息,從對(duì)應(yīng)地址段的存儲(chǔ)空間中讀取該計(jì)算后的結(jié)果,并將其發(fā)送給用戶。S511 虛擬機(jī)Dom U向用戶返回資源用完的提示信息。S512 虛擬機(jī)Dom U根據(jù)所述待處理數(shù)據(jù)中包含的函數(shù)名信息,及本地以注冊(cè)的函數(shù)名,調(diào)用該函數(shù)名的函數(shù),通過(guò)調(diào)用的函數(shù),對(duì)該待處理數(shù)據(jù)中包含的數(shù)據(jù)信息進(jìn)行處理,并將處理結(jié)果返回用戶。結(jié)合圖1所示的一種通用圖形處理器虛擬化的實(shí)現(xiàn)系統(tǒng)的結(jié)構(gòu)示意圖,對(duì)本發(fā)明實(shí)施例中的系統(tǒng)進(jìn)行詳細(xì)描述,所述系統(tǒng)包括第一虛擬機(jī)11,用于讀取總線共享內(nèi)存中第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù),并調(diào)用自身的圖形處理器GPU驅(qū)動(dòng)接口,將該待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算,以及收集所述物理顯卡計(jì)算后的結(jié)果,并將該結(jié)果放入總線共享內(nèi)存中待第二虛擬機(jī)讀??;總線共享內(nèi)存12,用于存儲(chǔ)第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù),及第一虛擬機(jī)發(fā)送的計(jì)算后的結(jié)果;第二虛擬機(jī)13,用于向總線共享內(nèi)存中寫入待處理數(shù)據(jù),及從所述總線共享內(nèi)存中獲取計(jì)算后的結(jié)果;物理顯卡14,用于對(duì)第一虛擬機(jī)發(fā)送的待處理數(shù)據(jù)進(jìn)行處理。所述第一虛擬機(jī)11還用于通過(guò)讀取通用圖形處理器資源配置參數(shù)獲得第二虛擬機(jī)被分配的資源配置量,并將獲得的所述資源配置量寫入總線共享內(nèi)存,以及等待第二虛擬機(jī)獲得該資源配置量;所述第二虛擬機(jī)13具體用于,獲取總線共享內(nèi)存中寫入的其被分配的資源配置量,并根據(jù)其被分配的資源配置量向總線共享內(nèi)存中寫入待處理數(shù)據(jù)。所述第二虛擬機(jī)13具體用于,在接收到待處理數(shù)據(jù)后,判斷出對(duì)該待處理數(shù)據(jù)進(jìn)行處理的資源不大于其被分配的資源配置量時(shí),將所述待處理數(shù)據(jù)寫入總線共享內(nèi)存中。所述第二虛擬機(jī)13具體用于根據(jù)自身被分配到的總線共享內(nèi)存中的地址段的信息,將所述待處理數(shù)據(jù)寫入該地址段對(duì)應(yīng)的存儲(chǔ)空間中。所述第一虛擬機(jī)11具體用于根據(jù)第二虛擬機(jī)被分配到的總線共享內(nèi)存中的地址段的信息,從該地址段對(duì)應(yīng)的存儲(chǔ)空間中讀取第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù)。所述第一虛擬機(jī)11還用于,當(dāng)所述第二虛擬機(jī)的操作系統(tǒng)與自身的操作系統(tǒng)不同時(shí),接收第二虛擬機(jī)通過(guò)總線共享內(nèi)存發(fā)送的GPU代碼,采用編譯器將所述GPU代碼編譯為二進(jìn)制對(duì)象,并將其中的函數(shù)名進(jìn)行注冊(cè),其中所述GPU代碼為所述第二虛擬機(jī)的用戶使用編譯器編譯的。所述第二虛擬機(jī)13還用于,當(dāng)所述用戶使用編譯器編譯的代碼中包括CPU代碼時(shí),調(diào)用自身的編譯器,對(duì)所述CPU代碼進(jìn)行編譯,并對(duì)其進(jìn)行函數(shù)名注冊(cè)。所述第二虛擬機(jī)13還用于,根據(jù)所述待處理數(shù)據(jù)中包含的函數(shù)名信息,判斷所述待處理數(shù)據(jù)是否需要通過(guò)GPU計(jì)算,當(dāng)判斷所述待處理數(shù)據(jù)需要通過(guò)GPU計(jì)算時(shí),發(fā)送所述待處理數(shù)據(jù)。所述第二虛擬機(jī)13還用于,當(dāng)所述待處理數(shù)據(jù)需要通過(guò)CPU計(jì)算時(shí),根據(jù)所述待處理數(shù)據(jù)中包含的函數(shù)名信息,及本地以注冊(cè)的函數(shù)名,調(diào)用該函數(shù)名的函數(shù),通過(guò)調(diào)用的函數(shù),對(duì)該待處理數(shù)據(jù)中包含的數(shù)據(jù)信息進(jìn)行處理。所述第一虛擬機(jī)11還用于,根據(jù)讀取的所述待處理數(shù)據(jù)中包含的函數(shù)名信息,及已注冊(cè)的函數(shù)名,調(diào)用為所述虛擬機(jī)域U注冊(cè)的該函數(shù)名的函數(shù),將調(diào)用的所述函數(shù),及所述待處理數(shù)據(jù)中包含的數(shù)據(jù)信息發(fā)送到所述物理顯卡上進(jìn)行計(jì)算。圖6為本發(fā)明實(shí)施例提供的一種通用圖形處理器虛擬化的實(shí)現(xiàn)裝置的結(jié)構(gòu)示意圖,所述裝置包括圖形處理器GPU后端模塊61,用于讀取總線共享內(nèi)存中第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù),收集計(jì)算后的結(jié)果,將該結(jié)果放入總線共享內(nèi)存中待第二虛擬機(jī)讀?。籊PU驅(qū)動(dòng)模塊62,用于調(diào)用自身的圖形處理器GPU驅(qū)動(dòng)接口,將該待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算。所述GPU后端模塊61還用于,啟動(dòng)后,讀取通用圖形處理器資源配置參數(shù),獲得該第二虛擬機(jī)被分配的資源配置量,將獲得的所述資源配置量寫入總線共享內(nèi)存,等待該第二虛擬機(jī)啟動(dòng)后獲得該資源配置量。所述GPU后端模塊61具體用于,根據(jù)為該第二虛擬機(jī)分配的總線共享內(nèi)存中的地址段的信息,從該地址段對(duì)應(yīng)的存儲(chǔ)空間中讀取該第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù)。所述GPU后端模塊61還用于,當(dāng)所述第二虛擬機(jī)的操作系統(tǒng)與所述第一虛擬機(jī)的操作系統(tǒng)不同時(shí),接收第二虛擬機(jī)通過(guò)總線共享內(nèi)存發(fā)送的GPU代碼,采用編譯器將所述 GPU代碼編譯為二進(jìn)制對(duì)象,并對(duì)其進(jìn)行函數(shù)名注冊(cè),其中所述GPU代碼為所述第二虛擬機(jī)的用戶使用編譯器編譯的。所述GPU后端模塊61具體用于,根據(jù)讀取的所述待處理數(shù)據(jù)中包含的函數(shù)名信息,及已注冊(cè)的函數(shù)名,調(diào)用為所述第二虛擬機(jī)注冊(cè)的該函數(shù)名的函數(shù),將調(diào)用的所述函數(shù),及所述待處理數(shù)據(jù)中包含的數(shù)據(jù)信息發(fā)送到所述物理顯卡上進(jìn)行計(jì)算。圖7為本發(fā)明實(shí)施例提供的一種通用圖形處理器虛擬化的實(shí)現(xiàn)裝置的結(jié)構(gòu)示意圖,所述裝置包括圖形處理器GPU前端發(fā)送模塊71,用于將待處理數(shù)據(jù)寫入總線共享內(nèi)存;圖形處理器GPU前端接收模塊72,用于讀取總線共享內(nèi)存中對(duì)該待處理數(shù)據(jù)的計(jì)算后的結(jié)果,其中該計(jì)算結(jié)果為第一虛擬機(jī)通過(guò)物理顯卡計(jì)算并返回的。所述GPU前端發(fā)送模塊71具體用于,接收到待處理數(shù)據(jù)后,判斷對(duì)該待處理數(shù)據(jù)進(jìn)行處理的資源是否不大于自身被分配的資源配置量,當(dāng)對(duì)該待處理數(shù)據(jù)進(jìn)行處理的資源不大于自身被分配的資源配置量時(shí),將所述待處理數(shù)據(jù)寫入總線共享內(nèi)存中。所述GPU前端發(fā)送模塊71具體用于,根據(jù)為自身分配的總線共享內(nèi)存中的地址段的信息,將所述待處理數(shù)據(jù)寫入該地址段對(duì)應(yīng)的存儲(chǔ)空間中。所述GPU前端發(fā)送模塊71具體用于,調(diào)用自身的編譯器,對(duì)所述CPU代碼進(jìn)行編譯,并對(duì)其進(jìn)行函數(shù)名注冊(cè)。所述GPU前端發(fā)送模塊71具體用于,根據(jù)所述待處理數(shù)據(jù)中包含的函數(shù)名信息, 判斷所述待處理數(shù)據(jù)是否需要通過(guò)GPU計(jì)算,當(dāng)判斷所述待處理數(shù)據(jù)需要通過(guò)GPU計(jì)算時(shí),將所述待處理數(shù)據(jù)寫入總線共享內(nèi)存。所述GPU前端發(fā)送模塊71還用于,根據(jù)所述待處理數(shù)據(jù)中包含的函數(shù)名信息,及本地以注冊(cè)的函數(shù)名,調(diào)用該函數(shù)名的函數(shù),通過(guò)調(diào)用的函數(shù),對(duì)該待處理數(shù)據(jù)中包含的數(shù)據(jù)信息進(jìn)行處理。本發(fā)明實(shí)施例提供了一種GPGPU虛擬化的實(shí)現(xiàn)方法、系統(tǒng)及裝置,該方法中,第一虛擬機(jī)讀取總線共享內(nèi)存中第二虛擬機(jī)寫入的待處理數(shù)據(jù),自身調(diào)用GPU驅(qū)動(dòng)接口,將該待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算,收集計(jì)算后的結(jié)果,將該結(jié)果放入總線共享內(nèi)存中待第二虛擬機(jī)讀取。由于第一虛擬機(jī)可以實(shí)現(xiàn)訪問(wèn)物理顯卡,并與第二虛擬機(jī)進(jìn)行信息交互,因此實(shí)現(xiàn)了 GPGPU的虛擬化。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種通用圖形處理器虛擬化的實(shí)現(xiàn)系統(tǒng),其特征在于,所述系統(tǒng)包括第一虛擬機(jī),用于讀取總線共享內(nèi)存中第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù),并調(diào)用自身的圖形處理器GPU驅(qū)動(dòng)接口,將該待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算,以及收集所述物理顯卡計(jì)算后的結(jié)果,并將該結(jié)果放入總線共享內(nèi)存中待第二虛擬機(jī)讀??;總線共享內(nèi)存,用于存儲(chǔ)第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù),及第一虛擬機(jī)發(fā)送的計(jì)算后的結(jié)果;第二虛擬機(jī),用于向總線共享內(nèi)存中寫入待處理數(shù)據(jù),及從所述總線共享內(nèi)存中獲取計(jì)算后的結(jié)果;物理顯卡,用于對(duì)第一虛擬機(jī)發(fā)送的待處理數(shù)據(jù)進(jìn)行處理。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述第一虛擬機(jī)還用于通過(guò)讀取通用圖形處理器資源配置參數(shù)獲得第二虛擬機(jī)被分配的資源配置量,并將獲得的所述資源配置量寫入總線共享內(nèi)存,以及等待第二虛擬機(jī)獲得該資源配置量;所述第二虛擬機(jī)具體用于,獲取總線共享內(nèi)存中寫入的其被分配的資源配置量,并根據(jù)其被分配的資源配置量向總線共享內(nèi)存中寫入待處理數(shù)據(jù)。
3.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述第二虛擬機(jī)具體用于,在接收到待處理數(shù)據(jù)后,判斷出對(duì)該待處理數(shù)據(jù)進(jìn)行處理的資源不大于其被分配的資源配置量時(shí),將所述待處理數(shù)據(jù)寫入總線共享內(nèi)存中。
4.如權(quán)利要求1或3所述的系統(tǒng),其特征在于,所述第二虛擬機(jī)具體用于根據(jù)自身被分配到的總線共享內(nèi)存中的地址段的信息,將所述待處理數(shù)據(jù)寫入該地址段對(duì)應(yīng)的存儲(chǔ)空間中。
5.如權(quán)利要求4所述的系統(tǒng),其特征在于,所述第一虛擬機(jī)具體用于根據(jù)第二虛擬機(jī)被分配到的總線共享內(nèi)存中的地址段的信息,從該地址段對(duì)應(yīng)的存儲(chǔ)空間中讀取第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù)。
6.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述第一虛擬機(jī)還用于,當(dāng)所述第二虛擬機(jī)的操作系統(tǒng)與自身的操作系統(tǒng)不同時(shí),接收第二虛擬機(jī)通過(guò)總線共享內(nèi)存發(fā)送的GPU代碼,采用編譯器將所述GPU代碼編譯為二進(jìn)制對(duì)象,并將其中的函數(shù)名進(jìn)行注冊(cè),其中所述 GPU代碼為所述第二虛擬機(jī)的用戶使用編譯器編譯的。
7.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述第二虛擬機(jī)還用于,當(dāng)所述用戶使用編譯器編譯的代碼中包括CPU代碼時(shí),調(diào)用自身的編譯器,對(duì)所述CPU代碼進(jìn)行編譯,并對(duì)其進(jìn)行函數(shù)名注冊(cè)。
8.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述第二虛擬機(jī)還用于,根據(jù)所述待處理數(shù)據(jù)中包含的函數(shù)名信息,判斷所述待處理數(shù)據(jù)是否需要通過(guò)GPU計(jì)算,當(dāng)判斷所述待處理數(shù)據(jù)需要通過(guò)GPU計(jì)算時(shí),發(fā)送所述待處理數(shù)據(jù)。
9.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述第二虛擬機(jī)還用于,當(dāng)所述待處理數(shù)據(jù)需要通過(guò)中央處理器CPU計(jì)算時(shí),根據(jù)所述待處理數(shù)據(jù)中包含的函數(shù)名信息,及本地以注冊(cè)的函數(shù)名,調(diào)用該函數(shù)名的函數(shù),通過(guò)調(diào)用的函數(shù),對(duì)該待處理數(shù)據(jù)中包含的數(shù)據(jù)信息進(jìn)行處理。
10.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述第一虛擬機(jī)還用于,根據(jù)讀取的所述待處理數(shù)據(jù)中包含的函數(shù)名信息,及已注冊(cè)的函數(shù)名,調(diào)用為所述第二虛擬機(jī)注冊(cè)的該函數(shù)名的函數(shù),將調(diào)用的所述函數(shù),及所述待處理數(shù)據(jù)中包含的數(shù)據(jù)信息發(fā)送到所述物理顯卡上進(jìn)行計(jì)算。
11.一種通用圖形處理器虛擬化的實(shí)現(xiàn)方法,其特征在于,包括 第一虛擬機(jī)讀取總線共享內(nèi)存中第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù);調(diào)用自身的圖形處理器GPU驅(qū)動(dòng)接口,將該待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算; 收集計(jì)算后的結(jié)果,將該結(jié)果放入總線共享內(nèi)存中待第二虛擬機(jī)讀取。
12.如權(quán)利要求11所述的方法,其特征在于,第一虛擬機(jī)讀取總線共享內(nèi)存中第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù)之前,所述方法還包括第一虛擬機(jī)啟動(dòng)后,讀取通用圖形處理器資源配置參數(shù),獲得該第二虛擬機(jī)被分配的資源配置量;將獲得的所述資源配置量寫入總線共享內(nèi)存,等待該第二虛擬機(jī)啟動(dòng)后獲得該資源配直里。
13.如權(quán)利要求11所述的方法,其特征在于,第一虛擬機(jī)讀取總線共享內(nèi)存中第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù)包括第一虛擬機(jī)根據(jù)為該第二虛擬機(jī)分配的總線共享內(nèi)存中的地址段的信息,從該地址段對(duì)應(yīng)的存儲(chǔ)空間中讀取該第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù)。
14.如權(quán)利要求11所述的方法,其特征在于,當(dāng)所述第二虛擬機(jī)的操作系統(tǒng)與所述第一虛擬機(jī)的操作系統(tǒng)不同時(shí),所述第一虛擬機(jī)讀取總線共享內(nèi)存中第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù)之前,所述方法還包括第一虛擬機(jī)接收第二虛擬機(jī)通過(guò)總線共享內(nèi)存發(fā)送的GPU代碼,其中所述GPU代碼為所述第二虛擬機(jī)的用戶使用編譯器編譯的;第一虛擬機(jī)采用編譯器將所述GPU代碼編譯為二進(jìn)制對(duì)象,并對(duì)其進(jìn)行函數(shù)名注冊(cè)。
15.如權(quán)利要求14所述的方法,其特征在于,所述將該待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算包括根據(jù)讀取的所述待處理數(shù)據(jù)中包含的函數(shù)名信息,及已注冊(cè)的函數(shù)名,調(diào)用為所述第二虛擬機(jī)注冊(cè)的該函數(shù)名的函數(shù);將調(diào)用的所述函數(shù),及所述待處理數(shù)據(jù)中包含的數(shù)據(jù)信息發(fā)送到所述物理顯卡上進(jìn)行計(jì)算。
16.一種通用圖形處理器虛擬化的實(shí)現(xiàn)裝置,其特征在于,所述裝置包括圖形處理器GPU后端模塊,用于讀取總線共享內(nèi)存中第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù), 收集計(jì)算后的結(jié)果,將該結(jié)果放入總線共享內(nèi)存中待第二虛擬機(jī)讀??;GPU驅(qū)動(dòng)模塊,用于調(diào)用自身的圖形處理器GPU驅(qū)動(dòng)接口,將該待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算。
17.如權(quán)利要求16所述的裝置,其特征在于,所述GPU后端模塊還用于,啟動(dòng)后,讀取通用圖形處理器資源配置參數(shù),獲得該第二虛擬機(jī)被分配的資源配置量,將獲得的所述資源配置量寫入總線共享內(nèi)存,等待該第二虛擬機(jī)啟動(dòng)后獲得該資源配置量。
18.如權(quán)利要求16所述的裝置,其特征在于,所述GPU后端模塊具體用于,根據(jù)為該第二虛擬機(jī)分配的總線共享內(nèi)存中的地址段的信息,從該地址段對(duì)應(yīng)的存儲(chǔ)空間中讀取該第二虛擬機(jī)發(fā)送的待處理數(shù)據(jù)。
19.如權(quán)利要求16所述的裝置,其特征在于,所述GPU后端模塊還用于,當(dāng)所述第二虛擬機(jī)的操作系統(tǒng)與所述第一虛擬機(jī)的操作系統(tǒng)不同時(shí),接收第二虛擬機(jī)通過(guò)總線共享內(nèi)存發(fā)送的GPU代碼,采用編譯器將所述GPU代碼編譯為二進(jìn)制對(duì)象,并對(duì)其進(jìn)行函數(shù)名注冊(cè), 其中所述GPU代碼為所述第二虛擬機(jī)的用戶使用編譯器編譯的。
20.如權(quán)利要求19所述的裝置,其特征在于,所述GPU后端模塊具體用于,根據(jù)讀取的所述待處理數(shù)據(jù)中包含的函數(shù)名信息,及已注冊(cè)的函數(shù)名,調(diào)用為所述第二虛擬機(jī)注冊(cè)的該函數(shù)名的函數(shù),將調(diào)用的所述函數(shù),及所述待處理數(shù)據(jù)中包含的數(shù)據(jù)信息發(fā)送到所述物理顯卡上進(jìn)行計(jì)算。
21.一種通用圖形處理器虛擬化的實(shí)現(xiàn)方法,其特征在于,所述方法包括 第二虛擬機(jī)將待處理數(shù)據(jù)寫入總線共享內(nèi)存;讀取總線共享內(nèi)存中對(duì)該待處理數(shù)據(jù)的計(jì)算后的結(jié)果,其中該計(jì)算結(jié)果為第一虛擬機(jī)通過(guò)物理顯卡計(jì)算并返回的。
22.如權(quán)利要求21所述的方法,其特征在于,所述第二虛擬機(jī)將待處理數(shù)據(jù)寫入總線共享內(nèi)存包括所述第二虛擬機(jī)接收到待處理數(shù)據(jù)后,判斷對(duì)該待處理數(shù)據(jù)進(jìn)行處理的資源是否不大于自身被分配的資源配置量;當(dāng)對(duì)該待處理數(shù)據(jù)進(jìn)行處理的資源不大于自身被分配的資源配置量時(shí),將所述待處理數(shù)據(jù)寫入總線共享內(nèi)存中。
23.如權(quán)利要求21或22所述的方法,其特征在于,所述第二虛擬機(jī)將待處理數(shù)據(jù)寫入總線共享內(nèi)存包括所述第二虛擬機(jī)根據(jù)為自身分配的總線共享內(nèi)存中的地址段的信息,將所述待處理數(shù)據(jù)寫入該地址段對(duì)應(yīng)的存儲(chǔ)空間中。
24.如權(quán)利要求21所述的方法,其特征在于,當(dāng)所述第二虛擬機(jī)的用戶使用編譯器編譯的代碼中包括CPU代碼時(shí),所述方法還包括所述第二虛擬機(jī)調(diào)用自身的編譯器,對(duì)所述CPU代碼進(jìn)行編譯,并對(duì)其進(jìn)行函數(shù)名注ππ冊(cè)。
25.如權(quán)利要求M所述的方法,其特征在于,第二虛擬機(jī)將待處理數(shù)據(jù)寫入總線共享內(nèi)存包括所述第二虛擬機(jī)根據(jù)所述待處理數(shù)據(jù)中包含的函數(shù)名信息,判斷所述待處理數(shù)據(jù)是否需要通過(guò)GPU計(jì)算;當(dāng)判斷所述待處理數(shù)據(jù)需要通過(guò)GPU計(jì)算時(shí),將所述待處理數(shù)據(jù)寫入總線共享內(nèi)存。
26.如權(quán)利要求25所述的方法,其特征在于,當(dāng)所述待處理數(shù)據(jù)需要通過(guò)CPU計(jì)算時(shí), 所述方法還包括所述第二虛擬機(jī)根據(jù)所述待處理數(shù)據(jù)中包含的函數(shù)名信息,及本地以注冊(cè)的函數(shù)名, 調(diào)用該函數(shù)名的函數(shù);通過(guò)調(diào)用的函數(shù),對(duì)該待處理數(shù)據(jù)中包含的數(shù)據(jù)信息進(jìn)行處理。
27.一種通用圖形處理器虛擬化的實(shí)現(xiàn)裝置,其特征在于,所述裝置包括 圖形處理器GPU前端發(fā)送模塊,用于將待處理數(shù)據(jù)寫入總線共享內(nèi)存;圖形處理器GPU前端接收模塊,用于讀取總線共享內(nèi)存中對(duì)該待處理數(shù)據(jù)的計(jì)算后的結(jié)果,其中該計(jì)算結(jié)果為第一虛擬機(jī)通過(guò)物理顯卡計(jì)算并返回的。
28.如權(quán)利要求27所述的裝置,其特征在于,所述GPU前端發(fā)送模塊具體用于,接收到待處理數(shù)據(jù)后,判斷對(duì)該待處理數(shù)據(jù)進(jìn)行處理的資源是否不大于自身被分配的資源配置量,當(dāng)對(duì)該待處理數(shù)據(jù)進(jìn)行處理的資源不大于自身被分配的資源配置量時(shí),將所述待處理數(shù)據(jù)寫入總線共享內(nèi)存中。
29.如權(quán)利要求27或觀所述的裝置,其特征在于,所述GPU前端發(fā)送模塊具體用于,根據(jù)為自身分配的總線共享內(nèi)存中的地址段的信息,將所述待處理數(shù)據(jù)寫入該地址段對(duì)應(yīng)的存儲(chǔ)空間中。
30.如權(quán)利要求27所述的裝置,其特征在于,所述GPU前端發(fā)送模塊具體用于,調(diào)用自身的編譯器,對(duì)所述CPU代碼進(jìn)行編譯,并對(duì)其進(jìn)行函數(shù)名注冊(cè)。
31.如權(quán)利要求30所述的裝置,其特征在于,所述GPU前端發(fā)送模塊具體用于,根據(jù)所述待處理數(shù)據(jù)中包含的函數(shù)名信息,判斷所述待處理數(shù)據(jù)是否需要通過(guò)GPU計(jì)算,當(dāng)判斷所述待處理數(shù)據(jù)需要通過(guò)GPU計(jì)算時(shí),將所述待處理數(shù)據(jù)寫入總線共享內(nèi)存。
32.如權(quán)利要求31所述的裝置,其特征在于,所述GPU前端發(fā)送模塊還用于,根據(jù)所述待處理數(shù)據(jù)中包含的函數(shù)名信息,及本地以注冊(cè)的函數(shù)名,調(diào)用該函數(shù)名的函數(shù),通過(guò)調(diào)用的函數(shù),對(duì)該待處理數(shù)據(jù)中包含的數(shù)據(jù)信息進(jìn)行處理。
全文摘要
本發(fā)明公開了一種GPGPU虛擬化的實(shí)現(xiàn)方法、系統(tǒng)及裝置,用以解決現(xiàn)有技術(shù)無(wú)法實(shí)現(xiàn)GPGPU虛擬化的問(wèn)題。該方法第一虛擬機(jī)讀取總線共享內(nèi)存中第二虛擬機(jī)寫入的待處理數(shù)據(jù),自身調(diào)用GPU驅(qū)動(dòng)接口,將該待處理數(shù)據(jù)發(fā)送到物理顯卡上進(jìn)行計(jì)算,收集計(jì)算后的結(jié)果,將該結(jié)果放入總線共享內(nèi)存中待第二虛擬機(jī)讀取。由于第一虛擬機(jī)可以實(shí)現(xiàn)訪問(wèn)物理顯卡,并與第二虛擬機(jī)進(jìn)行信息交互,因此實(shí)現(xiàn)了GPGPU的虛擬化。
文檔編號(hào)G06F9/455GK102541618SQ201010612078
公開日2012年7月4日 申請(qǐng)日期2010年12月29日 優(yōu)先權(quán)日2010年12月29日
發(fā)明者趙鵬 申請(qǐng)人:中國(guó)移動(dòng)通信集團(tuán)公司