專利名稱:一種基于超級(jí)計(jì)算機(jī)的hla仿真程序的對(duì)象調(diào)度方法
技術(shù)領(lǐng)域:
本發(fā)明涉及基于超級(jí)計(jì)算機(jī)的HLA仿真程序的對(duì)象調(diào)度方法,特別是將HLA仿真程序中的各個(gè)仿真對(duì)象調(diào)度到超級(jí)計(jì)算機(jī)的眾多CPU核中并行執(zhí)行的方法。
背景技術(shù):
近年來,中國的超級(jí)計(jì)算機(jī)取得了舉世矚目的成就。2010年11月,由國防科技大學(xué)研制的“天河一號(hào)”和曙光公司研制的“星云”千萬億次超級(jí)計(jì)算機(jī)分列世界超級(jí)計(jì)算機(jī)500強(qiáng)的第一名和第三名。國家已經(jīng)在北京、上海、深圳、天津、濟(jì)南、廣州、長沙等地建立了超算中心,并在這些超算中心安裝了百萬億次至千萬億次的超級(jí)計(jì)算機(jī),這對(duì)于普及和提升我國的高性能并行計(jì)算技術(shù)水平必將產(chǎn)生重要的影響。如何高效利用這些計(jì)算資源是當(dāng)前面臨的重要研究問題,而大規(guī)模并行仿真是超級(jí)計(jì)算機(jī)的一個(gè)重要應(yīng)用領(lǐng)域。高層體系結(jié)構(gòu)HLA (High Level Architecture)是一個(gè)最初由美國國防部建立的仿真標(biāo)準(zhǔn),現(xiàn)在已經(jīng)發(fā)展成為IEEE國際仿真標(biāo)準(zhǔn),而按照HLA標(biāo)準(zhǔn)實(shí)現(xiàn)的軟件則被稱為 運(yùn)行支撐軟件RTI (Run-Time Infrastructure)。HLA主要應(yīng)用于由“微機(jī)+網(wǎng)絡(luò)”構(gòu)成的分布式仿真系統(tǒng),代表著當(dāng)今分布式仿真技術(shù)的主流,我國的很多分布式仿真系統(tǒng)都是基于RTI軟件開發(fā)的。在HLA標(biāo)準(zhǔn)中,當(dāng)仿真程序運(yùn)行時(shí),相應(yīng)的運(yùn)行進(jìn)程被稱之為仿真成員(Federate);所有仿真成員構(gòu)成一個(gè)聯(lián)邦(Federation)。RTI通常由一個(gè)“中心RTI部件”與多個(gè)“本地RTI部件”組成,本質(zhì)上是一個(gè)用于仿真程序之間互操作的通信軟件?!爸行腞TI部件”負(fù)責(zé)維護(hù)與全局相關(guān)的信息;每個(gè)“本地RTI部件”以動(dòng)態(tài)鏈接庫或靜態(tài)庫的方式與一個(gè)仿真成員綁定在一起,負(fù)責(zé)將仿真成員的消息發(fā)送到其他仿真成員的“本地RTI部件”,以及將來自其他仿真成員的“本地RTI部件”的消息回調(diào)給仿真成員。一個(gè)“本地RTI部件”通常包含7個(gè)部件聯(lián)邦管理部件、聲明管理部件、所有權(quán)管理部件、對(duì)象管理部件、時(shí)間管理部件、數(shù)據(jù)分發(fā)管理部件、通信部件。前6個(gè)部件用于實(shí)現(xiàn)HLA標(biāo)準(zhǔn)中規(guī)定的6項(xiàng)功能,而通信部件則用于實(shí)現(xiàn)“本地RTI部件”與“中心RTI部件”之間的通信,以及“本地RTI部件”與其他仿真成員的“本地RTI部件”之間的通信。然而,基于HLA標(biāo)準(zhǔn)開發(fā)的RTI軟件卻不適合面向超級(jí)計(jì)算機(jī)的并行仿真系統(tǒng)。隨著仿真技術(shù)的發(fā)展及應(yīng)用的不斷深入,基于超級(jí)計(jì)算機(jī)運(yùn)行的并行仿真系統(tǒng)通常都很復(fù)雜,不僅仿真對(duì)象數(shù)目多,而且仿真對(duì)象的計(jì)算量大,相互間的通信量也很大?,F(xiàn)有的RTI軟件只是一個(gè)通信軟件,缺乏對(duì)仿真對(duì)象的分發(fā)調(diào)度功能,如果在超級(jí)計(jì)算機(jī)上運(yùn)行由RTI軟件開發(fā)的復(fù)雜仿真系統(tǒng),則會(huì)存在以下兩個(gè)問題。(I)計(jì)算瓶頸。當(dāng)一個(gè)仿真成員中包含很多仿真對(duì)象時(shí),RTI無法將它們分散到超級(jí)計(jì)算機(jī)的多個(gè)CPU核中并行運(yùn)行,因此這些仿真對(duì)象只能串行運(yùn)行在超級(jí)計(jì)算機(jī)的一個(gè)CPU核中,彼此會(huì)競爭CPU資源,造成計(jì)算瓶頸,從而導(dǎo)致仿真效率低。(2)通信瓶頸。由于一個(gè)仿真成員只能通過一個(gè)“本地RTI部件”發(fā)送和接收消息。當(dāng)一個(gè)仿真成員包含很多仿真對(duì)象時(shí),這些仿真對(duì)象只能共享一個(gè)“本地RTI部件”。因此,一方面,一個(gè)仿真成員中的多個(gè)仿真對(duì)象產(chǎn)生的消息只能一個(gè)接一個(gè)地由“本地RTI部件”發(fā)送給其他仿真成員的“本地RTI部件”;另一方面,一個(gè)“本地RTI部件”只能串行地從其他仿真成員的“本地RTI部件”接收消息,再將這些消息串行轉(zhuǎn)發(fā)給仿真成員中的各個(gè)仿真對(duì)象。以上兩個(gè)原因直接導(dǎo)致現(xiàn)有HLA仿真系統(tǒng)的仿真規(guī)模不大,仿真成員數(shù)不可能太多,因而不能充分發(fā)揮超級(jí)計(jì)算機(jī)的成千上萬個(gè)CPU核的作用。
目前有一些基于超級(jí)計(jì)算機(jī)實(shí)現(xiàn)并行仿真的方法。(I)針對(duì)超級(jí)計(jì)算機(jī)的特點(diǎn)對(duì)RTI軟件的通信技術(shù)進(jìn)行優(yōu)化的方法。例如由 Martin Adelantado 撰寫的文獻(xiàn)(HP-CERTI: Towards a high performance, highavailability open source RTI for composable simulations, “HP-CERTI:為了可重用的仿真,朝著高性能、高可用的開源RTI邁進(jìn)”,F(xiàn)all Simulation InteroperabilityWorkshop, 2004)報(bào)告了針對(duì)超級(jí)計(jì)算機(jī)的多核特點(diǎn)設(shè)計(jì)共享內(nèi)存RTI的方法。由RogerJansen 撰寫的文獻(xiàn)(Real-time scheduling of HLA simulator components, “HLA 仿真器組件的實(shí)時(shí)調(diào)度”,Spring Simulation Interoperability Workshop, 2004)報(bào)告了使用消息隊(duì)列設(shè)計(jì)共享內(nèi)存,以及使用m)P/IP協(xié)議設(shè)計(jì)分布式內(nèi)存的RTI軟件設(shè)計(jì)方法。這些方法只是對(duì)RTI軟件的通信方法進(jìn)行了優(yōu)化,能在一定程度上緩解RTI的通信瓶頸,但不能從本質(zhì)上解決RTI的計(jì)算瓶頸和通信瓶頸問題,以及仿真規(guī)模小的問題。(2)對(duì)HLA仿真程序的結(jié)構(gòu)進(jìn)行重新設(shè)計(jì)的方法。例如由Alex Radeski等人撰寫的文獻(xiàn)(Towards a Simulation Component Model for HLA, “朝著 HLA 仿真組件模型邁進(jìn)”,Fall Simulation Interoperability Workshop, 2002)以及由襲建興等人撰寫的文獻(xiàn)·(“構(gòu)建可擴(kuò)展的HLA聯(lián)邦成員架構(gòu)”,系統(tǒng)仿真學(xué)報(bào)第18卷第11期,2006)提出的“組件方法”將仿真程序設(shè)計(jì)為多個(gè)組件,每個(gè)組件包含多個(gè)仿真對(duì)象模型,組件可以采用線程技術(shù)也可以不采用線程技術(shù);用戶可以根據(jù)需要將若干個(gè)組件組合為一個(gè)仿真成員,整個(gè)仿真系統(tǒng)可以組合為多個(gè)仿真成員。這種方法的主要目的是為了實(shí)現(xiàn)仿真組件的靈活重用而實(shí)現(xiàn)的,一個(gè)組件可以應(yīng)用于多個(gè)仿真系統(tǒng)而不需要修改程序代碼。然而,該方法至少有兩方面的缺點(diǎn),其一,由于只是在仿真程序的結(jié)構(gòu)上進(jìn)行了改進(jìn),RTI軟件本身并沒有進(jìn)行優(yōu)化,因此RTI不能有效地對(duì)組件進(jìn)行靈活分發(fā),以利用更多的CPU核;其二,HLA的時(shí)間管理有三種方式步進(jìn)的、事件的、樂觀的。組件方法只支持“步進(jìn)的”時(shí)間管理方式,不能很好地支持其他兩種方式,不具有通用性。(3)使用RTI軟件連接特定仿真系統(tǒng)的方法。例如由Kalyan S.Perumalla等人撰寫的文獻(xiàn)(Scalable RTI-based parallel simulation of networks, “基于 RTI的規(guī)??蓴U(kuò)的并行網(wǎng)絡(luò)仿真”,17th Workshop on PADS,2003)報(bào)告了在超級(jí)計(jì)算機(jī)上將RTI應(yīng)用于網(wǎng)絡(luò)仿真的方法,網(wǎng)絡(luò)仿真是一類研究網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的專用仿真,相關(guān)的協(xié)議軟件有OpNet、QualNet、NIS、Omnest++等,通過這些軟件可以設(shè)計(jì)出一個(gè)網(wǎng)絡(luò)仿真程序,這樣的程序不需要RTI就可以單獨(dú)運(yùn)行,但通過RTI可以將多個(gè)網(wǎng)絡(luò)仿真程序互聯(lián)為一個(gè)規(guī)模更大的網(wǎng)絡(luò)仿真系統(tǒng)。由CongDuc Pham等人撰寫的文獻(xiàn)(Building paralleltime-constrained HLA federates:a case study with the Parsec parallel simulationlanguage,“建立并行的時(shí)間受限的HLA仿真成員使用Parsec并行仿真語言的一個(gè)示例”,Winter Simulation Conference, 1998)報(bào)告了基于RTI軟件互聯(lián)Parsec并行程序的方法,Parsec是一種不同于HLA的并行仿真引擎,多個(gè)Parsec程序通過RTI軟件可以互聯(lián)為一個(gè)較大規(guī)模的仿真系統(tǒng)。這樣的方法不具有通用性,不能用來設(shè)計(jì)各種HLA并行仿真程序。(4)使用專門的并行仿真引擎的方法。在面向超級(jí)計(jì)算機(jī)的并行仿真領(lǐng)域,國外為大規(guī)模并行仿真開發(fā)了以 SPEEDES, Charm++、POSE、ROSS、SIMKIT, μ ji、μ sik、WarpIV 等為代表的許多并行仿真支撐軟件,這些軟件采用的技術(shù)與HLA/RTI完全不同,其優(yōu)點(diǎn)在于這些軟件能夠?qū)⒁粋€(gè)仿真程序中的各個(gè)仿真對(duì)象調(diào)度到超級(jí)計(jì)算機(jī)的眾多CPU核中并行運(yùn)行;但是也存在一些缺點(diǎn)其一,缺少統(tǒng)一的標(biāo)準(zhǔn),每個(gè)并行仿真軟件都有自己的一套規(guī)范,使用難度大;其二,很難與已有的HLA仿真系統(tǒng)進(jìn)行互聯(lián),國內(nèi)的HLA用戶一般不愿意使用國外的這些并行仿真支撐軟件。根據(jù)專利文獻(xiàn)檢索,以往的專利與文獻(xiàn)中尚未見到將仿真成員中的各個(gè)仿真對(duì)象分發(fā)到超級(jí)計(jì)算機(jī)的多個(gè)CPU核中進(jìn)行快速仿真的RTI對(duì)象調(diào)度方法。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提出一種基于超級(jí)計(jì)算機(jī)的HLA仿真程序的對(duì)象調(diào)度方法,使得RTI軟件能夠支持將HLA仿真程序中的各個(gè)仿真對(duì)象分發(fā)到超級(jí)計(jì)算機(jī)的眾多CPU核中并行運(yùn)行,以減少仿真的計(jì)算時(shí)間和通信時(shí)間,提高仿真效率。本發(fā)明的技術(shù)方案如下
第一步,修改本地RTI部件,在本地RTI部件中增加對(duì)象調(diào)度器。對(duì)象調(diào)度器根據(jù)仿真程序的輸入?yún)?shù)創(chuàng)建仿真對(duì)象,并將仿真對(duì)象返回給仿真程序;本地RTI部件中的原有部件包含7個(gè)部件聯(lián)邦管理部件、聲明管理部件、所有權(quán)管理部件、對(duì)象管理部件、時(shí)間管理部件、數(shù)據(jù)分發(fā)管理部件、通信部件;第二步,基于本地RTI部件設(shè)計(jì)并行仿真程序,并行仿真程序由主程序即main程序以及回調(diào)部件組成。主程序是仿真程序運(yùn)行時(shí)的入口,主程序一方面在仿真開始時(shí)將每種類型的仿真對(duì)象的相關(guān)參數(shù)發(fā)送給對(duì)象調(diào)度器,由對(duì)象調(diào)度器創(chuàng)建該種類型的仿真對(duì)象;另一方面在仿真過程中向本地RTI部件的原有部件發(fā)送HLA服務(wù);回調(diào)部件是仿真程序中用來從本地RTI部件的原有部件接收回調(diào)服務(wù)的部件;第三步,將并行仿真程序進(jìn)行編譯和連接,得到可執(zhí)行仿真程序,將可執(zhí)行仿真程序加載到超級(jí)計(jì)算機(jī)的多個(gè)CPU核,方法是3. I在超級(jí)計(jì)算機(jī)的一個(gè)計(jì)算節(jié)點(diǎn)上啟動(dòng)“中心RTI部件”,“中心RTI部件”啟動(dòng)后占用超級(jí)計(jì)算機(jī)的一個(gè)CPU核;3. 2使用批處理命令或者操作系統(tǒng)提供的作業(yè)加載命令啟動(dòng)可執(zhí)行仿真程序,將可執(zhí)行仿真程序加載到超級(jí)計(jì)算機(jī)的k個(gè)CPU核中運(yùn)行,這k個(gè)CPU核不含“中心RTI部件”啟動(dòng)后所占用的一個(gè)CPU核,k是大于O的整數(shù),一個(gè)CPU核只運(yùn)行一個(gè)進(jìn)程,每個(gè)進(jìn)程都是一個(gè)仿真成員;第四步,每個(gè)CPU核上的仿真成員按照主程序的流程執(zhí)行,由對(duì)象調(diào)度器創(chuàng)建隸屬于各個(gè)仿真成員的仿真對(duì)象,眾多仿真對(duì)象被調(diào)度到各個(gè)CPU核上并行執(zhí)行,具體步驟是:4. I每個(gè)CPU核上的仿真成員按照主程序的流程執(zhí)行,方法是主程序向本地RTI部件發(fā)送“加入聯(lián)邦執(zhí)行”服務(wù),本地RTI部件收到“加入聯(lián)邦執(zhí)行”服務(wù)后與中心RTI部件進(jìn)行通信,中心RTI部件為該主程序所屬仿真成員分配一個(gè)稱為“成員句柄”的唯一整數(shù)值f,f為整數(shù)且O < f〈仿真成員數(shù),f被保存在本地RTI部件處,中心RTI部件按照仿真成員加入仿真系統(tǒng)的先后順序依次分配“成員句柄”值;4. 2主程序確認(rèn)是否還有仿真對(duì)象未被對(duì)象調(diào)度器分發(fā),若還有仿真對(duì)象未被分發(fā),主程序與對(duì)象調(diào)度器進(jìn)行通信,將與一種類型的仿真對(duì)象相關(guān)的四個(gè)參數(shù)“仿真對(duì)象類型t、仿真對(duì)象數(shù)η、仿真成員數(shù)k、分發(fā)方式”發(fā)送給對(duì)象調(diào)度器執(zhí)行4. 3步;若所有類型的仿真對(duì)象都被對(duì)象調(diào)度器分發(fā),則轉(zhuǎn)4. 4步。所述t為字符串,n和k為大于0的整數(shù);分發(fā)方式包括“發(fā)牌式”、“塊式”、“文件方式”;4. 3對(duì)象調(diào)度器從主程序收到與某種類型的仿真對(duì)象相關(guān)的四個(gè)參數(shù)“仿真對(duì)象類型t、仿真對(duì)象數(shù)n、仿真成員數(shù)k、分發(fā)方式”后,將η個(gè)仿真對(duì)象分發(fā)到k個(gè)仿真成員中,方法是4. 3. 1若從主程序接收到的分發(fā)方式為“發(fā)牌式”,則對(duì)象調(diào)度器用仿真對(duì)象的編號(hào)s模仿真成員數(shù)k,s為整數(shù)且0 ≤ s〈n,如果余數(shù)等于仿真成員的“成員句柄” f,則對(duì)象調(diào)度器創(chuàng)建編號(hào)為s的仿真對(duì)象。對(duì)象調(diào)度器將“仿真對(duì)象創(chuàng)建完成”的消息發(fā)送給主程序,轉(zhuǎn)4.2步;4. 3. 2若從主程序接收到的分發(fā)方式為“塊式”,則對(duì)象調(diào)度器按以下方法處理4. 3. 2. 1設(shè)置兩個(gè)整數(shù)n1、n2,其中n1=n/k」,n2=n%k,」”為取下整數(shù),“%”為取余數(shù);4. 3. 2. 2如果仿真成員的“成員句柄” f〈n2,則對(duì)象調(diào)度器創(chuàng)建編號(hào)從fX (nl+1)開始的連續(xù)nl+1個(gè)仿真對(duì)象;否則對(duì)象調(diào)度器創(chuàng)建編號(hào)從n2X (nl+1) + (f-n2) Xnl開始的連續(xù)nl個(gè)仿真對(duì)象。對(duì)象調(diào)度器將“仿真對(duì)象創(chuàng)建完成”的消息發(fā)送給主程序,轉(zhuǎn)4. 2步;4. 3. 3若從主程序接收到的分發(fā)方式為“文件方式”,則對(duì)象調(diào)度器按以下方法處理4. 3. 3. 1對(duì)象調(diào)度器從仿真程序的當(dāng)前目錄下讀取“對(duì)象指派文件”,“對(duì)象指派文件”由注釋語句和若干個(gè)塊結(jié)構(gòu)組成。注釋語句是自字符‘#’開始直到行尾的一串字符,起解釋說明的作用。塊結(jié)構(gòu)是用來描述一種類型的仿真對(duì)象在仿真成員中的分布情況的數(shù)據(jù)結(jié)構(gòu)。一個(gè)塊結(jié)構(gòu)為“仿真對(duì)象類型t {第I行第2行第3行…} ”,每行由兩部分內(nèi)容組成,結(jié)構(gòu)為“f:sl s2 s3... ”,其中f表示某個(gè)仿真成員的“成員句柄”,sl、s2、s3、…為仿真對(duì)象的編號(hào),該行表示與這些編號(hào)對(duì)應(yīng)的仿真對(duì)象應(yīng)分發(fā)到“成員句柄”為f的仿真成員;4. 3. 3. 2對(duì)象調(diào)度器在“對(duì)象指派文件”中查找仿真對(duì)象類型為t的塊結(jié)構(gòu),若沒有找到,表示“對(duì)象指派文件”不正確,則報(bào)錯(cuò)并轉(zhuǎn)第五步;若找到了仿真對(duì)象類型為t的塊結(jié)構(gòu),則根據(jù)仿真成員的“成員句柄” f查找塊結(jié)構(gòu)中以“f: ”開始的行,進(jìn)行如下處理4. 3. 3. 2. 1如果在塊結(jié)構(gòu)中沒有找到以“f: ”開始的行,則轉(zhuǎn)4. 2步;4. 3. 3. 2. 2如果在塊結(jié)構(gòu)中找到以“f: ”開始的行,則從該行中提取所有仿真對(duì)象的編號(hào)si、s2、S3、…,對(duì)象調(diào)度器創(chuàng)建編號(hào)為si、s2、s3、…的仿真對(duì)象。對(duì)象調(diào)度器將“仿真對(duì)象創(chuàng)建完成”的消息發(fā)送給主程序,轉(zhuǎn)4. 2步;4. 4仿真成員中的各個(gè)仿真對(duì)象開始執(zhí)行,在仿真過程中調(diào)用HLA服務(wù)向本地RTI部件發(fā)送消息,并由回調(diào)部件接收來自其他本地RTI部件的消息;第五步,結(jié)束。采用本發(fā)明可以達(dá)到以下技術(shù)效果(1)效率高。本發(fā)明第4. 3步將HLA仿真程序中的各個(gè)仿真對(duì)象分發(fā)到超級(jí)計(jì)算機(jī)的多個(gè)CPU核上并行運(yùn)行。如果HLA仿真程序包含的仿真對(duì)象很多,仿真對(duì)象的模型特別復(fù)雜或計(jì)算量、通信量特別大,則將這些仿真對(duì)象分發(fā)到多個(gè)CPU核上就可以實(shí)現(xiàn)相互間的并行運(yùn)行,從而大幅度地減小仿真的計(jì)算時(shí)間和通信時(shí)間,提高仿真的運(yùn)行效率。(2)用戶編程簡單。采用本發(fā)明后,用戶在編程時(shí)不需要關(guān)心RTI如何將仿真對(duì)象分發(fā)到超級(jí)計(jì)算機(jī)的眾多CPU核,具體操作細(xì)節(jié)被封裝到RTI中并對(duì)用戶透明。綜上所述,本發(fā)明面向具有眾多CPU核的超級(jí)計(jì)算機(jī),通過“修改RTI軟件,在RTI中增加對(duì)象調(diào)度器”的方法,使得RTI能夠?qū)LA仿真程序中的各個(gè)仿真對(duì)象分發(fā)到超級(jí)計(jì)算機(jī)的眾多CPU核上進(jìn)行并行仿真,克服了背景技術(shù)采用原有RTI軟件時(shí)各個(gè)仿真對(duì)象只能“擠”在一個(gè)仿真成員中“串行執(zhí)行”以及“串行發(fā)送和接收事件”而導(dǎo)致的“計(jì)算瓶頸”以及“通信瓶頸”問題,從而減少了仿真的計(jì)算時(shí)間和通信時(shí)間,提高了運(yùn)行效率。
圖I是美國國防部建模和仿真辦公室開發(fā)的DMSO RTI軟件的邏輯結(jié)構(gòu)圖。圖2是本發(fā)明第一步修改后RTI軟件的邏輯結(jié)構(gòu)圖。圖3是本發(fā)明第四步對(duì)象調(diào)度器按照不同的分發(fā)方式創(chuàng)建仿真對(duì)象的示例圖。 圖4是本發(fā)明的總體流程圖。
具體實(shí)施例方式圖I是美國國防部建模和仿真辦公室DMSO (Defense Modeling&SimulationOffice)所公開的RTI軟件的邏輯結(jié)構(gòu)圖。RTI軟件由一個(gè)“中心RTI部件”和多個(gè)“本地RTI部件”組成。“中心RTI部件”處理全局性的操作,包括“中心處理部件”和“通信部件”?!氨镜豏TI部件”以動(dòng)態(tài)鏈接庫或靜態(tài)庫的方式為仿真程序訪問RTI提供支持。當(dāng)仿真程序運(yùn)行時(shí),仿真程序與“本地RTI部件” 一起被稱之為一個(gè)“仿真成員”,每個(gè)仿真成員都包含一個(gè)“本地RTI部件”。“本地RTI部件”需要處理HLA標(biāo)準(zhǔn)中規(guī)定的六類管理服務(wù),分別由聯(lián)邦管理部件、聲明管理部件、所有權(quán)管理部件、對(duì)象管理部件、時(shí)間管理部件和數(shù)據(jù)分發(fā)管理部件實(shí)現(xiàn),“本地RTI部件”的“通信部件”負(fù)責(zé)與其他“本地RTI部件”以及“中心RTI部件”進(jìn)行通信。仿真程序包括主程序和回調(diào)部件兩部分,主程序負(fù)責(zé)調(diào)用“本地RTI部件”中的六類HLA服務(wù),這些HLA服務(wù)通過各個(gè)管理部件發(fā)送到“中心RTI部件”或者其他“本地RTI部件”;回調(diào)部件負(fù)責(zé)接收來自“本地RTI部件”中各個(gè)管理部件的回調(diào)服務(wù)。該圖表明本發(fā)明前的RTI軟件無法對(duì)仿真程序中的對(duì)象進(jìn)行分發(fā)調(diào)度。圖2是本發(fā)明第一步修改后的RTI軟件的邏輯結(jié)構(gòu)圖。與圖I相比,本發(fā)明在“本地RTI部件”中增加了支持并行仿真的對(duì)象調(diào)度器。對(duì)象調(diào)度器按照HLA仿真程序的指定方式(“發(fā)牌式”、“塊式”、“文件方式”)創(chuàng)建隸屬于一個(gè)仿真成員的仿真對(duì)象,將HLA仿真程序中的各個(gè)仿真對(duì)象分發(fā)到超級(jí)計(jì)算機(jī)的眾多CPU核。圖3是本發(fā)明第四步對(duì)象調(diào)度器按照不同的分發(fā)方式創(chuàng)建仿真對(duì)象的示例圖。圖3(a)是一個(gè)基于本發(fā)明設(shè)計(jì)的HLA仿真程序,該仿真程序包含兩種類型(貓和狗)共11個(gè)仿真對(duì)象,其中8個(gè)貓的編號(hào)為(Γ7,3個(gè)狗的編號(hào)為(Γ2。在圖3(b)中,中心RTI部件占用超級(jí)計(jì)算機(jī)的I個(gè)CPU核,仿真程序則被加載到另外3個(gè)CPU核上運(yùn)行,每個(gè)核上運(yùn)行的進(jìn)程就是一個(gè)仿真成員(仿真程序與“本地RTI部件” 一起被稱之為一個(gè)“仿真成員”),3個(gè)仿真成員的編號(hào)為(Γ2。8個(gè)貓以“發(fā)牌式”被分發(fā)到3個(gè)仿真成員,其中“0、3、6”這三個(gè)數(shù)模3的值都為0,“1、4、7”模3的值都為1,“2、5”模3的值都為2,因此編號(hào)為“0、3、6”的貓被分發(fā)到仿真成員0,編號(hào)為“1、4、7”的貓被分發(fā)到仿真成員1,編號(hào)為“2、5”的貓被分發(fā)到仿真成員2。按照這種方式,3個(gè)狗被分別安排到3個(gè)仿真成員。在圖3(c)中,8個(gè)貓以“塊式”被分發(fā)到3個(gè)仿真成員,這種分發(fā)方式試圖把8個(gè)仿真對(duì)象均勻地分發(fā)到各個(gè)仿真成員中,并將具有相鄰編號(hào)的盡可能多的仿真對(duì)象分發(fā)到同一個(gè)仿真成員中。由于L8/3j = 2, 8%3=2,因此前兩個(gè)仿真成員應(yīng)分發(fā)3個(gè)貓,第3個(gè)仿真成員應(yīng)分發(fā)2個(gè)貓,所以編號(hào)為“0、1、2”的貓被分發(fā)到仿真成員O,編號(hào)為“3、4、5”的貓被分發(fā)到仿真成員1,編號(hào)為“6、7”的貓被分發(fā)到仿真成員2。按照這種方式,3個(gè)狗被均勻地分發(fā)到3個(gè)仿真成員。在圖3(d)中,仿真對(duì)象按照“對(duì)象指派文件”進(jìn)行分發(fā),該文件指定了貓和狗的分發(fā)方式,編號(hào)為“0、1、2”的貓被分發(fā)到仿真成員O,編號(hào)為“3、5”的貓被分發(fā)到仿真成員1,編號(hào)為“4、6、7”的貓被分發(fā)到仿真成員2。類似地,編號(hào)為“O、I”的狗被分發(fā)到仿真成員1,編號(hào)為“2”的狗被分發(fā)到仿真成員2。該圖表明,一個(gè)包含很多仿真對(duì)象的HLA仿真程序能夠被加載到多個(gè)CPU核上并行執(zhí)行,從而仿真對(duì)象也被分發(fā)調(diào)度到多個(gè)CPU核上并行運(yùn)行,解決了本發(fā)明前各個(gè)仿真對(duì)象只能“擠”在一個(gè)仿真成員中“串行執(zhí)行”以及“串行發(fā)送和接收事件”而導(dǎo)致的“計(jì)算瓶頸”以及“通信瓶頸”問題,能有效地提高仿真效率。圖4是本發(fā)明的總體流程圖。主要流程是 第一步,修改本地RTI部件,在本地RTI部件中增加對(duì)象調(diào)度器。第二步,基于本地RTI部件設(shè)計(jì)并行仿真程序,并行仿真程序由主程序即main程序以及回調(diào)部件組成。第三步,將并行仿真程序進(jìn)行編譯和連接,得到可執(zhí)行仿真程序,將可執(zhí)行仿真程序加載到超級(jí)計(jì)算機(jī)的多個(gè)CPU核。第四步,每個(gè)CPU核上的仿真成員按照主程序的流程執(zhí)行,由對(duì)象調(diào)度器創(chuàng)建隸屬于各個(gè)仿真成員的仿真對(duì)象,眾多仿真對(duì)象被調(diào)度到各個(gè)CPU核上并行執(zhí)行。第五步,結(jié)束。
權(quán)利要求
1.一種基于超級(jí)計(jì)算機(jī)的HLA仿真程序的對(duì)象調(diào)度方法,其特征在于包括以下步驟 第一步,修改本地RTI部件,在本地RTI部件中增加對(duì)象調(diào)度器,對(duì)象調(diào)度器根據(jù)仿真程序的輸入?yún)?shù)創(chuàng)建仿真對(duì)象,并將仿真對(duì)象返回給仿真程序;本地RTI部件中的原有部件包含7個(gè)部件聯(lián)邦管理部件、聲明管理部件、所有權(quán)管理部件、對(duì)象管理部件、時(shí)間管理部件、數(shù)據(jù)分發(fā)管理部件、通信部件; 第二步,基于本地RTI部件設(shè)計(jì)并行仿真程序,并行仿真程序由主程序即main程序以及回調(diào)部件組成,主程序是仿真程序運(yùn)行時(shí)的入口,主程序一方面在仿真開始時(shí)將每種類型的仿真對(duì)象的相關(guān)參數(shù)發(fā)送給對(duì)象調(diào)度器,由對(duì)象調(diào)度器創(chuàng)建該種類型的仿真對(duì)象;另一方面在仿真過程中向本地RTI部件的原有部件發(fā)送HLA服務(wù);回調(diào)部件是仿真程序中用來從本地RTI部件的原有部件接收回調(diào)服務(wù)的部件; 第三步,將并行仿真程序進(jìn)行編譯和連接,得到可執(zhí)行仿真程序,將可執(zhí)行仿真程序加載到超級(jí)計(jì)算機(jī)的多個(gè)CPU核,方法是 .3.I在超級(jí)計(jì)算機(jī)的一個(gè)計(jì)算節(jié)點(diǎn)上啟動(dòng)“中心RTI部件”,“中心RTI部件”啟動(dòng)后占用超級(jí)計(jì)算機(jī)的一個(gè)CPU核; .3.2使用批處理命令或者操作系統(tǒng)提供的作業(yè)加載命令啟動(dòng)可執(zhí)行仿真程序,將可執(zhí)行仿真程序加載到超級(jí)計(jì)算機(jī)的k個(gè)CPU核中運(yùn)行,這k個(gè)CPU核不含“中心RTI部件”啟動(dòng)后所占用的一個(gè)CPU核,k是大于O的整數(shù),一個(gè)CPU核只運(yùn)行一個(gè)進(jìn)程,每個(gè)進(jìn)程都是一個(gè)仿真成員; 第四步,每個(gè)CPU核上的仿真成員按照主程序的流程執(zhí)行,由對(duì)象調(diào)度器創(chuàng)建隸屬于各個(gè)仿真成員的仿真對(duì)象,眾多仿真對(duì)象被調(diào)度到各個(gè)CPU核上并行執(zhí)行,具體步驟是 .4.I每個(gè)CPU核上的仿真成員按照主程序的流程執(zhí)行,方法是主程序向本地RTI部件發(fā)送“加入聯(lián)邦執(zhí)行”服務(wù),本地RTI部件收到“加入聯(lián)邦執(zhí)行”服務(wù)后與中心RTI部件進(jìn)行通信,中心RTI部件為該主程序所屬仿真成員分配一個(gè)稱為“成員句柄”的唯一整數(shù)值f,f為整數(shù)且O < f〈仿真成員數(shù),f被保存在本地RTI部件處,中心RTI部件按照仿真成員加入仿真系統(tǒng)的先后順序依次分配“成員句柄”值; .4. 2主程序確認(rèn)是否還有仿真對(duì)象未被對(duì)象調(diào)度器分發(fā),若還有仿真對(duì)象未被分發(fā),主程序與對(duì)象調(diào)度器進(jìn)行通信,將與一種類型的仿真對(duì)象相關(guān)的四個(gè)參數(shù)“仿真對(duì)象類型t、仿真對(duì)象數(shù)η、仿真成員數(shù)k、分發(fā)方式”發(fā)送給對(duì)象調(diào)度器執(zhí)行4. 3步;若所有類型的仿真對(duì)象都被對(duì)象調(diào)度器分發(fā),則轉(zhuǎn)4. 4步;所述t為字符串,η和k為大于O的整數(shù);分發(fā)方式包括“發(fā)牌式”、“塊式”、“文件方式”; .4. 3對(duì)象調(diào)度器從主程序收到與某種類型的仿真對(duì)象相關(guān)的四個(gè)參數(shù)“仿真對(duì)象類型t、仿真對(duì)象數(shù)η、仿真成員數(shù)k、分發(fā)方式”后,將η個(gè)仿真對(duì)象分發(fā)到k個(gè)仿真成員中,方法是 .4. 3. I若從主程序接收到的分發(fā)方式為“發(fā)牌式”,則對(duì)象調(diào)度器用仿真對(duì)象的編號(hào)s模仿真成員數(shù)k,s為整數(shù)且O < s〈n,如果余數(shù)等于仿真成員的“成員句柄” f,則對(duì)象調(diào)度器創(chuàng)建編號(hào)為s的仿真對(duì)象;對(duì)象調(diào)度器將“仿真對(duì)象創(chuàng)建完成”的消息發(fā)送給主程序,轉(zhuǎn)4. 2 步; .4. 3. 2若從主程序接收到的分發(fā)方式為“塊式”,則對(duì)象調(diào)度器按以下方法處理 .4. 3. 2. I設(shè)置兩個(gè)整數(shù)nl、n2,其中M = LR/<fe」,n2=n%k,“L」”為取下整數(shù),“%”為取余數(shù); ·4. 3. 2. 2如果仿真成員的“成員句柄” f〈n2,則對(duì)象調(diào)度器創(chuàng)建編號(hào)從fX (nl+1)開始的連續(xù)nl+1個(gè)仿真對(duì)象;否則對(duì)象調(diào)度器創(chuàng)建編號(hào)從n2X (nl+1) + (f-n2) Xnl開始的連續(xù)nl個(gè)仿真對(duì)象,對(duì)象調(diào)度器將“仿真對(duì)象創(chuàng)建完成”的消息發(fā)送給主程序,轉(zhuǎn)4. 2步; ·4. 3. 3若從主程序接收到的分發(fā)方式為“文件方式”,則對(duì)象調(diào)度器按以下方法處理 ·4. 3. 3. I對(duì)象調(diào)度器從仿真程序的當(dāng)前目錄下讀取“對(duì)象指派文件”,“對(duì)象指派文件”由注釋語句和若干個(gè)塊結(jié)構(gòu)組成,注釋語句是自字符‘#,開始直到行尾的一串字符;塊結(jié)構(gòu)是用來描述一種類型的仿真對(duì)象在仿真成員中的分布情況的數(shù)據(jù)結(jié)構(gòu),一個(gè)塊結(jié)構(gòu)為“仿真對(duì)象類型t{第I行第2行第3行…每行的結(jié)構(gòu)為“f:sl s2 s3...”,其中f表示某個(gè)仿真成員的“成員句柄”,Si、s2、S3、…為仿真對(duì)象的編號(hào),該行表示與這些編號(hào)對(duì)應(yīng)的仿真對(duì)象應(yīng)分發(fā)到“成員句柄”為f的仿真成員; ·4.3. 3. 2對(duì)象調(diào)度器在“對(duì)象指派文件”中查找仿真對(duì)象類型為t的塊結(jié)構(gòu),若沒有找至IJ,表示“對(duì)象指派文件”不正確,則報(bào)錯(cuò)并轉(zhuǎn)第五步;若找到了仿真對(duì)象類型為t的塊結(jié)構(gòu),則根據(jù)仿真成員的“成員句柄” f查找塊結(jié)構(gòu)中以“f: ”開始的行,進(jìn)行如下處理 ·4.3. 3. 2. I如果在塊結(jié)構(gòu)中沒有找到以“f:”開始的行,則轉(zhuǎn)4. 2步; · 4.3. 3. 2. 2如果在塊結(jié)構(gòu)中找到以“f: ”開始的行,則從該行中提取所有仿真對(duì)象的編號(hào)sl、s2、s3、…,對(duì)象調(diào)度器創(chuàng)建編號(hào)為sl、s2、s3、…的仿真對(duì)象;對(duì)象調(diào)度器將“仿真對(duì)象創(chuàng)建完成”的消息發(fā)送給主程序,轉(zhuǎn)4. 2步; ·4.4仿真成員中的各個(gè)仿真對(duì)象開始執(zhí)行,在仿真過程中調(diào)用HLA服務(wù)向本地RTI部件發(fā)送消息,并由回調(diào)部件接收來自其他本地RTI部件的消息; 第五步,結(jié)束。
全文摘要
本發(fā)明公開了一種基于超級(jí)計(jì)算機(jī)的HLA仿真程序的對(duì)象調(diào)度方法,目的是提供一種支持將HLA仿真程序中的各個(gè)仿真對(duì)象分發(fā)到超級(jí)計(jì)算機(jī)的眾多CPU核中并行運(yùn)行的方法。技術(shù)方案是先在本地RTI部件中增加對(duì)象調(diào)度器;然后基于本地RTI部件設(shè)計(jì)由主程序和回調(diào)部件組成的并行仿真程序;接著將并行仿真程序編譯和連接后得到的可執(zhí)行仿真程序加載到多個(gè)CPU核;每個(gè)CPU核上的仿真成員按照主程序的流程執(zhí)行,由對(duì)象調(diào)度器創(chuàng)建隸屬于各個(gè)仿真成員的仿真對(duì)象,仿真對(duì)象被調(diào)度到各個(gè)CPU核上并行執(zhí)行。采用本發(fā)明可以將HLA仿真程序中的各個(gè)仿真對(duì)象分發(fā)到超級(jí)計(jì)算機(jī)的多個(gè)CPU核上并行運(yùn)行,大幅度地減小了仿真的計(jì)算時(shí)間和通信時(shí)間,提高了仿真的運(yùn)行效率。
文檔編號(hào)G06F9/50GK102880517SQ20121037049
公開日2013年1月16日 申請(qǐng)日期2012年9月29日 優(yōu)先權(quán)日2012年9月29日
發(fā)明者劉步權(quán), 姚益平, 王懷民, 蔣志文, 鄢來斌, 曲慶軍, 朱敏, 彭紹亮, 曾亮, 蔡勛, 王文珂 申請(qǐng)人:中國人民解放軍國防科學(xué)技術(shù)大學(xué)