欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種對(duì)gtc軟件shift模塊串行代碼并行化的方法

文檔序號(hào):6545162閱讀:385來(lái)源:國(guó)知局
一種對(duì)gtc軟件shift模塊串行代碼并行化的方法
【專利摘要】本發(fā)明公開(kāi)了一種對(duì)GTC軟件SHIFT模塊串行代碼并行化的方法,通過(guò)排它性掃描有效的實(shí)現(xiàn)了SHIFT模塊原有串行代碼的并行化,即利用排它性掃描對(duì)每個(gè)線程的數(shù)據(jù)在整體數(shù)據(jù)中的位置進(jìn)行標(biāo)定,各個(gè)線程依據(jù)標(biāo)定的位置,直接進(jìn)行后續(xù)的計(jì)算,避免了原串行代碼中將散布在內(nèi)存中不同位置的數(shù)據(jù)聚合到一個(gè)連續(xù)的內(nèi)存空間的過(guò)程,并實(shí)現(xiàn)了填充空洞過(guò)程的并行化,顯著的縮短了GTC程序運(yùn)行時(shí)間,有效的改進(jìn)了GTC程序的性能。
【專利說(shuō)明】一種對(duì)GTC軟件SHIFT模塊串行代碼并行化的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及高性能計(jì)算領(lǐng)域中的并行程序設(shè)計(jì)及優(yōu)化,尤其涉及一種對(duì)GTC軟件SHIFT模塊串行代碼并行化的方法。
【背景技術(shù)】
[0002]高性能計(jì)算通常是指利用許多計(jì)算資源,如很多的CPU或協(xié)處理器,來(lái)完成單個(gè)(PU所不能完成的計(jì)算任務(wù)。為使程序運(yùn)行在多個(gè)計(jì)算設(shè)備上,需要將原本是串行的程序并行化。我們所講的串行程序是指由于程序自身算法的限制,使得其在計(jì)算時(shí)僅能采用單個(gè)進(jìn)程或線程運(yùn)行的程序。而并行程序是指程序在運(yùn)行時(shí)可以利用多個(gè)進(jìn)程在多個(gè)設(shè)備上同時(shí)執(zhí)行。
[0003]GTC是用來(lái)進(jìn)行非線性回旋動(dòng)理學(xué)湍流模擬的一個(gè)大規(guī)模并行軟件,由普林斯頓大學(xué)等離子體實(shí)驗(yàn)室研制,是國(guó)際熱核聚變實(shí)驗(yàn)堆(ITER)計(jì)劃中模擬高能粒子湍流的關(guān)鍵程序。GTC通過(guò)對(duì)等離子體在磁場(chǎng)作用下的輸運(yùn)性質(zhì)的模擬,可以再現(xiàn)等離子體隨時(shí)間的運(yùn)行演化過(guò)程,這對(duì)于研究磁約束受控核聚變,提高等離子體在Tokamak裝置中的約束時(shí)間有著非常重要的意義。SHIFT模塊是GTC軟件最耗時(shí)的模塊之一,其根源在于該模塊中存在著大量的串行代碼,通過(guò)將該部分的串行代碼并行化將極大的提升GTC程序整體的性能。[0004]在串行程序的并行化過(guò)程中,首先需要考慮的是采用何種方式來(lái)并行化原有的串行程序。設(shè)計(jì)并行算法一般有三種策略:a)檢測(cè)和開(kāi)拓現(xiàn)有串行算法中的固有并行性而直接將其并行化,它雖不是對(duì)所有問(wèn)題總是可行的,但對(duì)很多應(yīng)用問(wèn)題仍不失為一種有效的方法;b)從問(wèn)題本身的描述出發(fā),根據(jù)問(wèn)題固有的屬性,從頭開(kāi)始設(shè)計(jì)一種全新的并行算法,它雖有一定的難度,但所設(shè)計(jì)的并行算法通常是高效的;c)借用已有的并行算法使之可求解新的一類問(wèn)題,采用該方法往往有可能產(chǎn)生一個(gè)很優(yōu)秀的并行算法。本發(fā)明中采用排它性掃描對(duì)GTC軟件的SHIFT模塊進(jìn)行并行化的方法即屬于該類方法。
[0005]排它性掃描是指這樣的一個(gè)過(guò)程:假設(shè)數(shù)組a中共有N個(gè)元素,它們依次為: a= {a” a2, a3, a4,......, aN}
經(jīng)過(guò)排它性掃描后,得到的數(shù)組b中同樣具有N個(gè)元素,它們依次為:
b= {O, a1; a1+a2, a1+a2+a3,......, B^a2+*** +aN_J
可以看到,b中第I個(gè)元素的值為0,第i>l個(gè)元素的值是a中前1-Ι個(gè)元素之和。以上的過(guò)程即為排它性掃描。如果a中的第i個(gè)元素代表在i位置處需要操作的數(shù)據(jù)的個(gè)數(shù),那么b中的第i個(gè)元素的意義是a (i)在整個(gè)數(shù)據(jù)序列中的位移。

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

[0006]本發(fā)明針對(duì)GTC軟件中SHIFT模塊由于大部分的串行執(zhí)行過(guò)程導(dǎo)致的程序效率低下的問(wèn)題,提出了利用排它性掃描進(jìn)行GTC軟件SHIFT模塊中串行代碼并行化的方法。
[0007]本發(fā)明公開(kāi)了一種對(duì)GTC軟件SHIFT模塊串行代碼并行化的方法,其解決所述技術(shù)問(wèn)題采用的技術(shù)方案如下: 由于SHIFT模塊是GTC軟件最耗時(shí)的模塊之一,對(duì)GTC程序的性能有著重要的影響,其根源在于SHIFT模塊中存在著大量的串行代碼,SHIFT模塊中串行代碼主要來(lái)自兩個(gè)計(jì)算部分:a為粒子的挑選過(guò)程;b為填充空洞的過(guò)程;其中a部分中僅有部分串行代碼,而b部分中完全是串行代碼;通過(guò)本發(fā)明所述方法對(duì)SHIFT模塊中a、b兩部分的串行代碼進(jìn)行并行化,其內(nèi)容主要包括:利用排它性掃描對(duì)每個(gè)線程的數(shù)據(jù)在整體數(shù)據(jù)中的位置進(jìn)行標(biāo)定,各個(gè)線程依據(jù)標(biāo)定的位置,直接進(jìn)行后續(xù)的計(jì)算,避免了原串行代碼中將散布在內(nèi)存中不同位置的數(shù)據(jù)聚合到一個(gè)連續(xù)的內(nèi)存空間的過(guò)程,同時(shí)將填充空洞過(guò)程并行化。
[0008]本發(fā)明公開(kāi)的對(duì)GTC軟件SHIFT模塊串行代碼并行化的方法的有益效果是:
使用本發(fā)明所述對(duì)GTC軟件SHIFT模塊串行代碼并行化的方法,通過(guò)排它性掃描有效
的實(shí)現(xiàn)了 SHIFT模塊原有串行代碼的并行化,即利用排它性掃描對(duì)每個(gè)線程的數(shù)據(jù)在整體數(shù)據(jù)中的位置進(jìn)行標(biāo)定,各個(gè)線程依據(jù)標(biāo)定的位置,直接進(jìn)行后續(xù)的計(jì)算,避免了原串行代碼中將散布在內(nèi)存中不同位置的數(shù)據(jù)聚合到一個(gè)連續(xù)的內(nèi)存空間的過(guò)程,并實(shí)現(xiàn)了填充空洞過(guò)程的并行化,顯著的縮短了 GTC程序運(yùn)行時(shí)間,有效的改進(jìn)了 GTC程序的性能,從而達(dá)到提升程序整體性能的目的。
【具體實(shí)施方式】
[0009]下面通過(guò)實(shí)施例,對(duì)本發(fā)明所述對(duì)GTC軟件SHIFT模塊串行代碼并行化的方法做進(jìn)一步詳細(xì)說(shuō)明,并不造成對(duì)本發(fā)明的限制。
[0010]SHIFT模塊是GTC軟件的熱點(diǎn)模塊之一,對(duì)GTC程序的性能有著重要的影響。SHIFT模塊的主要求解代碼均為串行代碼,這導(dǎo)致了 GTC軟件求解效率較低,這樣通過(guò)對(duì)SHIFT這兩個(gè)過(guò)程串行部分的并行化,就能有效的提升GTC軟件的性能。
[0011]本發(fā)明給出了采用排它性掃描進(jìn)行GTC軟件SHIFT模塊中串行代碼并行化的方法,SHIFT模塊中串行代碼主要來(lái)自兩個(gè)計(jì)算部分:a為將需要向左側(cè)或右側(cè)發(fā)送的粒子挑選出來(lái)的過(guò)程(粒子的挑選過(guò)程);b為填充空洞的過(guò)程;其中a部分中僅有部分串行代碼,而b部分中完全是串行代碼;通過(guò)本方法對(duì)a、b兩部分中串行代碼進(jìn)行并行化,可有效的提升GTC軟件的性能,從而達(dá)到提升程序整體性能的目的;
排它性掃描是一種數(shù)組元素分段求和的方法,在并行程序設(shè)計(jì)中有著較為廣泛的使用。在SHIFT模塊采用排它性掃描,可避免a中原串行代碼中將散布在內(nèi)存中不同位置的數(shù)據(jù)聚合到一個(gè)連續(xù)的內(nèi)存空間的過(guò)程,并可將SHIFT模塊b填充空洞的過(guò)程并行化。
[0012]本發(fā)明所述對(duì)GTC軟件SHIFT模塊串行代碼并行化的方法中,SHIFT模塊的a部分中僅有部分代碼是并行執(zhí)行的,其串行部分是將各線程中散布在不同內(nèi)存位置的數(shù)據(jù)收集到一個(gè)連續(xù)的內(nèi)存空間內(nèi),該部分是b部分計(jì)算的基礎(chǔ)。當(dāng)進(jìn)行a部分的并行化設(shè)計(jì)時(shí),必須同時(shí)考慮b部分的并行化方法;
當(dāng)對(duì)SHIFT模塊的a部分采用排它性掃描時(shí),必然要求b部分也能采用排它性掃描的結(jié)果,這樣才能實(shí)現(xiàn)最優(yōu)的并行策略;
當(dāng)SHIFT模塊的b部分也采用排它性掃描的結(jié)果時(shí),可降低對(duì)a部分計(jì)算結(jié)果的依賴性,從而可取消a中的串行部分,即取消將各線程中散布在不同內(nèi)存位置的數(shù)據(jù)收集到一個(gè)連續(xù)的內(nèi)存空間內(nèi)的操作;
即對(duì)GTC軟件SHIFT模塊采用排它性掃描后,SHIFT模塊的b部分可實(shí)現(xiàn)并行化。[0013]對(duì)a部分中串行代碼的并行化過(guò)程分包括以下的5個(gè)部分:
1)均衡的對(duì)全部的粒子數(shù)據(jù)進(jìn)行劃分,每個(gè)線程僅處理本線程分到的任務(wù);
2)采用Ieftflag與rightflag兩個(gè)數(shù)組來(lái)標(biāo)識(shí)本線程內(nèi)需要發(fā)送的粒子,如果粒子需要向左側(cè)發(fā)送,則Ieftflag=I ;如果粒子需要向右側(cè)發(fā)送,rightflag=l ;
3)采用Ieftcount與rightcount兩個(gè)數(shù)組來(lái)標(biāo)識(shí)本線程內(nèi)需要向左側(cè)及右側(cè)發(fā)送的粒子總數(shù);
4)對(duì)Ieftcount與rightcount采用排它性掃描,并將掃描的結(jié)果分別放置在Ieftoffset與rightoffset中。以向左側(cè)發(fā)送為例,掃描Ieftcount結(jié)束后,得到的Ieftoffset中存放了每一個(gè)線程的數(shù)據(jù)在全部線程擁有的數(shù)據(jù)中的位移;
5)基于Ieftflag與rightflag兩個(gè)數(shù)組將需要發(fā)送的粒子數(shù)據(jù)拷貝到發(fā)送緩沖區(qū)中。
[0014]以上完成了對(duì)數(shù)據(jù)挑選過(guò)程的并行化,對(duì)b部分中串行代碼的并行化分過(guò)程包括以下的4個(gè)部分:
1)在各線程中將數(shù)據(jù)均勻的劃分;
2)將各線程中需要發(fā)送的數(shù)據(jù)的索引存入fillerpos數(shù)組中;
3)將fillerpos數(shù)組中各線程的數(shù)據(jù)按照線程的先后次序重新進(jìn)行排列; 4)基于a中第4步排它性掃描的結(jié)果Ieftoffset與rightoffset,得到需要填充的空洞的索引,并將位于總粒子序列末尾的數(shù)據(jù)填入該位置。
[0015]為了更明確的闡述本發(fā)明的技術(shù)方案和優(yōu)越性,下面結(jié)合具體的案例和偽代碼,對(duì)本發(fā)明做出詳細(xì)說(shuō)明。
[0016]GTC軟件中SHIFT模塊可以簡(jiǎn)單表示成以下的偽代碼:
1.a粒子挑選過(guò)程
2.$omp parallel...!以下的代碼米用openmp并行化
3.1am=omp_get_thread_numO !得到當(dāng)前線程的索引
4.…
5.mbeg=mO+min (iam,i) * (delm+1)+max (0,(iam_i)) *delm !對(duì)數(shù)據(jù)進(jìn)行劃分
6.mend=mbeg+delm+ (min ((iam+1), i) / (iam+1)) -1 !對(duì)數(shù)據(jù)進(jìn)行劃分
7.…
8.do m=mbeg,mend
9.…
10.1f (zetaright氺zetaleft> 0)then
11.…
12.msright (3,iam) =msright (3,iam) +1
13.kzparticle (mbeg+msright (3, iam) -1) =m !記錄各線程需要發(fā)送的數(shù)據(jù)索引
14.1f (zetaright< 0.5) then
15.msright (1,iam) =msright(l,iam)+1 !得到各線程向右發(fā)送數(shù)據(jù)的
個(gè)數(shù)
16.1right (mbeg+msright (1,iam)-1) =m !記錄向右發(fā)送數(shù)據(jù)的索引
17.else
【權(quán)利要求】
1.一種對(duì)GTC軟件SHIFT模塊串行代碼并行化的方法,SHIFT模塊中串行代碼主要來(lái)自兩個(gè)計(jì)算部分:a為粒子的挑選過(guò)程;b為填充空洞的過(guò)程;其中a部分中僅有部分串行代碼,而b部分中完全是串行代碼,其特征在于,通過(guò)該方法對(duì)SHIFT模塊中a、b兩部分的串行代碼進(jìn)行并行化,其內(nèi)容主要包括:利用排它性掃描對(duì)每個(gè)線程的數(shù)據(jù)在整體數(shù)據(jù)中的位置進(jìn)行標(biāo)定,各個(gè)線程依據(jù)標(biāo)定的位置,直接進(jìn)行后續(xù)的計(jì)算,避免了原串行代碼中將散布在內(nèi)存中不同位置的數(shù)據(jù)聚合到一個(gè)連續(xù)的內(nèi)存空間的過(guò)程,同時(shí)將填充空洞過(guò)程并行化。
2.根據(jù)權(quán)利要求1所述的對(duì)GTC軟件SHIFT模塊串行代碼并行化的方法,其特征在于,對(duì)SHIFT模塊中a部分的串行代碼并行化過(guò)程主要包括: 1)均衡的對(duì)全部的粒子數(shù)據(jù)進(jìn)行劃分,每個(gè)線程僅處理本線程分到的任務(wù); 2)采用Ieftflag與rightflag兩個(gè)數(shù)組來(lái)標(biāo)識(shí)本線程內(nèi)需要發(fā)送的粒子,若粒子需要向左側(cè)發(fā)送,則Ieftflag=I ;若粒子需要向右側(cè)發(fā)送,rightflag=l ; 3)采用Ieftcount與rightcount兩個(gè)數(shù)組來(lái)標(biāo)識(shí)本線程內(nèi)需要向左側(cè)及右側(cè)發(fā)送的粒子總數(shù); 4)對(duì)Ieftcount與rightcount采用排它性掃描,并將掃描的結(jié)果分別放置在Ieftoffset與rightoffset中;對(duì)向左側(cè)發(fā)送掃描Ieftcount結(jié)束后,得到的Ieftoffset中存放了每一個(gè)線程的數(shù)據(jù)在全部線程擁有的數(shù)據(jù)中的位移; 5)基于Ieftflag與rightflag兩個(gè)數(shù)組將需要發(fā)送的粒子數(shù)據(jù)拷貝到發(fā)送緩沖區(qū)中。
3.根據(jù)權(quán)利要求1所述的對(duì)GTC軟件SHIFT模塊串行代碼并行化的方法,其特征在于,對(duì)SHIFT模塊中b部分的串行代碼并行化過(guò)程主要包括: 1)在各線程中將數(shù)據(jù)均勻的劃分; 2)將各線程中需要發(fā)送的數(shù)據(jù)的索引存入fillerpos數(shù)組中; 3)將fillerpos數(shù)組中各線程的數(shù)據(jù)按照線程的先后次序重新進(jìn)行排列; 4)基于a部分排它性掃描的結(jié)果Ieftoffset與rightoffset,得到需要填充的空洞的索引,并將位于總粒子序列末尾的數(shù)據(jù)填入該位置。
【文檔編號(hào)】G06F9/46GK103902362SQ201410175864
【公開(kāi)日】2014年7月2日 申請(qǐng)日期:2014年4月29日 優(yōu)先權(quán)日:2014年4月29日
【發(fā)明者】吳韶華, 張廣勇, 沈鉑, 張清 申請(qǐng)人:浪潮電子信息產(chǎn)業(yè)股份有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
吉林省| 达孜县| 建昌县| 太保市| 陈巴尔虎旗| 陵水| 罗平县| 博乐市| 黄龙县| 县级市| 叶城县| 千阳县| 综艺| 康乐县| 胶州市| 土默特右旗| 噶尔县| 莲花县| 台江县| 扎兰屯市| 轮台县| 西城区| 三门峡市| 天祝| 甘南县| 沭阳县| 成安县| 德钦县| 广元市| 华坪县| 方城县| 奉贤区| 南京市| 鄂州市| 灵丘县| 盐池县| 安塞县| 石阡县| 紫金县| 桂东县| 山东|