亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種多核環(huán)境下OpenMP任務(wù)并行的優(yōu)化方法

文檔序號(hào):6523464閱讀:838來(lái)源:國(guó)知局
一種多核環(huán)境下OpenMP任務(wù)并行的優(yōu)化方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種多核環(huán)境下OpenMP任務(wù)并行的優(yōu)化方法,主要是通過(guò)自適應(yīng)任務(wù)粒度控制的方式幫助程序員控制好任務(wù)粒度,來(lái)優(yōu)化任務(wù)并行,任務(wù)粒度是影響細(xì)粒度任務(wù)并行程序性能的一個(gè)重要因素。自適應(yīng)任務(wù)粒度控制包括:1)幫助優(yōu)先與串行化執(zhí)行的自適應(yīng)選?。?)限制細(xì)粒度任務(wù)的創(chuàng)建。在需要并行任務(wù)時(shí)采用幫助優(yōu)先策略,任務(wù)數(shù)足夠時(shí)采用串行化執(zhí)行策略。設(shè)置了可以自動(dòng)調(diào)節(jié)大小的閾值深度,用來(lái)限制細(xì)粒度任務(wù)的創(chuàng)建,若任務(wù)的深度大于閾值深度,則串行化執(zhí)行。本發(fā)明能夠自適應(yīng)地控制好任務(wù)粒度,性能上和程序員手動(dòng)控制的結(jié)果相接近,通過(guò)自適應(yīng)的方式減輕了程序員的負(fù)擔(dān),并且還能節(jié)省內(nèi)存。
【專(zhuān)利說(shuō)明】—種多核環(huán)境下OpenMP任務(wù)并行的優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計(jì)算機(jī)并行編程模型領(lǐng)域,更具體地,涉及一種多核環(huán)境下OpenMP任務(wù)并行的優(yōu)化方法。
【背景技術(shù)】
[0002]由于功耗等方面的限制,僅僅通過(guò)提高主頻來(lái)獲取免費(fèi)午餐的時(shí)代已經(jīng)過(guò)去,多核技術(shù)已經(jīng)成為時(shí)代的主流,但同時(shí)也提高了編寫(xiě)程序的難度,于是一些并行編程模型被廣泛使用,OpenMP便是其中重要一員。
[0003]OpenMP原先主要用于處理以大數(shù)組為基礎(chǔ)的比較規(guī)則的并行應(yīng)用,但隨著實(shí)際中應(yīng)用的越來(lái)越復(fù)雜,非規(guī)則并行應(yīng)用越來(lái)越多,如鏈表、樹(shù)及圖方面的一些應(yīng)用以及一些遞歸應(yīng)用,為此0penMP3.0引入了 “任務(wù)并行”,這是一種以任務(wù)為中心而非以線程為中心的并行程序編程方式,程序員可以使用并行任務(wù)編譯指導(dǎo)語(yǔ)句“#pragma omp task”來(lái)表示這是一個(gè)可并行任務(wù)。任務(wù)并行已經(jīng)廣泛使用于Cilk, Cilk++,Intel TBB, Intel CilkPlus, X10, Microsoft TPL等之中。任務(wù)并行編程模型屬于細(xì)粒度并行,用戶(hù)只需把應(yīng)用程序劃分出大量細(xì)粒度任務(wù),以后如何執(zhí)行則交給運(yùn)行時(shí)決定。
[0004]對(duì)于細(xì)粒度任務(wù)并行程序,控制好任務(wù)粒度至關(guān)重要。任務(wù)粒度問(wèn)題簡(jiǎn)而言之就是決定程序員描述的一個(gè)可并行任務(wù)在運(yùn)行時(shí)具體應(yīng)該并行地執(zhí)行還是應(yīng)該串行地執(zhí)行。因?yàn)槿舳疾⑿械貓?zhí)行會(huì)創(chuàng)建過(guò)多的細(xì)粒度并行任務(wù),產(chǎn)生大量的任務(wù)創(chuàng)建開(kāi)銷(xiāo);但如果只創(chuàng)建少量的粒度并行任務(wù),容易導(dǎo)致造成負(fù)載不平衡。合適的任務(wù)粒度是在保持并行度的情況下盡量降低任務(wù)創(chuàng)建的開(kāi)銷(xiāo)。
[0005]控制好任務(wù)粒度雖然十分重要,但卻是一件是十分困難的事情。一些程序在輸入不同的情況下其合適的粒度便不同,另外對(duì)于一些不規(guī)則的程序,它在何時(shí)會(huì)產(chǎn)生并行任務(wù)、產(chǎn)生多少并行任務(wù)以及并行任務(wù)的計(jì)算量等都是很難預(yù)測(cè)的,因此很難決定一個(gè)任務(wù)是否應(yīng)該被創(chuàng)建為并行任務(wù)。目前GCC并沒(méi)有在OpenMP運(yùn)行時(shí)庫(kù)中幫助程序員自動(dòng)地控制任務(wù)粒度,這便加重了程序員的負(fù)擔(dān),對(duì)于非規(guī)則的程序,程序員手動(dòng)控制的難度很大,過(guò)大或過(guò)小都會(huì)嚴(yán)重降低程序的性能。目前在其他任務(wù)并行編程模型上有一些控制任務(wù)粒度的研究,一些研究采用手動(dòng)剪枝(cut-off)的策略,但只可以由并行任務(wù)轉(zhuǎn)串行執(zhí)行,卻不能由串行執(zhí)行轉(zhuǎn)并行任務(wù)。也有自適應(yīng)的方法,但各自存在一些問(wèn)題,如只適合于二叉樹(shù)的應(yīng)用,不適合于多叉樹(shù);并未達(dá)到完全的自適應(yīng),并行和串行最多只能切換兩次,容易出現(xiàn)負(fù)載不均衡;不適合于OpenMP等問(wèn)題。

【發(fā)明內(nèi)容】

[0006]針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種多核環(huán)境下OpenMP任務(wù)并行的優(yōu)化方法,其目的在于,幫助程序員自適應(yīng)的控制好任務(wù)粒度,實(shí)時(shí)創(chuàng)建合適數(shù)量的并行任務(wù),保持負(fù)載平衡的同時(shí)降低系統(tǒng)開(kāi)銷(xiāo),限制了細(xì)粒度任務(wù)的創(chuàng)建,節(jié)省不必要的內(nèi)存分配,并且適合OpenMP的特性,減輕了程序員的負(fù)擔(dān)。[0007]為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種多核環(huán)境下OpenMP任務(wù)并行的優(yōu)化方法,包括以下步驟:
[0008](I)初始化總線程數(shù)等于CPU核的數(shù)量,剪枝深度cut_off_depth和閾值深度threshold_depth為O,并將用于標(biāo)識(shí)所有線程的狀態(tài)位flag設(shè)置為O ;
[0009](2)主線程接收并行任務(wù)編譯指導(dǎo)語(yǔ)句,以幫助優(yōu)先的執(zhí)行策略執(zhí)行該并行任務(wù)編譯指導(dǎo)語(yǔ)句,以生成并行任務(wù),并將該并行任務(wù)放入該線程的并行任務(wù)隊(duì)列的尾部;
[0010](3)主線程判斷任務(wù)隊(duì)列中的并行任務(wù)總和是否達(dá)到總線程數(shù)的N倍,其中N為正整數(shù),若達(dá)到則進(jìn)入步驟(4),否則返回步驟(2);
[0011](4)主線程將剪枝深度cut_off_cbpth設(shè)置為當(dāng)前線程執(zhí)行的并行任務(wù)的深度,并設(shè)置閾值深度 threshold_depth=2*cut_off_depth ;
[0012](5)當(dāng)前線程采用串行化執(zhí)行策略執(zhí)行并行任務(wù)編譯指導(dǎo)語(yǔ)句,此時(shí)不生成并行任務(wù);
[0013](6)判斷是否所有任務(wù)都已完成,若是則過(guò)程結(jié)束,否則轉(zhuǎn)入步驟(7);
[0014](7)當(dāng)前線程判斷是否接收到并行任務(wù)編譯指導(dǎo)語(yǔ)句,若接收到則轉(zhuǎn)入步驟(8),否則返回步驟(5);
[0015](8)當(dāng)前線程判斷狀態(tài)位flag是否為0,若是則轉(zhuǎn)入步驟(9),否則表示存在有線程處于空閑狀態(tài)且竊取不到并行任務(wù),然后轉(zhuǎn)入步驟(11);
[0016](9)當(dāng)前線程判斷其執(zhí)行的并行任務(wù)的深度total_cbpth是否大于閾值深度threshold_depth,若大于則返回步驟(5),否則進(jìn)入步驟(10);
[0017](10)當(dāng)前線程判斷其并行任務(wù)隊(duì)列中的并行任務(wù)是否為空,或者所有線程的并行任務(wù)隊(duì)列中的并行任務(wù)總數(shù)是否小于總線程數(shù),如果是,則轉(zhuǎn)入步驟(12),否則返回步驟
(5);
[0018](11)當(dāng)前線程設(shè)置 threshold_ctepth=threshold_ctepth+cut_ofT_(fepth,f Iag=O ;
[0019](12)當(dāng)前線程采用幫助優(yōu)先的執(zhí)行策略執(zhí)行并行任務(wù)編譯指導(dǎo)語(yǔ)句,以生成新的并行任務(wù);
[0020](13)當(dāng)前線程在接收到并行任務(wù)編譯指導(dǎo)語(yǔ)句時(shí),判斷其執(zhí)行的并行任務(wù)的臨時(shí)深度是否大于剪枝深度cut_off_depth,若是則返回步驟(5),否則返回步驟(12)。
[0021]總體而言,通過(guò)本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,能夠取得下列有益效果:
[0022](I)自適應(yīng)地幫助用戶(hù)自動(dòng)控制粒度大小:目前GCC并沒(méi)有提供十分有效的措施幫助用戶(hù)自動(dòng)控制好任務(wù)粒度,增加用戶(hù)負(fù)擔(dān)。有一些研究采用自適應(yīng)的方式幫助用戶(hù)控制粒度,但存在一些自身的問(wèn)題,如未達(dá)到完全的自適應(yīng),最多只能切換兩次,容易出現(xiàn)負(fù)載不均衡。本發(fā)明能自適應(yīng)地幫助用戶(hù)自動(dòng)控制粒度大小,免除程序員的負(fù)擔(dān)。
[0023](2)能限制細(xì)粒度任務(wù)的創(chuàng)建:目前有一些研究采用自適應(yīng)的方法控制粒度大小,但沒(méi)能限制細(xì)粒度任務(wù)的創(chuàng)建,導(dǎo)致需要頻繁竊取和任務(wù)創(chuàng)建,另外一些粗粒度任務(wù)可能沒(méi)有機(jī)會(huì)被創(chuàng)建,降低了程序的性能。本發(fā)明采用一些策略盡量保證產(chǎn)生的都是工作量比較大的并行任務(wù),限制細(xì)粒度任務(wù)的創(chuàng)建。
[0024](3)在保持負(fù)載平衡的同時(shí),降級(jí)系統(tǒng)開(kāi)銷(xiāo),節(jié)省內(nèi)存:目前GCC需要用戶(hù)手動(dòng)控制,容易出現(xiàn)負(fù)載不平衡或系統(tǒng)開(kāi)銷(xiāo)較大。一些研究采用預(yù)測(cè)每個(gè)分支大小的方式,也容易出現(xiàn)此類(lèi)問(wèn)題。另外一些研究采用的回溯法控制,容易引發(fā)負(fù)載不平衡。本發(fā)明能很好的兼顧這兩者,另外串行化執(zhí)行時(shí)一些原先為了并行執(zhí)行而進(jìn)行的空間拷貝便不再需要,相對(duì)原來(lái)的GCC能節(jié)省內(nèi)存空間。
[0025](4)適合OpenMP的任務(wù)特性:最近有一些在其他任務(wù)并行編程模型上控制任務(wù)粒度的研究,但都是采用的工作優(yōu)先的策略,即本線程執(zhí)行剛產(chǎn)生的子任務(wù),把未執(zhí)行完的父任務(wù)放在隊(duì)列中允許被偷走。OpenMP任務(wù)有非綁定與綁定兩種,綁定屬性的任務(wù)指一旦被執(zhí)行便綁定到此線程上,因此工作優(yōu)先策略容易導(dǎo)致負(fù)載不平衡,而本發(fā)明采用的幫助優(yōu)先策略便不會(huì)有此問(wèn)題。
【專(zhuān)利附圖】

【附圖說(shuō)明】
[0026]圖1是本發(fā)明所采用的工作-竊取調(diào)度方式的示意圖。
[0027]圖2是本發(fā)明多核環(huán)境下OpenMP任務(wù)并行的優(yōu)化方法的具體流程圖。
【具體實(shí)施方式】
[0028]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
[0029]以下首先就本發(fā)明的技術(shù)術(shù)語(yǔ)進(jìn)行解釋和說(shuō)明:
[0030]并行任務(wù)編譯指導(dǎo)語(yǔ)句=OpenMP提供給程序員用來(lái)描述可并行任務(wù)的語(yǔ)句,在OpenMP 中為“#pragma omp task”。
[0031]任務(wù)深度:任務(wù)在整個(gè)任務(wù)派生樹(shù)中的深度,即遞歸調(diào)用的遞歸深度。
[0032]任務(wù)臨時(shí)深度:是為任務(wù)添加的一個(gè)屬性,當(dāng)由串行化執(zhí)行策略轉(zhuǎn)換到幫助優(yōu)先執(zhí)行策略時(shí)便會(huì)設(shè)置為0,在循環(huán)采用幫助優(yōu)先執(zhí)行策略時(shí)會(huì)隨著任務(wù)深度的增加而增加。
[0033]工作-竊取調(diào)度(Work-stealing):如圖1所示,每個(gè)物理核有一個(gè)工作(Worker)線程,每個(gè)線程擁有一個(gè)雙端任務(wù)隊(duì)列,線程產(chǎn)生任務(wù)時(shí),將任務(wù)放入雙端任務(wù)隊(duì)列的尾部,取任務(wù)時(shí)也是從雙端任務(wù)隊(duì)列的尾部取出,當(dāng)隊(duì)列為空時(shí),去其它線程的隊(duì)列頭部竊取任務(wù)。工作-竊取調(diào)度具備兩種執(zhí)行策略:工作優(yōu)先(Work-first)和幫助優(yōu)先(Help-first),本發(fā)明使用幫助優(yōu)先的執(zhí)行策略。
[0034]幫助優(yōu)先:工作-竊取調(diào)度中的一種執(zhí)行策略,其當(dāng)本線程遇到程序員標(biāo)記的并行任務(wù)編譯指導(dǎo)語(yǔ)句時(shí)創(chuàng)建并行子任務(wù),并將剛產(chǎn)生的并行子任務(wù)放在自己的并行任務(wù)隊(duì)列尾部,以便其他線程空閑時(shí)可以竊取走并執(zhí)行,本線程則繼續(xù)執(zhí)行原來(lái)的父任務(wù)。
[0035]串行化執(zhí)行策略:線程遇到并行任務(wù)編譯指導(dǎo)語(yǔ)句不創(chuàng)建并行任務(wù),而是當(dāng)做串行程序執(zhí)行。
[0036]剪枝深度:當(dāng)達(dá)到此深度時(shí),執(zhí)行策略便要由幫助優(yōu)先轉(zhuǎn)換為串行化執(zhí)行。
[0037]本發(fā)明主要通過(guò)自適應(yīng)任務(wù)粒度控制的方式對(duì)OpenMP任務(wù)并行加以?xún)?yōu)化。它主要包括兩個(gè)方面:1)幫助優(yōu)先與串行化執(zhí)行的自適應(yīng)選??;2)限制細(xì)粒度任務(wù)的創(chuàng)建。這兩個(gè)方面具體如下:
[0038]( I)幫助優(yōu)先與串行化執(zhí)行的自適應(yīng)選取[0039]本發(fā)明通過(guò)幫助優(yōu)先與串行化執(zhí)行的自適應(yīng)選取方式對(duì)任務(wù)粒度的大小加以控制,使程序員免除此負(fù)擔(dān)。下面為具體步驟:
[0040]a)開(kāi)始階段,當(dāng)前線程在遇到并行任務(wù)編譯指導(dǎo)語(yǔ)句時(shí),采用幫助優(yōu)先策略將其生成為并行任務(wù),并放入自己并行任務(wù)隊(duì)列的尾部,以便其他線程空閑時(shí)可以竊取走執(zhí)行,本線程則繼續(xù)執(zhí)行原來(lái)的父任務(wù);
[0041]b)當(dāng)前線程判斷所有任務(wù)隊(duì)列中的并行任務(wù)總和是否達(dá)到總線程數(shù)的N倍,其中N為正整數(shù),取值范圍為2至8。若達(dá)到則開(kāi)始采用串行化執(zhí)行策略完成遇到的并行任務(wù)編譯指導(dǎo)語(yǔ)句,不生成并行任務(wù);若未達(dá)到則返回a);
[0042]c)當(dāng)前線程在采用串行化執(zhí)行策略的過(guò)程中,若再遇到并行任務(wù)編譯指導(dǎo)語(yǔ)句,需要判斷當(dāng)前線程是繼續(xù)串行化執(zhí)行,還是需要切換到幫助優(yōu)先方式,判斷策略如下:
[0043]c-1)是否有線程一直竊取不到并行任務(wù),若有則切換到幫助優(yōu)先執(zhí)行策略,進(jìn)入d);
[0044]c-2)若無(wú)則需要根據(jù)當(dāng)前線程的并行任務(wù)隊(duì)列是否為空或者所有并行任務(wù)隊(duì)列中的總?cè)蝿?wù)數(shù)是否小于總線程數(shù)進(jìn)行判斷,若為是,則采用幫助優(yōu)先方式,生成并行任務(wù),進(jìn)入d);若為否,則采用串行化執(zhí)行策略,不生成并行任務(wù)且返回c);
[0045]d)在采用幫助優(yōu)先策略執(zhí)行的過(guò)程中,若遇到并行任務(wù)編譯指導(dǎo)語(yǔ)句,需要判斷當(dāng)前線程是否需要繼續(xù)創(chuàng)建并行任務(wù),判斷方式為:當(dāng)前線程所執(zhí)行的任務(wù)臨時(shí)深度是否大于剪枝深度cut-off,若為是則剪枝,切換到串行化執(zhí)行策略,不生成并行任務(wù),返回C);若為否則繼續(xù)采用幫助優(yōu)先策略,生成并行任務(wù),循環(huán)執(zhí)行d);
[0046](2)限制細(xì)粒度任務(wù)的創(chuàng)建
[0047]本發(fā)明能限制細(xì)粒度并行任務(wù)的創(chuàng)建,使被竊取的任務(wù)為工作量比較大的任務(wù)。方式如下:本發(fā)明添加一個(gè)“閾值深度”,當(dāng)任務(wù)的深度值大于此閾值深度時(shí),便不再創(chuàng)建并行任務(wù),而是串行化執(zhí)行;當(dāng)任務(wù)的深度值小于此閾值深度時(shí)則還需要結(jié)合幫助優(yōu)先與串行化執(zhí)行的自適應(yīng)選取方法進(jìn)行判斷?!伴撝瞪疃取钡闹蹈鶕?jù)情況會(huì)自動(dòng)調(diào)整大小,當(dāng)有線程空閑,但繁忙中的線程都由于所正在執(zhí)行的任務(wù)當(dāng)前深度大于閾值深度而無(wú)法創(chuàng)建并行任務(wù)時(shí),閾值深度便會(huì)自動(dòng)增加。
[0048]上面對(duì)優(yōu)化方法的兩個(gè)方面的實(shí)施方式分別進(jìn)行了介紹,以下結(jié)合圖2詳細(xì)描述本發(fā)明多核環(huán)境下OpenMP任務(wù)并行的優(yōu)化方法,具體包括以下步驟:
[0049](I)初始化總線程數(shù)等于CPU核的數(shù)量,剪枝深度cut_off_depth和閾值深度threshold_depth為O,并將用于標(biāo)識(shí)所有線程的狀態(tài)位flag設(shè)置為O ;
[0050](2)主線程接收并行任務(wù)編譯指導(dǎo)語(yǔ)句,以幫助優(yōu)先的執(zhí)行策略執(zhí)行該并行任務(wù)編譯指導(dǎo)語(yǔ)句,以生成并行任務(wù),并將該并行任務(wù)放入該線程的并行任務(wù)隊(duì)列的尾部;
[0051](3)主線程判斷任務(wù)隊(duì)列中的并行任務(wù)總和是否達(dá)到總線程數(shù)的N倍,其中N為正整數(shù),且取值范圍是2至8,若達(dá)到則進(jìn)入步驟(4),否則返回步驟(2);
[0052](4)主線程將剪枝深度cut_off_cbpth設(shè)置為當(dāng)前線程執(zhí)行的并行任務(wù)的深度,并設(shè)置閾值深度 threshold_depth=2*cut_off_depth ;
[0053](5)當(dāng)前線程采用串行化執(zhí)行策略執(zhí)行并行任務(wù)編譯指導(dǎo)語(yǔ)句,此時(shí)不生成并行任務(wù);
[0054]( 6 )判斷是否所有任務(wù)都已完成,若是則過(guò)程結(jié)束,否則轉(zhuǎn)入步驟(7 );[0055](7)當(dāng)前線程判斷是否接收到并行任務(wù)編譯指導(dǎo)語(yǔ)句,若接收到則轉(zhuǎn)入步驟(8),否則返回步驟(5);
[0056](8)當(dāng)前線程判斷狀態(tài)位flag是否為0,若是則轉(zhuǎn)入步驟(9),否則表示存在有線程處于空閑狀態(tài)且竊取不到并行任務(wù),然后轉(zhuǎn)入步驟(11);
[0057](9)當(dāng)前線程判斷其執(zhí)行的并行任務(wù)的深度total_cbpth是否大于閾值深度threshold_depth,若大于則返回步驟(5),否則進(jìn)入步驟(10);
[0058](10)當(dāng)前線程判斷其并行任務(wù)隊(duì)列中的并行任務(wù)是否為空,或者所有線程的并行任務(wù)隊(duì)列中的并行任務(wù)總數(shù)是否小于總線程數(shù),如果是,則轉(zhuǎn)入步驟(12),否則返回步驟
(5);
[0059](11)若繁忙中的線程都由于正在執(zhí)行的任務(wù)深度大于閾值深度而無(wú)法創(chuàng)建并行任務(wù),當(dāng)前線程設(shè)置 threshold_depth=threshold_depth+cut_off_depth, fIag=O ;
[0060](12)當(dāng)前線程采用幫助優(yōu)先的執(zhí)行策略執(zhí)行并行任務(wù)編譯指導(dǎo)語(yǔ)句,以生成新的并行任務(wù);
[0061](13)當(dāng)前線程在接收到并行任務(wù)編譯指導(dǎo)語(yǔ)句時(shí),判斷是否要進(jìn)行cut-off剪枝若是則返回步驟(5),否則返回步驟(12)。
[0062]我們分別使用Nqueens、sort和floorplan, strassen測(cè)試程序進(jìn)行了測(cè)試,本發(fā)明的自適應(yīng)任務(wù)粒度控制和程序員手動(dòng)控制運(yùn)行時(shí)間比分別為:0.97,1.03,0.98,0.97??梢钥闯鲎赃m應(yīng)的方式和手動(dòng)控制的方式兩者性能相接近。
[0063]綜上所述,本發(fā)明多核環(huán)境下OpenMP任務(wù)并行的優(yōu)化方法主要通過(guò)自適應(yīng)任務(wù)粒度控制的方式來(lái)完成優(yōu)化。自適應(yīng)任務(wù)粒度控制主要包括兩個(gè)方面:1)幫助優(yōu)先與串行化執(zhí)行的自適應(yīng)選?。?)限制細(xì)粒度任務(wù)的創(chuàng)建兩部分。本發(fā)明能自動(dòng)地控制任務(wù)粒度,免除程序員的負(fù)擔(dān),避免創(chuàng)建過(guò)多的細(xì)粒度并行任務(wù)而產(chǎn)生大量的任務(wù)創(chuàng)建開(kāi)銷(xiāo)或并行任務(wù)過(guò)少而負(fù)載不平衡的狀況,而且還能節(jié)省內(nèi)存,適合OpenMP的任務(wù)特性等,性能上和手動(dòng)控制相接近。
[0064]本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種多核環(huán)境下OpenMP任務(wù)并行的優(yōu)化方法,其特征在于,包括以下步驟: (1)初始化總線程數(shù)等于CPU核的數(shù)量,剪枝深度cut_0fT_depth和閾值深度threshold_depth為O,并將用于標(biāo)識(shí)所有線程的狀態(tài)位flag設(shè)置為O ; (2)主線程接收并行任務(wù)編譯指導(dǎo)語(yǔ)句,以幫助優(yōu)先的執(zhí)行策略執(zhí)行該并行任務(wù)編譯指導(dǎo)語(yǔ)句,以生成并行任務(wù),并將該并行任務(wù)放入該線程的并行任務(wù)隊(duì)列的尾部; (3)主線程判斷任務(wù)隊(duì)列中的并行任務(wù)總和是否達(dá)到總線程數(shù)的N倍,其中N為正整數(shù),若達(dá)到則進(jìn)入步驟(4),否則返回步驟(2); (4)主線程將剪枝深度cUt_0ff_cbpth設(shè)置為當(dāng)前線程執(zhí)行的并行任務(wù)的深度,并設(shè)置閾值深度 threshold_depth=2*cut_off_depth ; (5)當(dāng)前線程采用串行化執(zhí)行策略執(zhí)行并行任務(wù)編譯指導(dǎo)語(yǔ)句,此時(shí)不生成并行任務(wù); (6 )判斷是否所有任務(wù)都已完成,若是則過(guò)程結(jié)束,否則轉(zhuǎn)入步驟(7 ); (7)當(dāng)前線程判斷是否接收到并行任務(wù)編譯指導(dǎo)語(yǔ)句,若接收到則轉(zhuǎn)入步驟(8),否則返回步驟(5); (8)當(dāng)前線程判斷狀態(tài)位flag是否為0,若是則轉(zhuǎn)入步驟(9),否則表示存在有線程處于空閑狀態(tài)且竊取不到并行任務(wù),然后轉(zhuǎn)入步驟(11); (9)當(dāng)前線程判斷其執(zhí)行的并行任務(wù)的深度total_cbpth是否大于閾值深度threshold_depth,若大于則返回步驟(5),否則進(jìn)入步驟(10); (10)當(dāng)前線程判斷其并行任務(wù)隊(duì)列中的并行任務(wù)是否為空,或者所有線程的并行任務(wù)隊(duì)列中的并行任務(wù)總數(shù)是否小于總線程數(shù),如果是,則轉(zhuǎn)入步驟(12),否則返回步驟(5);(11)當(dāng)前線程設(shè)置threshold_depth=threshold_depth+cut_off_depth, fIag=O ; (12)當(dāng)前線程采用幫助優(yōu)先的執(zhí)行策略執(zhí)行并行任務(wù)編譯指導(dǎo)語(yǔ)句,以生成新的并行任務(wù); (13)當(dāng)前線程在接收到并行任務(wù)編譯指導(dǎo)語(yǔ)句時(shí),判斷其執(zhí)行的并行任務(wù)的臨時(shí)深度是否大于剪枝深度cut_off_depth,若是則返回步驟(5),否則返回步驟(12)。
【文檔編號(hào)】G06F9/45GK103729241SQ201310680110
【公開(kāi)日】2014年4月16日 申請(qǐng)日期:2013年12月12日 優(yōu)先權(quán)日:2013年12月12日
【發(fā)明者】廖小飛, 金海 , 畢建民 申請(qǐng)人:華中科技大學(xué)
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1