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