資源處理方法及裝置的制造方法
【專利摘要】本申請?zhí)峁┮环N資源處理方法及裝置。方法包括:接收部署于第一設備上的應用程序中的主機代碼發(fā)出的資源分配請求;根據(jù)資源分配請求和所維護的所述第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從第一設備的至少一塊GPU可提供的硬件資源中為應用程序中的設備代碼分配運行所需的資源;將所分配的資源的信息返回給主機代碼。本申請可以有效利用GPU資源,并降低實現(xiàn)代價。
【專利說明】
資源處理方法及裝置
【技術領域】
[0001]本申請涉及軟件技術領域,尤其涉及一種資源處理方法及裝置。
【【背景技術】】
[0002]隨著數(shù)據(jù)量和計算規(guī)模不斷增大,越來越多的應用程序選擇圖形處理器(Graphics Processing Unit,GPU)作為計算資源。在使用GPU的過程中,操作系統(tǒng)負責獲取GPU的底層硬件細節(jié),并將GPU的底層硬件細節(jié)提供給應用程序,應用程序根據(jù)GPU的底層硬件細節(jié),確定并向GPU申請所需的GPU資源。
[0003]一些顯卡廠商(如NVIDIA、AMD)為了追求高性能,不斷推出新架構的GPU,但普遍顯存容量都較小,單卡難以滿足日益增長的計算需求。當需要進一步提高計算能力時,一般采用多塊GPU協(xié)同計算的方式,其中最常用的是單機多卡方式,即一臺計算機搭配多塊GPU板卡。
[0004]由于現(xiàn)有使用GPU的應用程序是面向單塊GPU設計的,因此若要在單機多卡的硬件結構上運行應用程序,程序設計員需要重新設計應用程序,使應用程序能夠根據(jù)單機多卡的底層硬件細節(jié)(例如顯存容量、計算單元數(shù)、由幾塊GPU構成等)使用硬件資源,以適應單機多卡的硬件結構;而且對于不同的單機多卡結構,需要分別對應用程序進行重新設計。這種方式雖然可以有效利用GPU資源,但是實現(xiàn)代價較大。
【
【發(fā)明內(nèi)容】
】
[0005]本申請的多個方面提供一種資源處理方法及裝置,用以有效利用GPU資源,并降低實現(xiàn)代價。
[0006]本申請的一方面,提供一種資源處理方法,包括:
[0007]接收部署于第一設備上的應用程序中的主機代碼發(fā)出的資源分配請求;
[0008]根據(jù)所述資源分配請求和所維護的所述第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從所述第一設備的至少一塊GPU可提供的硬件資源中為所述應用程序中的設備代碼分配運行所需的資源;
[0009]將所分配的資源的信息返回給所述主機代碼,以使所述主機代碼控制所述設備代碼基于所分配的資源成功運行在所述至少一塊GPU上。
[0010]本申請的另一方面,提供一種資源處理裝置,包括:
[0011]接收模塊,用于接收部署于第一設備上的應用程序中的主機代碼發(fā)出的資源分配請求;
[0012]分配模塊,用于根據(jù)所述資源分配請求和所維護的所述第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從所述第一設備的至少一塊GPU可提供的硬件資源中為所述應用程序中的設備代碼分配運行所需的資源;
[0013]發(fā)送模塊,用于將所分配的資源的信息返回給所述主機代碼,以使所述主機代碼控制所述設備代碼基于所分配的資源成功運行在所述至少一塊GPU上。
[0014]本申請在GPU與應用程序之間維護第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,使得第一設備的至少一塊GPU可提供的硬件資源以統(tǒng)一虛擬GPU資源的形式面向應用程序,具體在接收到應用程序中的主機代碼發(fā)出的資源分配請求后,根據(jù)資源分配請求及所維護的第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從至少一塊GPU可提供的硬件資源中為應用程序中的設備代碼分配運行所需的資源,并將所分配的資源提供給主機代碼,使得主機代碼可以控制設備代碼基于所分配的資源成功運行在GPU上,在有效利用GPU資源的基礎上,實現(xiàn)了應用程序與GPU底層硬件細節(jié)的隔離,應用程序不需要考慮底層硬件細節(jié),因此不需要重新設計應用程序,與現(xiàn)有技術相比,實現(xiàn)代價相對較低。
【【附圖說明】】
[0015]為了更清楚地說明本申請實施例中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本申請的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0016]圖1為現(xiàn)有基于GPU進行計算的應用程序的運行流程示意圖;
[0017]圖2為現(xiàn)有從底層硬件到上層應用程序之間的多層次結構示意圖;
[0018]圖3為本申請?zhí)峁┑膹牡讓佑布缴蠈討贸绦蛑g的多層次結構示意圖;
[0019]圖4為本申請一實施例提供的資源處理方法的流程示意圖;
[0020]圖5為本申請一實施例提供的虛擬內(nèi)存與顯存資源之間的映射關系示意圖;
[0021]圖6為本申請一實施例提供的資源處理裝置的結構示意圖;
[0022]圖7為本申請另一實施例提供的資源處理裝置的結構示意圖。
【【具體實施方式】】
[0023]為使本申請實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
[0024]基于GPU進行計算的應用程序包括兩部分:主機代碼(Host Code)和設備代碼(Device Code),其中主機代碼在CPU上執(zhí)行,而設備代碼也稱為核函數(shù)(KernelFunct1n),在GPU上執(zhí)行?,F(xiàn)有基于GPU進行計算的應用程序的大致運行流程如圖1所示,包括以下步驟:
[0025](I)在CPU控制下,將需要處理的數(shù)據(jù)從計算機內(nèi)存復制到GPU顯存中;
[0026](2) CPU將設備代碼發(fā)送給GPU ;
[0027](3)GPU的多處理器對顯存中的數(shù)據(jù)執(zhí)行設備代碼,在計算過程中,GPU多次讀寫顯存數(shù)據(jù),并且設備代碼的運算結果也會保存在顯存中;
[0028](4)在CPU控制下,顯存中的運算結果被復制到計算機內(nèi)存。
[0029]發(fā)明人經(jīng)研究發(fā)現(xiàn),現(xiàn)有基于GPU的應用程序是面向單塊GPU設計的,上述流程適用于單GPU的場景,若要在單機多卡的硬件結構上運行應用程序,程序設計員需要重新設計應用程序,使應用程序能夠根據(jù)單機多卡的底層硬件細節(jié)(例如顯存容量、計算單元數(shù)、由幾塊GPU構成等)使用硬件資源,以適應單機多卡的硬件結構,這種實現(xiàn)方式代價較高。
[0030]針對上述問題,本申請?zhí)峁┮环N資源管理方法。通過該方法,基于GPU進行計算的應用程序可運行于包括GPU和CPU的設備上,且應用程序不需要考慮底層硬件細節(jié),不需要重新設計應用程序,在有效利用GPU資源的基礎上,可降低實現(xiàn)代價。
[0031 ] 在介紹本申請方法流程之前,簡單描述一下本申請方法的運行環(huán)境。
[0032]為便于描述,將包括GPU和CPU的設備稱為第一設備。第一設備可以是任何設備。從實質上來說,第一設備是一臺單機多卡設備,即是一臺設備上同時配置有至少一塊GPU,并且同時包括CPU。
[0033]在計算機領域中,從底層硬件到上層應用程序,中間分為多個層次,如圖2所示,一種最為常見的層次結構包括:至少一塊GPU、驅動程序、操作系統(tǒng)、庫函數(shù)和應用程序。
[0034]其中,驅動程序是專門與硬件設備通信的模塊,一般由硬件生產(chǎn)廠商提供,例如NVIDIA提供NVIDIA GPU驅動,AMD提供AMD GPU驅動。驅動程序將硬件抽象化為文件操作,為操作系統(tǒng)提供支持。操作系統(tǒng)具有一定資源管理能力,并為多個用戶、多個進程提供資源分配服務,防止發(fā)生競爭。在操作系統(tǒng)之上,是為應用程序提供的庫函數(shù),便于用戶通過指定接口與底層硬件交互,可防止用戶惡意破壞硬件。
[0035]在本申請中,為了支持本申請方法的運行,在圖2所示層次結構上增加一虛擬中間件,該虛擬中間件的主要目的是將至少一塊GPU可提供的硬件資源映射成統(tǒng)一虛擬GPU資源,即映射成一塊虛擬GPU的資源進行處理,并維護至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,使得應用程序不用重新設計,即可運行在單機多卡設備上,降低實現(xiàn)成本。
[0036]值得說明的是,該虛擬中間件可位于任意兩層之間實現(xiàn)。可選的,如圖3所示,該虛擬中間件可位于驅動程序和操作系統(tǒng)之間,執(zhí)行效率高;利用驅動程序直接管理底層硬件,將至少一塊GPU映射成一塊虛擬GPU。當然,該虛擬中間件也可以位于操作系統(tǒng)和庫函數(shù)之間、庫函數(shù)與應用程序之間。
[0037]值得說明的是,上述虛擬中間件可以作為后續(xù)實施例中的資源處理裝置來實現(xiàn)。
[0038]圖4為本申請一實施例提供的資源處理方法的流程示意圖。如圖4所示,該方法包括:
[0039]401、接收部署于第一設備上的應用程序中的主機代碼發(fā)出的資源分配請求。
[0040]402、根據(jù)資源分配請求和所維護的第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從第一設備的至少一塊GPU可提供的硬件資源中為應用程序中的設備代碼分配運行所需的資源。
[0041]403、將所分配的資源的信息返回給主機代碼。
[0042]本實施例提供一種資源處理方法,可由資源處理裝置來執(zhí)行。資源處理裝置位于第一設備上的GPU與應用程序之間,維護著第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,負責按照該映射邏輯統(tǒng)一管理和調度GPU資源,并實現(xiàn)應用程序與底層GPU硬件之間的適配,該資源處理裝置具體可作為圖3所示層次結構中的虛擬中間件實現(xiàn)。
[0043]根據(jù)本申請一個實施例,上述方法也可以由操作系統(tǒng)內(nèi)核層或者驅動層執(zhí)行,SP上述虛擬中間件也可以嵌入操作系統(tǒng)或者驅動層中來實現(xiàn)。
[0044]具體的,應用程序中的主機代碼運行于第一設備的CPU上,主機代碼向資源處理裝置發(fā)出資源分配請求,或者也可以說是運行主機代碼的CPU向資源處理裝置發(fā)送資源分配請求;資源處理裝置接收主機代碼發(fā)出的資源分配請求,根據(jù)該資源分配請求和所維護的第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從至少一塊GPU可提供的硬件資源中為應用程序中的設備代碼分配運行所需的資源,然后將所分配的資源提供給主機代碼,這樣主機代碼就可以控制設備代碼基于所分配的資源成功運行于GPU 上。
[0045]值得說明的是,資源分配請求可以包括所需資源的類型以及所需資源的數(shù)量等信息。資源處理裝置具體根據(jù)資源分配請求攜帶的信息,為設備代碼分配所需類型的所需數(shù)量的資源。
[0046]上述至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯主要作用是將第一設備的至少一塊GPU可提供的硬件資源映射成一塊虛擬GPU的資源,這樣對外部(例如應用程序)來說,實際上看到的是一塊虛擬GPU的資源,而不是至少一塊GPU可提供的硬件資源。相應的,上述按照映射邏輯,從至少一塊GPU可提供的硬件資源中為應用程序中的設備代碼分配運行所需的資源實際上是指,按照映射成的統(tǒng)一虛擬GPU資源,為應用程序中的設備代碼分配運行所需的資源。
[0047]本實施例在GPU與應用程序之間維護第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,使得第一設備的至少一塊GPU可提供的硬件資源以統(tǒng)一虛擬GPU資源的形式面向應用程序,具體按照該映射邏輯負責為應用程序中需要運行于GPU上的設備代碼分配資源,實現(xiàn)了應用程序與GPU底層硬件細節(jié)的隔離,應用程序不需要考慮底層硬件細節(jié),且不需要確定并分配所需的GPU資源,使得設備代碼的實現(xiàn)邏輯可以是面向單塊GPU設計的,不需要額外實現(xiàn)多塊GPU之間的交互等功能,因此不需要重新設計應用程序(主要是不需要重新設計應用程序中的設備代碼的實現(xiàn)邏輯)即可有效利用GPU資源,與現(xiàn)有技術相比,實現(xiàn)代價相對較低。
[0048]另外,采用本實施例提供的方法,擴展了現(xiàn)有小容量GPU的應用,也解放了 GPU開發(fā)商,不用再開發(fā)更大容量的GPU,降低開發(fā)成本。并且,該方法不受底層硬件細節(jié)的限制,具有可移植性。
[0049]在一可選實施方式中,為便于資源處理裝置對GPU可提供的硬件資源進行管理和調度,資源處理裝置在從至少一塊GPU可提供的硬件資源中為應用程序分配運行所需的資源之前,預先獲取至少一塊GPU中每塊GPU可提供的硬件資源的詳情信息(簡稱為資源詳情信息),根據(jù)每塊GPU的資源詳情信息,生成至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GHJ資源的映射邏輯。這里的資源詳情信息用于描述GPU可提供的硬件資源,例如可以包括硬件資源的類型、數(shù)量、使用狀態(tài)等信息。在本實施例中,每塊GPU可提供的硬件資源包括但不限于:顯存資源和計算資源。顯存資源的詳情信息主要包括:類型標識(用于指示是顯存資源)、顯存容量、顯存是否可用等信息;計算資源的詳情信息主要包括:類型標識(用于指示是計算資源)、資源數(shù)量、使用狀態(tài)等。
[0050]—種獲取資源詳情信息的方式:資源處理裝置向至少一塊GPU中每塊GPU發(fā)送資源詳情獲取請求,并接收每塊GPU根據(jù)該資源詳情獲取請求返回的資源詳情信息??蛇x的,在向GPU發(fā)送資源請求獲取請求之前,資源處理裝置在第一設備初始化時進行監(jiān)測,以便發(fā)現(xiàn)GPU。
[0051]另一種獲取資源詳情信息的方式:資源處理裝置接收至少一塊GPU中每塊GPU發(fā)送的注冊請求,該注冊請求包括資源詳情信息;資源處理裝置從該注冊請求中獲取資源詳情信息。例如,每塊GPU可以在第一設備啟動后,主動向資源處理裝置進行注冊,以便于資源處理裝置獲取資源詳情信息并根據(jù)資源詳情信息對GPU進行管理。
[0052]在一可選實施方式中,考慮到至少一塊GPU可提供的硬件資源主要包括顯存資源和計算資源?;诖?,資源處理裝置具體可以根據(jù)資源分配請求,讀取所維護的第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,根據(jù)所讀取的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從計算資源中為設備代碼分配所需的計算資源,并從顯存資源中為設備代碼分配所需的顯存資源。為便于描述,將分配給設備代碼的計算資源簡稱為第一計算資源,將分配給設備代碼的顯存資源簡稱為第一顯存資源。
[0053]考慮顯存資源主要用于供應用程序存取數(shù)據(jù),為了便于數(shù)據(jù)存取,資源處理裝置可以根據(jù)至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從第一設備的系統(tǒng)內(nèi)存中,申請與至少一塊GPU可提供的顯存資源總量相同的虛擬內(nèi)存,并將虛擬內(nèi)存與至少一塊GPU可提供的顯存資源進行映射,形成虛擬內(nèi)存與至少一塊GPU可提供的顯存資源之間的映射關系。基于此,資源處理裝置根據(jù)至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從至少一塊GPU可提供的硬件資源中為設備代碼分配第一顯存資源具體可以是:從虛擬內(nèi)存中為設備代碼分配第一存儲資源,并根據(jù)上述虛擬內(nèi)存與至少一塊GPU可提供的顯存資源之間的映射關系,對所分配的第一存儲資源對應的第一顯存資源進行標記,以標識將該第一顯存資源分配給了應用程序的設備代碼。
[0054]可選的,虛擬內(nèi)存與至少一塊GPU可提供的顯存資源之間的映射關系具體可以是將虛擬內(nèi)存的地址與顯存資源的地址進行映射。
[0055]其中,虛擬內(nèi)存與至少一塊GPU可提供的顯存資源之間的映射關系可如圖5所示。
[0056]在一可選實施方式中,資源處理裝置可以根據(jù)計算資源的使用狀況,靈活為應用程序分配計算資源。例如,當計算資源緊張時,資源處理裝置可以優(yōu)先為優(yōu)先級高、實時性要求高的應用程序分配計算資源,使得這類應用程序優(yōu)先得到GPU的調度;而延后為1密集、低效的應用程序分配計算資源。
[0057]具體的,資源處理裝置可以根據(jù)資源分配請求的優(yōu)先級,確定為應用程序中設備代碼分配計算資源的先后順序;按照該先后順序和至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從至少一塊GPU可提供的計算資源中為應用程序中的設備代碼分配第一計算資源。
[0058]其中,資源分配請求的優(yōu)先級可根據(jù)具體應用需求和應用場景而定,例如可以由應用程序對1密集度、實時性等要求來確定資源分配請求的優(yōu)先級。
[0059]在上述實施方式中,資源處理裝置從系統(tǒng)內(nèi)存中申請一虛擬內(nèi)存,這對應用程序來說相當于看到一塊幾乎擁有足夠存儲資源的虛擬GPU,無需關心底層硬件細節(jié)(顯存容量、由幾塊GPU構成等),由資源處理裝置通過虛擬內(nèi)存與顯存資源之間的映射關系自動實現(xiàn)應用程序與底層GPU硬件資源之間的適配,不需要重新設計應用程序,簡化了開發(fā)、部署以及后期維護的工作,降低了成本。
[0060]進一步,資源處理裝置在為應用程序中的設備代碼分配運行所需的資源之后,可以將所分配的資源發(fā)送給應用程序中的主機代碼,以使得主機代碼控制設備代碼基于所分配的資源成功運行于GPU上。具體的,資源處理裝置可以將第一計算資源的標識和第一存儲資源的地址信息發(fā)送給主機代碼,以使主機代碼將設備代碼發(fā)送給第一計算資源以供第一計算資源運行設備代碼并將運行過程中產(chǎn)生的數(shù)據(jù)存儲到第一存儲資源中;資源處理裝置將運行過程中產(chǎn)生的數(shù)據(jù)存儲到被標記的第一顯存資源中。
[0061]值得說明的是,對應用程序而言,上述第一存儲資源實際上是虛擬內(nèi)存,而第一存儲資源的地址信息也是虛擬內(nèi)存的地址。
[0062]在分得第一存儲資源之后,應用程序的主機代碼可以訪問第一存儲資源,例如可以請求向第一存儲資源寫入數(shù)據(jù)或從第一存儲資源中讀數(shù)據(jù)?;诖耍Y源處理裝置還可以接收主機代碼發(fā)送的讀請求,根據(jù)該讀請求,從第一存儲資源中讀取數(shù)據(jù)并將所讀取的數(shù)據(jù)返回給主機代碼?;蛘撸Y源處理裝置還可以接收主機代碼發(fā)送的寫請求,根據(jù)該寫請求,向第一存儲資源中寫入數(shù)據(jù),并根據(jù)對第一顯存資源的標記,向第一顯存資源中同步所寫入的數(shù)據(jù)。
[0063]值得說明的是,上述讀請求一般會攜帶第一存儲資源的地址信息,用于指示從哪塊存儲空間讀取數(shù)據(jù)。上述寫請求一般會攜帶有第一存儲資源的地址信息,用于指示往哪塊存儲空間寫入數(shù)據(jù);另外,該寫請求還會攜帶可以指示待寫入數(shù)據(jù)的信息,例如該指示信息可以是待寫入數(shù)據(jù)本身,或該指示信息可以是待寫入數(shù)據(jù)的存儲路徑。
[0064]由上述可見,在應用程序使用存儲資源的過程中,資源處理裝置可能需要在虛擬內(nèi)存與GPU可提供的顯存資源之間進行數(shù)據(jù)同步。如果要做到單數(shù)據(jù)的同步,難以實現(xiàn),代價較高,所以一般采用全同步,即將整塊GPU的顯存資源中的數(shù)據(jù)與該GPU對應的虛擬內(nèi)存中的數(shù)據(jù)全部進行同步;這種同步方法會有相當大的延遲,不利于發(fā)揮GPU的計算能力,并且還會嚴重降低資源處理裝置的工作效率和性能。
[0065]針對上述問題,資源處理裝置采用分頁管理的方式,即在形成虛擬內(nèi)存與至少一塊GPU可提供的顯存資源之間的映射關系時,對虛擬內(nèi)存進行分頁處理,獲得內(nèi)存頁;對顯存資源進行分頁處理,獲得顯存頁;將內(nèi)存頁與顯存頁進行映射,形成內(nèi)存頁與顯存頁之間的映射關系?;诖耍Y源處理裝置向第一顯存資源中同步寫入第一存儲資源中的數(shù)據(jù)的過程具體為:
[0066]確定所寫入的數(shù)據(jù)所在的內(nèi)存頁,為便于描述,將該內(nèi)存頁稱為第一內(nèi)存頁;將所確定的第一內(nèi)存頁中的數(shù)據(jù)同步到第一內(nèi)存頁對應的顯存頁中。
[0067]資源處理裝置通過分頁管理方式,使得在數(shù)據(jù)同步時,只需同步一頁內(nèi)的數(shù)據(jù),無需同步所有數(shù)據(jù),有利于減少虛擬內(nèi)存與顯存資源之間交互的數(shù)據(jù)量,有利于降低延遲,利于GPU充分發(fā)揮計算優(yōu)勢,并且可以降低資源處理裝置的處理負擔,提高資源處理裝置的性能。
[0068]需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本申請并不受所描述的動作順序的限制,因為依據(jù)本申請,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本申請所必須的。
[0069]在上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。
[0070]圖6為本申請一實施例提供的資源處理裝置的結構示意圖。如圖6所示,該裝置包括:接收模塊61、分配模塊62和發(fā)送模塊63。
[0071]接收模塊61,用于接收部署于第一設備上的應用程序中的主機代碼發(fā)出的資源分配請求。
[0072]分配模塊62,用于根據(jù)第一接收模塊61接收的資源分配請求和所維護的所述第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從第一設備的至少一塊GPU可提供的硬件資源中為應用程序的設備代碼分配運行所需的資源。
[0073]發(fā)送模塊63,用于將分配模塊62所分配的資源的信息返回給主機代碼。這樣主機代碼就可以控制設備代碼基于所分配的資源成功運行在至少一塊GPU上。
[0074]在一可選實施方式中,如圖7所示,該資源處理裝置還包括:信息獲取模塊64和維護模塊69。
[0075]信息獲取模塊64,用于:
[0076]向至少一塊GPU中每塊GPU發(fā)送資源詳情獲取請求,并接收每塊GPU根據(jù)資源詳情獲取請求返回的資源詳情信息;或者
[0077]接收至少一塊GPU中每塊GPU發(fā)送的注冊請求,注冊請求包括資源詳情信息;
[0078]其中,資源詳情信息用于描述每塊GPU可提供的硬件資源。
[0079]維護模塊69,用于根據(jù)信息獲取模塊64獲取的每塊GPU的資源詳情信息,生成至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯。
[0080]在一可選實施方式中,上述至少一塊GPU可提供的硬件資源包括顯存資源和計算資源。分配模塊62具體用于:根據(jù)資源分配請求,讀取至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯;根據(jù)至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從計算資源中為設備代碼分配第一計算資源,并從顯存資源中為設備代碼分配第一顯存資源。
[0081 ] 在一可選實施方式中,如圖7所示,該資源處理裝置還包括:申請模塊65和映射模塊66。
[0082]申請模塊65,用于根據(jù)至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從第一設備的系統(tǒng)內(nèi)存中,申請與至少一塊GPU可提供的顯存資源總量相同的虛擬內(nèi)存。
[0083]映射模塊66,用于形成申請模塊65所申請的虛擬內(nèi)存與至少一塊GPU可提供的顯存資源之間的映射關系。
[0084]基于上述,分配模塊62具體用于:
[0085]從計算資源中為設備代碼分配第一計算資源,并從虛擬內(nèi)存中為設備代碼分配第一存儲資源,根據(jù)映射模塊36形成的映射關系,對第一存儲資源對應的第一顯存資源進行標記,以標識將第一顯存資源分配給設備代碼。
[0086]在一可選實施方式中,如圖7所示,該資源處理裝置還包括:讀寫處理模塊67。
[0087]讀寫處理模塊67,用于接收主機代碼發(fā)送的讀請求,根據(jù)讀請求,從第一存儲資源中讀取數(shù)據(jù)并將所讀取的數(shù)據(jù)返回給主機代碼;和/或,接收主機代碼發(fā)送的寫請求,根據(jù)寫請求,向第一存儲資源中寫入數(shù)據(jù),并根據(jù)對第一顯存資源的標記,向第一顯存資源中同步所寫入的數(shù)據(jù)。
[0088]在一可選實施方式中,映射模塊66具體用于:
[0089]對虛擬內(nèi)存進行分頁處理,獲得內(nèi)存頁;
[0090]對顯存資源進行分頁處理,獲得顯存頁;
[0091]形成內(nèi)存頁和顯存頁之間的映射關系;
[0092]基于上述,讀寫處理模塊67具體用于:
[0093]接收主機代碼發(fā)送的寫請求,根據(jù)寫請求,向第一存儲資源中寫入數(shù)據(jù),并確定所寫入的數(shù)據(jù)所在的第一內(nèi)存頁,將第一內(nèi)存頁中的數(shù)據(jù)同步到第一內(nèi)存頁對應的顯存頁中。
[0094]在一可選實施方式中,分配模塊62具體用于:
[0095]根據(jù)資源分配請求的優(yōu)先級,確定為設備代碼分配計算資源的先后順序,按照先后順序和至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從計算資源中為設備代碼分配第一計算資源,并從顯存資源中為設備代碼分配第一顯存資源。
[0096]在一可選實施方式中,發(fā)送模塊63具體用于:
[0097]將第一計算資源的標識和第一存儲資源的地址信息發(fā)送給主機代碼,以使主機代碼將設備代碼發(fā)送給第一計算資源以供第一計算資源運行設備代碼并將運行過程中產(chǎn)生的數(shù)據(jù)存儲到第一存儲資源中,并將運行過程中產(chǎn)生的數(shù)據(jù)存儲到被標記的第一顯存資源中。
[0098]本實施例提供的資源處理裝置,位于GPU與應用程序之間,維護著第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,使得第一設備的至少一塊GPU可提供的硬件資源以統(tǒng)一虛擬GPU資源的形式面向應用程序,具體按照該映射邏輯為應用程序中需要運行于GPU上的設備代碼分配資源,實現(xiàn)了應用程序與GPU底層硬件細節(jié)的隔離,應用程序不需要考慮底層硬件細節(jié),且不需要確定并分配所需的GPU資源,使得設備代碼的實現(xiàn)邏輯可以是面向單塊GPU設計的,不需要額外實現(xiàn)多塊GPU之間的交互等功能,因此不需要重新設計應用程序(主要是不需要重新設計應用程序中的設備代碼的實現(xiàn)邏輯)即可有效利用GPU資源,與現(xiàn)有技術相比,實現(xiàn)代價相對較低。
[0099]所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。
[0100]在本申請所提供的幾個實施例中,應該理解到,所揭示的系統(tǒng),裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
[0101]所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
[0102]另外,在本申請各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用硬件加軟件功能單元的形式實現(xiàn)。
[0103]上述以軟件功能單元的形式實現(xiàn)的集成的單元,可以存儲在一個計算機可讀取存儲介質中。上述軟件功能單元存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)或處理器(processor)執(zhí)行本申請各個實施例所述方法的部分步驟。而前述的存儲介質包括:U盤、移動硬盤、只讀存儲器(Read-Only Memory, ROM)、隨機存取存儲器(Random Access Memory, RAM)、磁碟或者光盤等各種可以存儲程序代碼的介質。
[0104]最后應說明的是:以上實施例僅用以說明本申請的技術方案,而非對其限制;盡管參照前述實施例對本申請進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本申請各實施例技術方案的精神和范圍。
【主權項】
1.一種資源處理方法,其特征在于,包括: 接收部署于第一設備上的應用程序中的主機代碼發(fā)出的資源分配請求; 根據(jù)所述資源分配請求和所維護的所述第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從所述第一設備的至少一塊GPU可提供的硬件資源中為所述應用程序中的設備代碼分配運行所需的資源; 將所分配的資源的信息返回給所述主機代碼。2.根據(jù)權利要求1所述的方法,其特征在于,所述根據(jù)所述資源分配請求和所維護的所述第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從所述第一設備的至少一塊GPU可提供的硬件資源中為所述應用程序中的設備代碼分配運行所需的資源之前,包括: 向所述至少一塊GPU中每塊GPU發(fā)送資源詳情獲取請求,并接收每塊GPU根據(jù)所述資源詳情獲取請求返回的每塊GPU的資源詳情信息; 根據(jù)每塊GPU的資源詳情信息,生成所述至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GHJ資源的映射邏輯;或者 接收所述至少一塊GPU中每塊GPU發(fā)送的注冊請求,所述注冊請求包括資源詳情信息; 根據(jù)每塊GPU的資源詳情信息,生成所述至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯; 其中,所述資源詳情信息用于描述每塊GPU可提供的硬件資源。3.根據(jù)權利要求1所述的方法,其特征在于,所述至少一塊GPU可提供的硬件資源包括顯存資源和計算資源; 所述根據(jù)所述資源分配請求和所維護的所述第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從所述第一設備的至少一塊GPU可提供的硬件資源中為所述應用程序中的設備代碼分配運行所需的資源,包括: 根據(jù)所述資源分配請求,讀取所述至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯; 根據(jù)所述至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從所述計算資源中為所述設備代碼分配第一計算資源,并從所述顯存資源中為所述設備代碼分配第一顯存資源。4.根據(jù)權利要求3所述的方法,其特征在于,所述根據(jù)所述資源分配請求和所維護的所述第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從所述第一設備的至少一塊GPU提供的硬件資源中為所述應用程序中的設備代碼分配運行所需的資源之前,還包括: 根據(jù)所述至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從所述第一設備的系統(tǒng)內(nèi)存中,申請與所述至少一塊GPU可提供的顯存資源總量相同的虛擬內(nèi)存;形成所述虛擬內(nèi)存與所述至少一塊GPU可提供的顯存資源之間的映射關系; 所述根據(jù)所述至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從所述顯存資源中為所述設備代碼分配第一顯存資源,包括: 從所述虛擬內(nèi)存中為所述設備代碼分配第一存儲資源; 根據(jù)所述映射關系,對所述第一存儲資源對應的所述第一顯存資源進行標記,以標識將所述第一顯存資源分配給所述設備代碼。5.根據(jù)權利要求4所述的方法,其特征在于,還包括: 接收所述主機代碼發(fā)送的讀請求,根據(jù)所述讀請求,從所述第一存儲資源中讀取數(shù)據(jù)并將所讀取的數(shù)據(jù)返回給所述主機代碼;和/或 接收所述主機代碼發(fā)送的寫請求,根據(jù)所述寫請求,向所述第一存儲資源中寫入數(shù)據(jù),并根據(jù)對所述第一顯存資源的標記,向所述第一顯存資源中同步所寫入的數(shù)據(jù)。6.根據(jù)權利要求4或5所述的方法,其特征在于,所述形成所述虛擬內(nèi)存與所述至少一塊GPU可提供的顯存資源之間的映射關系,還包括: 對所述虛擬內(nèi)存進行分頁處理,獲得內(nèi)存頁; 對所述顯存資源進行分頁處理,獲得顯存頁; 形成所述內(nèi)存頁和顯存頁之間的映射關系; 所述向所述第一顯存資源中同步所寫入的數(shù)據(jù),包括: 確定所寫入的數(shù)據(jù)所在的第一內(nèi)存頁,將所述第一內(nèi)存頁中的數(shù)據(jù)同步到所述第一內(nèi)存頁對應的顯存頁中。7.根據(jù)權利要求3或4或5所述的方法,其特征在于,所述根據(jù)所述至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從所述計算資源中為所述設備代碼分配第一計算資源,包括: 根據(jù)所述資源分配請求的優(yōu)先級,確定為所述設備代碼分配計算資源的先后順序;按照所述先后順序和所述至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從所述計算資源中為所述設備代碼分配所述第一計算資源。8.根據(jù)權利要求3-5任一項所述的方法,其特征在于,所述將所分配的資源的信息返回給所述主機代碼,以使所述主機代碼控制所述設備代碼成功運行在所述至少一塊GPU上,包括: 將所述第一計算資源的標識和所述第一存儲資源的地址信息發(fā)送給所述主機代碼,以使所述主機代碼將所述設備代碼發(fā)送給所述第一計算資源以供所述第一計算資源運行所述設備代碼并將運行過程中產(chǎn)生的數(shù)據(jù)存儲到所述第一存儲資源中; 將所述運行過程中產(chǎn)生的數(shù)據(jù)存儲到被標記的所述第一顯存資源中。9.一種資源處理裝置,其特征在于,包括: 接收模塊,用于接收部署于第一設備上的應用程序中的主機代碼發(fā)出的資源分配請求; 分配模塊,用于根據(jù)所述資源分配請求和所維護的所述第一設備的至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從所述第一設備的至少一塊GPU可提供的硬件資源中為所述應用程序中的設備代碼分配運行所需的資源; 發(fā)送模塊,用于將所分配的資源的信息返回給所述主機代碼。10.根據(jù)權利要求9所述的裝置,其特征在于,還包括: 信息獲取模塊,用于: 向所述至少一塊GPU中每塊GPU發(fā)送資源詳情獲取請求,并接收每塊GPU根據(jù)所述資源詳情獲取請求返回的資源詳情信息;或者 接收所述至少一塊GPU中每塊GPU發(fā)送的注冊請求,所述注冊請求包括資源詳情信息; 其中,所述資源詳情信息用于描述每塊GPU可提供的硬件資源; 維護模塊,用于根據(jù)每塊GPU的資源詳情信息,生成所述至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯。11.根據(jù)權利要求9所述的裝置,其特征在于,所述至少一塊GPU可提供的硬件資源包括顯存資源和計算資源; 所述分配模塊具體用于:根據(jù)所述資源分配請求,讀取所述至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯;根據(jù)所述至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從所述計算資源中為所述設備代碼分配第一計算資源,并從所述顯存資源中為所述設備代碼分配第一顯存資源。12.根據(jù)權利要求11所述的裝置,其特征在于,還包括: 申請模塊,用于根據(jù)所述至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從所述第一設備的系統(tǒng)內(nèi)存中,申請與所述至少一塊GPU可提供的顯存資源總量相同的虛擬內(nèi)存; 映射模塊,用于形成所述虛擬內(nèi)存與所述至少一塊GPU可提供的顯存資源之間的映射關系; 所述分配模塊具體用于: 從所述計算資源中為所述設備代碼分配第一計算資源,并從所述虛擬內(nèi)存中為所述設備代碼分配第一存儲資源,根據(jù)所述映射關系,對所述第一存儲資源對應的所述第一顯存資源進行標記,以標識將所述第一顯存資源分配給所述設備代碼。13.根據(jù)權利要求12所述的裝置,其特征在于,還包括: 讀寫處理模塊,用于接收所述主機代碼發(fā)送的讀請求,根據(jù)所述讀請求,從所述第一存儲資源中讀取數(shù)據(jù)并將所讀取的數(shù)據(jù)返回給所述主機代碼;和/或,接收所述主機代碼發(fā)送的寫請求,根據(jù)所述寫請求,向所述第一存儲資源中寫入數(shù)據(jù),并根據(jù)對所述第一顯存資源的標記,向所述第一顯存資源中同步所寫入的數(shù)據(jù)。14.根據(jù)權利要求12或13所述的裝置,其特征在于,所述映射模塊具體用于: 對所述虛擬內(nèi)存進行分頁處理,獲得內(nèi)存頁; 對所述顯存資源進行分頁處理,獲得顯存頁; 形成所述內(nèi)存頁和顯存頁之間的映射關系; 所述讀寫處理模塊具體用于: 接收所述主機代碼發(fā)送的寫請求,根據(jù)所述寫請求,向所述第一存儲資源中寫入數(shù)據(jù),并確定所寫入的數(shù)據(jù)所在的第一內(nèi)存頁,將所述第一內(nèi)存頁中的數(shù)據(jù)同步到所述第一內(nèi)存頁對應的顯存頁中。15.根據(jù)權利要求11或12或13所述的裝置,其特征在于,所述分配模塊具體用于: 根據(jù)所述資源分配請求的優(yōu)先級,確定為所述設備代碼分配計算資源的先后順序,按照所述先后順序和所述至少一塊GPU可提供的硬件資源到統(tǒng)一虛擬GPU資源的映射邏輯,從所述計算資源中為所述設備代碼分配所述第一計算資源,并從所述顯存資源中為所述設備代碼分配第一顯存資源。16.根據(jù)權利要求11-13任一項所述的裝置,其特征在于,所述發(fā)送模塊具體用于:將所述第一計算資源的標識和所述第一存儲資源的地址信息發(fā)送給所述主機代碼,以使所述主機代碼將所述設備代碼發(fā)送給所述第一計算資源以供所述第一計算資源運行所述設備代碼并將運行過程中產(chǎn)生的數(shù)據(jù)存儲到所述第一存儲資源中,并將所述運行過程中產(chǎn)生的數(shù)據(jù)存儲到被標記的所述第一顯存資源中。
【文檔編號】G06F9/50GK105988874SQ201510069338
【公開日】2016年10月5日
【申請日】2015年2月10日
【發(fā)明人】趙永科
【申請人】阿里巴巴集團控股有限公司