一種基于Kepler架構(gòu)的CUDA運(yùn)行時(shí)參數(shù)透明優(yōu)化方法
【專利摘要】本發(fā)明實(shí)施例提供了一種基于Kepler架構(gòu)的CUDA運(yùn)行時(shí)參數(shù)透明優(yōu)化選擇方法,涉及CUDA編程【技術(shù)領(lǐng)域】,可以節(jié)省核函數(shù)獲得性能優(yōu)化的配置運(yùn)行時(shí)參數(shù)所用時(shí)間。所述方法包括:后臺(tái)服務(wù)端解封截獲端發(fā)送過來的封裝后的調(diào)用請(qǐng)求,獲得核函數(shù)的運(yùn)行時(shí)參數(shù)信息;后臺(tái)服務(wù)端根據(jù)核函數(shù)的運(yùn)行時(shí)參數(shù)信息計(jì)算出核函數(shù)所需線程總數(shù),從而確定其所屬線程數(shù)等級(jí);然后根據(jù)所確定的線程數(shù)等級(jí)來修改線程塊的大小,進(jìn)而計(jì)算獲得修改后的線程塊數(shù)量和修改后的共享內(nèi)存大?。蛔詈?,后端服務(wù)器將修改后的核函數(shù)運(yùn)行時(shí)參數(shù)與核函數(shù)執(zhí)行部分發(fā)送給后臺(tái)服務(wù)端的CUDA運(yùn)行時(shí)層進(jìn)行執(zhí)行。
【專利說明】-種基于Kep I er架構(gòu)的CUDA運(yùn)行時(shí)參數(shù)透明優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及 CUDA (Compute Unified Device Architecture,統(tǒng)一計(jì)算設(shè)備架構(gòu))編 程【技術(shù)領(lǐng)域】,尤其涉及一種基于Kepler架構(gòu)的CUDA運(yùn)行時(shí)參數(shù)透明優(yōu)化方法。
【背景技術(shù)】
[0002] 目前CUDA核函數(shù)運(yùn)行時(shí)參數(shù)的設(shè)置、選取是通過程序員根據(jù)自己的經(jīng)驗(yàn)進(jìn)行設(shè) 置,并通過多次試驗(yàn)才能求得性能優(yōu)化的配置結(jié)果,故獲取CUDA程序性能優(yōu)化時(shí)進(jìn)行試配 需要花費(fèi)大量時(shí)間。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明的實(shí)施例提供一種基于Kepler架構(gòu)的CUDA核函數(shù)運(yùn)行時(shí)參數(shù)透明優(yōu)化方 法,可以節(jié)省獲得性能優(yōu)化所需的配置參數(shù)時(shí)間。
[0004] 為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
[0005] -種CUDA運(yùn)行時(shí)參數(shù)透明優(yōu)化選擇方法,包括:
[0006] CUDA運(yùn)行時(shí)截獲端截獲CUDA應(yīng)用對(duì)運(yùn)行時(shí)的調(diào)用請(qǐng)求,并將截獲到的所述調(diào)用 請(qǐng)求封裝傳遞給后臺(tái)服務(wù)端;
[0007] 所述后臺(tái)服務(wù)端解封所述截獲端發(fā)送過來的封裝后的調(diào)用請(qǐng)求,獲得核函數(shù)的運(yùn) 行時(shí)參數(shù)信息;其中,所述核函數(shù)的運(yùn)行時(shí)參數(shù)信息包括線程塊個(gè)數(shù)、線程塊大小、共享內(nèi) 存大??;
[0008] 所述后臺(tái)服務(wù)端根據(jù)Kepler架構(gòu)GPU的硬件特點(diǎn)將總線程數(shù)按由少到多劃分為 4個(gè)線程數(shù)等級(jí),并根據(jù)所述核函數(shù)的運(yùn)行時(shí)參數(shù)信息計(jì)算出核函數(shù)所需線程總數(shù),從而確 定其所屬線程數(shù)等級(jí);
[0009] 所述后臺(tái)服務(wù)端根據(jù)所確定的線程數(shù)等級(jí)來修改線程塊的大小,然后根據(jù)修改后 的線程塊的大小計(jì)算獲得修改后的線程塊數(shù)量和修改后的共享內(nèi)存大??;
[0010] 所述后端服務(wù)器將修改后的核函數(shù)運(yùn)行時(shí)參數(shù)與核函數(shù)執(zhí)行部分發(fā)送給后臺(tái)服 務(wù)端的CUDA運(yùn)行時(shí)層進(jìn)行執(zhí)行,其中,所述修改后的核函數(shù)運(yùn)行時(shí)參數(shù)包括修改后的線程 塊的大小、修改后的線程塊數(shù)量和修改后的共享內(nèi)存大小。
[0011] 上述技術(shù)方案提供的基于Kepler架構(gòu)的CUDA運(yùn)行時(shí)參數(shù)透明優(yōu)化方法,應(yīng)用 CUDA核函數(shù)運(yùn)行時(shí)參數(shù)選取與底層GPU架構(gòu)相結(jié)合來進(jìn)行的方法,通過截獲上層應(yīng)用對(duì)核 函數(shù)參數(shù)的設(shè)置,根據(jù)Kepler架構(gòu)GPU的特點(diǎn)對(duì)參數(shù)進(jìn)行對(duì)用戶透明的重新設(shè)置從而實(shí)現(xiàn) 程序性能的優(yōu)化。使CUDA應(yīng)用開發(fā)的運(yùn)行時(shí)參數(shù)優(yōu)化部分對(duì)開發(fā)人員變得透明,減少了對(duì) CUDA應(yīng)用優(yōu)化所需用時(shí),減輕了開發(fā)者的負(fù)擔(dān)。并在減少CUDA應(yīng)用開發(fā)、優(yōu)化耗時(shí)的同時(shí), 減少了開發(fā)所需能耗。
【專利附圖】
【附圖說明】
[0012] 圖1為本發(fā)明實(shí)施例提供的一種基于Kepler架構(gòu)的CUDA運(yùn)行時(shí)參數(shù)透明優(yōu)化選 擇方法流程示意圖;
[0013] 圖2為具體實(shí)現(xiàn)的系統(tǒng)結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0014] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述。顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0015] 本發(fā)明實(shí)施例提供了一種基于Kepler架構(gòu)的CUDA核函數(shù)運(yùn)行時(shí)參數(shù)透明優(yōu)化方 法,如圖1和圖2所示,所述方法包括以下步驟:
[0016] 101、CUDA運(yùn)行時(shí)截獲端截獲CUDA應(yīng)用對(duì)運(yùn)行時(shí)的調(diào)用請(qǐng)求,并將截獲到的所述 調(diào)用請(qǐng)求封裝傳遞給后臺(tái)服務(wù)端。
[0017] 102、后臺(tái)服務(wù)端解封所述截獲端發(fā)送過來的封裝后的調(diào)用請(qǐng)求,獲得核函數(shù)的運(yùn) 行時(shí)參數(shù)信息。
[0018] 所述核函數(shù)的運(yùn)行時(shí)參數(shù)信息包括線程塊個(gè)數(shù)、線程塊大小、共享內(nèi)存大小等信 息。
[0019] 根據(jù)所獲核函數(shù)線程塊個(gè)數(shù)和線程塊大小兩者相乘得到核函數(shù)所需線程總數(shù);根 據(jù)所獲核函數(shù)線程塊個(gè)數(shù)和共享內(nèi)存大小,兩者相乘獲得核函數(shù)所需總共共享內(nèi)存數(shù)。
[0020] 103、所述后臺(tái)服務(wù)端根據(jù)Ifepler架構(gòu)GPU的硬件特點(diǎn),將總線程數(shù)按由少到多劃 分為4個(gè)數(shù)量等級(jí),并根據(jù)所述核函數(shù)的運(yùn)行時(shí)參數(shù)信息計(jì)算出核函數(shù)所需線程總數(shù),從 而確定其所屬線程數(shù)等級(jí)。
[0021] 所述Kepler (開普勒)架構(gòu)GPU (Graphic Processing Unit,圖形處理器)的硬件 特點(diǎn)為:每個(gè)SM(Streaming Multiprocessor,多核流處理器)上最大可并行2048條線程、 最多可并行16個(gè)線程塊、每個(gè)線程塊最多可設(shè)置1024條線程、SM以一個(gè)線程束(32條線 程)作為調(diào)度執(zhí)行單位。
[0022] 根據(jù)Ifepler架構(gòu)GPU的硬件特點(diǎn)以及截獲的運(yùn)行時(shí)參數(shù)信息,將總線程數(shù)由少到 多劃分為4個(gè)線程數(shù)等級(jí)。假設(shè)SN代表GPU上SM的數(shù)量,可選的,線程數(shù)等級(jí)按由少到多 依次是第一等級(jí)(總線程數(shù)為〇_1536*SN),第二等級(jí)(總線程數(shù)為1536*SN-2048*SN),第 三等級(jí)(總線程數(shù)為2048*SN-3072*SN),第四等級(jí)(總線程數(shù)大于3072*SN)。
[0023] 104、所述后臺(tái)服務(wù)端根據(jù)所確定的線程數(shù)等級(jí)來優(yōu)化選擇線程塊的大小,然后根 據(jù)修改后的線程塊的大小計(jì)算獲得修改后的線程塊數(shù)量和修改后的共享內(nèi)存大小。
[0024] 經(jīng)實(shí)驗(yàn)結(jié)果顯示,當(dāng)設(shè)備占用率較大時(shí),線程塊大小取值為96、128、192、256時(shí)核 函數(shù)性能最優(yōu)。故,當(dāng)線程總數(shù)在第一等級(jí)范圍內(nèi)時(shí),修改線程塊大小為96 ;當(dāng)總線程數(shù)在 第二等級(jí)范圍內(nèi)時(shí),修改線程塊大小為128 ;當(dāng)總線程數(shù)在第三等級(jí)范圍內(nèi)時(shí),修改線程塊 大小為192 ;當(dāng)總線程數(shù)在第四等級(jí)范圍內(nèi)時(shí),修改線程塊大小為256。
[0025] 利用計(jì)算獲得的核函數(shù)所需線程總數(shù)除以修改后的線程塊大小,用其所得結(jié)果作 為修改后的線程塊數(shù)量;利用核函數(shù)原線程塊數(shù)量參數(shù)和原共享內(nèi)存參數(shù)相乘,其乘積結(jié) 果作為所需總共享內(nèi)存數(shù),再用所得總共享內(nèi)存數(shù)除以修改后的線程塊數(shù)量參數(shù),用其所 得結(jié)果作為修改后的共享內(nèi)存參數(shù)。
[0026] 105、所述后端服務(wù)器將修改后的核函數(shù)運(yùn)行時(shí)參數(shù)與核函數(shù)執(zhí)行部分發(fā)送給后 臺(tái)服務(wù)端的CUDA運(yùn)行時(shí)層進(jìn)行執(zhí)行。
[0027] 所述修改后的核函數(shù)運(yùn)行時(shí)參數(shù)包括修改后的線程塊的大小、修改后的線程塊數(shù) 量和修改后的共享內(nèi)存大小。
[0028] 如圖2所示,所述后臺(tái)服務(wù)端GPU驅(qū)動(dòng)層根據(jù)從運(yùn)行時(shí)層獲得的優(yōu)化后的信息進(jìn) 行執(zhí)行。然后,后臺(tái)服務(wù)端獲得優(yōu)化執(zhí)行后的結(jié)果后,并將結(jié)果發(fā)送給前端,再由前端將結(jié) 果提供給相應(yīng)的CUDA應(yīng)用。
[0029] 本申請(qǐng)?zhí)峁┑腃UDA運(yùn)行時(shí)參數(shù)透明優(yōu)化方法,應(yīng)用CUDA核函數(shù)運(yùn)行時(shí)參數(shù)選 取與底層GPU架構(gòu)相結(jié)合來進(jìn)行的方法,通過截獲上層應(yīng)用對(duì)核函數(shù)參數(shù)的設(shè)置,根據(jù) Kepler架構(gòu)GPU的特點(diǎn)對(duì)參數(shù)進(jìn)行對(duì)用戶透明的重新設(shè)置從而實(shí)現(xiàn)程序性能的優(yōu)化。使 CUDA應(yīng)用開發(fā)的運(yùn)行時(shí)參數(shù)優(yōu)化部分對(duì)開發(fā)人員變得透明,減少了對(duì)CUDA應(yīng)用優(yōu)化所需 用時(shí),減輕了開發(fā)者的負(fù)擔(dān)。并在減少CUDA應(yīng)用開發(fā)、優(yōu)化耗時(shí)的同時(shí),減少了開發(fā)所需能 耗。
[0030] 以上所述,僅為本發(fā)明的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何 熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵 蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1. 一種基于Kepler架構(gòu)的CUDA運(yùn)行時(shí)參數(shù)透明優(yōu)化方法,其特征在于,包括: CUDA運(yùn)行時(shí)截獲端截獲CUDA應(yīng)用對(duì)運(yùn)行時(shí)的調(diào)用請(qǐng)求,并將截獲到的所述調(diào)用請(qǐng)求 封裝傳遞給后臺(tái)服務(wù)端; 所述后臺(tái)服務(wù)端解封所述截獲端發(fā)送過來的封裝后的調(diào)用請(qǐng)求,獲得核函數(shù)的運(yùn)行時(shí) 參數(shù)信息;其中,所述核函數(shù)的運(yùn)行時(shí)參數(shù)信息包括線程塊個(gè)數(shù)、線程塊大小、共享內(nèi)存大 ?。? 所述后臺(tái)服務(wù)端根據(jù)Kepler架構(gòu)GPU的硬件特點(diǎn)將總線程數(shù)按由少到多劃分為4個(gè) 線程數(shù)等級(jí),并根據(jù)所述核函數(shù)的運(yùn)行時(shí)參數(shù)信息計(jì)算出核函數(shù)所需線程總數(shù),從而確定 其所屬線程數(shù)等級(jí); 所述后臺(tái)服務(wù)端根據(jù)所確定的線程數(shù)等級(jí)來修改線程塊的大小,然后根據(jù)修改后的線 程塊的大小計(jì)算獲得修改后的線程塊數(shù)量和修改后的共享內(nèi)存大??; 所述后端服務(wù)器將修改后的核函數(shù)運(yùn)行時(shí)參數(shù)與核函數(shù)執(zhí)行部分發(fā)送給后臺(tái)服務(wù)端 的CUDA運(yùn)行時(shí)層進(jìn)行執(zhí)行,其中,所述修改后的核函數(shù)運(yùn)行時(shí)參數(shù)包括修改后的線程塊的 大小、修改后的線程塊數(shù)量和修改后的共享內(nèi)存大小。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述后臺(tái)服務(wù)端根據(jù)Kepler架構(gòu)GPU的 硬件特點(diǎn)將總線程數(shù)按由少到多劃分為4個(gè)線程數(shù)等級(jí),包括 : 假設(shè)SN代表圖形處理器GPU上多核流處理器SM的數(shù)量,線程數(shù)等級(jí)按由少到多依次 是:第一等級(jí),總線程數(shù)為〇-1536*SN ;第二等級(jí),總線程數(shù)為1536*SN-2048*SN ;第三等級(jí), 總線程數(shù)為2048*SN-3072*SN ;第四等級(jí),總線程數(shù)大于3072*SN。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述后臺(tái)服務(wù)端根據(jù)所確定的線程數(shù)等 級(jí)來修改選擇線程塊的大小,然后根據(jù)修改后的線程塊的大小計(jì)算獲得修改后的線程塊數(shù) 量和修改后的共享內(nèi)存大小,包括: 當(dāng)所確定的線程數(shù)等級(jí)為第一等級(jí)時(shí),修改后的線程塊大小為96 ;當(dāng)所確定的線程數(shù) 等級(jí)為第二等級(jí)時(shí),修改后的線程塊大小為128 ;當(dāng)所確定的線程數(shù)等級(jí)為第三等級(jí)時(shí),修 改后的線程塊大小為192 ;當(dāng)所確定的線程數(shù)等級(jí)為第四等級(jí)時(shí),修改后的線程塊大小為 256 ; 利用計(jì)算獲得的核函數(shù)所需線程總數(shù)除以修改后的線程塊大小,用其所得結(jié)果作為修 改后的線程塊數(shù)量;利用核函數(shù)原線程數(shù)和原共享內(nèi)存大小相乘,其乘積結(jié)果作為所需總 共享內(nèi)存數(shù),再用所得總共享內(nèi)存數(shù)除以修改后的線程塊大小,用其所得結(jié)果作為修改后 的共享內(nèi)存大小。
【文檔編號(hào)】G06F9/445GK104102513SQ201410341238
【公開日】2014年10月15日 申請(qǐng)日期:2014年7月18日 優(yōu)先權(quán)日:2014年7月18日
【發(fā)明者】楊剛, 王嚴(yán), 杜三盛, 張策 申請(qǐng)人:西北工業(yè)大學(xué)