張 宇,黃海于
(西南交通大學(xué)信息科學(xué)與技術(shù)學(xué)院,四川成都 610031)
高速列車數(shù)字化仿真平臺(tái)是在高速列車動(dòng)力學(xué)仿真的基礎(chǔ)上,提供包括高速列車應(yīng)用性能仿真在內(nèi)的全系統(tǒng)仿真[1].由于仿真高速列車行駛過(guò)程中的狀況必然要進(jìn)行大量的動(dòng)力學(xué)計(jì)算,因此單臺(tái)計(jì)算機(jī)的計(jì)算能力已無(wú)法滿足系統(tǒng)仿真的要求,同時(shí)隨著仿真規(guī)模的不斷擴(kuò)大,系統(tǒng)的仿真性能將進(jìn)一步降低.為解決更大規(guī)模的系統(tǒng)仿真問(wèn)題,以分布式仿真系統(tǒng)為基礎(chǔ)的系統(tǒng)仿真平臺(tái)就成為必然[2].分布式仿真系統(tǒng)由分布在不同地點(diǎn)的仿真設(shè)備和軟件組成,通過(guò)硬件的互聯(lián)和軟件的相互進(jìn)行控制[3],從而完成大型復(fù)雜系統(tǒng)的仿真任務(wù).一般而言,分布式仿真以分布式并行調(diào)度算法為基礎(chǔ),該算法與傳統(tǒng)單機(jī)仿真系統(tǒng)的串行算法相比具有本質(zhì)的區(qū)別.在進(jìn)行多機(jī)并行分布式仿真過(guò)程中,如果將每個(gè)計(jì)算任務(wù)調(diào)度到不同的計(jì)算資源,則會(huì)出現(xiàn)計(jì)算資源利用率較低的情況.為了合理地利用計(jì)算資源,提高資源的利用率,在計(jì)算資源可利用的情況下,需要將多個(gè)任務(wù)調(diào)度到一臺(tái)計(jì)算機(jī)上.多線程是Windows操作系統(tǒng)的一個(gè)重要特征[4],利用多線程技術(shù),可在1個(gè)進(jìn)程內(nèi)創(chuàng)建多個(gè)線程,CPU分時(shí)間片輪流執(zhí)行多個(gè)線程[5],允許同一時(shí)間內(nèi)運(yùn)行多個(gè)應(yīng)用程序.因此,在耦合分布式系統(tǒng)中,同一個(gè)計(jì)算資源上的計(jì)算任務(wù)以多線程的方式運(yùn)行,而如何對(duì)這些線程進(jìn)行有效的管理是系統(tǒng)正常運(yùn)行的關(guān)鍵.基于此,本研究提出了基于耦合分布式的多線程任務(wù)管理算法,該算法能有效管理運(yùn)行在同一臺(tái)計(jì)算機(jī)上的多個(gè)計(jì)算線程中,使各計(jì)算任務(wù)能協(xié)同配合完成系統(tǒng)的正常仿真,同時(shí)提高系統(tǒng)的仿真效率.
耦合分布式系統(tǒng)仿真結(jié)構(gòu)如圖1所示.在該耦合分布式系統(tǒng)仿真的3層體系框架中,包括作業(yè)調(diào)度器、耦合器、計(jì)算資源和客戶機(jī).
圖1 耦合分布式系統(tǒng)仿真拓?fù)鋱D
作業(yè)調(diào)度器主要提供和計(jì)算機(jī)的接口,接收耦合器、計(jì)算資源和客戶機(jī)的注冊(cè)信息,接收由普通用戶提交的工況信息,并通過(guò)工況分析引擎進(jìn)行工況處理,并進(jìn)行多耦合器的管理及負(fù)載均衡.
耦合器是系統(tǒng)的核心,當(dāng)作業(yè)調(diào)度器完成工況的調(diào)度后,將計(jì)算資源的工況提交到耦合器,由耦合器負(fù)責(zé)耦合分布式仿真的時(shí)序控制和工況仿真模塊的數(shù)據(jù)收發(fā).本3層體系框架能運(yùn)行多個(gè)耦合器,一個(gè)耦合器能管理多個(gè)工況,而且耦合器的個(gè)數(shù)可根據(jù)需求進(jìn)行擴(kuò)展,從而增加了系統(tǒng)的可靠性和穩(wěn)定性.
計(jì)算資源是與作業(yè)調(diào)度器、耦合器處在同一個(gè)網(wǎng)絡(luò)上的主機(jī),可為大規(guī)模的科學(xué)計(jì)算提供自己空閑的資源.
客戶機(jī)是仿真系統(tǒng)與用戶進(jìn)行交互的接口,它需要在管理主機(jī)上注冊(cè),并經(jīng)管理主機(jī)許可后,才可以把一個(gè)裝配描述符發(fā)送給管理主機(jī).此時(shí),作業(yè)調(diào)度器根據(jù)這些信息,再綜合考慮各個(gè)耦合器和計(jì)算資源當(dāng)前的負(fù)載情況,然后確定如何以最合理的方式分發(fā)計(jì)算任務(wù).
使用多線程仿真運(yùn)行模塊能減少等待時(shí)間,提高仿真系統(tǒng)的并行處理能力.多線程情況下各計(jì)算任務(wù)的啟動(dòng)流程如圖2所示.
圖2 多線程情況下各計(jì)算任務(wù)的啟動(dòng)流程圖
在多線程情況下,計(jì)算任務(wù)接收到仿真所需的下一步數(shù)據(jù)才能進(jìn)行下一步的仿真.多線程情況下的各計(jì)算任務(wù)所需輸入數(shù)據(jù)的接收流程如圖3所示.
圖3 多線程情況下各計(jì)算任務(wù)所需輸入數(shù)據(jù)的接收流程圖
從圖3可以看出,通過(guò)采用全局變量的方式,可以將耦合器發(fā)送的數(shù)據(jù)準(zhǔn)確地傳遞給相應(yīng)的計(jì)算任務(wù)線程,確保系統(tǒng)的正常仿真.
在多個(gè)任務(wù)多個(gè)線程并行計(jì)算時(shí),多個(gè)仿真線程要共用一個(gè)端口將仿真完成的數(shù)據(jù)發(fā)送到耦合器中.當(dāng)兩個(gè)線程同時(shí)使用共用端口時(shí)會(huì)使發(fā)送的數(shù)據(jù)混淆,從而使發(fā)送的數(shù)據(jù)出現(xiàn)錯(cuò)誤.對(duì)此,多線程情況下各計(jì)算任務(wù)輸出數(shù)據(jù)的耦合器發(fā)送流程如圖4所示.
圖4 多線程情況下各計(jì)算任務(wù)輸出數(shù)據(jù)的耦合器發(fā)送流程圖
從圖4可以看出,通過(guò)計(jì)算線程互斥調(diào)用發(fā)送仿真數(shù)據(jù)的處理方法可有效地解決多線程發(fā)送數(shù)據(jù)時(shí)相互干擾的問(wèn)題.
為了驗(yàn)證耦合分布式系統(tǒng)多線程任務(wù)管理算法的有效性,本研究構(gòu)建了如下的仿真環(huán)境:仿真使用6臺(tái)計(jì)算機(jī),一臺(tái)用于運(yùn)行客戶端軟件,一臺(tái)用于運(yùn)行作業(yè)調(diào)度器軟件,一臺(tái)用于運(yùn)行耦合器,3臺(tái)用作計(jì)算資源,所有的計(jì)算機(jī)運(yùn)行在百兆的局域網(wǎng)內(nèi).各計(jì)算機(jī)的使用情況如表1.
表1 計(jì)算資源分配情況表
此外,測(cè)試使用的工況包含3個(gè)子模塊.
首先,使用單線程的任務(wù)管理算法,此時(shí)仿真系統(tǒng)只能運(yùn)行一個(gè)工況,每個(gè)執(zhí)行機(jī)運(yùn)行一個(gè)工況子模塊.然后,使用多工況管理算法,仿真系統(tǒng)將一個(gè)工況的3個(gè)子模塊調(diào)度到一臺(tái)計(jì)算機(jī)上運(yùn)行,采用工況運(yùn)行時(shí)間和占用計(jì)算資源的個(gè)數(shù)作為負(fù)載分量.表2是使用單線程和多線程任務(wù)管理算法計(jì)算同一工況使用仿真時(shí)間的對(duì)比情況.表3為使用單線程和多線程任務(wù)管理算法占用的計(jì)算資源情況.
表2 單線程與多線程情況下占用仿真時(shí)間的對(duì)比
表3 單線程和多線程任務(wù)管理算法占用的計(jì)算資源情況
從表2、3可以看出,使用多線程任務(wù)管理算法和使用單線程任務(wù)管理算法仿真計(jì)算同一工況在花費(fèi)仿真時(shí)間上相差不大.使用單線程的方式占用了3個(gè)執(zhí)行機(jī),而使用多線程只用了一個(gè)執(zhí)行機(jī),較大地提高了分布式系統(tǒng)計(jì)算資源的利用率.同時(shí),從測(cè)試結(jié)果可以看出,多線程多任務(wù)的仿真模式已基本實(shí)現(xiàn)了所有的功能需求和性能需求,符合算法設(shè)計(jì)的初衷.
本研究介紹了耦合分布式系統(tǒng)多線程任務(wù)管理仿真算法在高速列車數(shù)字化仿真平臺(tái)中的實(shí)現(xiàn).仿真實(shí)驗(yàn)表明,該算法在VC++開發(fā)環(huán)境中實(shí)現(xiàn)了多線程任務(wù)的啟動(dòng)、計(jì)算線程數(shù)據(jù)的接收、計(jì)算線程數(shù)據(jù)的發(fā)送,取得了較好的仿真效果,提高了資源的利用率.下一步將研究多進(jìn)程多任務(wù)的仿真模式,從而解決多線程間相互依賴的問(wèn)題,進(jìn)一步解決多任務(wù)運(yùn)行的獨(dú)立性.
[1]夏豐領(lǐng),趙育善.飛行器動(dòng)力學(xué)的分布式仿真方法探討[J].導(dǎo)彈與制導(dǎo)學(xué)報(bào),2008,28(1):211-222.
[2]趙斌,郝紅旗.網(wǎng)格中間件在分布式仿真系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)仿真,2009,26(12):100-103.
[3]朱建江,樓佩煌,王寧生.基于CORBA的分布式體系結(jié)構(gòu)[J].航空制造技術(shù),2001,44(5):82-85.
[4]Kruglinski.Visual C++技術(shù)內(nèi)幕[M].北京:電子工業(yè)出版社,1999.
[5]龍勇,袁靜,李勝朝,等.多線程串行通信在武器分布式仿真系統(tǒng)中的應(yīng)用[J].戰(zhàn)術(shù)導(dǎo)彈控制技術(shù),2007,56(1):105 -111.