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