張 宇,黃海于
(西南交通大學信息科學與技術學院,四川成都 610031)
高速列車數字化仿真平臺是在高速列車動力學仿真的基礎上,提供包括高速列車應用性能仿真在內的全系統仿真[1].由于仿真高速列車行駛過程中的狀況必然要進行大量的動力學計算,因此單臺計算機的計算能力已無法滿足系統仿真的要求,同時隨著仿真規模的不斷擴大,系統的仿真性能將進一步降低.為解決更大規模的系統仿真問題,以分布式仿真系統為基礎的系統仿真平臺就成為必然[2].分布式仿真系統由分布在不同地點的仿真設備和軟件組成,通過硬件的互聯和軟件的相互進行控制[3],從而完成大型復雜系統的仿真任務.一般而言,分布式仿真以分布式并行調度算法為基礎,該算法與傳統單機仿真系統的串行算法相比具有本質的區別.在進行多機并行分布式仿真過程中,如果將每個計算任務調度到不同的計算資源,則會出現計算資源利用率較低的情況.為了合理地利用計算資源,提高資源的利用率,在計算資源可利用的情況下,需要將多個任務調度到一臺計算機上.多線程是Windows操作系統的一個重要特征[4],利用多線程技術,可在1個進程內創建多個線程,CPU分時間片輪流執行多個線程[5],允許同一時間內運行多個應用程序.因此,在耦合分布式系統中,同一個計算資源上的計算任務以多線程的方式運行,而如何對這些線程進行有效的管理是系統正常運行的關鍵.基于此,本研究提出了基于耦合分布式的多線程任務管理算法,該算法能有效管理運行在同一臺計算機上的多個計算線程中,使各計算任務能協同配合完成系統的正常仿真,同時提高系統的仿真效率.
耦合分布式系統仿真結構如圖1所示.在該耦合分布式系統仿真的3層體系框架中,包括作業調度器、耦合器、計算資源和客戶機.

圖1 耦合分布式系統仿真拓撲圖
作業調度器主要提供和計算機的接口,接收耦合器、計算資源和客戶機的注冊信息,接收由普通用戶提交的工況信息,并通過工況分析引擎進行工況處理,并進行多耦合器的管理及負載均衡.
耦合器是系統的核心,當作業調度器完成工況的調度后,將計算資源的工況提交到耦合器,由耦合器負責耦合分布式仿真的時序控制和工況仿真模塊的數據收發.本3層體系框架能運行多個耦合器,一個耦合器能管理多個工況,而且耦合器的個數可根據需求進行擴展,從而增加了系統的可靠性和穩定性.
計算資源是與作業調度器、耦合器處在同一個網絡上的主機,可為大規模的科學計算提供自己空閑的資源.
客戶機是仿真系統與用戶進行交互的接口,它需要在管理主機上注冊,并經管理主機許可后,才可以把一個裝配描述符發送給管理主機.此時,作業調度器根據這些信息,再綜合考慮各個耦合器和計算資源當前的負載情況,然后確定如何以最合理的方式分發計算任務.
使用多線程仿真運行模塊能減少等待時間,提高仿真系統的并行處理能力.多線程情況下各計算任務的啟動流程如圖2所示.

圖2 多線程情況下各計算任務的啟動流程圖
在多線程情況下,計算任務接收到仿真所需的下一步數據才能進行下一步的仿真.多線程情況下的各計算任務所需輸入數據的接收流程如圖3所示.

圖3 多線程情況下各計算任務所需輸入數據的接收流程圖
從圖3可以看出,通過采用全局變量的方式,可以將耦合器發送的數據準確地傳遞給相應的計算任務線程,確保系統的正常仿真.
在多個任務多個線程并行計算時,多個仿真線程要共用一個端口將仿真完成的數據發送到耦合器中.當兩個線程同時使用共用端口時會使發送的數據混淆,從而使發送的數據出現錯誤.對此,多線程情況下各計算任務輸出數據的耦合器發送流程如圖4所示.

圖4 多線程情況下各計算任務輸出數據的耦合器發送流程圖
從圖4可以看出,通過計算線程互斥調用發送仿真數據的處理方法可有效地解決多線程發送數據時相互干擾的問題.
為了驗證耦合分布式系統多線程任務管理算法的有效性,本研究構建了如下的仿真環境:仿真使用6臺計算機,一臺用于運行客戶端軟件,一臺用于運行作業調度器軟件,一臺用于運行耦合器,3臺用作計算資源,所有的計算機運行在百兆的局域網內.各計算機的使用情況如表1.

表1 計算資源分配情況表
此外,測試使用的工況包含3個子模塊.
首先,使用單線程的任務管理算法,此時仿真系統只能運行一個工況,每個執行機運行一個工況子模塊.然后,使用多工況管理算法,仿真系統將一個工況的3個子模塊調度到一臺計算機上運行,采用工況運行時間和占用計算資源的個數作為負載分量.表2是使用單線程和多線程任務管理算法計算同一工況使用仿真時間的對比情況.表3為使用單線程和多線程任務管理算法占用的計算資源情況.

表2 單線程與多線程情況下占用仿真時間的對比

表3 單線程和多線程任務管理算法占用的計算資源情況
從表2、3可以看出,使用多線程任務管理算法和使用單線程任務管理算法仿真計算同一工況在花費仿真時間上相差不大.使用單線程的方式占用了3個執行機,而使用多線程只用了一個執行機,較大地提高了分布式系統計算資源的利用率.同時,從測試結果可以看出,多線程多任務的仿真模式已基本實現了所有的功能需求和性能需求,符合算法設計的初衷.
本研究介紹了耦合分布式系統多線程任務管理仿真算法在高速列車數字化仿真平臺中的實現.仿真實驗表明,該算法在VC++開發環境中實現了多線程任務的啟動、計算線程數據的接收、計算線程數據的發送,取得了較好的仿真效果,提高了資源的利用率.下一步將研究多進程多任務的仿真模式,從而解決多線程間相互依賴的問題,進一步解決多任務運行的獨立性.
[1]夏豐領,趙育善.飛行器動力學的分布式仿真方法探討[J].導彈與制導學報,2008,28(1):211-222.
[2]趙斌,郝紅旗.網格中間件在分布式仿真系統中的應用[J].計算機仿真,2009,26(12):100-103.
[3]朱建江,樓佩煌,王寧生.基于CORBA的分布式體系結構[J].航空制造技術,2001,44(5):82-85.
[4]Kruglinski.Visual C++技術內幕[M].北京:電子工業出版社,1999.
[5]龍勇,袁靜,李勝朝,等.多線程串行通信在武器分布式仿真系統中的應用[J].戰術導彈控制技術,2007,56(1):105 -111.