摘? 要:仿真工具軟件不具備計(jì)算資源的調(diào)度能力,在高性能計(jì)算系統(tǒng)上進(jìn)行仿真,必須在設(shè)計(jì)完成后,先保存模型,然后到調(diào)度軟件上申請(qǐng)計(jì)算資源,仿真與設(shè)計(jì)過(guò)程相對(duì)分離,過(guò)程重復(fù)。通過(guò)研究MPI并行計(jì)算原理及調(diào)度軟件調(diào)度原理,以常用電磁仿真工具軟件FEKO為例,研究其并行計(jì)算的模式,在FEKO與高性能計(jì)算系統(tǒng)調(diào)度軟件之間,增加一個(gè)中間過(guò)程,實(shí)現(xiàn)在該軟件內(nèi)對(duì)計(jì)算資源的直接調(diào)度。結(jié)果表明,可以做到在仿真工具軟件內(nèi)對(duì)計(jì)算資源直接調(diào)度。
關(guān)鍵詞:高性能計(jì)算;仿真工具;資源調(diào)度;FEKO
中圖分類(lèi)號(hào):TP311.5? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2020)16-0016-04
A Method of Scheduling Computing Resources Directly in Simulation Software
REN Jing
(The 29th Research Institute of China Electronics Technology Group Corporation,Chengdu? 610036,China)
Abstract:The simulation software does not have the ability of scheduling computing resources. In the simulation of high-performance computing system,the model must be saved after the design is completed,and then switch to the scheduling software interface to apply for computing resources. The process of simulation and design is relatively separated,and the process is repeated. By studying MPI parallel computing principle and scheduling principle of scheduling software,taking the commonly used electromagnetic simulation software FEKO as an example,its parallel computing mode is studied. An intermediate process is added between FEKO and high performance computing system scheduling software to realize the direct scheduling of high performance computing system resources in the tool software. The results show that the system resources can be directly scheduled in the simulation software.
Keywords:HPC;simulation tools;scheduling resources;FEKO
0? 引? 言
高性能計(jì)算(HPC)是指利用大量處理單元的聚合能力來(lái)解決復(fù)雜問(wèn)題。隨著集群技術(shù)的成熟,高性能計(jì)算的成本不斷下降,催生了建立在并行計(jì)算基礎(chǔ)之上的大型仿真設(shè)計(jì)等應(yīng)用。在高性能計(jì)算系統(tǒng)上進(jìn)行仿真設(shè)計(jì),比在單臺(tái)計(jì)算機(jī)上仿真設(shè)計(jì),不僅能提升數(shù)十、數(shù)百倍的精度和規(guī)模,還獲得數(shù)十、數(shù)百倍的仿真求解速度。
但是,在高性能計(jì)算系統(tǒng)上進(jìn)行仿真設(shè)計(jì)存在一個(gè)缺點(diǎn):用戶感覺(jué)到不如在單臺(tái)計(jì)算機(jī)上操作便捷。區(qū)別在于:用戶在單臺(tái)計(jì)算機(jī)上設(shè)計(jì)仿真時(shí),全部工作在工具軟件內(nèi)完成,即在工具軟件內(nèi)完成設(shè)計(jì)建模后,直接在軟件界面上點(diǎn)擊“求解”命令鍵,即可啟動(dòng)仿真計(jì)算;而在高性能計(jì)算系統(tǒng)上,需要用戶設(shè)計(jì)好模型后,先保存起來(lái),然后切換到調(diào)度軟件界面上申請(qǐng)計(jì)算資源,才能進(jìn)行計(jì)算。這造成設(shè)計(jì)與仿真工作的相對(duì)分離,過(guò)程重復(fù),導(dǎo)致效率降低,與高性能計(jì)算系統(tǒng)仿真設(shè)計(jì)一體化的發(fā)展趨勢(shì)相背離,是高性能計(jì)算系統(tǒng)向科研生產(chǎn)一線推廣應(yīng)用過(guò)程中,急需優(yōu)化的問(wèn)題之一。產(chǎn)生這個(gè)問(wèn)題的根源在于,仿真工具軟件本身不是調(diào)度軟件,不掌握高性能計(jì)算系統(tǒng)中計(jì)算資源情況,包括服務(wù)器名稱、CPU核的數(shù)量、忙閑狀態(tài)等。在其軟件內(nèi)發(fā)出起計(jì)算資源調(diào)度,必然造成多用戶、多作業(yè)計(jì)算資源沖突,計(jì)算效率低下,甚至系統(tǒng)崩潰。
本文先是研究了通用MPI并行計(jì)算原理,及高性能計(jì)算系統(tǒng)中調(diào)度軟件對(duì)計(jì)算資源調(diào)度的原理。然后以常用的電磁仿真工具軟件FEKO為對(duì)象,找出FEKO軟件與并行計(jì)算相關(guān)的所有進(jìn)程,研究其資源申請(qǐng)、調(diào)度的內(nèi)部邏輯。緊接著,設(shè)計(jì)了一種在FEKO軟件內(nèi)直接調(diào)度計(jì)算資源的方法:在FEKO的并行計(jì)算相關(guān)腳本程序和調(diào)度管理軟件之間,增加一個(gè)中間過(guò)程,實(shí)現(xiàn)了在FEKO軟件內(nèi),對(duì)高性能計(jì)算系統(tǒng)計(jì)算資源進(jìn)行申請(qǐng),并將申請(qǐng)傳遞給調(diào)度軟件,由調(diào)度軟件統(tǒng)一調(diào)度資源,效果與通過(guò)調(diào)度軟件申請(qǐng)計(jì)算資源完全一致。結(jié)果表明,在仿真工具軟件內(nèi)直接調(diào)度計(jì)算資源完全可行,大大優(yōu)化了高性能計(jì)算系統(tǒng)的使用。目前,該研究成果已經(jīng)在本文作者所在科研院所的高性能計(jì)算系統(tǒng)上成功應(yīng)用。
1? MPI并行計(jì)算
并行計(jì)算(Parallel Computing)是指同時(shí)使用多個(gè)計(jì)算單元進(jìn)行計(jì)算。即將被求解的問(wèn)題分解成若干個(gè)部分,各部分均由一個(gè)獨(dú)立的處理單元來(lái)計(jì)算。目的是加快求解問(wèn)題的速度,提升求解問(wèn)題的規(guī)模。由于程序的各部分之間需要通過(guò)來(lái)回傳遞消息的方式通信,要使得消息傳遞方式可移植,就必須采用標(biāo)準(zhǔn)的消息傳遞庫(kù)。
當(dāng)前,被廣泛采用的消息傳遞標(biāo)準(zhǔn)是消息傳遞接口(Message Passing Interface,MPI),它是一種基于消息傳遞的跨語(yǔ)言的并行編程技術(shù),支持點(diǎn)對(duì)點(diǎn)通信和廣播通信。MPI是一種編程接口標(biāo)準(zhǔn),它定義了一組接口函數(shù),使應(yīng)用程序可以將消息從一個(gè)MPI進(jìn)程送到另一個(gè)MPI進(jìn)程。各個(gè)廠商或組織遵循這些標(biāo)準(zhǔn)實(shí)現(xiàn)自己的MPI軟件包(如鏈接庫(kù)等形式),程序員僅需設(shè)計(jì)好并行算法,使用對(duì)應(yīng)的MPI庫(kù)就能夠?qū)崿F(xiàn)基于消息傳遞的并行計(jì)算。
Open MPI是一種高性能消息傳遞庫(kù),其中有一個(gè)常用進(jìn)程分配參數(shù)(--machinefile),在多機(jī)環(huán)境中,運(yùn)行程序前先創(chuàng)建一個(gè)machinefile文件,其中列出要使用的節(jié)點(diǎn)名和每個(gè)節(jié)點(diǎn)所用核數(shù)(本文中稱為“機(jī)器與核數(shù)配比清單”),然后用mpirun命令在指定的節(jié)點(diǎn)上運(yùn)行程序。
2? 高性能計(jì)算系統(tǒng)調(diào)度軟件調(diào)度原理
高性能計(jì)算系統(tǒng)擁有大規(guī)模的并行計(jì)算資源,是提供并行計(jì)算的強(qiáng)大工具。在高性能計(jì)算系統(tǒng)中,由調(diào)度軟件將分散的、通過(guò)網(wǎng)絡(luò)連接的多臺(tái)計(jì)算機(jī)的計(jì)算資源整合為整體的計(jì)算資源池,根據(jù)用戶申請(qǐng),遵循一定的策略,進(jìn)行調(diào)度管理。調(diào)度軟件調(diào)度資源時(shí),會(huì)將空閑的資源分配給需要的作業(yè);資源不足時(shí),會(huì)依照策略進(jìn)行排隊(duì)或優(yōu)先處理,從而不會(huì)出現(xiàn)計(jì)算資源的搶占、沖突,實(shí)現(xiàn)資源共享與效能提升。
調(diào)度軟件對(duì)于計(jì)算資源分配的機(jī)制,主要是按照MPI并行的進(jìn)程分配機(jī)制執(zhí)行的。由于MPI進(jìn)程在CPU核單元上計(jì)算效率最高,因此,調(diào)度軟件對(duì)資源的管理和調(diào)度是以CPU核為單位的。其邏輯主要為:隨時(shí)監(jiān)控系統(tǒng)中CPU核的狀態(tài),根據(jù)仿真作業(yè)對(duì)于CPU核數(shù)(等于作業(yè)進(jìn)程數(shù),本文中稱為“總核數(shù)(進(jìn)程數(shù))”)的需求,從所有空閑CPU核中分配相應(yīng)數(shù)量的CPU核。這些CPU核有可能分散在不同的計(jì)算機(jī)中,例如,對(duì)于24核的需求,可能在機(jī)器A中分配了8核,在機(jī)器B中分配了16核。于是就產(chǎn)生了配比清單:
機(jī)器A:8
機(jī)器B:16
調(diào)度軟件將配比清單與MPI并行程序的進(jìn)程分配參數(shù)(--machinefile)相對(duì)應(yīng),啟動(dòng)MPI并行程序:在機(jī)器A上啟動(dòng)8個(gè)執(zhí)行并行進(jìn)程,每個(gè)并行進(jìn)程占據(jù)1個(gè)CPU核;在機(jī)器B上啟動(dòng)16個(gè)并行進(jìn)程,每個(gè)并行進(jìn)程占據(jù)1個(gè)CPU核。于是,對(duì)于調(diào)度軟件來(lái)說(shuō),總計(jì)24個(gè)計(jì)算資源,就精準(zhǔn)的分配給了仿真作業(yè)的24個(gè)并行進(jìn)程。
3? FEKO作業(yè)的并行計(jì)算機(jī)制
3.1? FEKO軟件啟動(dòng)并行計(jì)算的兩種方法
FEKO作為電磁領(lǐng)域常用的仿真軟件,采用通用的MPI并行計(jì)算機(jī)制。本文作者研究了FEKO提供的兩種常用的啟動(dòng)并發(fā)計(jì)算的方法:
方法一:FEKO軟件界面上有一個(gè)“Solver/Run”按鍵,在其彈出界面上,用戶可配置所需核數(shù)及機(jī)器名,如圖1所示。
當(dāng)用戶完成配置后,點(diǎn)擊“OK”,F(xiàn)EKO軟件將觸發(fā)求解命令,在配置的計(jì)算資源上進(jìn)行求解。
圖1的配置界面只能用于用戶在單臺(tái)計(jì)算機(jī)上仿真的資源申請(qǐng),此種情況下,用戶清楚自己所使用的機(jī)器的名稱。即便在單臺(tái)計(jì)算機(jī)上,這樣的資源調(diào)度也是不安全的,因?yàn)橛脩艨赡苌暾?qǐng)超過(guò)該機(jī)空閑核數(shù)的資源,可能造成計(jì)算停頓甚至崩潰。
在多用戶共享使用的高性能計(jì)算系統(tǒng)中,這樣的申請(qǐng)操作則完全不可行:用戶不清楚集群中空閑機(jī)器的名稱、核數(shù),在多作業(yè)排隊(duì)使用資源時(shí),用戶更不可能清楚哪些資源可以最快釋放出來(lái)供計(jì)算使用。針對(duì)系統(tǒng)顯示的空閑機(jī)器及核數(shù)進(jìn)行配置,如果多人配置了相同的機(jī)器,會(huì)造成資源爭(zhēng)搶和沖突。由用戶配置申請(qǐng)計(jì)算資源,而未通過(guò)任何統(tǒng)一的資源管理與分配系統(tǒng),不能避免多用戶、多作業(yè)的資源爭(zhēng)搶與沖突。因此,傳統(tǒng)的高性能計(jì)算系統(tǒng)不允許用戶在FEKO軟件內(nèi)直接向高性能計(jì)算系統(tǒng)提交作業(yè)、申請(qǐng)計(jì)算資源。
方法二:在命令行模式下,F(xiàn)EKO軟件提供了并行計(jì)算的命令接口(Command Line)runfeko。接口格式:
runfeko算例文件 --machines-file 機(jī)器與核數(shù)配比清單- np總核數(shù)(進(jìn)程數(shù))
其中“總核數(shù)(進(jìn)程數(shù))”為需求的總的核數(shù)(進(jìn)程數(shù)),也是“機(jī)器與核數(shù)配比清單”中各機(jī)器所分配核數(shù)的總和。
FEKO利用這個(gè)接口,完成在命令行模式下對(duì)計(jì)算資源的申請(qǐng),并在所申請(qǐng)的計(jì)算資源上啟動(dòng)計(jì)算。但是,這也是不考慮計(jì)算資源的忙閑狀態(tài),與方法一實(shí)際上是同一邏輯原理不同形式的方法。因而也是高性能計(jì)算系統(tǒng)禁止使用的。
在對(duì)使用FEKO提供的仿真計(jì)算的兩種常用方法的研究中,發(fā)現(xiàn)無(wú)論是方法一或者方法二,F(xiàn)EKO都只是在對(duì)自身作業(yè)的并行進(jìn)程進(jìn)行劃分、觸發(fā)計(jì)算,而不是對(duì)計(jì)算資源進(jìn)行安全合理的調(diào)度。在多用戶共享的高性能計(jì)算環(huán)境中,唯有調(diào)度軟件掌握著集群中所有機(jī)器的名稱、核數(shù),持續(xù)收集資源使用情況,避免資源爭(zhēng)搶和沖突,實(shí)現(xiàn)負(fù)載均衡。因此要實(shí)現(xiàn)在FEKO軟件內(nèi)向高性能計(jì)算系統(tǒng)提交作業(yè)、申請(qǐng)計(jì)算資源,需要將FEKO軟件中申請(qǐng)的計(jì)算資源信息傳導(dǎo)給調(diào)度軟件,由調(diào)度軟件完成調(diào)度工作。
3.2? FEKO并行計(jì)算內(nèi)部算法
分析FEKO并行計(jì)算的接口,本文作者發(fā)現(xiàn)FEKO并行計(jì)算遵循Open MPI的接口規(guī)范:采用--machines-file和-np參數(shù),同時(shí)接口的格式要求也一致。而高性能計(jì)算系統(tǒng)調(diào)度軟件作為支持MPI并行計(jì)算的通用軟件,也建立兩個(gè)重要輸出:--machinefile 機(jī)器與核數(shù)配比清單和-np 總核數(shù)(進(jìn)程數(shù)),內(nèi)容與MPI接口的同名參數(shù)相對(duì)應(yīng)。
再對(duì)FEKO并行計(jì)算的真實(shí)進(jìn)程進(jìn)行進(jìn)一步的分析。如圖2所示,運(yùn)行Pstree -ua sysadmin命令,可以查看FEKO并行計(jì)算有關(guān)進(jìn)程樹(shù),其中含有很多進(jìn)程,例如:runfeko、adaptfeko、feko_parallel、feko_parallel_r、mpirun。研究其中的相互關(guān)系,追蹤FEKO并行計(jì)算中所申請(qǐng)的計(jì)算資源參數(shù)的傳遞方式。
分析發(fā)現(xiàn),F(xiàn)EKO在并行計(jì)算的時(shí)候,會(huì)調(diào)用一個(gè)腳本文件run_feko。run_feko中調(diào)用了FEKO的計(jì)算接口runfeko,在執(zhí)行的時(shí)候會(huì)傳遞類(lèi)似于機(jī)器與核數(shù)配比清單和總核數(shù)(進(jìn)程數(shù))的參數(shù),而這些參數(shù)值的來(lái)源則來(lái)自前文中,用戶在FEKO界面中設(shè)置的并行機(jī)器和核數(shù)。然后runfeko將這些參數(shù)轉(zhuǎn)化為并行的進(jìn)程數(shù),在相應(yīng)的節(jié)點(diǎn)上開(kāi)展并行計(jì)算。
4? 增加中間過(guò)程實(shí)現(xiàn)FEKO軟件內(nèi)對(duì)計(jì)算資源的直接調(diào)度
通過(guò)上述分析,確定了FEKO并行計(jì)算時(shí),利用run_feko執(zhí)行腳本對(duì)用戶申請(qǐng)的計(jì)算資源進(jìn)行采集。本文作者以run_feko腳本作為橋梁,創(chuàng)建中間過(guò)程,將FEKO軟件原始的并行資源創(chuàng)建與傳遞過(guò)程與高性能計(jì)算系統(tǒng)的調(diào)度過(guò)程結(jié)合起來(lái),在FEKO并行計(jì)算時(shí)所需的計(jì)算資源置換為調(diào)度軟件分配的資源,使得FEKO作業(yè)的并行計(jì)算采用調(diào)度軟件所分配的資源進(jìn)行,解決多用戶手動(dòng)指定計(jì)算資源造成的計(jì)算資源的沖突問(wèn)題。
具體實(shí)現(xiàn)方法為:
將FEKO軟件原始的run_feko腳本進(jìn)行重載,原腳本實(shí)現(xiàn)的是獲取用戶在FEKO軟件界面內(nèi)配置的計(jì)算資源,新的腳本實(shí)現(xiàn)將獲取到的計(jì)算資源傳遞給調(diào)度軟件,并通過(guò)調(diào)度軟件來(lái)分配計(jì)算資源。步驟為:
(1)編輯run_feko腳本文件,獲得FEKO軟件界面內(nèi)配置的總核數(shù)(進(jìn)程數(shù)),并將核數(shù)轉(zhuǎn)換為通過(guò)調(diào)度軟件生成的機(jī)器與核數(shù)配比清單。
np=`awk -F\= '$1=="NumberOfParallelProcesses"{print $2}' feko.ini`
上述語(yǔ)句用以獲得單節(jié)點(diǎn)并行的核數(shù)設(shè)置,其中np是總核數(shù)(進(jìn)程數(shù))。
np=`awk -F\: 'BEGIN{a=0}{a+=$2}END{print a}' machines.feko`
上述語(yǔ)句用以獲得多節(jié)點(diǎn)并行的核數(shù)設(shè)置,其中np是總核數(shù)(進(jìn)程數(shù))。
(2)執(zhí)行命令:jsub -q feko_queue -n $np $*,將用戶在FEKO軟件內(nèi)配置的總核數(shù)(進(jìn)程數(shù))轉(zhuǎn)換為調(diào)度軟件分配的核數(shù),并啟動(dòng)計(jì)算。其中,jsub是仿真作業(yè)提交命令,feko_queue是feko調(diào)度隊(duì)列,$np是從上文中獲得的總核數(shù)(進(jìn)程數(shù)),$*是FEKO仿真求解算例及參數(shù)。
(3)在調(diào)度軟件中創(chuàng)建一個(gè)新的FEKO作業(yè)求解腳本run_feko_orig,將調(diào)度軟件分配的機(jī)器與核數(shù)配比清單和總核數(shù)(進(jìn)程數(shù))作為參數(shù)通過(guò)FEKO作業(yè)求解腳本回傳FEKO的Solver命令中,驅(qū)動(dòng)FEKO利用調(diào)度軟件分配的資源進(jìn)行仿真求解:
run_feko_orig $1 --run-from-gui -np $np --machines-file $hostfile
該命令將調(diào)度軟件分配的資源回傳FEKO的Solver命令中,驅(qū)動(dòng)FEKO利用調(diào)度軟件分配的資源進(jìn)行仿真求解。其中run_feko_orig是FEKO求解腳本,包含F(xiàn)EKO的Solver命令;$1是FEKO仿真求解算例及參數(shù);$np是調(diào)度軟件分配的總核數(shù)(進(jìn)程數(shù));$hostfile是調(diào)度軟件分配的機(jī)器與核數(shù)配比清單。
通過(guò)測(cè)試,上述腳本運(yùn)行后,調(diào)用FEKO的Solver命令,利用用戶在FEKO軟件界面上配置的計(jì)算資源數(shù)創(chuàng)建Solver進(jìn)程,但是實(shí)際按照調(diào)度軟件的機(jī)器與核數(shù)配比清單分配,實(shí)現(xiàn)了在FEKO軟件內(nèi)申請(qǐng)計(jì)算資源,借調(diào)度軟件提交作業(yè)、申請(qǐng)計(jì)算資源,按照調(diào)度軟件的統(tǒng)一調(diào)度策略完成FEKO并行計(jì)算的資源分配,并在集群模式下完成仿真計(jì)算的目標(biāo)。
5? 結(jié)? 論
本研究實(shí)現(xiàn)了在FEKO軟件內(nèi)直接調(diào)度計(jì)算資源,啟動(dòng)并行計(jì)算,使得高性能計(jì)算系統(tǒng)上實(shí)現(xiàn)仿真和設(shè)計(jì)一體化,簡(jiǎn)化了工作過(guò)程。本文作者所使用的方法,是通過(guò)對(duì)并行計(jì)算和調(diào)度原理的研究,在調(diào)度軟件和工具軟件之間增加一個(gè)中間過(guò)程,實(shí)現(xiàn)工具軟件內(nèi)的參數(shù)向調(diào)度軟件的傳遞。由于支持高性能計(jì)算的仿真工具軟件均遵循MPI標(biāo)準(zhǔn),調(diào)度軟件具有通用性,所以對(duì)于在其他仿真工具軟件內(nèi)直接調(diào)度高性能計(jì)算系統(tǒng)上的計(jì)算資源的方法的實(shí)現(xiàn),具有普適性。但本文中的原代碼及命令是以FEKO為例,并非所有仿真軟件都可以直接套用。某特定的工具軟件,還需依照本文的思路,研究其并行進(jìn)程的命令接口、參數(shù),并做類(lèi)似重載,以實(shí)現(xiàn)文中提到的直接調(diào)度功能。
參考文獻(xiàn):
[1] SPI.mpirun(1)man page (version 4.0.5) [EB/OL].[2020-05-30].https://www.open-mpi.org/doc/v4.0/man1/mpirun.1.php.
[2] 臥龍小三.實(shí)戰(zhàn)Linux Shell編程與服務(wù)器管理 [M].北京:電子工業(yè)出版社,2010.
[3] tomctx.并行計(jì)算與MPI [EB/OL].(2019-06-01).https: //blog.csdn.net/tomjchan/article/details/90730497.
作者簡(jiǎn)介:任靜(1974.05—),女,漢族,四川夾江人,工程師,工程碩士,研究方向:高性能計(jì)算及人工智能。