本發(fā)明屬于計算機(jī)領(lǐng)域,涉及一種基于gpu數(shù)據(jù)復(fù)用的核外模板計算方法及裝置。
背景技術(shù):
1、科學(xué)技術(shù)的發(fā)展對計算能力有著巨大的、不斷增長的需求。美國hpcc計劃中提到的超級挑戰(zhàn)問題,其計算需求超過了當(dāng)前最快的超級計算機(jī)的計算能力。這些問題來自物理、化學(xué)、醫(yī)藥等領(lǐng)域。其應(yīng)用問題除了要求提供超強(qiáng)的計算能力,也要求提供超大的存儲器。典型的超級挑戰(zhàn)問題每運(yùn)行一次需要處理1g字節(jié)到4t字節(jié)的數(shù)據(jù)量?,F(xiàn)有的計算機(jī)主存容量遠(yuǎn)遠(yuǎn)不能滿足處理大數(shù)據(jù)量的應(yīng)用問題的要求,為在現(xiàn)有的計算機(jī)上解決這些應(yīng)用問題,通常將數(shù)據(jù)保存在外存設(shè)備上,通過模板進(jìn)行多次計算,該方法也就是所提出的模板計算方法。
2、模板計算是計算機(jī)科學(xué)與計算中一類重要應(yīng)用,其原理是通過對數(shù)組的所有元素應(yīng)用固定的計算模式來迭代更新輸入數(shù)組。模板計算廣泛應(yīng)用于地球物理模擬、流體力學(xué)、圖像處理等領(lǐng)域。由于計算時間和內(nèi)存消耗隨著輸入數(shù)組的大小線性增長,因此模板計算的并行性實(shí)現(xiàn)非常重要。圖形處理單元gpu被認(rèn)為是并行模板代碼最有效的架構(gòu)。gpu擁有數(shù)千個內(nèi)核和比cpu高5~10倍的內(nèi)存帶寬,為計算密集型和內(nèi)存密集型的科學(xué)問題提供強(qiáng)大的解決方案。盡管如此,gpu擁有相對有限的內(nèi)存容量,通常為幾gb到幾十gb之間。因此,gpu無法直接加速在超過內(nèi)存容量的數(shù)據(jù)集上操作的大規(guī)模模板代碼。
3、目前已經(jīng)有許多研究利用時間阻塞和區(qū)域共享等技術(shù)來解決核外方法性能受到cpu和gpu之間傳輸開銷的限制的問題?,F(xiàn)有的關(guān)于核外模板計算的研究主要集中在規(guī)避cpu和gpu之間的冗余傳輸。然而,由于環(huán)境的變化或者模板計算過程配置的改變,核外模板計算的瓶頸可以從數(shù)據(jù)傳輸轉(zhuǎn)移到gpu內(nèi)核的執(zhí)行。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本發(fā)明的目的在于提供一種基于gpu數(shù)據(jù)復(fù)用的核外模板計算方法及裝置。通過同時復(fù)用gpu片外存儲器和片上內(nèi)存的數(shù)據(jù)來優(yōu)化核外模板計算方案,顯著提高內(nèi)核執(zhí)行性能,同時減少了cpu和gpu之間的數(shù)據(jù)傳輸時間;首先,子模塊之間的重疊區(qū)域在gpu片外存儲器中共享以消除cpu到gpu之間的數(shù)據(jù)冗余傳輸;其次,有意引入gpu端片外內(nèi)存級的冗余計算,將內(nèi)核執(zhí)行與區(qū)域共享解耦,從而實(shí)現(xiàn)gpu片上內(nèi)存的數(shù)據(jù)重用,在提高了內(nèi)核執(zhí)行性能的同時也減少了cpu到gpu之間的數(shù)據(jù)傳輸時間。
2、為達(dá)到上述目的,本發(fā)明提供如下技術(shù)方案:
3、在本發(fā)明的第一方面,本發(fā)明提供了一種基于gpu數(shù)據(jù)復(fù)用的核外模板計算裝置,包括cpu端和gpu端;
4、所述cpu端,具有主機(jī)內(nèi)存,用于放置模板計算數(shù)據(jù),將所述模板計算數(shù)據(jù)劃分為多個子模塊數(shù)據(jù),將所述子模塊數(shù)據(jù)發(fā)送至gpu端,以及接收來自于gpu端的多個子模塊數(shù)據(jù)的計算結(jié)果;
5、所述gpu端,具有片外內(nèi)存和片上內(nèi)存;所述片外內(nèi)存包括全局內(nèi)存和緩沖區(qū);所述片上內(nèi)存包括多個流計算單元和一個l2緩存,其中每個流計算單元包括由多個寄存器構(gòu)成的寄存器組、多個核心、多個特殊功能單元以及l(fā)1緩存/共享內(nèi)存;每個核心一次執(zhí)行一個線程得到每個子模塊數(shù)據(jù)的計算結(jié)果,每個線程擁有多個寄存器,,每個線程獨(dú)享所述多個寄存器內(nèi)的子模塊數(shù)據(jù);l1緩存/共享內(nèi)存內(nèi)的子模塊數(shù)據(jù)由每個流計算單元中每個線程塊內(nèi)的所有線程共享,l2緩存內(nèi)的子模塊數(shù)據(jù)可被所有流計算單元訪問。
6、進(jìn)一步的,所述子模塊數(shù)據(jù)的劃分?jǐn)?shù)量由所述子模塊數(shù)據(jù)的傳輸時間、所述子模塊數(shù)據(jù)的執(zhí)行計算時間、所述子模塊數(shù)據(jù)的容量與gpu內(nèi)存容量確定。
7、進(jìn)一步的,所述gpu端的片上內(nèi)存的寄存器和l1緩存/共享內(nèi)存用于存儲傳輸?shù)絞pu端的片上內(nèi)存的子模塊數(shù)據(jù)執(zhí)行每一步計算的中間結(jié)果,所述gpu端的片外內(nèi)存用于存儲傳輸?shù)絞pu端片上內(nèi)存的子模塊數(shù)據(jù)執(zhí)行計算完成后的最終結(jié)果。
8、進(jìn)一步的,所述gpu端的全局內(nèi)存用于從第一緩沖區(qū)讀取當(dāng)前子模塊數(shù)據(jù)的重疊數(shù)據(jù)和從cpu端接收的子模塊數(shù)據(jù),并組成完整的計算區(qū)域;所述gpu端的第一緩沖區(qū)用于存儲各個當(dāng)前子模塊數(shù)據(jù)與前一子模塊數(shù)據(jù)的重疊數(shù)據(jù);所述gpu端的第二緩沖區(qū)用于存儲當(dāng)前子模塊數(shù)據(jù)與下一個子模塊數(shù)據(jù)的重疊數(shù)據(jù);其中,所述重疊區(qū)域由前一子模塊數(shù)據(jù)和當(dāng)前子模塊數(shù)據(jù)確定。
9、在本發(fā)明的第二方面,本發(fā)明還提供了一種基于gpu數(shù)據(jù)復(fù)用的核外模板計算方法,包括以下步驟:
10、根據(jù)cpu端與gpu端的內(nèi)存容量、模板計算數(shù)據(jù)的傳輸時間以及執(zhí)行計算時間的限制,將所述模板計算數(shù)據(jù)劃分為多個子模塊數(shù)據(jù);
11、根據(jù)相鄰子模塊數(shù)據(jù)之間的數(shù)據(jù)關(guān)聯(lián)性,復(fù)用gpu端的片外內(nèi)存讀取當(dāng)前子模塊數(shù)據(jù);
12、根據(jù)每個子模塊數(shù)據(jù)內(nèi)部的數(shù)據(jù)關(guān)聯(lián)性,復(fù)用gpu端的片上內(nèi)存迭代執(zhí)行計算當(dāng)前子模塊數(shù)據(jù)。
13、進(jìn)一步的,所述根據(jù)cpu端與gpu端的內(nèi)存容量、模板計算數(shù)據(jù)的傳輸時間以及執(zhí)行計算時間的限制,將所述模板計算數(shù)據(jù)劃分為多個子模塊數(shù)據(jù)具體包括:
14、所述子模塊數(shù)據(jù)的傳輸時間不小于所述子模塊數(shù)據(jù)在gpu端的片上內(nèi)存的執(zhí)行計算時間;
15、所述子模塊數(shù)據(jù)的光暈區(qū)域的容量小于所述子模塊數(shù)據(jù)的容量;所述子模塊數(shù)據(jù)的光暈區(qū)域由模板計算的模板半徑確定;
16、所述子模塊數(shù)據(jù)的光暈區(qū)域的容量以及所述子模塊數(shù)據(jù)的容量之和不大于gpu端的全局內(nèi)存容量;
17、所述子模塊數(shù)據(jù)的數(shù)量大于gpu端的工作隊(duì)列數(shù)量。
18、進(jìn)一步的,所述根據(jù)相鄰子模塊數(shù)據(jù)之間的數(shù)據(jù)關(guān)聯(lián)性,復(fù)用gpu端的片外內(nèi)存讀取當(dāng)前子模塊數(shù)據(jù)具體包括以下步驟:
19、從cpu端的主機(jī)內(nèi)存讀取當(dāng)前子模塊數(shù)據(jù)的非重疊區(qū)域,傳送到gpu端的全局內(nèi)存中;
20、從gpu端的第一緩沖區(qū)中讀取當(dāng)前子模塊數(shù)據(jù)與前一子模塊數(shù)據(jù)的重疊數(shù)據(jù);
21、在gpu端的全局內(nèi)存上讀取復(fù)用當(dāng)前子模塊數(shù)據(jù)的重疊數(shù)據(jù)和非重疊數(shù)據(jù),確定出當(dāng)前子模塊數(shù)據(jù)的計算區(qū)域,并將當(dāng)前子模塊數(shù)據(jù)與下一子模塊數(shù)據(jù)的重疊數(shù)據(jù)寫入gpu端的第二緩沖區(qū);
22、在gpu端的片外內(nèi)存上將當(dāng)前子模塊數(shù)據(jù)的計算區(qū)域傳輸至gpu端的片上內(nèi)存;
23、在gpu端的片上內(nèi)存對當(dāng)前子模塊數(shù)據(jù)的計算區(qū)域執(zhí)行計算,得到當(dāng)前子模塊數(shù)據(jù)的計算結(jié)果;
24、在gpu端的片上內(nèi)存將當(dāng)前子模塊數(shù)據(jù)的計算結(jié)果返回給gpu端的片外內(nèi)存。
25、進(jìn)一步的,所述根據(jù)每個子模塊數(shù)據(jù)內(nèi)部的數(shù)據(jù)關(guān)聯(lián)性,復(fù)用gpu端的片上內(nèi)存執(zhí)行計算當(dāng)前子模塊數(shù)據(jù)具體包括以下步驟:
26、確定出每個子模塊數(shù)據(jù)在gpu端的片外內(nèi)存和片上內(nèi)存的往返總數(shù);
27、gpu端的片外內(nèi)存根據(jù)當(dāng)前往返次數(shù)調(diào)整子模塊數(shù)據(jù)的計算區(qū)域;
28、gpu端的片外內(nèi)存將調(diào)整后的子模塊數(shù)據(jù)的計算區(qū)域傳輸至gpu端的片上內(nèi)存;
29、gpu端的片上內(nèi)存復(fù)用執(zhí)行計算調(diào)整后的子模塊數(shù)據(jù)的計算區(qū)域,得到每個子模塊數(shù)據(jù)的每個計算區(qū)域的計算結(jié)果;
30、gpu端的片上內(nèi)存將子模塊數(shù)據(jù)的每個計算區(qū)域的計算結(jié)果存儲在gpu端的片上內(nèi)存的寄存器和l1緩存/共享內(nèi)存中;
31、gpu端的片上內(nèi)存將子模塊數(shù)據(jù)的所有計算區(qū)域的計算結(jié)果傳輸至gpu端的片外內(nèi)存。
32、本發(fā)明的有益效果在于:本發(fā)明有意引入gpu片外數(shù)據(jù)的冗余計算,將內(nèi)核執(zhí)行與區(qū)域共享解耦,協(xié)同復(fù)用gpu片上和片外的數(shù)據(jù),顯著提高gpu內(nèi)核執(zhí)行性能,同時減少了cpu和gpu之間的數(shù)據(jù)傳輸時間。
33、本發(fā)明的其他優(yōu)點(diǎn)和特征在某種程度上將在下面的說明書中進(jìn)行闡述,并且在某種程度上,基于對下文的考察研究對本領(lǐng)域技術(shù)人員而言將是顯而易見的,或者可以從本發(fā)明的實(shí)踐中獲得教導(dǎo)。