侯佳正,張紹陽,陳博遠(yuǎn)
長安大學(xué) 信息工程學(xué)院,陜西 西安 710064
Magic 作為一款著名的電磁模擬商業(yè)軟件,可以通過饋入?yún)?shù)[1]仿真計(jì)算輸出功率。為了確定最優(yōu)參數(shù),開發(fā)了Magic 迭代計(jì)算軟件進(jìn)行參數(shù)的優(yōu)化,但該軟件是一個(gè)單機(jī)版本的軟件系統(tǒng),由于解決相關(guān)領(lǐng)域問題所需的計(jì)算量大,使用該軟件完成每次迭代計(jì)算存在耗時(shí)長的問題。為了解決單機(jī)軟件耗時(shí)長的問題,目前常用的方法大約有以下幾種:張朝金等[2]對Bellhop 傳播模型算法進(jìn)行改進(jìn),利用多線程技術(shù),建立了穩(wěn)定可靠的并行模型算法,實(shí)現(xiàn)了聲場的快速預(yù)報(bào),提高了運(yùn)行效率。劉俊見等[3]采用OpenMP[4]并行化技術(shù),將可并行化的任務(wù)顯式的使用多線程的方法進(jìn)行并行計(jì)算,顯著提高了側(cè)向散射激光雷達(dá)數(shù)據(jù)處理的效率。但是由于該Magic 迭代計(jì)算軟件的任務(wù)要開啟多個(gè)Magic 進(jìn)程使其進(jìn)行計(jì)算,且Magic 軟件作為成熟的商業(yè)軟件無法對其自身進(jìn)行改造,故無法采用上述方法在線程級別進(jìn)行改造。
隨著大數(shù)據(jù)的興起和發(fā)展,分布式計(jì)算技術(shù)實(shí)現(xiàn)了跨越式發(fā)展并被廣泛應(yīng)用??梢允褂肕apReduce[5?7], Spark[8?9]、Storm[10]并行計(jì)算框架對特定領(lǐng)域的問題進(jìn)行并行處理[11]。焦凱琳等[10]使用Hadoop 的HDFS 文件系統(tǒng)和分布式數(shù)據(jù)庫HBase 對海量的物流數(shù)據(jù)進(jìn)行分布式存儲(chǔ)和管理,使用MapReduce 和Storm 并行計(jì)算框架實(shí)現(xiàn)批數(shù)據(jù)處理的分析研判業(yè)務(wù)以及一些與數(shù)據(jù)實(shí)時(shí)處理相關(guān)的查詢跟蹤業(yè)務(wù)。李業(yè)田[12]使用分布式文件系統(tǒng)HDFS 實(shí)現(xiàn)海量數(shù)據(jù)的存儲(chǔ),采用并行處理框架MapReduce 對海量的電信數(shù)據(jù)進(jìn)行并行處理。但是采用這種方法需要大量的軟硬件的支持,要針對具體業(yè)務(wù)搭建大數(shù)據(jù)平臺(tái),成本較高;同時(shí)這種方法主要是對大批量的數(shù)據(jù)進(jìn)行處理,更多的適用于數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí),并不能很好地實(shí)現(xiàn)特定軟件的并行化。
本文提出了一種基于Microsoft HPC 并行計(jì)算框架的解決方案,可以利用現(xiàn)有的硬件環(huán)境,基于Windows 操作系統(tǒng)搭建一個(gè)并行計(jì)算平臺(tái),實(shí)現(xiàn)多個(gè)Magic 程序在多臺(tái)計(jì)算機(jī)上并行計(jì)算,解決耗時(shí)長的問題。
Magic 軟件是一款著名的電磁模擬軟件,可以通過饋入?yún)?shù)仿真計(jì)算輸出功率。為了確定最優(yōu)的參數(shù),實(shí)際工作中采用Magic 迭代計(jì)算軟件迭代計(jì)算進(jìn)行參數(shù)確定,具體流程如圖1 所示。
圖1 Magic 迭代計(jì)算軟件流程
該程序?yàn)橐粋€(gè)單機(jī)運(yùn)行程序,該程序依據(jù)用戶在用戶界面上設(shè)置的一系列參數(shù)生成指定數(shù)量的參數(shù)文件,然后啟動(dòng)相同數(shù)量的Magic 進(jìn)程進(jìn)行計(jì)算。計(jì)算完成后,根據(jù)計(jì)算結(jié)果,通過遺傳算法對參數(shù)進(jìn)行優(yōu)化,生成下一代的參數(shù)文件,再進(jìn)行計(jì)算。通過迭代幾十代或上百代,直至優(yōu)化出最優(yōu)的參數(shù)。
該Magic 迭代計(jì)算軟件迭代一次大約需要花費(fèi)50 min,迭代出最優(yōu)的參數(shù)大約需要花費(fèi)4~5 d的時(shí)間。
經(jīng)研究發(fā)現(xiàn)制約運(yùn)行速度的是多個(gè)Magic 進(jìn)程在單臺(tái)計(jì)算機(jī)上進(jìn)行計(jì)算這一步驟,由于每代求解的是多個(gè)具有獨(dú)立的幾何邊界條件的相似模型,是一個(gè)易并行問題,故提出將Magic 軟件放在多臺(tái)計(jì)算機(jī)上進(jìn)行并行計(jì)算的構(gòu)想。通過技術(shù)論證,最終提出了采用Microsoft HPC 將Magic 迭代計(jì)算軟件進(jìn)行并行化的技術(shù)架構(gòu)。
集群的架構(gòu)如圖2 所示。采用Microsoft 的HPC 平 臺(tái),通 過 使 用Microsoft HPC Pack 把 處 于一個(gè)局域網(wǎng)內(nèi)的多臺(tái)計(jì)算機(jī)搭建成一個(gè)計(jì)算機(jī)集群:集群中頭節(jié)點(diǎn)裝有Windows server 操作系統(tǒng),主要對計(jì)算節(jié)點(diǎn)進(jìn)行監(jiān)控和Magic 進(jìn)程的分配和管理;計(jì)算節(jié)點(diǎn)利用Windows 操作系統(tǒng)(如Window 7)對頭節(jié)點(diǎn)分配的計(jì)算任務(wù)進(jìn)行計(jì)算,在每個(gè)計(jì)算節(jié)點(diǎn)上設(shè)置共享文件夾,可以將Magic運(yùn)行結(jié)果存儲(chǔ)到某一指定的共享文件夾中。
圖2 集群的架構(gòu)
改進(jìn)的Magic 迭代計(jì)算軟件首先連接到集群的頭結(jié)點(diǎn),然后指明任務(wù)(即Magic 程序)的絕對路徑、輸入文件的絕對路徑、結(jié)果輸出路徑、程序要占用的CPU 內(nèi)核數(shù)等信息,生成一代所需的任務(wù)數(shù),組成一個(gè)作業(yè)。將作業(yè)提交到頭結(jié)點(diǎn),頭結(jié)點(diǎn)按照分配策略在可用的計(jì)算節(jié)點(diǎn)啟動(dòng)一定數(shù)量的Magic 進(jìn)程。計(jì)算節(jié)點(diǎn)在計(jì)算完成后,將計(jì)算結(jié)果存儲(chǔ)到指定的共享文件夾中。頭結(jié)點(diǎn)可以對計(jì)算節(jié)點(diǎn)上的每個(gè)Magic 進(jìn)程進(jìn)行監(jiān)控,可以獲得每個(gè)計(jì)算節(jié)點(diǎn)Magic 進(jìn)程完成的進(jìn)度、所花的時(shí)間等狀態(tài)信息,也可以終止掉異常的Magic 進(jìn)程。改進(jìn)的Magic 迭代計(jì)算軟件可以向集群的頭結(jié)點(diǎn)發(fā)送信息,可以獲得Magic 進(jìn)程的狀態(tài)信息和對Magic 進(jìn)程進(jìn)行控制和管理,流程如圖3 所示。
圖3 改進(jìn)的Magic 迭代計(jì)算軟件工作流程
3.1.1 頭結(jié)點(diǎn)的部署與配置
在已安裝服務(wù)器操作系統(tǒng)(如Windows server 2016)的計(jì)算機(jī)上添加域服務(wù),并將該計(jì)算機(jī)添加到域中。使用Microsoft HPC Pack,創(chuàng)建頭結(jié)點(diǎn)。
使用HPC Pack 群集管理器配置網(wǎng)絡(luò)拓?fù)?,圖2 集群的架構(gòu)圖所展現(xiàn)的為其中的一種網(wǎng)絡(luò)拓?fù)潢P(guān)系。
創(chuàng)建不同級別的節(jié)點(diǎn)組,即將可用的計(jì)算資源進(jìn)行分組,使每組擁有不同數(shù)量的計(jì)算資源。如可以使某組擁有集群中所有的計(jì)算資源,保證計(jì)算時(shí)的性能最好。本文只設(shè)置了一個(gè)組,該組中包含所有的計(jì)算節(jié)點(diǎn)。
創(chuàng)建作業(yè)模板,在向集群提交作業(yè)時(shí)使用。在作業(yè)模板中可以設(shè)置作業(yè)放在哪個(gè)或哪幾個(gè)節(jié)點(diǎn)組上進(jìn)行計(jì)算,防止占用整個(gè)集群的計(jì)算資源,影響他人的使用。可以設(shè)置作業(yè)的最大運(yùn)行時(shí)間,設(shè)置提交作業(yè)的優(yōu)先級,也可以限定該作業(yè)模板的使用權(quán)限等。
3.1.2 計(jì)算結(jié)點(diǎn)的部署與配置
在Windows 計(jì)算節(jié)點(diǎn)上開啟HPC pack 安裝向?qū)В梢赃x擇創(chuàng)建工作站節(jié)點(diǎn)或選擇計(jì)算節(jié)點(diǎn)將計(jì)算節(jié)點(diǎn)加入現(xiàn)有HPC 群集。輸入頭節(jié)點(diǎn)名稱,完成安裝。通過HPC Cluster Manager 軟件在節(jié)點(diǎn)管理中為每個(gè)節(jié)點(diǎn)套入節(jié)點(diǎn)模板,并將剛加入到集群中的節(jié)點(diǎn)添加到某個(gè)計(jì)算組中,以增加該組中可用的計(jì)算資源的數(shù)目。因?yàn)樽鳂I(yè)模板會(huì)要求選擇相應(yīng)的節(jié)點(diǎn)組,在進(jìn)行并行計(jì)算時(shí)會(huì)使用該組的計(jì)算資源。
注意事項(xiàng):1)配置IP 和DNS,IP 地址確保和主節(jié)點(diǎn)在同一個(gè)局域網(wǎng)內(nèi),DNS 服務(wù)器的地址設(shè)置為頭節(jié)點(diǎn)的IP 地址。2)設(shè)置計(jì)算機(jī)名及域名:設(shè)置易于和其他計(jì)算機(jī)區(qū)分的計(jì)算名便于在通過程序生成的日志文件查看每個(gè)計(jì)算節(jié)點(diǎn)上被分配了多少M(fèi)agic 進(jìn)程;設(shè)置域名:域名為配置頭節(jié)點(diǎn)時(shí)設(shè)置的根域名。
要求每個(gè)計(jì)算節(jié)點(diǎn)的Magic 進(jìn)程在啟動(dòng)計(jì)算時(shí)能讀取到參數(shù)文件,且當(dāng)各個(gè)計(jì)算節(jié)點(diǎn)計(jì)算完成后,能把計(jì)算結(jié)果匯總到一起,方便用戶查看。
由于Windows 提供了在局域網(wǎng)中文件共享機(jī)制,故在每臺(tái)計(jì)算機(jī)上設(shè)置了一個(gè)共享文件夾,在提交作業(yè)之前,用戶可以通過Magic 迭代算法軟件的前臺(tái)界面設(shè)置共享文件夾的絕對路徑。這樣,在局域網(wǎng)中的每臺(tái)計(jì)算節(jié)點(diǎn)在計(jì)算時(shí),就可以從共享文件夾中讀取所需的參數(shù)文件;計(jì)算完成后,就會(huì)將結(jié)果輸出到該共享文件夾下。
用戶只需在用戶界面上配置好所需的參數(shù),程序會(huì)自動(dòng)進(jìn)行迭代并將作業(yè)提交到集群上進(jìn)行計(jì)算,實(shí)現(xiàn)集群對用戶的透明化,簡化用戶的操作,提升用戶體驗(yàn)。改進(jìn)的Magic 迭代計(jì)算軟件既可以放到計(jì)算節(jié)點(diǎn)上運(yùn)行,又可以放在頭節(jié)點(diǎn)上運(yùn)行。
Magic 迭代計(jì)算軟件的改進(jìn)主要包含以下3 點(diǎn):
1)用戶名密碼的設(shè)計(jì)
在Magic 迭代計(jì)算軟件的前端設(shè)置登錄界面,將用戶名密碼和之前創(chuàng)建的作業(yè)模板綁定在一起,存放在數(shù)據(jù)庫中。不同的用戶登錄后,在提交作業(yè)時(shí)從數(shù)據(jù)庫中讀出相對應(yīng)的作業(yè)模板,進(jìn)而實(shí)現(xiàn)不同的用戶在提交作業(yè)進(jìn)行計(jì)算時(shí)使用不同的計(jì)算資源,達(dá)到資源合理利用的目的。在提交作業(yè)時(shí),在作業(yè)名稱上加上用戶名,這樣管理員可以知道哪些用戶正在使用集群資源。
2)計(jì)算任務(wù)的提交
Microsoft HPC pack SDK 提 供 了 可 供 二 次 開發(fā)的API 接口[13],通過編程調(diào)用相應(yīng)的接口實(shí)現(xiàn)集群的連接和將每一代的Magic 程序放到集群上進(jìn)行計(jì)算的操作,從而實(shí)現(xiàn)將耗時(shí)耗資源的計(jì)算采用并行方式完成。
通過調(diào)用API 相應(yīng)的函數(shù)可以設(shè)置作業(yè)使用的作業(yè)模板,Magic 進(jìn)程要使用的內(nèi)核數(shù),以到達(dá)合理利用集群中計(jì)算資源的目的。
3)日志文件的編寫
當(dāng)進(jìn)行集群計(jì)算時(shí),編寫相應(yīng)的日志文件,用來統(tǒng)計(jì)一個(gè)作業(yè)提交到集群上的時(shí)間點(diǎn):每個(gè)Magic 進(jìn)程被分配到哪個(gè)計(jì)算節(jié)點(diǎn)上,計(jì)算每個(gè)Magic 所花的時(shí)間;每個(gè)計(jì)算節(jié)點(diǎn)被分配的任務(wù)數(shù),用于集群計(jì)算所花的時(shí)間;每個(gè)作業(yè)完成的時(shí)間點(diǎn)、所耗時(shí)長和檢查每個(gè)任務(wù)是否計(jì)算出了結(jié)果,一些錯(cuò)誤提示等一系列的信息。通過統(tǒng)計(jì)以上信息,可以和單機(jī)運(yùn)行所花費(fèi)的時(shí)間進(jìn)行比較,判斷是否可以提升計(jì)算效率。可以清楚地判斷每個(gè)計(jì)算節(jié)點(diǎn)計(jì)算快慢,可以棄用計(jì)算較慢的計(jì)算節(jié)點(diǎn)。
在并行化過程中遇到了一些問題,下面對出現(xiàn)的問題進(jìn)行探討并給出相應(yīng)的解決辦法。
1) Magic 進(jìn)程沒有進(jìn)行計(jì)算。
本文使用工作站作為計(jì)算節(jié)點(diǎn),每個(gè)工作站有32 個(gè)CPU 內(nèi)核,在實(shí)驗(yàn)時(shí)使用2 臺(tái)相同的工作站充當(dāng)計(jì)算節(jié)點(diǎn),設(shè)置每個(gè)Magic 進(jìn)程使用的CPU 內(nèi)核數(shù)為1,當(dāng)給每臺(tái)工作站分配超過24 個(gè)Magic 進(jìn)程時(shí),會(huì)出現(xiàn)部分Magic 進(jìn)程沒有進(jìn)行計(jì)算,卻顯示計(jì)算完成的情況。針對這種情況,本文采取了下面的措施:作業(yè)提交后,在獲取作業(yè)的完成進(jìn)度過程中,每當(dāng)進(jìn)度發(fā)生變化時(shí),代表有Magic 進(jìn)程計(jì)算完成,此時(shí)獲取任務(wù)的列表,通過檢測已完成的任務(wù)是否生成完整的計(jì)算結(jié)果文件,來判斷Magic 進(jìn)程是否計(jì)算完成,如果沒有完整的結(jié)果文件,將該任務(wù)再次提交到集群上進(jìn)行計(jì)算。
2)算例在計(jì)算完成后無法停止。
在搭建的測試集群平臺(tái)上經(jīng)測試發(fā)現(xiàn),在計(jì)算節(jié)點(diǎn)上,部分Magic 進(jìn)程在計(jì)算完成后,所有的結(jié)果文件已經(jīng)生成,但是卻無法自己停止,在集群中顯示該Magic 進(jìn)程正在運(yùn)行,這樣導(dǎo)致某一次迭代無法完成,無法生成下一次迭代所需的參數(shù)文件,無法進(jìn)入下一次迭代,大大降低了運(yùn)算的效率。
針對這種情況,因?yàn)樵谧鳂I(yè)模板中可以設(shè)置一個(gè)作業(yè)最大運(yùn)行時(shí)間,所以規(guī)定了一個(gè)作業(yè)最大運(yùn)行時(shí)間的值,到規(guī)定的時(shí)間,終止掉這一代。但是發(fā)現(xiàn)參數(shù)文件不同,每個(gè)Magic 進(jìn)程計(jì)算所需的時(shí)間不同,無法準(zhǔn)確得知每一代最大的運(yùn)行時(shí)間。如果最大運(yùn)行時(shí)間設(shè)置得過大,計(jì)算完成,Magic 進(jìn)程遲遲無法停掉,同樣也會(huì)增加每一代運(yùn)行的時(shí)間,降低計(jì)算效率;如果每代計(jì)算時(shí)間設(shè)置的過小,部分Magic 進(jìn)程還沒有計(jì)算出結(jié)果,就被強(qiáng)行終止掉了,會(huì)使下一代無法生成較好的參數(shù),甚至?xí)?dǎo)致最終無法生成最優(yōu)的參數(shù)。
依據(jù)Magic 無法自動(dòng)終止,就利用集群的頭結(jié)點(diǎn)強(qiáng)行停止掉的思想,在作業(yè)正在運(yùn)行時(shí)每過一段時(shí)間(如20 s),獲取Magic 進(jìn)程列表,檢測正在運(yùn)行的Magic 進(jìn)程,看所有的結(jié)果文件是否已經(jīng)存在,如果已存在,可將該Magic 進(jìn)程終止。這樣可以做到及時(shí)終止計(jì)算已完成但未自動(dòng)結(jié)束的Magic 進(jìn)程。
應(yīng)當(dāng)注意的是,由于在程序中反復(fù)通過調(diào)用API 函數(shù)獲取作業(yè)的任務(wù)列表,如果任務(wù)列表比較大,會(huì)占用較大的內(nèi)存,在使用完成后,沒有及時(shí)的釋放掉,會(huì)造成內(nèi)存泄漏的問題。所以在使用完任務(wù)列表后要及時(shí)的釋放掉,可以通過調(diào)用ISchedulerCollection::Clear 函數(shù)進(jìn)行釋放,以免造成程序出錯(cuò)。
3)為每個(gè)計(jì)算節(jié)點(diǎn)分配的最大任務(wù)數(shù)。
經(jīng)實(shí)驗(yàn)發(fā)現(xiàn),在搭建的集群平臺(tái)上,在把多個(gè)Magic 進(jìn)程分配到集群上時(shí),當(dāng)一次迭代的Magic 進(jìn)程過多,超過了一臺(tái)計(jì)算節(jié)點(diǎn)可用的CPU內(nèi)核數(shù)時(shí),集群頭節(jié)點(diǎn)會(huì)把任務(wù)循環(huán)分配到可以使用的計(jì)算節(jié)點(diǎn)上。如可用的計(jì)算節(jié)點(diǎn)有3 個(gè),第1 個(gè)任務(wù)會(huì)分配到第1 臺(tái)計(jì)算節(jié)點(diǎn)上,第2 個(gè)任務(wù)會(huì)被分配到第2 個(gè)計(jì)算節(jié)點(diǎn)上,第3 個(gè)任務(wù)會(huì)被分配到第3 個(gè)計(jì)算節(jié)點(diǎn)上,第4 個(gè)任務(wù)又會(huì)被分配到第1 個(gè)計(jì)算節(jié)點(diǎn)上,依次循環(huán),有1 個(gè)計(jì)算節(jié)點(diǎn)上的內(nèi)核被分配完就不再給該計(jì)算節(jié)點(diǎn)再分配;當(dāng)一代中包括的Magic 較少時(shí),集群會(huì)將所有的Magic 進(jìn)程分配到一個(gè)計(jì)算節(jié)點(diǎn)上。
為每個(gè)計(jì)算節(jié)點(diǎn)分配的Magic 進(jìn)程數(shù)應(yīng)根據(jù)CPU 的利用率、每個(gè)計(jì)算節(jié)點(diǎn)上所有Magic 計(jì)算完成的時(shí)間和集群用戶數(shù)量這3 個(gè)指標(biāo)來確定。
每臺(tái)工作站都是多核CPU,如果每個(gè)Magic進(jìn)程占用CPU 的1 個(gè)內(nèi)核,1 個(gè)計(jì)算節(jié)點(diǎn)被分配的Magic 進(jìn)程數(shù)為CPU 的內(nèi)核數(shù),計(jì)算節(jié)點(diǎn)的CPU 利用率會(huì)很高,甚至?xí)_(dá)到100%。有的計(jì)算節(jié)點(diǎn)不僅要滿足集群運(yùn)算的需求,還要滿足用戶正常的使用,如果CPU 的利用率過高,則無法滿足用戶對計(jì)算機(jī)的正常使用;CPU 的利用率過高,也會(huì)導(dǎo)致1 個(gè)計(jì)算節(jié)點(diǎn)上多個(gè)Magic 進(jìn)程之間相互影響,1 個(gè)計(jì)算節(jié)點(diǎn)上任務(wù)完成的時(shí)間增加。如果在多核工作站上分配的Magic 進(jìn)程過多,會(huì)存在許多顯示計(jì)算完成卻沒有進(jìn)行計(jì)算的Magic 進(jìn)程,雖然重復(fù)提交可以解決該問題,但是還是會(huì)略微增加迭代一次所需的時(shí)間。
如果1 個(gè)計(jì)算節(jié)點(diǎn)被分配的Magic 進(jìn)程數(shù)少于CPU 的內(nèi)核數(shù),CPU 的利用率就會(huì)下降,1 個(gè)計(jì)算節(jié)點(diǎn)上分配的Magic 進(jìn)程相互之間影響較小,完成時(shí)間縮短,但是整個(gè)集群能并行運(yùn)算的算例總數(shù)量就會(huì)下降。假如集群中的計(jì)算節(jié)點(diǎn)的數(shù)量一定,不再增加,多個(gè)用戶同時(shí)使用集群,就可能會(huì)出現(xiàn)部分用戶提交的任務(wù)會(huì)處于排隊(duì)狀態(tài)。所以,要把這3 個(gè)因素綜合考慮,取得一個(gè)最優(yōu)值。
綜合以上所有因素,本文經(jīng)實(shí)驗(yàn)發(fā)現(xiàn)當(dāng)1 臺(tái)計(jì)算機(jī)擁有的CPU 內(nèi)核數(shù)較多時(shí),設(shè)置每臺(tái)計(jì)算節(jié)點(diǎn)最大可用于計(jì)算的內(nèi)核數(shù)為每臺(tái)計(jì)算節(jié)點(diǎn)擁有CPU 內(nèi)核數(shù)的 [ 2/3]為宜,規(guī)定每個(gè)Magic 進(jìn)程計(jì)算使用的內(nèi)核數(shù)為1 即可。
值得注意的是,只有先在HPC Cluster Manage軟件中把每臺(tái)計(jì)算節(jié)點(diǎn)進(jìn)行脫機(jī)后,才能使用該軟件設(shè)置每個(gè)計(jì)算節(jié)點(diǎn)可以使用的最大內(nèi)核數(shù),且可用的最大內(nèi)核數(shù)只能設(shè)置為偶數(shù)。
由于在進(jìn)行Magic 進(jìn)行并行化時(shí),要求集群具有容錯(cuò)能力,即1 個(gè)計(jì)算節(jié)點(diǎn)宕機(jī)的情況。經(jīng)過實(shí)驗(yàn)論證發(fā)現(xiàn),當(dāng)某個(gè)計(jì)算節(jié)點(diǎn)在運(yùn)行Magic 進(jìn)程時(shí)出現(xiàn)了宕機(jī)的情況,該機(jī)上計(jì)算任務(wù)不會(huì)失敗,任務(wù)會(huì)被重新收回,狀態(tài)變成排隊(duì)狀態(tài),當(dāng)有可用的計(jì)算資源時(shí),任務(wù)會(huì)被重新分配出去,完成計(jì)算;當(dāng)1 個(gè)計(jì)算節(jié)點(diǎn)發(fā)生故障時(shí),集群將不會(huì)分配Magic 進(jìn)程給該計(jì)算節(jié)點(diǎn)。1 個(gè)計(jì)算節(jié)點(diǎn)出現(xiàn)故障,不會(huì)影響整個(gè)集群的正常使用。
本文在Magic 迭代算法軟件的前端界面上設(shè)置好Magic 程序所需的參數(shù)信息,使用搭建好的2 臺(tái)相同的工作站集群充當(dāng)計(jì)算節(jié)點(diǎn),用于Magic 程序的運(yùn)行,每臺(tái)工作站擁有32 個(gè)CPU內(nèi)核,同時(shí)準(zhǔn)備1 臺(tái)相同的工作站進(jìn)行單機(jī)迭代優(yōu)化參數(shù)。
經(jīng)過測算在工作站上單獨(dú)運(yùn)行一個(gè)Magic 進(jìn)程,計(jì)算完成平均花費(fèi)15 min。程序每次迭代會(huì)生成44 個(gè)Magic 進(jìn)程。由于我們設(shè)定的每臺(tái)計(jì)算節(jié)點(diǎn)可用的最大內(nèi)核為22 個(gè),每個(gè)Magic 進(jìn)程占用1 個(gè)CPU 內(nèi)核,故每次迭代44 個(gè)Magic 進(jìn)程可以同時(shí)進(jìn)行計(jì)算,沒有排隊(duì)現(xiàn)象。對于單機(jī)的magic 進(jìn)程一般習(xí)慣設(shè)定同時(shí)開啟的Magic 進(jìn)程數(shù)為工作站的最大內(nèi)核數(shù),故一次開啟32 個(gè)進(jìn)程。集群和用于單機(jī)迭代優(yōu)化參數(shù)的工作站都沒有運(yùn)行其他程序。
放在集群上進(jìn)行迭代,44 個(gè)Magic 進(jìn)程計(jì)算完成平均所花的時(shí)間為22 min。而在單機(jī)上完成44 個(gè)Magic 進(jìn)程計(jì)算平均花費(fèi)40 min。說明使用較單機(jī)多一倍的計(jì)算資源,計(jì)算速度大約提升了一倍,加速比約為2。通過實(shí)驗(yàn)數(shù)據(jù)比對發(fā)現(xiàn)該方法能提高計(jì)算效率,所以該方法是行之有效的。
本文以單機(jī)Magic 迭代計(jì)算軟件為研究對象,針對每代開啟多個(gè)Magic 程序、運(yùn)行效率低下的問題,提出了一種基于Microsoft HPC 的并行化方法,提高了計(jì)算速度。
1)本文采用了共享存儲(chǔ)的方法,使用共享文件夾實(shí)現(xiàn)多臺(tái)計(jì)算機(jī)計(jì)算開始前讀取所需參數(shù),計(jì)算完成后存儲(chǔ)計(jì)算結(jié)果的功能。
2)本文提出基于Microsoft HPC 的方法實(shí)現(xiàn)Magic 迭代計(jì)算軟件的并行化,將每代的Magic 程序分配到多臺(tái)計(jì)算機(jī)的不同計(jì)算單元上進(jìn)行計(jì)算,既利用了閑置的計(jì)算資源,又提高了計(jì)算效率,且成本低。為解決同類問題提供了一種可行的思路和方法。
在未來的工作中,可以深入的研究一下在并行計(jì)算過程中出現(xiàn)的個(gè)別Magic 進(jìn)程沒有進(jìn)行計(jì)算以及部分算例在計(jì)算完成后無法自行停止問題的真正原因。