一種cpu+gpu協(xié)同計(jì)算并行框架的制作方法
【專(zhuān)利摘要】本發(fā)明提供了一種CPU+GPU協(xié)同計(jì)算并行框架,涉及多線(xiàn)程并行計(jì)算技術(shù)及基于互斥鎖實(shí)現(xiàn)線(xiàn)程間通信的技術(shù),其包括:在單節(jié)點(diǎn)內(nèi),主線(xiàn)程處理輸入?yún)?shù)并完成相應(yīng)初始化操作,然后創(chuàng)建1+N個(gè)計(jì)算控制線(xiàn)程,分別控制節(jié)點(diǎn)內(nèi)CPU設(shè)備和N個(gè)GPU設(shè)備,CPU控制線(xiàn)程再根據(jù)節(jié)點(diǎn)內(nèi)計(jì)算核數(shù)創(chuàng)建若干并行計(jì)算線(xiàn)程。啟用的GPU計(jì)算設(shè)備數(shù)和CPU計(jì)算線(xiàn)程數(shù)目可根據(jù)用戶(hù)需要手動(dòng)配置。本發(fā)明中,并行框架兼容純CPU架構(gòu)平臺(tái)和CPU+GPU混合架構(gòu)平臺(tái),并行框架內(nèi)的各CPU/GPU設(shè)備控制線(xiàn)程讀數(shù)據(jù)、計(jì)算、寫(xiě)數(shù)據(jù)操作均完全并行,大大提高了軟件的平臺(tái)適應(yīng)性、并行效率和整體運(yùn)行性能。
【專(zhuān)利說(shuō)明】—種CPU+GPU協(xié)同計(jì)算并行框架
[0001]【技術(shù)領(lǐng)域】
本發(fā)明涉及計(jì)算機(jī)高性能計(jì)算領(lǐng)域、科學(xué)計(jì)算領(lǐng)域,具體地說(shuō)是一種CPU+GPU協(xié)同計(jì)算并行框架。
【背景技術(shù)】
[0002]硬件系統(tǒng)在新技術(shù)的推動(dòng)下進(jìn)行著快速演進(jìn),表現(xiàn)出更好的性能、更低的價(jià)格,如傳統(tǒng)CPU從單核向多核直至眾核發(fā)展。隨著多核體系結(jié)構(gòu)處理器的普及,應(yīng)用軟件多線(xiàn)程并行處理方式將逐漸成為主流。
[0003]另外,GPU除了傳統(tǒng)的應(yīng)用(圖形顯示,多用于游戲)以外,由于其超強(qiáng)的浮點(diǎn)計(jì)算能力,越來(lái)越多地應(yīng)用在數(shù)學(xué)計(jì)算上,并且逐漸開(kāi)始進(jìn)入計(jì)算的主流。面向GPU編程的高級(jí)語(yǔ)言和開(kāi)發(fā)工具也開(kāi)始大量涌現(xiàn)。
[0004]那么,在多核CPU架構(gòu)基礎(chǔ)上擴(kuò)展GPU架構(gòu)設(shè)備的混合架構(gòu)計(jì)算平臺(tái),將越來(lái)越多地被應(yīng)用于密集計(jì)算領(lǐng)域,如高性能計(jì)算領(lǐng)域。
[0005]如何實(shí)現(xiàn)CPU+GPU協(xié)同計(jì)算,并且將CPU+GPU混合架構(gòu)平臺(tái)的計(jì)算性能發(fā)揮到極致,成為軟件工程師面臨的挑戰(zhàn)。
【發(fā)明內(nèi)容】
[0006]本發(fā)明就是針對(duì)這一挑戰(zhàn),在石油勘探行業(yè)所作的創(chuàng)新探索和實(shí)踐。
[0007]本發(fā)明實(shí)現(xiàn)CPU多核架構(gòu)處理器+GPU眾核架構(gòu)處理器的協(xié)同并行計(jì)算,大大提升了軟件的計(jì)算效能。
[0008]本發(fā)明提供了一種CPU+GPU協(xié)同計(jì)算并行框架,實(shí)現(xiàn)CPU多核架構(gòu)處理器+GPU眾核架構(gòu)處理器的協(xié)同并行計(jì)算。本發(fā)明涉及多線(xiàn)程并行計(jì)算技術(shù)及基于互斥鎖實(shí)現(xiàn)線(xiàn)程間通信的技術(shù),包括:在單節(jié)點(diǎn)內(nèi),主線(xiàn)程處理輸入?yún)?shù)并完成相應(yīng)初始化操作,然后創(chuàng)建1+N個(gè)計(jì)算控制線(xiàn)程,分別控制節(jié)點(diǎn)內(nèi)CPU設(shè)備和N個(gè)GPU設(shè)備,CPU控制線(xiàn)程再根據(jù)節(jié)點(diǎn)內(nèi)計(jì)算核數(shù)創(chuàng)建若干并行計(jì)算線(xiàn)程,主線(xiàn)程根據(jù)總體計(jì)算進(jìn)度計(jì)數(shù)變量更新進(jìn)度條,各控制線(xiàn)程完成各自計(jì)算任務(wù)后自行退出,主線(xiàn)程等待所有控制線(xiàn)程退出后,完成后續(xù)操作,如對(duì)多個(gè)輸出的數(shù)據(jù)體進(jìn)行拼接等,主線(xiàn)程退出。
[0009]協(xié)同計(jì)算并行框架,主線(xiàn)程初始化操作包括:掃描節(jié)點(diǎn)內(nèi)GPU計(jì)算設(shè)備數(shù)和型號(hào)、節(jié)點(diǎn)內(nèi)CPU計(jì)算核數(shù),并為每個(gè)GPU設(shè)備創(chuàng)建一個(gè)GPU屬性數(shù)據(jù)結(jié)構(gòu)對(duì)象。
[0010]協(xié)同計(jì)算并行框架,主線(xiàn)程為各控制線(xiàn)程分別創(chuàng)建一個(gè)輸出數(shù)據(jù)體控制句柄。
[0011]協(xié)同計(jì)算并行框架,CPU控制線(xiàn)程再創(chuàng)建M=SYSC0RE_NUM-N個(gè)細(xì)粒度并行計(jì)算線(xiàn)程,SYSC0RE_NUM為啟用的系統(tǒng)核數(shù),默認(rèn)為自動(dòng)檢測(cè)的系統(tǒng)核數(shù),N為啟動(dòng)的GPU設(shè)備數(shù)。
[0012]協(xié)同計(jì)算并行框架,各控制線(xiàn)程分別控制對(duì)應(yīng)的設(shè)備進(jìn)行計(jì)算,各控制線(xiàn)程完成一個(gè)單位的計(jì)算任務(wù)就更新一次總體計(jì)算進(jìn)度計(jì)數(shù)變量的值;
a)CPU控制線(xiàn)程根據(jù)啟用的節(jié)點(diǎn)內(nèi)計(jì)算核數(shù)創(chuàng)建若干更細(xì)粒度的并行計(jì)算線(xiàn)程;CPU端各細(xì)粒度并行計(jì)算線(xiàn)程采用互斥鎖的方式通信,并依此竟?fàn)幱?jì)算任務(wù),實(shí)現(xiàn)動(dòng)態(tài)負(fù)載均衡;
b)GPU控制線(xiàn)程控制一個(gè)GPU計(jì)算設(shè)備,負(fù)責(zé)讀數(shù)據(jù)、管理該GPU計(jì)算、輸出結(jié)果數(shù)據(jù);
c)各控制線(xiàn)程采用動(dòng)態(tài)負(fù)載均衡方式,即CPU控制線(xiàn)程和N個(gè)GPU控制線(xiàn)程根據(jù)計(jì)算能力強(qiáng)弱,通過(guò)互斥鎖竟?fàn)幱?jì)算任務(wù);
d)各控制線(xiàn)程使用線(xiàn)程化讀、寫(xiě)接口,分別輸出至一個(gè)獨(dú)立的數(shù)據(jù)體,每個(gè)數(shù)據(jù)體都對(duì)應(yīng)一個(gè)獨(dú)立的頭文件,頭文件描述了數(shù)據(jù)體的基本屬性;
e)各控制線(xiàn)程完成各自的計(jì)算任務(wù)后自行退出。
[0013]協(xié)同計(jì)算并行框架,總體計(jì)算進(jìn)度計(jì)數(shù)變量為各控制線(xiàn)程共享的變量,且通過(guò)互斥鎖加以保護(hù)。
[0014]協(xié)同計(jì)算并行框架,主線(xiàn)程等待所有控制線(xiàn)程退出后,完成的后續(xù)操作包括:對(duì)多個(gè)輸出的數(shù)據(jù)體進(jìn)行拼接、銷(xiāo)毀控制線(xiàn)程、銷(xiāo)毀進(jìn)度條、關(guān)閉數(shù)據(jù)體控制句柄、輸出作業(yè)日
士坐
;ll> "Tj- o
[0015]協(xié)同計(jì)算并行框架,對(duì)多個(gè)輸出數(shù)據(jù)體進(jìn)行拼接,并沒(méi)有生成真正的數(shù)據(jù)體,而只是創(chuàng)建了一個(gè)最終輸出數(shù)據(jù)體的頭文件,該頭文件描述了數(shù)據(jù)體的名字及基本屬性,并指向其包含的多個(gè)數(shù)據(jù)體的頭文件。
[0016]啟用的GPU計(jì)算設(shè)備數(shù)和CPU計(jì)算線(xiàn)程數(shù)目可根據(jù)用戶(hù)需要手動(dòng)配置。本發(fā)明中,并行框架兼容純CPU架構(gòu)平臺(tái)和CPU+GPU混合架構(gòu)平臺(tái),并行框架內(nèi)的各CPU/GPU控制線(xiàn)程讀數(shù)據(jù)、計(jì)算、寫(xiě)數(shù)據(jù)操作均完全并行,大大提高了軟件的平臺(tái)適應(yīng)性、并行效率和整體運(yùn)行性能。
[0017]本發(fā)明的有益效果是:本發(fā)明實(shí)現(xiàn)了 CPU多核架構(gòu)計(jì)算設(shè)備和GPU眾核架構(gòu)計(jì)算設(shè)備的協(xié)同并行計(jì)算,并行框架兼容純CPU架構(gòu)平臺(tái)和CPU+GPU混合架構(gòu)平臺(tái),并行框架內(nèi)的各CPU/GPU設(shè)備控制線(xiàn)程讀數(shù)據(jù)、計(jì)算、寫(xiě)數(shù)據(jù)操作均完全并行,大大提高了軟件的平臺(tái)適應(yīng)性、并行效率和整體運(yùn)行性能。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0018]附圖1是CPU和GPU設(shè)備協(xié)同并行計(jì)算的不意圖;
附圖2是CPU和N個(gè)GPU計(jì)算設(shè)備的任務(wù)劃分示意圖。
【具體實(shí)施方式】
[0019]本發(fā)明實(shí)現(xiàn)CPU多核架構(gòu)處理器+GPU眾核架構(gòu)處理器的協(xié)同并行計(jì)算。
[0020]本發(fā)明的目的在于提供一種CPU+GPU協(xié)同計(jì)算并行框架,利用當(dāng)前主流的多核CPU計(jì)算設(shè)備和GPU架構(gòu)設(shè)備協(xié)同并行計(jì)算,最大化提升硬件計(jì)算資源利用率,提升軟件運(yùn)行效能的方法。
[0021]為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清晰,下面結(jié)合文字描述和實(shí)施例,對(duì)本發(fā)明作以下詳細(xì)說(shuō)明。
[0022]軟件功能及運(yùn)行流程概述:
1.主線(xiàn)程參數(shù)預(yù)處理;
2.主線(xiàn)程掃描GPU設(shè)備型號(hào)和數(shù)量,并為每個(gè)GPU設(shè)備創(chuàng)建結(jié)構(gòu)化設(shè)備屬性(Handle);3.主線(xiàn)程進(jìn)行其它初始化操作,如創(chuàng)建進(jìn)度條、創(chuàng)建輸出數(shù)據(jù)體控制句柄等;
4.主線(xiàn)程根據(jù)輸入?yún)?shù),確定啟用的GPU設(shè)備數(shù)N、CPU計(jì)算核數(shù)M;
5.主線(xiàn)程初始化控制線(xiàn)程參數(shù)數(shù)組;
6.主線(xiàn)程為CPU設(shè)備創(chuàng)建I個(gè)控制線(xiàn)程,為各GPU設(shè)備分別創(chuàng)建一個(gè)GPU控制線(xiàn)程;
7.各控制線(xiàn)程分別控制對(duì)應(yīng)的設(shè)備進(jìn)行計(jì)算,各控制線(xiàn)程完成一個(gè)單位的計(jì)算任務(wù)就更新一次總體計(jì)算進(jìn)度計(jì)數(shù)變量的值;
a)CPU控制線(xiàn)程管理CPU設(shè)備,根據(jù)啟用的CPU計(jì)算核數(shù)(默認(rèn)為自動(dòng)檢測(cè)的系統(tǒng)核數(shù))創(chuàng)建更細(xì)粒度的并行計(jì)算線(xiàn)程,這些細(xì)粒度并行計(jì)算線(xiàn)程通過(guò)互斥鎖竟?fàn)幱?jì)算任務(wù);
b)一個(gè)GPU控制線(xiàn)程管理一個(gè)GPU設(shè)備,負(fù)責(zé)源數(shù)據(jù)由內(nèi)存拷貝至GPU顯存、啟動(dòng)GPU計(jì)算Kernel函數(shù)、結(jié)果數(shù)據(jù)由GPU顯存拷貝至內(nèi)存等操作;
c)各控制線(xiàn)程通過(guò)共享的互斥鎖竟?fàn)幱?jì)算任務(wù),實(shí)現(xiàn)動(dòng)態(tài)負(fù)載均衡;
d)各控制線(xiàn)程均獨(dú)自進(jìn)行讀取源數(shù)據(jù)、源數(shù)據(jù)預(yù)處理、計(jì)算、輸出結(jié)果數(shù)據(jù)等操作,各控制線(xiàn)程完全并行,分別輸出獨(dú)立的結(jié)果文件;
e)各控制線(xiàn)程完成各自的計(jì)算任務(wù)后自行退出;
8.主線(xiàn)程依據(jù)總體計(jì)算進(jìn)度計(jì)數(shù)變量的值更新進(jìn)度條;
9.主線(xiàn)程待所有控制線(xiàn)程退出后,完成后繼操作;
a)對(duì)各控制線(xiàn)程輸出的數(shù)據(jù)體進(jìn)行拼接;
b)銷(xiāo)毀控制線(xiàn)程、銷(xiāo)毀進(jìn)度條、關(guān)閉數(shù)據(jù)體控制句柄、輸出作業(yè)日志等;
10.主線(xiàn)程退出,程序退出;
性能測(cè)試及分析
將該方法應(yīng)用于某個(gè)典型的石油行業(yè)應(yīng)用軟件模塊CPU+GPU協(xié)同計(jì)算并行程序開(kāi)發(fā)項(xiàng)目,并利用真實(shí)數(shù)據(jù)進(jìn)行性能測(cè)試。
[0023]I)測(cè)試環(huán)境及測(cè)試數(shù)據(jù)
【權(quán)利要求】
1.一種CPU+GPU協(xié)同計(jì)算并行框架,其特征在于,包括: 主線(xiàn)程處理輸入?yún)?shù)并完成相應(yīng)初始化操作; 主線(xiàn)程創(chuàng)建1+N個(gè)并行的控制線(xiàn)程,分別控制節(jié)點(diǎn)內(nèi)CPU設(shè)備和N個(gè)GPU設(shè)備; 主線(xiàn)程根據(jù)總體計(jì)算進(jìn)度計(jì)數(shù)變量更新進(jìn)度條; 各控制線(xiàn)程完成各自計(jì)算任務(wù)后自行退出; 主線(xiàn)程等待所有控制線(xiàn)程退出后,完成后續(xù)操作,如對(duì)多個(gè)輸出的數(shù)據(jù)體進(jìn)行拼接等; 主線(xiàn)程退出。
2.根據(jù)權(quán)利要求1所述的并行框架,其特征在于,主線(xiàn)程初始化操作包括:掃描節(jié)點(diǎn)內(nèi)GPU計(jì)算設(shè)備數(shù)和型號(hào)、節(jié)點(diǎn)內(nèi)CPU計(jì)算核數(shù),并為每個(gè)GPU設(shè)備創(chuàng)建一個(gè)GPU屬性數(shù)據(jù)結(jié)構(gòu)對(duì)象。
3.根據(jù)權(quán)利要求1所述的并行框架,其特征在于,主線(xiàn)程為各控制線(xiàn)程分別創(chuàng)建一個(gè)輸出數(shù)據(jù)體控制句柄。
4.根據(jù)權(quán)利要求3所述的并行框架,其特征在于,CPU控制線(xiàn)程再創(chuàng)建M=SYSCORE_NUM-N個(gè)細(xì)粒度并行計(jì)算線(xiàn)程,SYSCORE_NUM為啟用的系統(tǒng)核數(shù),默認(rèn)為自動(dòng)檢測(cè)的系統(tǒng)核數(shù),N為啟動(dòng)的GPU設(shè)備數(shù)。
5.根據(jù)權(quán)利要求1所述的并行框架,其特征在于,各控制線(xiàn)程分別控制對(duì)應(yīng)的設(shè)備進(jìn)行計(jì)算,各控制線(xiàn)程完成一個(gè)單位的計(jì)算任務(wù)就更新一次總體計(jì)算進(jìn)度計(jì)數(shù)變量的值; a)CPU控制線(xiàn)程根據(jù)啟用的節(jié)點(diǎn)內(nèi)計(jì)算核數(shù)創(chuàng)建若干更細(xì)粒度的并行計(jì)算線(xiàn)程;CPU端各細(xì)粒度并行計(jì)算線(xiàn)程采用互斥鎖的方式通信,并依此竟?fàn)幱?jì)算任務(wù),實(shí)現(xiàn)動(dòng)態(tài)負(fù)載均衡; b)GPU控制線(xiàn)程控制一個(gè)GPU計(jì)算設(shè)備,負(fù)責(zé)讀數(shù)據(jù)、管理該GPU計(jì)算、輸出結(jié)果數(shù)據(jù); c)各控制線(xiàn)程采用動(dòng)態(tài)負(fù)載均衡方式,即CPU控制線(xiàn)程和N個(gè)GPU控制線(xiàn)程根據(jù)計(jì)算能力強(qiáng)弱,通過(guò)互斥鎖竟?fàn)幱?jì)算任務(wù); d)各控制線(xiàn)程使用線(xiàn)程化讀、寫(xiě)接口,分別輸出至一個(gè)獨(dú)立的數(shù)據(jù)體,每個(gè)數(shù)據(jù)體都對(duì)應(yīng)一個(gè)獨(dú)立的頭文件,頭文件描述了數(shù)據(jù)體的基本屬性; e)各控制線(xiàn)程完成各自的計(jì)算任務(wù)后自行退出。
6.根據(jù)權(quán)利要求1所述的并行框架,其特征在于,總體計(jì)算進(jìn)度計(jì)數(shù)變量為各控制線(xiàn)程共享的變量,且通過(guò)互斥鎖加以保護(hù)。
7.根據(jù)權(quán)利要求1所述的并行框架,其特征在于,主線(xiàn)程等待所有控制線(xiàn)程退出后,完成的后續(xù)操作包括:對(duì)多個(gè)輸出的數(shù)據(jù)體進(jìn)行拼接、銷(xiāo)毀控制線(xiàn)程、銷(xiāo)毀進(jìn)度條、關(guān)閉數(shù)據(jù)體控制句柄、輸出作業(yè)日志等。
8.根據(jù)權(quán)利要求7所述的并行框架,其特征在于,對(duì)多個(gè)輸出數(shù)據(jù)體進(jìn)行拼接,并沒(méi)有生成真正的數(shù)據(jù)體,而只是創(chuàng)建了一個(gè)最終輸出數(shù)據(jù)體的頭文件,該頭文件描述了數(shù)據(jù)體的名字及基本屬性,并指向其包含的多個(gè)數(shù)據(jù)體的頭文件。
【文檔編號(hào)】G06F9/50GK103617085SQ201310579257
【公開(kāi)日】2014年3月5日 申請(qǐng)日期:2013年11月19日 優(yōu)先權(quán)日:2013年11月19日
【發(fā)明者】吳慶, 張廣勇, 吳韶華, 王婭娟 申請(qǐng)人:浪潮電子信息產(chǎn)業(yè)股份有限公司