專(zhuān)利名稱(chēng):一種串行與并行模擬相結(jié)合的并行計(jì)算機(jī)系統(tǒng)性能模擬方法
技術(shù)領(lǐng)域:
本發(fā)明涉及并行計(jì)算機(jī)系統(tǒng)的性能模擬方法,特別是以模擬技術(shù)為手段,對(duì)并行 計(jì)算機(jī)系統(tǒng)上單程序多數(shù)據(jù)(Single Program Multiple Data, SPMD)模式消息傳遞程序的 性能(即運(yùn)行時(shí)間)進(jìn)行模擬評(píng)估的方法。
背景技術(shù):
計(jì)算機(jī)體系結(jié)構(gòu)模擬軟件(簡(jiǎn)稱(chēng)模擬器)是一類(lèi)可對(duì)計(jì)算機(jī)系統(tǒng)行為進(jìn)行模擬的 軟件,它們一般是可配置的,可以對(duì)目標(biāo)計(jì)算機(jī)系統(tǒng)的體系結(jié)構(gòu)參數(shù)或技術(shù)方案進(jìn)行配置, 在現(xiàn)有計(jì)算機(jī)(稱(chēng)為宿主機(jī))上模擬運(yùn)行Benchmark程序(包括來(lái)自于真實(shí)應(yīng)用領(lǐng)域的程 序或人工合成的程序等),獲得目標(biāo)計(jì)算機(jī)系統(tǒng)在給定配置下的性能數(shù)據(jù)。在新計(jì)算機(jī)系統(tǒng) 研制過(guò)程中,基于模擬器軟件,在目標(biāo)系統(tǒng)可用前就對(duì)其性能進(jìn)行評(píng)估,分析系統(tǒng)性能瓶頸 或者找到最優(yōu)配置,從而對(duì)系統(tǒng)進(jìn)行針對(duì)性的改進(jìn)。此外,由于新的計(jì)算機(jī)(特別是大規(guī)模 并行計(jì)算機(jī))系統(tǒng)資源稀缺,運(yùn)行成本高,很多情況下并不能直接在新計(jì)算機(jī)上直接進(jìn)行 程序開(kāi)發(fā),而是在其它計(jì)算機(jī)上開(kāi)發(fā)好程序之后再將其部署到新計(jì)算機(jī)上。為了在新計(jì)算 機(jī)上獲得高的運(yùn)行效率,開(kāi)發(fā)過(guò)程中需要對(duì)程序進(jìn)行深入的性能調(diào)優(yōu),通過(guò)模擬技術(shù)對(duì)程 序在目標(biāo)計(jì)算機(jī)系統(tǒng)上的性能進(jìn)行評(píng)估,可有效指導(dǎo)其性能優(yōu)化。 模擬器采用軟件來(lái)模擬硬件的行為,時(shí)間開(kāi)銷(xiāo)很大,通常比在真實(shí)目標(biāo)機(jī)上運(yùn)行 相同Benchmark程序的時(shí)間大幾個(gè)數(shù)量級(jí),并行計(jì)算機(jī)系統(tǒng)的模擬工作量更為巨大。美國(guó) 倫斯勒理工學(xué)院的Christopher D. Carothers舉了一個(gè)例子(Christopher D. Carothers, ROSS :Parallel Discrete—Event Simulations on Near Petascale Supercomputers, charmworkshop,2009):假設(shè)要對(duì)一個(gè)萬(wàn)萬(wàn)億次超級(jí)計(jì)算機(jī)上的MPI程序進(jìn)行模擬,假定程 序只發(fā)揮機(jī)器峰值性能的10%,即每秒1千萬(wàn)億次浮點(diǎn)運(yùn)算,每個(gè)浮點(diǎn)操作需要2字節(jié)數(shù) 據(jù),其中1%需要通過(guò)通信獲得,每秒共2TB數(shù)據(jù)通信,設(shè)MPI消息大小為1K,因此每秒產(chǎn)生 20億個(gè)MPI通信,如果每個(gè)消息傳輸要經(jīng)過(guò)8跳,則每秒產(chǎn)生160億個(gè)事件,運(yùn)行1000秒產(chǎn) 生16萬(wàn)億個(gè)事件,以目前的串行離散事件模擬器10萬(wàn)個(gè)事件每秒的模擬速度,需要5年多 時(shí)間才能模擬完。串行不可能滿足模擬容量和時(shí)效性需求,只有利用并行計(jì)算機(jī)系統(tǒng)作為 宿主機(jī)平臺(tái)進(jìn)行并行模擬,才有可能滿足計(jì)算能力與存儲(chǔ)容量的需求。因此,目前已經(jīng)出現(xiàn) 了一些基于并行宿主機(jī)的并行模擬器原型系統(tǒng),如WWTII (威斯康辛大學(xué))、RSIM(萊斯大學(xué) 與伊利諾伊大學(xué)等)、LAPSE (NASA) 、MPI-Sim(加州大學(xué)洛杉磯分校)、BigSim(伊利諾伊大 學(xué)厄貝納香檳分校)、BGLsim(IBM公司與伊利諾伊大學(xué)厄貝納香檳分校)、SILAS (德國(guó)尤利 西超級(jí)計(jì)算中心)等的并行模擬器原型系統(tǒng)。 即使這樣,目前對(duì)并行計(jì)算機(jī)系統(tǒng)上并行應(yīng)用程序的性能模擬預(yù)測(cè)仍然面臨很大 的困難,具體表現(xiàn)在 (1)并行模擬器中缺乏準(zhǔn)確的計(jì)算性能模擬模塊。并行計(jì)算機(jī)系統(tǒng)上并行程序性 能受處理器(含片上Cache存儲(chǔ)層次)、互連網(wǎng)絡(luò)等眾多因素交互影響,準(zhǔn)確的性能模擬非
4常困難。除BGLSim宣稱(chēng)可實(shí)現(xiàn)近似周期精確的模擬外,現(xiàn)有并行模擬器基本上都沒(méi)有使用 周期精確的處理器模擬模塊。例如MPI-Sim和BigSim中,沒(méi)有對(duì)處理器性能進(jìn)行指令級(jí)級(jí) 別的詳細(xì)模擬模型,而只采用簡(jiǎn)單的宿主機(jī)處理器和目標(biāo)機(jī)處理器性能的縮放因子的方式 進(jìn)行性能估計(jì)。據(jù)我們?cè)谝粋€(gè)集群系統(tǒng)上對(duì)BigSim的測(cè)試發(fā)現(xiàn),其計(jì)算性能預(yù)測(cè)誤差可達(dá) 到80%以上。 (2)可配置性差,適應(yīng)性差。已有的模擬器通常針對(duì)具體目標(biāo)系統(tǒng)進(jìn)行設(shè)計(jì),如果 系統(tǒng)體系結(jié)構(gòu)部件發(fā)生改變,例如采用了新型處理器或網(wǎng)絡(luò)互連設(shè)備,則無(wú)法適應(yīng)。
(3)模擬開(kāi)銷(xiāo)仍然很大。模擬性能仍然是制約模擬器應(yīng)用的主要障礙之一,由于模 擬開(kāi)銷(xiāo)大,使得并行模擬的運(yùn)行環(huán)境條件難以滿足。 由于上述原因,如何從模擬器結(jié)構(gòu)設(shè)計(jì)和模擬過(guò)程設(shè)計(jì)方面來(lái)提高模擬器的體 系結(jié)構(gòu)適應(yīng)性、模擬效率成為研究界面臨的重要問(wèn)題。目前的并行模擬器主要側(cè)重于網(wǎng) 絡(luò)通信性能的模擬,例如BigSim、 MPI-Sim都有可配置的網(wǎng)絡(luò)模擬模塊,具有詳細(xì)的網(wǎng)絡(luò) 模擬模型,精度較高,且適應(yīng)多種網(wǎng)絡(luò)類(lèi)型的模擬,而在處理器模擬方面,它們都僅提供 非常粗略的性能模型。另一方面,目前針對(duì)處理器模擬已有很多較好的串行模擬器,例 如SimpleScalar(威斯康辛大學(xué))、SimOS(斯坦福大學(xué))、SimNow(AMD公司)、GEMS(威 斯康辛大學(xué))、SimOS-Goodson(中科院計(jì)算所)等的串行模擬器都可以做到周期精確的 模擬。此外,目前并行計(jì)算領(lǐng)域采用消息傳遞方式編程的科學(xué)計(jì)算程序多數(shù)是SPMD模式 的禾呈序(Daniel Chavarr' iaMiranda等,Topology-aware Tile Mapping forClusters of SMPs, ACM International Conference on Computing Frontiers, 2006),在運(yùn)行過(guò)
程中,不同進(jìn)程處理一個(gè)大數(shù)據(jù)集中不同部分的數(shù)據(jù),它們執(zhí)行的計(jì)算基本相同,因此 只要對(duì)一個(gè)進(jìn)程的計(jì)算性能(主要與處理器相關(guān))進(jìn)行模擬就可獲得所有進(jìn)程的計(jì)算
性會(huì)g數(shù)據(jù)。而文獻(xiàn)(Yoon_Ju Lee and Mary Hall, A Code Isolator -Isolating Code Fragmentsfrom Large Programs,International Workshop on Languages and Compilers for ParallelComputing,2004)報(bào)告了他們從大的科學(xué)與工程計(jì)算程序中分離出代碼片 段,將各個(gè)代碼片段封裝為可獨(dú)立執(zhí)行的代碼,其性能可反映該代碼片段在完整程序中的 性能,最后將針對(duì)分離后的代碼片斷進(jìn)行經(jīng)驗(yàn)性能優(yōu)化(empirical optimization)的最佳 方案用于完整程序中對(duì)應(yīng)代碼片斷的性能優(yōu)化。這說(shuō)明并行程序中的計(jì)算代碼段可以被分 離出來(lái),從而可采用串行模擬器對(duì)其進(jìn)行性能模擬。因此,可以結(jié)合利用并行模擬和串行模 擬兩者的優(yōu)勢(shì)來(lái)進(jìn)行SPMD模式消息傳遞并行程序的性能模擬。 根據(jù)專(zhuān)利文獻(xiàn)檢索,以往的專(zhuān)利與文獻(xiàn)中尚未見(jiàn)到在并行計(jì)算機(jī)系統(tǒng)上并行應(yīng)用 程序性能模擬中將并行模擬和串行模擬結(jié)合進(jìn)行兩階段性能模擬的報(bào)道。只有一些關(guān)于并 行模擬器構(gòu)造方面的方法申請(qǐng)了專(zhuān)利,如專(zhuān)利號(hào)分別為5956261、5442772的美國(guó)專(zhuān)利、專(zhuān) 利號(hào)200710304653. 9的中國(guó)專(zhuān)利。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問(wèn)題是在對(duì)并行計(jì)算機(jī)系統(tǒng)上SPMD模式消息傳遞并行程 序的性能進(jìn)行模擬時(shí),提出一種串行模擬和并行模擬相結(jié)合的兩階段性能模擬方法,通過(guò) 代碼分離從消息傳遞程序分離出計(jì)算代碼段,利用串行模擬器模擬處理器上計(jì)算代碼段的 執(zhí)行時(shí)間,通過(guò)代碼標(biāo)記方法將計(jì)算代碼段執(zhí)行時(shí)間標(biāo)記到消息傳遞程序中,利用并行模擬器模擬網(wǎng)絡(luò)通信的執(zhí)行時(shí)間,并結(jié)合計(jì)算代碼段執(zhí)行時(shí)間,預(yù)測(cè)總的執(zhí)行時(shí)間,既提高性
能模擬準(zhǔn)確性,又可靈活適應(yīng)含不同處理器和網(wǎng)絡(luò)結(jié)構(gòu)的并行機(jī)系統(tǒng)的模擬。 本發(fā)明技術(shù)方案如下 第一步,從并行程序源代碼(由一系列通信語(yǔ)句與計(jì)算代碼段構(gòu)成)中分離出各 個(gè)計(jì)算代碼段,計(jì)算代碼段是一段連續(xù)的程序代碼,其中包含一系列計(jì)算語(yǔ)句或者函數(shù)調(diào) 用,但不包括通信語(yǔ)句,除了位于程序開(kāi)始或結(jié)束位置的計(jì)算代碼段之外,每個(gè)計(jì)算代碼段 的前后均與通信語(yǔ)句相鄰,將各計(jì)算機(jī)代碼段生成獨(dú)立的串行源程序文件,并將串行源程 序文件封裝為可獨(dú)立執(zhí)行的串行源程序。具體過(guò)程如下 1. 1對(duì)并行程序源代碼進(jìn)行規(guī)范化處理。從并行程序的主函數(shù)代碼開(kāi)始處一直 向后掃描到結(jié)束處,對(duì)遇到的每一個(gè)過(guò)程或函數(shù)(這里的過(guò)程或函數(shù)不包括系統(tǒng)過(guò)程或函 數(shù),為描述方便,以下統(tǒng)稱(chēng)函數(shù)),如果其中包含通信語(yǔ)句,則將該函數(shù)內(nèi)聯(lián)到主函數(shù)中,即 將主函數(shù)中對(duì)該函數(shù)的調(diào)用表達(dá)式用該函數(shù)的函數(shù)體來(lái)替換;如果該函數(shù)中還調(diào)用其它函 數(shù),則還要檢查這些被調(diào)用的函數(shù)是否包含通信語(yǔ)句,如果被調(diào)用的函數(shù)包含通信語(yǔ)句就 先將它們內(nèi)聯(lián)到被調(diào)用處。這一規(guī)范化處理步驟是遞歸的,直到檢查到原子函數(shù)(即不調(diào) 用其它函數(shù)的函數(shù))。例如,如果并行程序的主函數(shù)A調(diào)用函數(shù)B,函數(shù)B又調(diào)用函數(shù)C,函 數(shù)C中包含通信語(yǔ)句,則先要在函數(shù)B中將函數(shù)C內(nèi)聯(lián),然后在主函數(shù)A中將函數(shù)B內(nèi)聯(lián)。
經(jīng)過(guò)規(guī)范化處理,保證并行程序的主函數(shù)中調(diào)用的函數(shù)或其子函數(shù)均不包含通信 語(yǔ)句。 1. 2將文件指針定位在并行程序的主函數(shù)代碼的開(kāi)始處,初始化變量k為1。
1. 3從當(dāng)前文件指針位置開(kāi)始,定位一個(gè)新的計(jì)算代碼段。 1. 4生成一個(gè)編號(hào)為k的串行源程序文件,將當(dāng)前找到的計(jì)算代碼段放到其中,并
將該串行源程序文件封裝為一個(gè)可獨(dú)立執(zhí)行的串行源程序。具體方法是 a)創(chuàng)建一個(gè)新的源程序,將計(jì)算代碼段放在一個(gè)空的主函數(shù)中。 b)如果計(jì)算代碼段中包括對(duì)過(guò)程或函數(shù)的調(diào)用,則將該函數(shù)在調(diào)用處進(jìn)行內(nèi)聯(lián)。 c)如果當(dāng)前串行源程序中存在未初始化(即尚未被賦值)的變量,則在代碼開(kāi)始
處增加對(duì)這些變量進(jìn)行初始化的代碼,例如對(duì)單個(gè)的浮點(diǎn)變量和整數(shù)變量可采用隨機(jī)數(shù)來(lái)
初始化,對(duì)數(shù)組可以使用嵌套循環(huán)來(lái)初始化。 1.5判斷如果已到達(dá)主程序的末尾,表示并行源程序代碼中的全部計(jì)算代碼段 均已分離出來(lái),此時(shí)的k值就是得到的串行源程序的個(gè)數(shù),計(jì)共得到N個(gè)串行源程序,執(zhí)行 第二步;否則,k增加l,轉(zhuǎn)1.3。 第二步,對(duì)第一步代碼分離得到的N個(gè)串行源程序逐個(gè)進(jìn)行編譯和串行模擬,并 記錄得到的模擬性能數(shù)據(jù)(即執(zhí)行時(shí)間預(yù)測(cè)值)。具體過(guò)程如下
2. l初始化變量k為l。 2. 2編譯編號(hào)為k的串行源程序,得到編譯后的串行程序。 2. 3在單臺(tái)計(jì)算機(jī)上,使用串行模擬器軟件,對(duì)編譯得到的串行程序進(jìn)行面向處理 器性能的模擬,得到其中相應(yīng)的計(jì)算代碼段的執(zhí)行時(shí)間預(yù)測(cè)值,并將該執(zhí)行時(shí)間預(yù)測(cè)值加 入計(jì)算代碼性能數(shù)據(jù)集。計(jì)算代碼性能數(shù)據(jù)集是文本形式的,按順序存儲(chǔ)計(jì)算代碼段的編 號(hào)及其執(zhí)行時(shí)間。 2.4判斷,如果k小于N,則k值增加1,轉(zhuǎn)2.2 ;否則,執(zhí)行第三步。
第三步,將模擬得到的各計(jì)算代碼段的執(zhí)行時(shí)間預(yù)測(cè)值標(biāo)記到并行程序源代碼中。
具體過(guò)程如下 3. l初始化變量k為l。 3. 2在并行程序源代碼中定位第k個(gè)計(jì)算代碼段。 3. 3從計(jì)算代碼性能數(shù)據(jù)集中檢索第k個(gè)計(jì)算代碼段的執(zhí)行時(shí)間預(yù)測(cè)值。 3. 4在并行程序中第k個(gè)計(jì)算代碼段的末尾處,采用編譯指導(dǎo)命令標(biāo)記第k個(gè)計(jì)算
代碼段的執(zhí)行時(shí)間預(yù)測(cè)值。例如,如果是Fortran程序,采用如下方式 cDEC$EXCECUTI0N_TME_0F_REGI0N(時(shí)間),其中"cDEC$"是編譯指導(dǎo)命令前導(dǎo)
符,"EXCECUTI0N_TME_0F_REGI0N"說(shuō)明是代碼段執(zhí)行時(shí)間,而"時(shí)間"是執(zhí)行時(shí)間預(yù)測(cè)值。 如果是C程序,采用如下方式 #pragma execution_time_of_region (時(shí)間),其中"Spragma,,是編譯指導(dǎo)命令前導(dǎo)符,"exeCuti0n_time_0f_regi0n"說(shuō)明是代碼段執(zhí)行時(shí)間,而"時(shí)間"是執(zhí)行時(shí)間的預(yù)測(cè)值。 3.5判斷,如果k小于N,則K值增加1,轉(zhuǎn)3. 2 ;否則,執(zhí)行第四步。
第四步,對(duì)標(biāo)記有計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值的并行程序源代碼進(jìn)行編譯,在并行宿主機(jī)上,采用并行模擬器對(duì)其進(jìn)行通信性能模擬,結(jié)合計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值,預(yù)測(cè)并行程序整體執(zhí)行時(shí)間。具體過(guò)程如下 4. 1編譯標(biāo)記有計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值的并行程序源代碼對(duì)通信語(yǔ)句和計(jì)算代碼進(jìn)行編譯,并將說(shuō)明計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值的編譯指導(dǎo)命令編譯為并行模擬器可識(shí)別的時(shí)間提示信息。 4.2在并行宿主機(jī)上,采用并行模擬器對(duì)編譯得到的代碼進(jìn)行模擬。并行模擬器對(duì)通信代碼進(jìn)行性能模擬,預(yù)測(cè)各個(gè)通信操作的時(shí)間,得到通信時(shí)間的預(yù)測(cè)值。對(duì)各個(gè)計(jì)算代碼段不執(zhí)行性能模擬,而只進(jìn)行功能模擬(比性能模擬快得多),通過(guò)時(shí)間提示信息獲得計(jì)算代碼段執(zhí)行時(shí)間的預(yù)測(cè)值。并行模擬器結(jié)合計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值與通信時(shí)間的預(yù)測(cè)值,預(yù)測(cè)并行程序整體執(zhí)行時(shí)間。 綜上所述,本發(fā)明采取串行模擬與并行模擬的方式,實(shí)現(xiàn)并行計(jì)算機(jī)系統(tǒng)上消息傳遞程序的性能模擬。采用本發(fā)明可以達(dá)到以下技術(shù)效果 (1)利用了串行模擬器對(duì)處理器計(jì)算性能的精確模擬能力,提高對(duì)消息傳遞程序計(jì)算代碼部分性能模擬的精度,進(jìn)而提高整個(gè)并行模擬數(shù)據(jù)的精確性。 (2)利用并行模擬器的容量與性能優(yōu)勢(shì),可對(duì)大規(guī)??茖W(xué)計(jì)算程序在大規(guī)?;ミB網(wǎng)絡(luò)上的性能進(jìn)行高效模擬。 (3)基于消息傳遞程序SPMD模式的特性,僅使用單處理器對(duì)一個(gè)目標(biāo)處理器上的計(jì)算代碼段進(jìn)行模擬,而不是采用并行宿主機(jī)的全部處理器對(duì)所有目標(biāo)處理器上的計(jì)算代碼段進(jìn)行模擬,大大降低了模擬開(kāi)銷(xiāo)。如果并行模擬器中的計(jì)算代碼性能模擬模塊采用與本發(fā)明中串行模擬器相同精度的模擬模型,設(shè)目標(biāo)并行計(jì)算機(jī)系統(tǒng)的處理器數(shù)為M,則本發(fā)
明對(duì)計(jì)算代碼的模擬運(yùn)行機(jī)時(shí)僅為采用并行模擬器進(jìn)行計(jì)算代碼模擬運(yùn)行機(jī)時(shí)的1/M。
(4)由于可分別選擇面向處理器的串行模擬器和面向互連網(wǎng)絡(luò)的并行模擬器,因
此提高了模擬技術(shù)的靈活性,可適應(yīng)更多并行計(jì)算機(jī)體系結(jié)構(gòu)的性能模擬,特別是可以采
7用針對(duì)新型處理器的串行模擬器和針對(duì)新型互連網(wǎng)絡(luò)的并行模擬器。
圖1是本發(fā)明的總體流程圖。 圖2是本發(fā)明第一步從并行源程序中分離計(jì)算代碼段的流程圖。 圖3是本發(fā)明第二步對(duì)分離得到的各個(gè)串行源程序進(jìn)行串行模擬的流程圖。 圖4是本發(fā)明第三步將各個(gè)計(jì)算代碼段的執(zhí)行時(shí)間預(yù)測(cè)值標(biāo)記到并行程序源代
碼中的流程圖。 圖5是采用本發(fā)明使并行模擬整體精度提高的示意圖。
具體實(shí)施例方式圖1是本發(fā)明的總體流程圖。主要流程是 步驟S101,從并行源程序中分離計(jì)算代碼段從并行程序源代碼中分離出各個(gè)計(jì) 算代碼段,并將各計(jì)算代碼段封裝成獨(dú)立的串行源程序,并增加使其可獨(dú)立運(yùn)行的代碼。
步驟S102,對(duì)分離得到的串行源程序進(jìn)行串行模擬在單機(jī)上對(duì)每個(gè)計(jì)算代碼段 進(jìn)行串行模擬,包括編譯、串行模擬并記錄模擬預(yù)測(cè)時(shí)間。 步驟S103,將模擬得到的各個(gè)計(jì)算代碼段的執(zhí)行時(shí)間預(yù)測(cè)值標(biāo)記到并行程序源代 碼中。 步驟S104,采用并行模擬器進(jìn)行并行模擬對(duì)標(biāo)記有計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值 的并行程序源代碼進(jìn)行編譯,在并行宿主機(jī)上,采用并行模擬器對(duì)其進(jìn)行通信性能模擬,結(jié) 合計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值,預(yù)測(cè)并行程序整體執(zhí)行時(shí)間。
圖2是本發(fā)明第一步分離計(jì)算代碼段的流程圖。流程是 步驟S201,對(duì)并行程序源代碼進(jìn)行規(guī)范化處理,保證并行程序源代碼中沒(méi)有既包 括計(jì)算代碼又包括通信代碼的過(guò)程或函數(shù)。 步驟S202,打開(kāi)并行程序源代碼,將文件指針定位在開(kāi)始處。初始化變量k為1。
步驟S203,從當(dāng)前指針位置開(kāi)始,定位一個(gè)新的計(jì)算代碼段。 步驟S204,生成一個(gè)編號(hào)為k的串行源程序文件,將當(dāng)前找到的計(jì)算代碼段放到 其中,并將該串行源程序文件封裝為一個(gè)可獨(dú)立執(zhí)行的串行源程序。 步驟S205,判斷如果文件指針已到達(dá)程序末尾,則代碼分離軟件執(zhí)行結(jié)束;否 則,k增加1,轉(zhuǎn)步驟S203。 圖3是本發(fā)明第二步對(duì)串行源程序進(jìn)行串行模擬的流程圖。流程是 步驟S301 ,初始化變量k為1 。 步驟S302,編譯編號(hào)為k的串行源程序。 步驟S303,在單臺(tái)計(jì)算機(jī)上,使用串行模擬器軟件,對(duì)編譯得到的串行程序進(jìn)行面
向處理器的性能模擬,模擬完成后將模擬預(yù)測(cè)得到的時(shí)間加入計(jì)算代碼性能數(shù)據(jù)集。 步驟S304,判斷如果k小于N,則K值增加1,轉(zhuǎn)步驟S302 ;否則,結(jié)束。 圖4是本發(fā)明第三步將各個(gè)計(jì)算代碼段的執(zhí)行時(shí)間預(yù)測(cè)值標(biāo)記到并行程序源代
碼中的流程圖。流程是 步驟S401 ,初始化變量k為1 。
步驟S402 ,在并行程序中定位第k個(gè)計(jì)算代碼段。 步驟S403,從計(jì)算代碼性能數(shù)據(jù)集中檢索第k個(gè)計(jì)算代碼段的執(zhí)行時(shí)間預(yù)測(cè)值。
步驟S404,在并行程序中第k個(gè)計(jì)算代碼段的末尾處,采用編譯指導(dǎo)命令方式,標(biāo) 記第k個(gè)計(jì)算代碼段的執(zhí)行時(shí)間預(yù)測(cè)值。 步驟S405,判斷如果k小于N,則K值增加1,轉(zhuǎn)步驟S402 ;否則,結(jié)束。
圖5給出了采用本發(fā)明使模擬精度提高的示意圖。分別采用本發(fā)明(并行模擬器 和串行模擬器相結(jié)合的方法)和伊利諾伊大學(xué)厄貝納香檳分校的BigSim模擬方法(即背 景技術(shù)所述的只采用并行模擬器的方法)(見(jiàn)http:〃charm. cs. uiuc. edu),在一個(gè)含4處 理器的PC機(jī)群上模擬一套含16個(gè)Intel Itanium 2處理器的基于千兆以太網(wǎng)互連的HP 集群系統(tǒng)的性能。所采用的測(cè)試程序?yàn)橐粋€(gè)求解三維Jacobi迭代問(wèn)題的消息傳遞并行程 序Jacobi3d。兩種方法對(duì)程序并行程序在目標(biāo)機(jī)上執(zhí)行時(shí)間的模擬精度如圖5所示。從 圖5可以看出,本發(fā)明相對(duì)于BigSim模擬方法的模擬精度有一定程度的提高,提高幅度在 1. 38% -8. 85%之間。
9
權(quán)利要求
一種串行與并行模擬相結(jié)合的并行計(jì)算機(jī)系統(tǒng)性能模擬方法,其特征在于包括以下步驟第一步,從并行程序源代碼中分離出各個(gè)計(jì)算代碼段,計(jì)算代碼段是一段連續(xù)的程序代碼,其中包含一系列計(jì)算語(yǔ)句或者函數(shù)調(diào)用,但不包括通信語(yǔ)句,除了位于程序開(kāi)始或結(jié)束位置的計(jì)算代碼段之外,每個(gè)計(jì)算代碼段的前后均與通信語(yǔ)句相鄰,將各計(jì)算機(jī)代碼段生成獨(dú)立的串行源程序文件,并將串行源程序文件封裝為可獨(dú)立執(zhí)行的串行源程序,具體過(guò)程如下1.1對(duì)并行程序源代碼進(jìn)行規(guī)范化處理從并行程序的主函數(shù)代碼開(kāi)始處一直向后掃描到結(jié)束處,對(duì)遇到的每一個(gè)過(guò)程或函數(shù),如果其中包含通信語(yǔ)句,則將該函數(shù)內(nèi)聯(lián)到主函數(shù)中,即將主函數(shù)中對(duì)該函數(shù)的調(diào)用表達(dá)式用該函數(shù)的函數(shù)體來(lái)替換;如果該函數(shù)中還調(diào)用其它函數(shù),則還要檢查這些被調(diào)用的函數(shù)是否包含通信語(yǔ)句,如果被調(diào)用的函數(shù)包含通信語(yǔ)句就先將它們內(nèi)聯(lián)到被調(diào)用處;這一規(guī)范化處理步驟是遞歸的,直到檢查到原子函數(shù)-即不調(diào)用其它函數(shù)的函數(shù);1.2將文件指針定位在并行程序的主函數(shù)代碼的開(kāi)始處,初始化變量k為1;1.3從當(dāng)前文件指針位置開(kāi)始,定位一個(gè)新的計(jì)算代碼段;1.4生成一個(gè)編號(hào)為k的串行源程序文件,將當(dāng)前找到的計(jì)算代碼段放到其中,并將該串行源程序文件封裝為一個(gè)可獨(dú)立執(zhí)行的串行源程序,具體方法是a)創(chuàng)建一個(gè)新的源程序,將計(jì)算代碼段放在一個(gè)空的主函數(shù)中;b)如果計(jì)算代碼段中包括對(duì)過(guò)程或函數(shù)的調(diào)用,則將該函數(shù)在調(diào)用處進(jìn)行內(nèi)聯(lián);c)如果當(dāng)前串行源程序中存在未初始化即尚未被賦值的變量,則在代碼開(kāi)始處增加對(duì)這些變量進(jìn)行初始化的代碼;1.5判斷如果已到達(dá)主程序的末尾,表示并行源程序代碼中的全部計(jì)算代碼段均已分離出來(lái),此時(shí)的k值就是得到的串行源程序的個(gè)數(shù),計(jì)共得到N個(gè)串行源程序,執(zhí)行第二步;否則,k增加1,轉(zhuǎn)1.3;第二步,對(duì)第一步代碼分離得到的N個(gè)串行源程序逐個(gè)進(jìn)行編譯和串行模擬,并記錄得到的執(zhí)行時(shí)間預(yù)測(cè)值,具體過(guò)程如下2.1初始化變量k為1;2.2編譯編號(hào)為k的串行源程序,得到編譯后的串行程序;2.3在單臺(tái)計(jì)算機(jī)上,使用串行模擬器軟件,對(duì)串行程序進(jìn)行面向處理器性能的模擬,得到計(jì)算代碼段的執(zhí)行時(shí)間預(yù)測(cè)值,并將該執(zhí)行時(shí)間預(yù)測(cè)值加入計(jì)算代碼性能數(shù)據(jù)集,計(jì)算代碼性能數(shù)據(jù)集是文本形式的,按順序存儲(chǔ)計(jì)算代碼段的編號(hào)及其執(zhí)行時(shí)間;2.4判斷,如果k小于N,則k值增加1,轉(zhuǎn)2.2;否則,執(zhí)行第三步;第三步,將模擬得到的各計(jì)算代碼段的執(zhí)行時(shí)間預(yù)測(cè)值標(biāo)記到并行程序源代碼中,具體過(guò)程如下3.1初始化變量k為1;3.2在并行程序源代碼中定位第k個(gè)計(jì)算代碼段;3.3從計(jì)算代碼性能數(shù)據(jù)集中檢索第k個(gè)計(jì)算代碼段的執(zhí)行時(shí)間預(yù)測(cè)值;3.4在并行程序中第k個(gè)計(jì)算代碼段的末尾處,采用編譯指導(dǎo)命令標(biāo)記第k個(gè)計(jì)算代碼段的執(zhí)行時(shí)間預(yù)測(cè)值;3.5判斷,如果k小于N,則K值增加1,轉(zhuǎn)3.2;否則,執(zhí)行第四步;第四步,對(duì)標(biāo)記有計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值的并行程序源代碼進(jìn)行編譯,在并行宿主機(jī)上,采用并行模擬器對(duì)其進(jìn)行通信性能模擬,結(jié)合計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值,預(yù)測(cè)并行程序整體執(zhí)行時(shí)間,具體過(guò)程如下4.1編譯標(biāo)記有計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值的并行程序源代碼對(duì)通信語(yǔ)句和計(jì)算代碼進(jìn)行編譯,并將說(shuō)明計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值的編譯指導(dǎo)命令編譯為并行模擬器可識(shí)別的時(shí)間提示信息;4.2在并行宿主機(jī)上,采用并行模擬器對(duì)編譯得到的代碼進(jìn)行模擬并行模擬器對(duì)通信代碼進(jìn)行性能模擬,預(yù)測(cè)各個(gè)通信操作的時(shí)間,得到通信時(shí)間的預(yù)測(cè)值;對(duì)各個(gè)計(jì)算代碼段不執(zhí)行性能模擬,只進(jìn)行功能模擬,通過(guò)時(shí)間提示信息獲得計(jì)算代碼段執(zhí)行時(shí)間的預(yù)測(cè)值;并行模擬器結(jié)合計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值與通信時(shí)間的預(yù)測(cè)值,預(yù)測(cè)并行程序整體執(zhí)行時(shí)間。
3. 5判斷,如果k小于N,則K值增加l,轉(zhuǎn)3. 2 ;否則,執(zhí)行第四步;第四步,對(duì)標(biāo)記有計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值的并行程序源代碼進(jìn)行編譯,在并行宿主機(jī)上,采用并行模擬器對(duì)其進(jìn)行通信性能模擬,結(jié)合計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值,預(yù)測(cè)并行程序整體執(zhí)行時(shí)間,具體過(guò)程如下4. 1編譯標(biāo)記有計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值的并行程序源代碼對(duì)通信語(yǔ)句和計(jì)算代碼進(jìn)行編譯,并將說(shuō)明計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值的編譯指導(dǎo)命令編譯為并行模擬器可識(shí)別的時(shí)間提示信息;4. 2在并行宿主機(jī)上,采用并行模擬器對(duì)編譯得到的代碼進(jìn)行模擬并行模擬器對(duì)通信代碼進(jìn)行性能模擬,預(yù)測(cè)各個(gè)通信操作的時(shí)間,得到通信時(shí)間的預(yù)測(cè)值;對(duì)各個(gè)計(jì)算代碼段不執(zhí)行性能模擬,只進(jìn)行功能模擬,通過(guò)時(shí)間提示信息獲得計(jì)算代碼段執(zhí)行時(shí)間的預(yù)測(cè)值;并行模擬器結(jié)合計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值與通信時(shí)間的預(yù)測(cè)值,預(yù)測(cè)并行程序整體執(zhí)行時(shí)間。
全文摘要
本發(fā)明公開(kāi)了一種串行與并行模擬相結(jié)合的并行計(jì)算機(jī)系統(tǒng)性能模擬方法,要解決的技術(shù)問(wèn)題是提高性能模擬準(zhǔn)確性和模擬效率。技術(shù)方案是先從并行源程序中分離計(jì)算代碼段,將各計(jì)算機(jī)代碼段封裝為可獨(dú)立執(zhí)行的串行源程序;接著對(duì)串行源程序進(jìn)行串行模擬,得到的各計(jì)算代碼段的執(zhí)行時(shí)間預(yù)測(cè)值;然后將各計(jì)算代碼段的執(zhí)行時(shí)間預(yù)測(cè)值標(biāo)記到并行程序源代碼中;最后采用并行模擬器進(jìn)行通信性能模擬,結(jié)合計(jì)算代碼段執(zhí)行時(shí)間預(yù)測(cè)值,預(yù)測(cè)并行程序整體執(zhí)行時(shí)間。本發(fā)明適應(yīng)含不同處理器和網(wǎng)絡(luò)結(jié)構(gòu)的并行機(jī)系統(tǒng)的模擬,采用本發(fā)明既可提高整個(gè)并行模擬數(shù)據(jù)的精確性,又可對(duì)大規(guī)??茖W(xué)計(jì)算程序在大規(guī)模互連網(wǎng)絡(luò)上的性能進(jìn)行高效模擬,且大大降低了模擬開(kāi)銷(xiāo)。
文檔編號(hào)G06F9/46GK101694628SQ20091004457
公開(kāi)日2010年4月14日 申請(qǐng)日期2009年10月21日 優(yōu)先權(quán)日2009年10月21日
發(fā)明者彭宇行, 徐傳福, 方建濱, 王勇獻(xiàn), 王正華, 翁玉芬, 車(chē)永剛, 陸平靜 申請(qǐng)人:中國(guó)人民解放軍國(guó)防科學(xué)技術(shù)大學(xué);