欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

GPU虛擬化方法、裝置、系統(tǒng)及電子設(shè)備、計(jì)算機(jī)程序產(chǎn)品與流程

文檔序號:11635190閱讀:195來源:國知局
GPU虛擬化方法、裝置、系統(tǒng)及電子設(shè)備、計(jì)算機(jī)程序產(chǎn)品與流程

本申請涉及計(jì)算機(jī)技術(shù),具體地,涉及一種圖形處理器gpu的虛擬化方法、裝置、系統(tǒng)及電子設(shè)備、計(jì)算機(jī)程序產(chǎn)品。



背景技術(shù):

圖1中示出了基于qemu/kvm(kernel-basedvirtualmachine,基于內(nèi)核的虛擬機(jī))技術(shù)的虛擬化架構(gòu)。

如圖1所示,基于qemu/kvm技術(shù)的虛擬化架構(gòu)由一個主host操作系統(tǒng),若干個虛擬出來的客guest操作系統(tǒng)組成。host操作系統(tǒng)包括多個host用戶空間程序、hostlinux內(nèi)核。每個客guest操作系統(tǒng)分別包括用戶空間、guestlinux內(nèi)核、和qemu。這些操作系統(tǒng)運(yùn)行在同一套硬件處理器芯片上,共享處理器及外設(shè)資源。支持虛擬化架構(gòu)的arm處理器至少包含el2,el1,el0三種模式,el2模式下運(yùn)行虛擬機(jī)管理器hypervisor程序;el1模式下運(yùn)行l(wèi)inux內(nèi)核程序,即,linuxkernel程序;el0模式下運(yùn)行用戶空間程序。hypervisor層管理cpu、內(nèi)存、定時器、中斷等硬件資源,并通過cpu、內(nèi)存、定時器、中斷的虛擬化資源,可以把不同的操作系統(tǒng)分時加載到物理處理器上運(yùn)行,從而實(shí)現(xiàn)系統(tǒng)虛擬化的功能。

kvm/hypervisor跨越hostlinuxkernel和hypervisor兩層,一方面為模擬處理器qemu提供驅(qū)動節(jié)點(diǎn),即,允許qemu通過kvm節(jié)點(diǎn)創(chuàng)建虛擬cpu,并管理虛擬化資源;另一方面kvm/hypervisor還可以把hostlinux系統(tǒng)從物理cpu上切換出去,然后把guestlinux系統(tǒng)加載到物理處理器上運(yùn)行,并處理guestlinux系統(tǒng)異常退出的后續(xù)事務(wù)。

qemu作為hostlinux的一個應(yīng)用運(yùn)行,為guestlinux的運(yùn)行提供虛擬的硬件設(shè)備資源,通過kvm/hypervisor模塊的設(shè)備kvm節(jié)點(diǎn),創(chuàng)建虛擬cpu,分配物理硬件資源,實(shí)現(xiàn)把一個未經(jīng)修改的guestlinux加載到物理硬件處理上去運(yùn)行。

在手機(jī)或平板等終端設(shè)備上實(shí)現(xiàn)上述虛擬化架構(gòu),需要解決所有硬件設(shè)備的虛擬化,允許虛擬出來的操作系統(tǒng)也能使用真實(shí)的硬件設(shè)備。目前還沒有圖形處理器gpu(graphicsprocessingunit,圖形處理器)的虛擬化方法。



技術(shù)實(shí)現(xiàn)要素:

本申請實(shí)施例中提供了一種gpu虛擬化方法、裝置、系統(tǒng)及電子設(shè)備、計(jì)算機(jī)程序產(chǎn)品,用于實(shí)現(xiàn)gpu的虛擬化。

根據(jù)本申請實(shí)施例的第一個方面,提供了一種圖形處理器gpu的虛擬化方法,包括:接收在第一操作系統(tǒng)處的圖形處理操作,并根據(jù)該圖形處理操作確定對應(yīng)的圖形處理指令;將該圖形處理指令通過共享內(nèi)存?zhèn)鬟f至第二操作系統(tǒng);其中,該共享內(nèi)存對該第一操作系統(tǒng)和該第二操作系統(tǒng)均處于可讀和可寫狀態(tài)。

根據(jù)本申請實(shí)施例的第二個方面,提供了一種gpu的虛擬化方法,包括:通過共享內(nèi)存獲取來自第一操作系統(tǒng)的圖形處理指令;在第二操作系統(tǒng)處執(zhí)行該圖形處理指令,得到處理結(jié)果,并將處理結(jié)果作為圖形處理操作的響應(yīng)進(jìn)行顯示,其中,該圖形處理操作是在第一操作系統(tǒng)處接收到的;其中,該共享內(nèi)存對該第一操作系統(tǒng)和該第二操作系統(tǒng)均處于可讀和可寫狀態(tài)。

根據(jù)本申請實(shí)施例的第三個方面,提供了一種gpu的虛擬化裝置,包括:第一接收模塊,用于接收在第一操作系統(tǒng)處的圖形處理操作,并根據(jù)該圖形處理操作確定對應(yīng)的圖形操作指令;第一傳遞模塊,用于將該圖形處理指令通過共享內(nèi)存?zhèn)鬟f至該第二操作系統(tǒng);其中,該共享內(nèi)存對該第一操作系統(tǒng)和第二操作系統(tǒng)均處于可讀和可寫狀態(tài)。

根據(jù)本申請實(shí)施例的第四個方面,提供了一種gpu的虛擬化裝置,包括:獲取模塊,用于通過共享內(nèi)存獲取來自第一操作系統(tǒng)的圖形處理指令;執(zhí)行模塊,用于在該第二操作系統(tǒng)處執(zhí)行該圖形處理指令,得到處理結(jié)果,并將處理結(jié)果作為圖形處理操作的響應(yīng)進(jìn)行顯示,其中,該圖形處理操作是在第一操作系統(tǒng)處接收到的;其中,該共享內(nèi)存對該第一操作系統(tǒng)和第二操作系統(tǒng)均處于可讀和可寫狀態(tài)。

根據(jù)本申請實(shí)施例的第五個方面,提供了一種gpu的虛擬化系統(tǒng),包括:第一操作系統(tǒng),包括如本申請實(shí)施例第三個方面的gpu的虛擬化裝置;共享內(nèi)存,用于存儲來自該第一操作系統(tǒng)的圖形操作指令和來自第二操作系統(tǒng)的處理結(jié)果;其中,該共享內(nèi)存對該第一操作系統(tǒng)和第二操作系統(tǒng)均處于可讀和可寫狀態(tài);第二操作系統(tǒng),包括如本申請實(shí)施例第四個方面的gpu的虛擬化裝置。

根據(jù)本申請實(shí)施例的第六個方面,提供了一種電子設(shè)備,該電子設(shè)備包括:顯示器,存儲器,一個或多個處理器;以及一個或多個模塊,該一個或多個模塊被存儲在該存儲器中,并被配置成由該一個或多個處理器執(zhí)行,該一個或多個模塊包括用于執(zhí)行本申請實(shí)施例第一個方面的gpu的虛擬化方法中各個步驟的指令。

根據(jù)本申請實(shí)施例的第七個方面,提供了一種電子設(shè)備,該電子設(shè)備包括:顯示器,存儲器,一個或多個處理器;以及一個或多個模塊,該一個或多個模塊被存儲在該存儲器中,并被配置成由該一個或多個處理器執(zhí)行,該一個或多個模塊包括用于執(zhí)行本申請實(shí)施例第二個方面的gpu的虛擬化方法中各個步驟的指令。

根據(jù)本申請實(shí)施例的第八個方面,提供了一種與包括顯示器的電子設(shè)備結(jié)合使用的計(jì)算機(jī)程序產(chǎn)品,該計(jì)算機(jī)程序產(chǎn)品包括計(jì)算機(jī)可讀的存儲介質(zhì)和內(nèi)嵌于其中的計(jì)算機(jī)程序機(jī)制,該計(jì)算機(jī)程序機(jī)制包括用于執(zhí)行本申請實(shí)施例第一個方面的gpu的虛擬化方法中各個步驟的指令。

根據(jù)本申請實(shí)施例的第九個方面,提供了一種與包括顯示器的電子設(shè)備結(jié)合使用的計(jì)算機(jī)程序產(chǎn)品,該計(jì)算機(jī)程序產(chǎn)品包括計(jì)算機(jī)可讀的存儲介質(zhì)和內(nèi)嵌于其中的計(jì)算機(jī)程序機(jī)制,該計(jì)算機(jī)程序機(jī)制包括用于執(zhí)行本申請實(shí)施例第二個方面的gpu的虛擬化方法各個步驟的指令。

采用根據(jù)本申請實(shí)施例的gpu虛擬化方法、裝置、系統(tǒng)及電子設(shè)備、計(jì)算機(jī)程序產(chǎn)品,通過第一操作系統(tǒng)和第二操作系統(tǒng)之間的共享內(nèi)存實(shí)現(xiàn)圖形處理指令和執(zhí)行結(jié)果的傳遞,實(shí)現(xiàn)了gpu的虛擬化。

附圖說明

此處所說明的附圖用來提供對本申請的進(jìn)一步理解,構(gòu)成本申請的一部分,本申請的示意性實(shí)施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:

圖1中示出了基于qemu/kvm技術(shù)的虛擬化架構(gòu)示意圖;

圖2示出了用于實(shí)施本申請實(shí)施例中g(shù)pu的虛擬化方法的一種系統(tǒng)架構(gòu)示意圖;

圖3示出了根據(jù)本申請實(shí)施例一的gpu的虛擬化方法的流程圖;

圖4示出了根據(jù)本申請實(shí)施例二的gpu的虛擬化方法的流程圖;

圖5示出了根據(jù)本申請實(shí)施例三的gpu的虛擬化方法的流程圖;

圖6示出了根據(jù)本申請實(shí)施例四的gpu的虛擬化裝置的結(jié)構(gòu)示意圖;

圖7示出了根據(jù)本申請實(shí)施例五的gpu的虛擬化裝置的結(jié)構(gòu)示意圖;

圖8示出了根據(jù)本申請實(shí)施例六的gpu的虛擬化系統(tǒng)的結(jié)構(gòu)示意圖;

圖9示出了根據(jù)本申請實(shí)施例七的電子設(shè)備的結(jié)構(gòu)示意圖;

圖10示出了根據(jù)本申請實(shí)施例八的電子設(shè)備的結(jié)構(gòu)示意圖。

具體實(shí)施方式

在實(shí)現(xiàn)本申請的過程中,發(fā)明人發(fā)現(xiàn),在手機(jī)或平板等終端設(shè)備上實(shí)現(xiàn)上述虛擬化架構(gòu),需要解決所有硬件設(shè)備的虛擬化,允許虛擬出來的操作系統(tǒng)也能使用真實(shí)的硬件設(shè)備。因此,需要提供一種gpu的虛擬化方法。

針對上述問題,本申請實(shí)施例中提供了一種gpu虛擬化方法、裝置、系統(tǒng)及電子設(shè)備、計(jì)算機(jī)程序產(chǎn)品,通過第一操作系統(tǒng)和第二操作系統(tǒng)之間的共享內(nèi)存實(shí)現(xiàn)圖形處理指令和執(zhí)行結(jié)果的傳遞,實(shí)現(xiàn)了gpu的虛擬化。

本申請實(shí)施例中的方案可以應(yīng)用于各種場景中,例如,采用基于qemu/kvm技術(shù)的虛擬化架構(gòu)的智能終端、安卓模擬器等。

本申請實(shí)施例中的方案可以采用各種計(jì)算機(jī)語言實(shí)現(xiàn),例如,面向?qū)ο蟮某绦蛟O(shè)計(jì)語言java等。

為了使本申請實(shí)施例中的技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖對本申請的示例性實(shí)施例進(jìn)行進(jìn)一步詳細(xì)的說明,顯然,所描述的實(shí)施例僅是本申請的一部分實(shí)施例,而不是所有實(shí)施例的窮舉。需要說明的是,在不沖突的情況下,本申請中的實(shí)施例及實(shí)施例中的特征可以相互組合。

實(shí)施例一

圖2示出了用于實(shí)施本申請實(shí)施例中g(shù)pu的虛擬化方法的一種系統(tǒng)架構(gòu)。如圖2所示,根據(jù)本申請實(shí)施例的gpu虛擬化系統(tǒng)包括第一操作系統(tǒng)201、第二操作系統(tǒng)202和共享內(nèi)存203。具體地,該第一操作系統(tǒng)可以是guest操作系統(tǒng);該第二操作系統(tǒng)可以是host操作系統(tǒng)。應(yīng)當(dāng)理解,在具體實(shí)施時,該第一操作系統(tǒng)也可以是host操作系統(tǒng),該第二操作也可以是guest操作系統(tǒng),本申請對此不作限制。

接下來,將對第一操作系統(tǒng)為guest操作系統(tǒng),第二操作系統(tǒng)為host操作系統(tǒng)為例,對本申請的具體實(shí)施方式進(jìn)行詳細(xì)介紹。

具體地,guest操作系統(tǒng)中可以包括用戶空間2011、guestlinuxkernel2012、和qemu2013;在guest操作系統(tǒng)的用戶空間中有虛擬的圖形程序接口,具體地,該圖形程序接口可以是opengl(opengraphicslibrary,開放圖形實(shí)驗(yàn)室)api(applicationprograminterface)接口,也可以是例如,direct3d、quickdraw3d等的其他圖形程序接口,本申請對此不作限制。

具體地,host操作系統(tǒng)中可以包括用戶空間2021和hostlinuxkernel2022;在host操作系統(tǒng)的用戶空間中可以安裝對應(yīng)于guest操作系統(tǒng)中的圖形程序接口的圖形程序后端服務(wù)器backendserver,具體地,可以是openglbackendserver;后端服務(wù)器可以通過hostlinuxkernel中的gpu驅(qū)動程序去操作gpu設(shè)備204。

具體地,共享內(nèi)存203是guest操作系統(tǒng)和host操作系統(tǒng)互相可見的一塊內(nèi)存;并且該內(nèi)存對于guest操作系統(tǒng)和host操作系統(tǒng)均處于可讀和可寫狀態(tài),即,guest操作系統(tǒng)和host操作系統(tǒng)均可以在共享內(nèi)存上執(zhí)行讀和寫操作。

在具體實(shí)施時,該共享內(nèi)存203可以僅包括第一存儲區(qū)2031;也可以劃分為第一存儲區(qū)2031和第二存儲區(qū)2032。具體地,該第一存儲區(qū)也可以稱為私有內(nèi)存;該第二存儲區(qū)也可以稱為公共內(nèi)存。在具體實(shí)施時,第一存儲區(qū)和第二存儲區(qū)的劃分沒有特定規(guī)則,可以是根據(jù)第一存儲區(qū)和第二存儲區(qū)各自通常存儲的數(shù)據(jù)大小、依據(jù)設(shè)計(jì)人員的經(jīng)驗(yàn)劃分;也可以根據(jù)其他預(yù)先設(shè)置的策略來劃分,本申請對此不作限制。

具體地,第一存儲區(qū)可以用于guest操作系統(tǒng)的各個線程與backendserver線程之間的函數(shù)和參數(shù)、和/或同步信息的傳輸;具體地,該私有內(nèi)存還可以進(jìn)一步被劃分為多個塊,一個塊定義為一個通道,一個通道對應(yīng)于guest操作系統(tǒng)的一個線程;在具體劃分時,該多個塊可以是平均劃分的、尺寸大小相等的塊,也可以是根據(jù)系統(tǒng)中常用線程調(diào)用gpu的函數(shù)和參數(shù)、和/或同步信息的大小來智能劃分,本申請對此不作限制。在具體實(shí)施時,guest操作系統(tǒng)的用戶程序可以對私有內(nèi)存中的通道進(jìn)行動態(tài)管理,即,用戶程序可以隨時對私有內(nèi)存中的通道進(jìn)行分配、重新分配及釋放操作。

具體地,第二存儲區(qū)可以用于guest操作系統(tǒng)的所有線程與backendserver線程之間的大數(shù)據(jù)塊,例如,圖形內(nèi)容數(shù)據(jù)的傳輸。在具體實(shí)施時,可以將公共內(nèi)存劃分為若干個尺寸大小不相等的大塊。具體地,guest操作系統(tǒng)中的用戶程序可以對公共內(nèi)存中的塊進(jìn)行管理,即,用戶程序可以隨時對公共內(nèi)存中的通道進(jìn)行分配、及釋放操作,且每次分配和釋放都是按整個塊處理的。

在具體實(shí)施時,公共內(nèi)存中塊的大小的劃分可以適配于常用的gpu圖形處理數(shù)據(jù)。例如,研發(fā)人員在實(shí)現(xiàn)本申請的過程中發(fā)現(xiàn),在gpu虛擬化過程中,通常第一操作系統(tǒng)將2m至16m左右的圖形內(nèi)容數(shù)據(jù)傳輸至第二操作系統(tǒng)就能夠滿足gpu圖形虛擬化處理的需求;而在因此,在分配公共內(nèi)存中塊的大小時,可以將公共內(nèi)存分隔為2m,4m,8m,16m等多個內(nèi)存塊。

舉例來說,如果總公共內(nèi)存大小為32m,分隔為2m,2m,4m,8m,16m5個內(nèi)存塊,用戶程序申請3m空間時,可以直接把4m的內(nèi)存塊區(qū)分配給相應(yīng)的線程,并在該線程釋放時置一個空閑標(biāo)志給4m塊區(qū)。

應(yīng)當(dāng)理解,為了示例的目的,圖2中僅示出了一個guest操作系統(tǒng)、一個host操作系統(tǒng)及一個共享內(nèi)存的情況;但在具體實(shí)施時,可以是一個或多個guest操作系統(tǒng),也可以是一個或多個host操作系統(tǒng),還可以是一個或多個共享內(nèi)存;即,對于guest操作系統(tǒng)、host操作系統(tǒng)及共享內(nèi)存可以為任意的數(shù)量,本申請對此均不作限制。

應(yīng)當(dāng)理解,為了示例的目的,圖2中示出的共享內(nèi)存包括私有內(nèi)存和公共內(nèi)存兩個存儲區(qū);并且將私有內(nèi)存劃分為3個大小相等的通道;公共內(nèi)存被劃分為4個大小不等的通道。在具體實(shí)施時,共享內(nèi)存可以是僅包括私有內(nèi)存一個存儲區(qū);并且私有內(nèi)存可以不進(jìn)行劃分、或者劃分為多個大小不等的通道;公共內(nèi)存可以不存在,也可以被劃分為多個大小相等的通道等,本申請對此均不作限制。

接下來,將結(jié)合圖2所示系統(tǒng)架構(gòu)對根據(jù)本申請實(shí)施例的gpu的虛擬化方法進(jìn)行描述。

圖3示出了根據(jù)本申請實(shí)施例一的gpu的虛擬化方法的流程圖。在本申請實(shí)施例一中,描述了以guest操作系統(tǒng)作為執(zhí)行主體的gpu虛擬化方法的步驟。如圖3所示,根據(jù)本申請實(shí)施例的gpu的虛擬化方法包括以下步驟:

s301,接收在guest操作系統(tǒng)處的圖形處理操作,并根據(jù)該圖形處理操作確定對應(yīng)的圖形處理指令。

在具體實(shí)施時,在s301之前,可以在guest系統(tǒng)對應(yīng)的qemu啟動時,創(chuàng)建gpu設(shè)備對應(yīng)的共享內(nèi)存。具體地,qemu可以通過系統(tǒng)調(diào)用來創(chuàng)建對應(yīng)的共享內(nèi)存。具體地,可以從內(nèi)存中劃分一塊特定的地址空間作為gpu設(shè)備的共享內(nèi)存。該共享內(nèi)存的大小可以可以由開發(fā)人員設(shè)置,并適配于gpu。例如,gpu設(shè)備對應(yīng)的共享內(nèi)存可以設(shè)置為128m等,本申請對此均不作限制。

應(yīng)當(dāng)理解,當(dāng)有多個guest系統(tǒng)時,可以由每個guest系統(tǒng)的qemu為gpu重新創(chuàng)建一塊共享內(nèi)存,也可以是該多個guest系統(tǒng)共享gpu對應(yīng)的一塊共享內(nèi)存;本申請對此均不作限制。

qemu進(jìn)一步將該共享內(nèi)存映射為guest系統(tǒng)的pci(peripheralcomponentinterconnect,外設(shè)部件互連標(biāo)準(zhǔn))設(shè)備內(nèi)存空間;并為guest系統(tǒng)提供虛擬的pci寄存器作為pci配置空間。

然后,guestlinuxkernel將該共享內(nèi)存劃分為私有內(nèi)存和公共內(nèi)存。

具體地,guestlinuxkernel可以在對gpu設(shè)備初始化時對共享內(nèi)存進(jìn)行劃分;以使共享內(nèi)存支持多個進(jìn)程或線程的訪問。具體地,可以將私有內(nèi)存,即,第一存儲區(qū)劃分為第一預(yù)設(shè)數(shù)量的多個通道;可以將公共內(nèi)存,即,第二存儲區(qū)劃分為第二預(yù)設(shè)數(shù)量的多個塊。具體的,該第一預(yù)設(shè)數(shù)量和第二預(yù)設(shè)數(shù)量可以由開發(fā)人員設(shè)置。具體地,該私有內(nèi)存的多個通道的大小可以相等;該公共內(nèi)存的多個塊的大小可以適配于該共享內(nèi)存對應(yīng)的物理設(shè)備的處理數(shù)據(jù)。

進(jìn)一步的,在s301之前,還可以包括在前端線程啟動時,為該前端線程、以及對應(yīng)的后端線程分配相應(yīng)的共享內(nèi)存地址空間的步驟。

在具體實(shí)施時,當(dāng)接收到api調(diào)用指令時,可以創(chuàng)建與該api調(diào)用指令對應(yīng)的前端線程。并將api調(diào)用指令對應(yīng)的線程創(chuàng)建指令發(fā)送到host操作系統(tǒng),以觸發(fā)host操作系統(tǒng)創(chuàng)建相應(yīng)的后端線程。在前端線程和后端線程的創(chuàng)建過程中,還可以從guestlinuxkernel處獲取該前端線程對應(yīng)的私有內(nèi)存通道的地址空間、以及分配給該前端線程的公共內(nèi)存地址空間;并將該前端線程對應(yīng)的私有內(nèi)存通道的地址空間、以及分配給該前端線程的公共內(nèi)存地址空間映射為該前端線程的地址空間;從而與qemu建立同步控制通道。具體地,通常將私有內(nèi)存中的某一通道分配給該前端線程,并將公共內(nèi)存整個分配給該前端線程。

接下來,可以將該前端線程對應(yīng)的私有內(nèi)存通道的地址空間、以及公共內(nèi)存的地址空間通過pci配置空間傳遞給qemu;然后qemu通過進(jìn)程間通信機(jī)制把前端線程對應(yīng)的私有內(nèi)存通道的地址空間、以及公共內(nèi)存的地址空間發(fā)送給后端服務(wù)器;并將其映射為該后端線程的地址空間。

至此,就完成了前端線程與后端線程之間共享內(nèi)存的初始化。

在具體實(shí)施時,用戶通常針對guest操作系統(tǒng)中的某一線程執(zhí)行圖形處理操作,該圖形處理操作可以是例如,打開一個新窗口,打開一個新頁面等。可以理解,在本步驟之前,還可以包括用戶在guest操作系統(tǒng)的用戶空間創(chuàng)建一個新的線程的步驟。在具體實(shí)施時,該新的線程可以是一個應(yīng)用程序,例如,qq、微信等。用戶創(chuàng)建新線程的行為可以是例如,用戶打開微信等。

具體地,可以進(jìn)一步將第一存儲區(qū)劃分為一個或多個通道,如果該第一存儲區(qū)包括多個通道;則在該圖形處理指令寫入至該共享內(nèi)存之前,還包括:根據(jù)圖形處理指令對應(yīng)的線程,確定該圖形處理指令對應(yīng)的通道。

在用戶在guest操作系統(tǒng)的用戶空間創(chuàng)建一個新的線程時,即可以根據(jù)預(yù)先設(shè)置的規(guī)則為該線程分配一個對應(yīng)的第一存儲區(qū)的通道。具體地,該規(guī)則可以是按照線程創(chuàng)建的先后順序。例如,在一個新的線程創(chuàng)建時,guestlinuxkernel為該線程分配一個唯一的通道號,并把該通道號對應(yīng)的私有內(nèi)存及整個公共內(nèi)存同時映射給用戶程序;guest用戶程序通過qemu通知openglbackendserver創(chuàng)建一個線程,并且將相應(yīng)的私有內(nèi)存通道號及整個公共內(nèi)存空間映射給該線程。應(yīng)當(dāng)理解,在具體實(shí)施時,如果私有內(nèi)存僅有一個通道,則可以不執(zhí)行分配通道號這一步驟;也可以不執(zhí)行根據(jù)圖形處理指令對應(yīng)的線程,確定該圖形處理指令對應(yīng)的通道這一步驟。

s302,將該圖形處理指令通過共享內(nèi)存?zhèn)鬟f至第二操作系統(tǒng),以使該第二操作系統(tǒng)執(zhí)行該圖形處理指令,得到處理結(jié)果。

在具體實(shí)施時,將該圖形處理指令通過共享內(nèi)存?zhèn)鬟f至第二操作系統(tǒng)可以通過以下方式實(shí)施:將該圖形處理指令寫入至該共享內(nèi)存;將該圖形處理指令在該共享內(nèi)存的偏移地址發(fā)送至該第二操作系統(tǒng)。具體地,guest用戶程序可以對每一塊分配的內(nèi)存執(zhí)行偏移記錄,即,記錄當(dāng)前寫入圖形處理指令的內(nèi)存在當(dāng)前線程對應(yīng)的內(nèi)存塊內(nèi)的偏移地址;然后把當(dāng)前內(nèi)存塊的偏移地址發(fā)送到host操作系統(tǒng)中對應(yīng)的線程。然后,host操作系統(tǒng)可以通過對應(yīng)的通道號和偏移地址,到共享內(nèi)存的相應(yīng)位置讀取圖形處理指令,并立即執(zhí)行函數(shù),得到處理結(jié)果。

在第一種具體實(shí)施方式中,該圖形處理指令可以僅包括圖形處理函數(shù)和參數(shù);則可以將該圖形處理函數(shù)和參數(shù)存儲至該共享內(nèi)存的第一存儲區(qū),即,私有內(nèi)存。host操作系統(tǒng)在獲取到相應(yīng)的圖形處理函數(shù)和參數(shù)之后,可以立即執(zhí)行函數(shù),得到處理結(jié)果。具體地,為節(jié)省數(shù)據(jù)傳輸量,可以先確定該圖形處理函數(shù)對應(yīng)的編號;然后將該圖形處理函數(shù)編號和參數(shù)寫入至該第一存儲區(qū)。host操作系統(tǒng)在獲取到相應(yīng)的圖形處理函數(shù)編號后,根據(jù)編號確定對應(yīng)的圖形處理函數(shù),再根據(jù)圖形處理函數(shù)和參數(shù),執(zhí)行函數(shù),得到處理結(jié)果。具體地,該圖形處理函數(shù)可以是opengl函數(shù)。

在第二種具體實(shí)施方式中,該圖形處理指令除圖形處理函數(shù)和參數(shù)之外,還包括同步信息,該同步信息用于指示該第二操作系統(tǒng)執(zhí)行該圖形處理指令的時刻;則可以將該圖形處理函數(shù)和參數(shù)、以及同步信息均存儲至該共享內(nèi)存的第一存儲區(qū),即,私有內(nèi)存。host操作系統(tǒng)在獲取到相應(yīng)的圖形處理函數(shù)和參數(shù)之后,可以在同步信息指示的時刻執(zhí)行函數(shù),得到處理結(jié)果。

在第三種具體實(shí)施方式中,該圖形處理指令除圖形處理函數(shù)和參數(shù)之外,還包括圖形內(nèi)容數(shù)據(jù);則可以將該圖形處理函數(shù)和參數(shù)存儲至該共享內(nèi)存的私有內(nèi)存,將該圖形內(nèi)容數(shù)據(jù)寫入至第二存儲區(qū),即公共內(nèi)存。guest用戶程序把私有內(nèi)存塊的偏移地址和公共內(nèi)存塊的偏移地址均發(fā)送到host操作系統(tǒng)中對應(yīng)的線程。然后,host操作系統(tǒng)可以通過對應(yīng)的通道號和私有內(nèi)存偏移地址;到私有內(nèi)存的相應(yīng)位置讀取圖形處理函數(shù)和參數(shù);通過公共內(nèi)存偏移地址到公共內(nèi)存的相應(yīng)位置讀取圖形內(nèi)容數(shù)據(jù),并在讀取后立即執(zhí)行函數(shù),得到處理結(jié)果。具體地,該圖形內(nèi)容數(shù)據(jù)可以是指需要進(jìn)行圖像處理的圖像幀。

具體地,可以進(jìn)一步將公共內(nèi)存劃分為多個、具有適配于gpu圖形內(nèi)容數(shù)據(jù)的大小的塊;如果該第二存儲區(qū)包括多個塊;則在將圖形內(nèi)容數(shù)據(jù)寫入至所述第二存儲區(qū)之前,還可以包括:根據(jù)圖形內(nèi)容數(shù)據(jù)的大小,確定圖形內(nèi)容數(shù)據(jù)對應(yīng)的塊。

舉例來說,如果總公共內(nèi)存大小為32m,分隔為2m,2m,4m,8m,16m5個內(nèi)存塊,用戶程序申請傳遞3m的數(shù)據(jù)內(nèi)容數(shù)據(jù)時,可以直接把4m的公共內(nèi)存塊分配給相應(yīng)的線程。

在第四種具體實(shí)施方式中,該圖形處理指令除圖形處理函數(shù)、參數(shù)和同步信息之外,還包括圖形內(nèi)容數(shù)據(jù);則可以將該圖形處理函數(shù)、參數(shù)和同步信息存儲至該共享內(nèi)存的私有內(nèi)存,將該圖形內(nèi)容數(shù)據(jù)寫入至第二存儲區(qū),即公共內(nèi)存。guest用戶程序把私有內(nèi)存塊的偏移地址和公共內(nèi)存塊的偏移地址均發(fā)送到host操作系統(tǒng)中對應(yīng)的線程。然后,host操作系統(tǒng)可以通過對應(yīng)的通道號和私有內(nèi)存偏移地址;到私有內(nèi)存的相應(yīng)位置讀取圖形處理函數(shù)、參數(shù)和同步信息;通過公共內(nèi)存偏移地址到公共內(nèi)存的相應(yīng)位置讀取圖形內(nèi)容數(shù)據(jù),并在同步信息指示的時刻執(zhí)行函數(shù),得到處理結(jié)果。

應(yīng)當(dāng)理解,在具體實(shí)施時,第一操作系統(tǒng)和第二操作之間可以一次或多次利用共享內(nèi)存來傳遞下述數(shù)據(jù)中的任意一種或多種:圖形處理函數(shù)或圖形處理函數(shù)編號、參數(shù)、同步信息、圖形內(nèi)容數(shù)據(jù)。具體地,第一操作系統(tǒng)可以一次就將待傳遞的圖形處理指令通過共享內(nèi)存?zhèn)鬟f至第二操作系統(tǒng);也可以將圖形處理指令拆分成適當(dāng)?shù)拇笮?,多次利用共享?nèi)存?zhèn)鬟f至第二操作系統(tǒng);在具體實(shí)施時,對圖形處理指令的拆分策略可以采用本領(lǐng)域技術(shù)人員的常用技術(shù)手段,本申請對此不作限制。

s303,第二操作系統(tǒng)將該處理結(jié)果作為該圖形處理操作的響應(yīng)進(jìn)行顯示。

在具體實(shí)施時,第二操作系統(tǒng)在得到處理結(jié)果后,可以通過gpu設(shè)備將處理結(jié)果顯示至屏幕。

s304,第一操作系統(tǒng)接收來自第二操作系統(tǒng)的執(zhí)行結(jié)果。

在具體實(shí)施時,第二操作系統(tǒng)可以根據(jù)函數(shù)的執(zhí)行結(jié)果,生成執(zhí)行結(jié)果。具體地,該執(zhí)行結(jié)果可以包括圖形處理函數(shù)執(zhí)行成功或失敗的消息、和/或軟件版本信息等;并返回給第一操作系統(tǒng);以使得第一操作系統(tǒng)中的的相應(yīng)線程能夠獲取該函數(shù)的執(zhí)行。

具體地,host操作系統(tǒng)可以將執(zhí)行結(jié)果寫入共享內(nèi)存;并記錄當(dāng)前寫入執(zhí)行結(jié)果的位置,在當(dāng)前線程對應(yīng)的內(nèi)存塊內(nèi)的偏移地址;然后把該偏移地址發(fā)送到guest操作系統(tǒng)中對應(yīng)的線程。然后,guest操作系統(tǒng)可以通過對應(yīng)的偏移地址,到共享內(nèi)存的相應(yīng)位置讀取數(shù)據(jù)。

至此,實(shí)現(xiàn)了guest操作系統(tǒng)中用戶程序?qū)pu設(shè)備的遠(yuǎn)程調(diào)用;即,實(shí)現(xiàn)了gpu的虛擬化。

采用本申請實(shí)施例中的gpu的虛擬化方法,在共享內(nèi)存的基礎(chǔ)上實(shí)現(xiàn)了openglapi的遠(yuǎn)程調(diào)用,從而實(shí)現(xiàn)gpu的虛擬化。

實(shí)施例二

圖4示出了根據(jù)本申請實(shí)施例二的gpu的虛擬化方法的流程圖。在本申請實(shí)施例二中,描述了以host操作系統(tǒng)作為執(zhí)行主體的gpu虛擬化方法的步驟。本申請實(shí)施例中的系統(tǒng)架構(gòu)的實(shí)施可以參見實(shí)施例一中圖2所示的系統(tǒng)架構(gòu),重復(fù)之處不再贅述。

如圖4所示,根據(jù)本申請實(shí)施例的gpu的虛擬化方法包括以下步驟:

s401,host操作系統(tǒng)通過共享內(nèi)存獲取來自guest操作系統(tǒng)的圖形處理指令。

在具體實(shí)施時,共享內(nèi)存可以劃分為私有內(nèi)存和公共內(nèi)存;并且私有內(nèi)存可以進(jìn)一步劃分為對應(yīng)于不同線程的多個通道;如果私有內(nèi)存包括多個通道,則在s401之前,還包括:所述圖形處理指令對應(yīng)的線程,確定該圖形處理指令對應(yīng)的通道。

具體地,可以在用戶在guest操作系統(tǒng)的用戶空間創(chuàng)建一個新的線程時,即可以根據(jù)預(yù)先設(shè)置的規(guī)則為該線程分配一個對應(yīng)的第一存儲區(qū)的通道。具體地,該規(guī)則可以是按照線程創(chuàng)建的先后順序。例如,在一個新的線程創(chuàng)建時,guestlinuxkernel為該線程分配一個唯一的通道號,并把該通道號對應(yīng)的私有內(nèi)存及整個公共內(nèi)存同時映射給用戶程序;guest用戶程序通過qemu通知openglbackendserver創(chuàng)建一個線程,并且將相應(yīng)的私有內(nèi)存通道號及整個公共內(nèi)存空間映射給該線程。應(yīng)當(dāng)理解,在具體實(shí)施時,如果私有內(nèi)存僅有一個通道,則可以不執(zhí)行分配通道號這一步驟;也可以不執(zhí)行根據(jù)圖形處理指令對應(yīng)的線程,確定該圖形處理指令對應(yīng)的通道這一步驟。

在具體實(shí)施時,guest操作系統(tǒng)可以將圖形處理指令在共享內(nèi)存的偏移地址發(fā)送至host操作系統(tǒng);host操作系統(tǒng)根據(jù)該圖形處理指令在共享內(nèi)存的偏移地址,從共享內(nèi)存讀取該圖形處理指令。

在第一種具體實(shí)施方式中,該圖形處理指令僅包括圖形處理函數(shù)和參數(shù)時;host操作系統(tǒng)可以在私有內(nèi)存中獲取到相應(yīng)的圖形處理函數(shù)和參數(shù)。如果在私有內(nèi)存中獲取到的是圖形處理函數(shù)的編號,則可以根據(jù)編號確定對應(yīng)的圖形處理函數(shù),再根據(jù)圖形處理函數(shù)和參數(shù)。

在第二種具體實(shí)施方式中,該圖形處理指令除圖形處理函數(shù)和參數(shù)之外,還包括同步信息,該同步信息用于指示該第二操作系統(tǒng)執(zhí)行該圖形處理指令的時刻;host操作系統(tǒng)可以在私有內(nèi)存中獲取到相應(yīng)的圖形處理函數(shù)、參數(shù)和同步信息。

在第三種具體實(shí)施方式中,該圖形處理指令除圖形處理函數(shù)和參數(shù)之外,還包括圖形內(nèi)容數(shù)據(jù);則host操作系統(tǒng)可以通過對應(yīng)的通道號和私有內(nèi)存偏移地址;到私有內(nèi)存的相應(yīng)位置讀取圖形處理函數(shù)和參數(shù);通過公共內(nèi)存偏移地址到公共內(nèi)存的相應(yīng)位置讀取圖形內(nèi)容數(shù)據(jù)。

在第四種具體實(shí)施方式中,該圖形處理指令除圖形處理函數(shù)、參數(shù)和同步信息之外,還包括圖形內(nèi)容數(shù)據(jù);則host操作系統(tǒng)可以通過對應(yīng)的通道號和私有內(nèi)存偏移地址;到私有內(nèi)存的相應(yīng)位置讀取圖形處理函數(shù)、參數(shù)和同步信息;通過公共內(nèi)存偏移地址到公共內(nèi)存的相應(yīng)位置讀取圖形內(nèi)容數(shù)據(jù)。

s402,host操作系統(tǒng)執(zhí)行該圖形處理指令,得到處理結(jié)果。

在具體實(shí)施時,如果圖形處理指令中包括同步信息,則host操作系統(tǒng)在獲取到圖形處理指令后,可以在同步信息指示的時刻基于參數(shù)執(zhí)行圖形處理函數(shù),并得到處理結(jié)果。

在具體實(shí)施時,圖形處理指令中不包括同步信息,則host操作系統(tǒng)在獲取到圖形處理指令后,可以立即基于參數(shù)執(zhí)行圖形處理函數(shù),并得到處理結(jié)果。

s403,將處理結(jié)果作為在第一操作系統(tǒng)處接收到的圖形處理操作的響應(yīng)進(jìn)行顯示。

在具體實(shí)施時,host操作系統(tǒng)顯示函數(shù)處理結(jié)果的過程可以采用本領(lǐng)域技術(shù)人員的常規(guī)技術(shù)手段,本申請對此不作贅述。

s404,將執(zhí)行結(jié)果通過共享內(nèi)存?zhèn)鬟f至第一操作系統(tǒng)。

在具體實(shí)施時,在host操作系統(tǒng)得到處理結(jié)果后,可以再將函數(shù)的執(zhí)行結(jié)果,例如,用于標(biāo)識函數(shù)執(zhí)行成功或者執(zhí)行失敗的消息,寫入該共享內(nèi)存;并將該消息在該共享內(nèi)存的偏移地址發(fā)送至該第一操作系統(tǒng),以使第一操作系統(tǒng)根據(jù)該偏移地址,獲取該函數(shù)執(zhí)行結(jié)果。

至此,實(shí)現(xiàn)了在host操作系統(tǒng)中,配合guest操作系統(tǒng)中的用戶程序?qū)pu設(shè)備的遠(yuǎn)程調(diào)用;即,實(shí)現(xiàn)了gpu的虛擬化。

采用本申請實(shí)施例中的gpu的虛擬化方法,在共享內(nèi)存的基礎(chǔ)上實(shí)現(xiàn)了openglapi的遠(yuǎn)程調(diào)用,從而實(shí)現(xiàn)gpu的虛擬化。

實(shí)施例三

圖5示出了根據(jù)本申請實(shí)施例三的gpu的虛擬化方法的流程圖。在本申請實(shí)施例三中,描述了以opengl圖形處理接口為例,guest操作系統(tǒng)與host操作系統(tǒng)配合實(shí)現(xiàn)gpu虛擬化方法的步驟。本申請實(shí)施例中的系統(tǒng)架構(gòu)的實(shí)施可以參見實(shí)施例一中圖2所示的系統(tǒng)架構(gòu),重復(fù)之處不再贅述。

在本申請實(shí)施例中,openglapi函數(shù)遠(yuǎn)程調(diào)用的發(fā)起方為guest操作系統(tǒng),函數(shù)執(zhí)行方為host操作系統(tǒng),從guest操作系統(tǒng)到host操作系統(tǒng)的下行同步過程經(jīng)歷guestlinuxkernel、qemu到達(dá)openglbackendserver;從host操作系統(tǒng)到guest操作系統(tǒng)的上行同步過程從openglbackendserver發(fā)起,經(jīng)過qemu、guestlinuxkernel到達(dá)openglemulatorapi。

在本申請實(shí)施例中,guest操作系統(tǒng)每次創(chuàng)建一個新的顯示窗口,就會相應(yīng)地創(chuàng)建一個線程去初始化并調(diào)用opengl函數(shù),在初始化過程中,openglbackendserver同樣會創(chuàng)建一個與guest端一一對應(yīng)的線程。

接下來,將對基于上述應(yīng)用場景的gpu虛擬方法的實(shí)施過程進(jìn)行詳細(xì)描述。

如圖5所示,根據(jù)本申請實(shí)施例三的gpu的虛擬化方法包括以下步驟:

s501,共享內(nèi)存初始化。

在具體實(shí)施時,可以在guestlinuxkernel把共享內(nèi)存劃分為兩大塊,分別定義為私有內(nèi)存及公共內(nèi)存。

具體地,可以把私有內(nèi)存平均劃分成若干個尺寸大小相等的塊,一個塊即為一個通道,每一個通道用于guest操作系統(tǒng)的一個線程到openglbackendserver線程的數(shù)據(jù)及同步信息的傳輸。具體地,該數(shù)據(jù)可以包括圖形處理函數(shù)編號和參數(shù)。

具體地,可以把公共內(nèi)存劃分成若干個尺寸大小不相等的大塊,用于guest操作系統(tǒng)的所有線程到openglbackendserver線程的大數(shù)據(jù)塊傳輸。

s502,建立共享內(nèi)存與線程的映射。

在具體實(shí)施時,可以由guestlinuxkernel控制私有通道的編號,當(dāng)guest用戶程序每次創(chuàng)建一個新的線程時,kernel負(fù)責(zé)分配一個唯一的通道號,并把該通道對應(yīng)的私有內(nèi)存及整個公共內(nèi)存同時映射給用戶程序。

然后由guest用戶程序通過qemu通知openglbackendserver創(chuàng)建一個線程并使用對應(yīng)的私有通道內(nèi)存及整個公共內(nèi)存空間。

guest用戶程序?qū)λ接型ǖ纼?nèi)存進(jìn)行動態(tài)管理,程序可以隨時在私有內(nèi)存進(jìn)行分配,重新分配及釋放操作。

guest用戶程序?qū)矁?nèi)存進(jìn)行固定尺寸大小管理,每次分配和釋放都是按整個塊處理的,舉例來說,如果總公共內(nèi)存大小為32m,分隔為2m,2m,4m,8m,16m5個內(nèi)存塊,用戶申請3m空間時,直接把4m的內(nèi)存塊區(qū)分配出去,釋放時置一個空閑標(biāo)志給4m塊區(qū)。

guest用戶程序?qū)γ恳粔K分配的內(nèi)存執(zhí)行偏移記錄,即,記錄當(dāng)前分配的內(nèi)存在整個跨系統(tǒng)內(nèi)存塊的偏移地址。

s503,guest用戶程序響應(yīng)于用戶的圖形處理操作,確定相應(yīng)的圖形處理指令。

步驟s503的實(shí)施可以參考實(shí)施例一中s301的實(shí)施,重復(fù)之處不再贅述。

s504,guest用戶程序把函數(shù)編號及其參數(shù)寫到分配的內(nèi)存塊后,把函數(shù)編號和參數(shù)在當(dāng)前內(nèi)存塊的偏移地址傳到host操作系統(tǒng)對應(yīng)的線程。

步驟s504的實(shí)施可以參考實(shí)施例一s302中函數(shù)編號和參數(shù)的傳遞過程的實(shí)施,重復(fù)之處不再贅述。

s505,host操作系統(tǒng)從共享內(nèi)存中獲取傳遞過來的函數(shù)編號及其參數(shù),并開始執(zhí)行函數(shù)。

步驟s505的實(shí)施可以參考實(shí)施例二s401中函數(shù)編號和參數(shù)的獲取過程,以及實(shí)施例二s402中函數(shù)執(zhí)行過程的實(shí)施,重復(fù)之處不再贅述。

s506,host操作系統(tǒng)執(zhí)行完函數(shù)后,顯示處理結(jié)果,并用同樣的方法把標(biāo)識函數(shù)執(zhí)行成功或失敗的消息寫在共享內(nèi)存里,再把相應(yīng)的偏移地址返回給guest操作系統(tǒng),完成一次函數(shù)的執(zhí)行。

步驟s506的實(shí)施可以參考實(shí)施例二s403和s404的實(shí)施,重復(fù)之處不再贅述。

至此,實(shí)現(xiàn)了在guest操作系統(tǒng)和host操作系統(tǒng)之間的openglapi的遠(yuǎn)程調(diào)用,從而實(shí)現(xiàn)gpu的虛擬化。

采用本申請實(shí)施例中的gpu的虛擬化方法,使用了跨操作系統(tǒng)共享內(nèi)存的方法,也就是說兩個操作系統(tǒng)互相可見在一塊內(nèi)存上進(jìn)行的讀寫操作,在共享內(nèi)存的基礎(chǔ)上實(shí)現(xiàn)了openglapi的遠(yuǎn)程調(diào)用,從而實(shí)現(xiàn)gpu的虛擬化。

基于同一發(fā)明構(gòu)思,本申請實(shí)施例中還提供了一種gpu的虛擬化裝置,由于該裝置解決問題的原理與本申請實(shí)施例一所提供的gpu的虛擬化方法的相似,因此該裝置的實(shí)施可以參見方法的實(shí)施,重復(fù)之處不再贅述。

實(shí)施例四

圖6示出了根據(jù)本申請實(shí)施例四的gpu的虛擬化裝置的結(jié)構(gòu)示意圖。

如圖6所示,根據(jù)本申請實(shí)施例四的gpu的虛擬化裝置600包括:第一接收模塊601,用于接收在第一操作系統(tǒng)處的圖形處理操作,并根據(jù)該圖形處理操作確定對應(yīng)的圖形操作指令;第一傳遞模塊602,用于將該圖形處理指令通過共享內(nèi)存?zhèn)鬟f至該第二操作系統(tǒng),以使該第二操作系統(tǒng)執(zhí)行該圖形處理指令,得到處理結(jié)果,并將處理結(jié)果作為圖形處理操作的響應(yīng)進(jìn)行顯示;其中,該共享內(nèi)存對該第一操作系統(tǒng)和第二操作系統(tǒng)均處于可讀和可寫狀態(tài)。

具體地,該第一操作系統(tǒng)可以為客guest操作系統(tǒng),該第二操作系統(tǒng)可以為主host操作系統(tǒng)。

具體地,第一傳遞模塊,具體可以包括:第一寫入子模塊,將該圖形處理指令寫入至該共享內(nèi)存;第一發(fā)送子模塊,用于將該圖形處理指令在該共享內(nèi)存的偏移地址發(fā)送至該第二操作系統(tǒng)。

具體地,該圖形處理指令可以包括圖形處理函數(shù)和參數(shù);第一寫入子模塊,具體可以用于:將圖形處理指令存儲至該共享內(nèi)存的第一存儲區(qū)。

具體地,該圖形處理指令還可以包括同步信息,該同步信息可以用于指示該第二操作系統(tǒng)執(zhí)行該圖形處理指令的時刻。

具體地,該圖形處理指令還可以包括圖形內(nèi)容數(shù)據(jù);該共享內(nèi)存還可以包括第二存儲區(qū);第一寫入子模塊,還可以用于:將該圖形內(nèi)容數(shù)據(jù)寫入至該第二存儲區(qū)。

具體地,第二存儲區(qū)包括多個塊,其中,各塊具有預(yù)先設(shè)置的大小,預(yù)先設(shè)置的大小適配于gpu圖形內(nèi)容數(shù)據(jù);該裝置還可以包括:第一確定模塊,用于根據(jù)圖形內(nèi)容數(shù)據(jù)的大小,確定圖形內(nèi)容數(shù)據(jù)對應(yīng)的塊。

具體地,該第一存儲區(qū)包括多個通道,其中,各通道對應(yīng)于不同的線程;該裝置還可以包括:第二確定模塊,用于根據(jù)圖形處理指令對應(yīng)的線程,確定該圖形處理指令對應(yīng)的通道。

具體地,該圖形處理指令可以包括圖形處理函數(shù)對應(yīng)的編號和參數(shù);第一寫入子模塊,具體可以用于:確定該圖形處理函數(shù)對應(yīng)的編號;將該圖形處理函數(shù)編號和參數(shù)寫入至該第一存儲區(qū)。

具體地,根據(jù)本申請實(shí)施例的gpu虛擬化裝置還包括:第二接收模塊603,用于接收來自第二操作系統(tǒng)的執(zhí)行結(jié)果。

具體地,第二接收模塊,具體可以包括:第一地址接收子模塊,用于接收來自第二操作系統(tǒng)的執(zhí)行結(jié)果在共享內(nèi)存的偏移地址;第一讀取子模塊,用于根據(jù)執(zhí)行結(jié)果在共享內(nèi)存的偏移地址,從共享內(nèi)存讀取執(zhí)行結(jié)果。

采用本申請實(shí)施例中的gpu的虛擬化裝置,在共享內(nèi)存的基礎(chǔ)上實(shí)現(xiàn)了openglapi的遠(yuǎn)程調(diào)用,從而實(shí)現(xiàn)gpu的虛擬化。

基于同一發(fā)明構(gòu)思,本申請實(shí)施例中還提供了一種gpu的虛擬化裝置,由于該裝置解決問題的原理與本申請實(shí)施例二所提供的gpu的虛擬化方法的相似,因此該裝置的實(shí)施可以參見方法的實(shí)施,重復(fù)之處不再贅述。

實(shí)施例五

圖7示出了根據(jù)本申請實(shí)施例五的gpu的虛擬化裝置的結(jié)構(gòu)示意圖。

如圖7所示,根據(jù)本申請實(shí)施例五的gpu的虛擬化裝置700包括:獲取模塊701,用于通過共享內(nèi)存獲取來自第一操作系統(tǒng)的圖形處理指令;執(zhí)行模塊702,用于在該第二操作系統(tǒng)處執(zhí)行該圖形處理指令,得到處理結(jié)果;顯示模塊703,用于將處理結(jié)果作為圖形處理操作的響應(yīng)進(jìn)行顯示;其中,圖形處理操作是第一操作系統(tǒng)處接收到的;其中,該共享內(nèi)存對該第一操作系統(tǒng)和第二操作系統(tǒng)均處于可讀和可寫狀態(tài)。

具體地,該第一操作系統(tǒng)可以為客guest操作系統(tǒng),該第二操作系統(tǒng)可以為主host操作系統(tǒng)。

具體地,獲取模塊,具體可以包括:第二地址接收子模塊,用于接收來自第一操作系統(tǒng)的圖形處理指令在共享內(nèi)存的偏移地址;第二讀取子模塊,用于根據(jù)該圖形處理指令在共享內(nèi)存的偏移地址,從共享內(nèi)存讀取該圖形處理指令。

具體地,該圖形處理指令可以包括圖形處理函數(shù)和參數(shù);第二讀取子模塊,具體可以用于:從共享內(nèi)存的第一存儲區(qū)讀取該圖形處理指令。

具體地,該圖形處理指令還可以包括同步信息,該同步信息可以用于指示該第二操作系統(tǒng)執(zhí)行該圖形處理指令的時刻;執(zhí)行模塊,具體可以用于:在該同步信息指示的時刻,執(zhí)行該圖形處理指令。

具體地,該圖形處理指令還可以包括圖形內(nèi)容數(shù)據(jù);該共享內(nèi)存還可以包括第二存儲區(qū);第二讀取子模塊,還可以用于:從共享內(nèi)存的第二存儲區(qū)讀取該圖形內(nèi)容數(shù)據(jù)。

具體地,該第一存儲區(qū)包括多個通道,其中,各通道對應(yīng)于不同的線程;該裝置還可以包括:第二確定模塊,用于根據(jù)圖形處理指令對應(yīng)的線程,確定該圖形處理指令對應(yīng)的通道。

具體地,該圖形處理指令可以包括圖形處理函數(shù)對應(yīng)的編號和參數(shù);第二讀取子模塊,具體可以用于:從該第一存儲區(qū)讀取該該圖形處理函數(shù)編號和參數(shù);根據(jù)該圖形處理函數(shù)編號確定對應(yīng)的圖形處理函數(shù)。

具體地,根據(jù)本申請實(shí)施例的gpu虛擬化裝置還可以包括:第二傳遞模塊,用于將執(zhí)行結(jié)果,通過共享內(nèi)存?zhèn)鬟f至第一操作系統(tǒng)。

具體地,第二傳遞模塊,具體可以包括:第二寫入子模塊,用于將執(zhí)行結(jié)果寫入所述共享內(nèi)存;第二發(fā)送子模塊,用于將執(zhí)行結(jié)果在共享內(nèi)存的偏移地址發(fā)送至第一操作系統(tǒng),以使第一操作系統(tǒng)根據(jù)處理結(jié)果在共享內(nèi)存的偏移地址,獲取執(zhí)行結(jié)果。

采用本申請實(shí)施例中的gpu的虛擬化裝置,在共享內(nèi)存的基礎(chǔ)上實(shí)現(xiàn)了openglapi的遠(yuǎn)程調(diào)用,從而實(shí)現(xiàn)gpu的虛擬化。

基于同一發(fā)明構(gòu)思,本申請實(shí)施例中還提供了一種gpu的虛擬化系統(tǒng),由于該系統(tǒng)解決問題的原理與本申請實(shí)施例一和二所提供的gpu的虛擬化方法相似,因此該系統(tǒng)的實(shí)施可以參見方法的實(shí)施,重復(fù)之處不再贅述。

實(shí)施例六

圖8示出了根據(jù)本申請實(shí)施例六的gpu的虛擬化系統(tǒng)的結(jié)構(gòu)示意圖。

如圖8所示,根據(jù)本申請實(shí)施例六的gpu的虛擬化系統(tǒng)800包括:第一操作系統(tǒng)801,包括gpu的虛擬化裝置600;共享內(nèi)存802,用于存儲來自該第一操作系統(tǒng)的圖形操作指令和來自第二操作系統(tǒng)的處理結(jié)果;其中,該共享內(nèi)存對該第一操作系統(tǒng)和第二操作系統(tǒng)均處于可讀和可寫狀態(tài);第二操作系統(tǒng)803,包括gpu的虛擬化裝置700。

在具體實(shí)施時,第一操作系統(tǒng)801的實(shí)施可以參見本申請實(shí)施例一中第一操作系統(tǒng)201的實(shí)施,重復(fù)之處不再贅述。

在具體實(shí)施時,共享內(nèi)存802的實(shí)施可以參見本申請實(shí)施例一中共享內(nèi)存203的實(shí)施,重復(fù)之處不再贅述。

在具體實(shí)施時,第二操作系統(tǒng)803的實(shí)施可以參見本申請實(shí)施例一中第二操作系統(tǒng)202的實(shí)施,重復(fù)之處不再贅述。

具體地,該第一操作系統(tǒng)可以為客guest操作系統(tǒng),該第二操作系統(tǒng)可以為主host操作系統(tǒng)。

采用本申請實(shí)施例中的gpu的虛擬化系統(tǒng),在共享內(nèi)存的基礎(chǔ)上實(shí)現(xiàn)了openglapi的遠(yuǎn)程調(diào)用,從而實(shí)現(xiàn)gpu的虛擬化。

實(shí)施例七

基于同一發(fā)明構(gòu)思,本申請實(shí)施例中還提供了如圖9所示的一種電子設(shè)備900。

如圖9所示,根據(jù)本申請實(shí)施例七的電子設(shè)備900包括:顯示器901,存儲器902,一個或多個處理器903;總線904;以及一個或多個模塊,該一個或多個模塊被存儲在該存儲器中,并被配置成由該一個或多個處理器執(zhí)行,該一個或多個模塊包括用于執(zhí)行根據(jù)本申請實(shí)施例一中任一方法中各個步驟的指令。

基于同一發(fā)明構(gòu)思,本申請實(shí)施例中還提供了一種與包括顯示器的電子設(shè)備900結(jié)合使用的計(jì)算機(jī)程序產(chǎn)品,該計(jì)算機(jī)程序產(chǎn)品包括計(jì)算機(jī)可讀的存儲介質(zhì)和內(nèi)嵌于其中的計(jì)算機(jī)程序機(jī)制,該計(jì)算機(jī)程序機(jī)制包括用于執(zhí)行本申請實(shí)施例一中任一該方法中各個步驟的指令。

實(shí)施例八

基于同一發(fā)明構(gòu)思,本申請實(shí)施例中還提供了如圖10所示的一種電子設(shè)備1000。

如圖10所示,根據(jù)本申請實(shí)施例八的電子設(shè)備1000包括:顯示器1001,存儲器1002,一個或多個處理器1003;總線1004以及一個或多個模塊,該一個或多個模塊被存儲在該存儲器中,并被配置成由該一個或多個處理器執(zhí)行,該一個或多個模塊包括用于執(zhí)行根據(jù)本申請實(shí)施例二中任一方法中各個步驟的指令。

基于同一發(fā)明構(gòu)思,本申請實(shí)施例中還提供了一種與包括顯示器的電子設(shè)備1000結(jié)合使用的計(jì)算機(jī)程序產(chǎn)品,該計(jì)算機(jī)程序產(chǎn)品包括計(jì)算機(jī)可讀的存儲介質(zhì)和內(nèi)嵌于其中的計(jì)算機(jī)程序機(jī)制,該計(jì)算機(jī)程序機(jī)制包括用于執(zhí)行本申請實(shí)施例二中任一該方法中各個步驟的指令。

本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請可采用在一個或多個其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。

本申請是參照根據(jù)本申請實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。

這些計(jì)算機(jī)程序指令也可存儲在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲器中,使得存儲在該計(jì)算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。

這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。

盡管已描述了本申請的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本申請范圍的所有變更和修改。

顯然,本領(lǐng)域的技術(shù)人員可以對本申請進(jìn)行各種改動和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請也意圖包含這些改動和變型在內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
什邡市| 肇州县| 剑河县| 阿鲁科尔沁旗| 扶风县| 广宗县| 驻马店市| 同德县| 淮滨县| 佛冈县| 邢台县| 原平市| 进贤县| 河间市| 普格县| 淳安县| 嘉鱼县| 天等县| 改则县| 沙河市| 宣汉县| 福建省| 通海县| 虹口区| 岗巴县| 太谷县| 嘉荫县| 三门县| 上思县| 平山县| 隆化县| 阿鲁科尔沁旗| 浏阳市| 长海县| 宜阳县| 垣曲县| 石景山区| 鲁甸县| 长治县| 海伦市| 新平|