虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法
【專利摘要】本發(fā)明公開了一種虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法,包括以下步驟:用OpenMP在主機(jī)端開設(shè)和GPU個(gè)數(shù)相同的主機(jī)端線程,每個(gè)主機(jī)端線程負(fù)責(zé)控制一個(gè)GPU,在每個(gè)設(shè)備上為每個(gè)線程分配顯存,并各自啟動(dòng)內(nèi)核函數(shù);每個(gè)線程設(shè)置自己私有主機(jī)端和設(shè)備的數(shù)據(jù)指針,數(shù)據(jù)計(jì)算,數(shù)據(jù)合并,將數(shù)據(jù)通過(guò)GPU私有的設(shè)備端數(shù)據(jù)指針拷貝回私有主機(jī)端,在私有主機(jī)端進(jìn)行數(shù)據(jù)合并,與現(xiàn)有技術(shù)相比,本發(fā)明在虛擬化環(huán)境下實(shí)現(xiàn)多GPU協(xié)同計(jì)算,利用多GPU對(duì)單任務(wù)進(jìn)行加速,對(duì)基于CPU+GPU異構(gòu)平臺(tái)的超級(jí)計(jì)算、云計(jì)算以及網(wǎng)格計(jì)算具有重大的理論和現(xiàn)實(shí)意義。
【專利說(shuō)明】虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及虛擬化環(huán)境下單任務(wù)多GPU計(jì)算領(lǐng)域,尤其涉及虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法。
【背景技術(shù)】
[0002]現(xiàn)有的多GPU協(xié)同計(jì)算技術(shù)都是基于物理機(jī),OpenMP—般是用于CPU并行計(jì)算的,將其用在GPU中也就在NVIDIA官方的sdk中給出了示例,并沒有支持多GPU完整的API,gVirtuS是目前較為成熟的GPU虛擬化解決方案,它解決了在虛擬化環(huán)境下利用GPU進(jìn)行CUDA編程的問題,但它的解決方案全部針對(duì)單GPU,并沒有對(duì)多GPU進(jìn)行研究,總之,現(xiàn)有技術(shù)中,在虛擬化環(huán)境下不能利用多GPU對(duì)數(shù)據(jù)規(guī)模很大的任務(wù)進(jìn)行同時(shí)加速。
【發(fā)明內(nèi)容】
[0003]本發(fā)明克服了現(xiàn)有技術(shù)的不足,提供一種虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法。
[0004]為解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案為:
虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法,包括以下步驟,
步驟S01,在服務(wù)端部署GPU虛擬化(gVirtuS)服務(wù)端組件,將在客戶端攔截的參數(shù)在本地執(zhí)行,即在物理機(jī)上執(zhí)行,物理機(jī)通過(guò)OpenMP在主機(jī)端開設(shè)和GPU個(gè)數(shù)相同的主機(jī)端線程,每個(gè)主機(jī)端線程負(fù)責(zé)控制一個(gè)GPU,通過(guò)編程接口函數(shù)將主機(jī)端線程的ID號(hào)同GPU的設(shè)備號(hào)對(duì)應(yīng),將GPU計(jì)算的對(duì)象定義為N*N矩陣;編程接口函數(shù)為cudaSetDevice (cpu_thread_id)函數(shù);
現(xiàn)有技術(shù)中,在虛擬化環(huán)境下并沒有針對(duì)GPU的驅(qū)動(dòng)程序,步驟S01,在服務(wù)端部署GTO虛擬化(gVirtuS)服務(wù)端組件后將具體的執(zhí)行傳遞給服務(wù)端,服務(wù)端完成后將結(jié)果傳遞給虛擬機(jī);
步驟S02,在每個(gè)設(shè)備上為每個(gè)線程分配顯存,并各自啟動(dòng)內(nèi)核函數(shù),計(jì)算矩陣復(fù)合運(yùn)算,所述顯存大小依據(jù)需要計(jì)算的數(shù)據(jù)大小分配,所述內(nèi)核函數(shù)為用于計(jì)算矩陣相乘的內(nèi)核函數(shù);
步驟S03,數(shù)據(jù)分解,每個(gè)線程設(shè)置自己私有主機(jī)端和設(shè)備的數(shù)據(jù)指針,私有主機(jī)端線程指向原始指針不同的起始位置,并通過(guò)CUDA復(fù)制函數(shù),即cudaMemcpyO函數(shù)從自己私有主機(jī)端線程的位置拷貝N/n個(gè)數(shù)據(jù)規(guī)模達(dá)到規(guī)模劃分的目的,其中N為矩陣的行數(shù)或者列數(shù),η為GPU的個(gè)數(shù);
步驟S04,數(shù)據(jù)計(jì)算,根據(jù)矩陣相乘法則對(duì)η個(gè)GPU的矩陣進(jìn)行計(jì)算,OpenMP同步模塊控制所述GPU計(jì)算結(jié)果的輸出時(shí)間,通過(guò)ccudaDeviceSynchronizeO函數(shù)同步輸出數(shù)據(jù);步驟S05,數(shù)據(jù)合并,所述步驟S04中同步數(shù)據(jù)的數(shù)據(jù)通過(guò)GPU私有的設(shè)備端數(shù)據(jù)指針拷貝回私有主機(jī)端,在私有主機(jī)端進(jìn)行數(shù)據(jù)合并,服務(wù)端完成計(jì)算后通過(guò)socket通信給將計(jì)算結(jié)果傳遞給客戶端,所述客戶端為虛擬機(jī)。[0005]步驟S03中GPU個(gè)數(shù)為4個(gè),分別為GPU0、GPU1、GPU2和GPU3,所述矩陣為A、B、C和D,A*B+C*D數(shù)據(jù)分解包括以下步驟:
DGPU O執(zhí)行矩陣A的一半乘以B,GPU I執(zhí)行矩陣A的另一半乘以B,GPU 2執(zhí)行矩陣C的一半乘以D,GPU 3執(zhí)行矩陣C的另一半乘以D ;
2)0penMP同步模塊等待GPU0、GPU1、GPU2和GPU3的相乘運(yùn)算全部完成,將全部數(shù)據(jù)通過(guò)cudaMemcpyO函數(shù)拷貝到GPU O上,主機(jī)端校驗(yàn)結(jié)果的正確性。
[0006]數(shù)據(jù)計(jì)算采用矩陣乘法計(jì)算,包括以下步驟:將A矩陣分為4個(gè)A/4 (N/4*N),并分別與矩陣B相乘,分別得到4個(gè)AB/4矩陣,4個(gè)AB/4矩陣組合可以得到結(jié)果矩陣AB,以此方法分別計(jì)算GPUO、GPUU GPU2和GPU3中矩陣相乘,AB矩陣為N*N矩陣,AB矩陣同樣為N*N矩陣。
[0007]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果有:本發(fā)明在虛擬化環(huán)境下實(shí)現(xiàn)多GPU協(xié)同計(jì)算,利用多GPU對(duì)單任務(wù)進(jìn)行加速,對(duì)基于CPU+GPU異構(gòu)平臺(tái)的超級(jí)計(jì)算、云計(jì)算以及網(wǎng)格計(jì)算具有重大的理論和現(xiàn)實(shí)意義。
【專利附圖】
【附圖說(shuō)明】
[0008]圖1為本發(fā)明的方法流程圖。
[0009]圖2為本發(fā)明數(shù)據(jù)分解算法示意圖。
[0010]圖3為本發(fā)明數(shù)據(jù)計(jì)算算法示意圖。
[0011]圖4為A*B+C*D在多GPU與單GPU環(huán)境下的計(jì)算時(shí)間對(duì)比圖。
【具體實(shí)施方式】
[0012]下面結(jié)合附圖對(duì)本發(fā)明作更進(jìn)一步的說(shuō)明。
[0013]如圖1所示,虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法,包括以下步驟, 步驟S01,在服務(wù)端部署GPU虛擬化(gVirtuS)服務(wù)端組件,將在客戶端攔截的參數(shù)在
本地執(zhí)行,即在物理機(jī)上執(zhí)行,物理機(jī)通過(guò)OpenMP在主機(jī)端開設(shè)和GPU個(gè)數(shù)相同的主機(jī)端線程,每個(gè)主機(jī)端線程負(fù)責(zé)控制一個(gè)GPU,通過(guò)cudaSetDevice (cpu_thread_id)函數(shù)將主機(jī)端線程的ID號(hào)同GPU的設(shè)備號(hào)對(duì)應(yīng),將GPU計(jì)算的對(duì)象定義為N*N矩陣;
步驟S02,在每個(gè)設(shè)備上為每個(gè)線程分配顯存,并各自啟動(dòng)內(nèi)核函數(shù),計(jì)算矩陣復(fù)合運(yùn)算,所述顯存大小依據(jù)需要計(jì)算的數(shù)據(jù)大小分配,所述內(nèi)核函數(shù)為用于計(jì)算矩陣相乘的內(nèi)核函數(shù);
步驟S03,數(shù)據(jù)分解,每個(gè)線程設(shè)置自己私有主機(jī)端和設(shè)備的數(shù)據(jù)指針,私有主機(jī)端線程指向原始指針不同的起始位置,并通過(guò)cudaMemcpyO函數(shù)從自己私有主機(jī)端線程的位置拷貝N/n個(gè)數(shù)據(jù)規(guī)模達(dá)到規(guī)模劃分的目的,其中N為矩陣的行數(shù),η為GPU的個(gè)數(shù);步驟S04,數(shù)據(jù)計(jì)算,根據(jù)矩陣相乘法則對(duì)η個(gè)GPU的矩陣進(jìn)行計(jì)算,OpenMP同步模塊控制所述GPU計(jì)算結(jié)果的輸出時(shí)間,通過(guò)ccudaDeviceSynchronizeO函數(shù)同步輸出數(shù)據(jù);步驟S05,數(shù)據(jù)合并,所述步驟S04中同步數(shù)據(jù)的數(shù)據(jù)通過(guò)GPU私有的設(shè)備端數(shù)據(jù)指針拷貝回私有主機(jī)端,在私有主機(jī)端進(jìn)行數(shù)據(jù)合并,服務(wù)端完成計(jì)算后通過(guò)socket通信給將計(jì)算結(jié)果傳遞給客戶端(虛擬機(jī))。
[0014]如圖2所示,步驟S03中GPU個(gè)數(shù)為4個(gè),分別為GPUO、GPUU GPU2和GPU3,所述矩陣為A、B、C和D,A*B+C*D數(shù)據(jù)分解包括以下步驟:
DGPU O執(zhí)行矩陣A的一半乘以B,GPU I執(zhí)行矩陣A的另一半乘以B,GPU 2執(zhí)行矩陣C的一半乘以D,GPU 3執(zhí)行矩陣C的另一半乘以D ;
2)0penMP同步模塊等待GPU0、GPU1、GPU2和GPU3的相乘運(yùn)算全部完成,將全部數(shù)據(jù)通ScudaMemcpyO函數(shù)拷貝到GPU O上,主機(jī)端校驗(yàn)結(jié)果的正確性。
[0015]如圖3所示,數(shù)據(jù)計(jì)算采用矩陣乘法計(jì)算,包括以下步驟:將A矩陣分為4個(gè)A/4(N/4*N),并分別與矩陣B相乘,分別得到4個(gè)AB/4矩陣,4個(gè)AB/4矩陣組合可以得到結(jié)果矩陣AB,以此方法分別計(jì)算GPUO、GPU1、GPU2和GPU3中矩陣相乘,AB矩陣為N*N矩陣。
[0016]圖4為A*B+C*D在在虛擬化環(huán)境多GPU與單GPU環(huán)境下的計(jì)算時(shí)間對(duì)比圖,圖示中,當(dāng)矩陣階數(shù)增大時(shí),單GPU運(yùn)算時(shí)間呈指數(shù)上升,耗時(shí)比較長(zhǎng),虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算,當(dāng)矩陣階數(shù)增大時(shí),耗時(shí)近似呈線性增加,效率高。
[0017]以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出:對(duì)于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
【權(quán)利要求】
1.虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法,其特征在于:包括以下步驟, 步驟S01,在服務(wù)端部署GPU虛擬化服務(wù)端組件,將在客戶端攔截的參數(shù)在本地執(zhí)行,即在物理機(jī)上執(zhí)行,物理機(jī)通過(guò)OpenMP在主機(jī)端開設(shè)和GPU個(gè)數(shù)相同的主機(jī)端線程,每個(gè)主機(jī)端線程負(fù)責(zé)控制一個(gè)GPU,通過(guò)編程接口函數(shù)將主機(jī)端線程的ID號(hào)同GPU的設(shè)備號(hào)對(duì)應(yīng),將GPU計(jì)算的對(duì)象定義為N*N矩陣計(jì)算; 步驟S02,在每個(gè)設(shè)備上為每個(gè)線程分配顯存,并分別啟動(dòng)內(nèi)核函數(shù); 步驟S03,數(shù)據(jù)分解,每個(gè)線程設(shè)置自己私有主機(jī)端和設(shè)備的數(shù)據(jù)指針,私有主機(jī)端線程指向原始指針不同的起始位置,并通過(guò)CUDA復(fù)制函數(shù)從自己私有主機(jī)端線程的位置拷貝N/n個(gè)數(shù)據(jù)達(dá)到規(guī)模劃分的目的,其中N為矩陣的行數(shù),η為GPU的個(gè)數(shù); 步驟S04,數(shù)據(jù)計(jì)算,根據(jù)矩陣相乘法則對(duì)η個(gè)GPU的矩陣進(jìn)行計(jì)算,OpenMP控制所述GPU計(jì)算結(jié)果的輸出時(shí)間,同步輸出數(shù)據(jù); 步驟S05,數(shù)據(jù)合并,所述步驟S04中同步數(shù)據(jù)的數(shù)據(jù)通過(guò)GPU私有的設(shè)備端數(shù)據(jù)指針拷貝回私有主機(jī)端,在私有主機(jī)端進(jìn)行數(shù)據(jù)合并,服務(wù)端完成計(jì)算后通過(guò)socket通信,將計(jì)算結(jié)果傳遞給客戶端。
2.根據(jù)權(quán)利要求1所述的虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法,其特征在于:所述步驟S03中GPU個(gè)數(shù)為4個(gè),分別為GPUO、GPU1、GPU2和GPU3,所述矩陣為A、B、C和D,A*B+C*D數(shù)據(jù)分解包括以下步驟: DGPU O執(zhí)行矩陣A的一半乘以B,GPU I執(zhí)行矩陣A的另一半乘以B,GPU 2執(zhí)行矩陣C的一半乘以D,GPU 3執(zhí)行矩陣C的另一半乘以D ; 2)0penMP同步模塊等待GPU0、GPU1、GPU2和GPU3的相乘運(yùn)算全部完成,將全部數(shù)據(jù)拷貝到GPU O上,主機(jī)端校驗(yàn)結(jié)果的正確性。
3.根據(jù)權(quán)利要求2所述的虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法,其特征在于:所述GPU1、GPU2和GPU3中的計(jì)算出的數(shù)據(jù)通過(guò)cudaMemcpyO函數(shù)拷貝到GPU O。
4.根據(jù)權(quán)利要求1或者2所述的虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法,其特征在于:所述數(shù)據(jù)計(jì)算采用矩陣乘法計(jì)算,包括以下步驟:將A矩陣分為4個(gè)A/4(N/4*N),并分別與矩陣B相乘,分別得到4個(gè)AB/4矩陣,4個(gè)AB/4矩陣組合可以得到結(jié)果矩陣AB,以此方法分別計(jì)算GPUO、GPU1、GPU2和GPU3中矩陣相乘。
5.根據(jù)權(quán)利要求1所述的虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法,其特征在于,所述編程接口函數(shù)為cudaSetDevice (cpu_thread_id)函數(shù)。
6.根據(jù)權(quán)利要求1所述的虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法,其特征在于,所述步驟S04同步通過(guò)ccudaDeviceSynchronize O函數(shù)完成。
7.根據(jù)權(quán)利要求1所述的虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法,其特征在于,所述步驟CUDA復(fù)制函數(shù)為cudaMemcpyO函數(shù)。
8.根據(jù)權(quán)利要求1所述的虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法,其特征在于,所述客戶端為虛擬機(jī)。
9.根據(jù)權(quán)利要求1所述的虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法,其特征在于,所述顯存大小依據(jù)需要計(jì)算的數(shù)據(jù)大小分配。
10.根據(jù)權(quán)利要求1所述的虛擬化環(huán)境下基于OpenMP的多GPU協(xié)同計(jì)算方法,其特征在于,所述內(nèi)核函數(shù)為用于計(jì)算矩陣相乘的內(nèi)核函數(shù)。
【文檔編號(hào)】G06F9/38GK103713938SQ201310695055
【公開日】2014年4月9日 申請(qǐng)日期:2013年12月17日 優(yōu)先權(quán)日:2013年12月17日
【發(fā)明者】秦謙, 袁家斌 申請(qǐng)人:江蘇名通信息科技有限公司