文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2011)10-0123-03
超高、超長(zhǎng)、大跨度的復(fù)雜建筑工程設(shè)計(jì)涉及大量的復(fù)雜計(jì)算,對(duì)高性能計(jì)算技術(shù)有著重大的需求。目前,傳統(tǒng)的建筑工程設(shè)計(jì)的高性能有限元分析軟件工具主要基于并行計(jì)算技術(shù)。高性能并行計(jì)算以MPI標(biāo)準(zhǔn)為代表[1],其中最為著名且被廣泛使用的是由美國(guó)Argonne 國(guó)家實(shí)驗(yàn)室完成的MPICH,它廣泛應(yīng)用于各種建筑結(jié)構(gòu)計(jì)算軟件(如ANSYS、FLUENT、PATRAN)中。然而,MPI進(jìn)行數(shù)據(jù)處理主要方式是將作業(yè)分配給集群,由集群訪問(wèn)以存儲(chǔ)區(qū)域網(wǎng)絡(luò)為管理基礎(chǔ)的共享文件系統(tǒng),在大量數(shù)據(jù)的情況下網(wǎng)絡(luò)帶寬將限制這種處理方式[2],而新出現(xiàn)的云計(jì)算技術(shù)能夠有效地解決這個(gè)問(wèn)題。云計(jì)算是IT界新近提出的以Hadoop技術(shù)為代表的分布式計(jì)算模式,Hadoop的MapReduce模式具有計(jì)算節(jié)點(diǎn)本地存儲(chǔ)數(shù)據(jù)的特性,能夠有效地避免MPI的網(wǎng)絡(luò)帶寬限制問(wèn)題。相對(duì)于MPI賦予程序員的可控性,MapReduce則是在更高的層面上完成任務(wù)。
本文闡述了建筑結(jié)構(gòu)并行計(jì)算(MPI)的云計(jì)算的應(yīng)用方法和思想,利用Google的MR_MIP庫(kù)(Library)結(jié)合相應(yīng)程序接口,發(fā)揮兩種計(jì)算方法各自的優(yōu)勢(shì),實(shí)現(xiàn)了云計(jì)算與MPI相互融合。既利用了傳統(tǒng)的基于并行計(jì)算技術(shù)的建筑計(jì)算軟件的豐富資源,又使用云計(jì)算技術(shù)解決了現(xiàn)有方法存在的問(wèn)題。
1 云計(jì)算與Hadoop
云計(jì)算(Cloud Computing)是網(wǎng)格計(jì)算、分布式處理和并行處理的發(fā)展[3],是計(jì)算機(jī)科學(xué)概念的商業(yè)實(shí)現(xiàn)。其基本原理是把計(jì)算分配到大量的分布式計(jì)算機(jī),而不是分配到本地計(jì)算機(jī)或遠(yuǎn)程的服務(wù)器上,使企業(yè)數(shù)據(jù)中心的運(yùn)行類似于互聯(lián)網(wǎng)。企業(yè)能夠?qū)⒂邢薜馁Y源轉(zhuǎn)移到需要的應(yīng)用上,并根據(jù)自身需求訪問(wèn)計(jì)算機(jī)及存儲(chǔ)系統(tǒng),降低了企業(yè)的成本。
云計(jì)算是一種革命性的舉措,即把力量聯(lián)合起來(lái)給其中的某一個(gè)成員使用,計(jì)算機(jī)的計(jì)算能力能像商品一樣費(fèi)用低廉取用方便。云計(jì)算最大的特點(diǎn)是通過(guò)互聯(lián)網(wǎng)提供服務(wù),只需要一臺(tái)筆記本或者一個(gè)網(wǎng)絡(luò)終端,而不需要用戶端安裝任何應(yīng)用程序?qū)崿F(xiàn)需要的一切,甚至包括超級(jí)計(jì)算等服務(wù)。
IBM于2007年底推出了“藍(lán)云(Blue Cloud)”計(jì)劃,同時(shí)推出許多云計(jì)算產(chǎn)品。通過(guò)構(gòu)建一個(gè)類似分布式的資源結(jié)構(gòu),把計(jì)算從本地機(jī)器和遠(yuǎn)程服務(wù)器轉(zhuǎn)移到類似于互聯(lián)網(wǎng)的數(shù)據(jù)中心運(yùn)行。Hadoop是基于Google Map-Reduce計(jì)算模型的開源分布式并行編程框架[4],根據(jù)Google GFS設(shè)計(jì)了自己的HDFS分布式文件系統(tǒng)[5],使Hadoop成為一個(gè)分布式的計(jì)算平臺(tái)。同時(shí)還提供了基于Java的MapReduce框架,能夠?qū)⒎植际綉?yīng)用部署到大型廉價(jià)集群上。
Hadoop主要由分布式文件系統(tǒng)HDFS(Hadoop Distributed File System)和MapReduce兩部分構(gòu)成。HDFS 有著高容錯(cuò)性的特點(diǎn),并且設(shè)計(jì)用來(lái)部署在低廉的硬件上。它提供高傳輸率來(lái)訪問(wèn)應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集的應(yīng)用程序。MapReduce依賴于HDFS實(shí)現(xiàn),通常MapReduce會(huì)在集群中數(shù)據(jù)的宿主機(jī)上進(jìn)行最便捷的計(jì)算。
2 MPI標(biāo)準(zhǔn)
消息傳遞接口MPI(Message Passing Interface)是支持在異構(gòu)計(jì)算機(jī)上進(jìn)行計(jì)算任務(wù)的并行平臺(tái)[6],它是一種編程接口標(biāo)準(zhǔn),而不是一種具體的編程語(yǔ)言。該標(biāo)準(zhǔn)是由消息傳遞接口論壇MPIF(Message Passing Interface Form)發(fā)起討論并進(jìn)行規(guī)范化。該標(biāo)準(zhǔn)的主要目的是提高并行程序的可移植性和使用的方便性。MPI并行計(jì)算環(huán)境下的應(yīng)用軟件庫(kù)以及軟件工具都可以透明地移植,是目前最重要的并行編程工具。MPI的最大優(yōu)點(diǎn)是其高性能,具有豐富的點(diǎn)到點(diǎn)通信函數(shù)模型、可操作數(shù)據(jù)類型及更大的群組通信函數(shù)庫(kù)。
MPI標(biāo)準(zhǔn)定義了一組具有可移植性的編程接口。設(shè)計(jì)了應(yīng)用程序并行算法,調(diào)用這些接口,鏈接相應(yīng)平臺(tái)上的MPI庫(kù),就可以實(shí)現(xiàn)基于消息傳遞的并行計(jì)算。正是由于MPI提供了統(tǒng)一的接口,該標(biāo)準(zhǔn)受到各種并行平臺(tái)上的廣泛支持,這也使得MPI程序具有良好的移植性。目前MPI支持多種編程語(yǔ)言,包括Fortran 77、Fortran 90以及C/C++;同時(shí),MPI支持多種操作系統(tǒng),包括大多數(shù)的類UNIX系統(tǒng)以及Windows系統(tǒng)等;同時(shí)還支持多核、對(duì)稱多處理機(jī)、集群等各種硬件平臺(tái)。
2.1 MPI的通信模式
(1)標(biāo)準(zhǔn)通信模式(StandardMode)。在MPI采用標(biāo)準(zhǔn)通信模式時(shí),是否對(duì)發(fā)送的數(shù)據(jù)進(jìn)行緩存是由MPI自身決定的,而不是由程序來(lái)控制。如果MPI決定緩存將要發(fā)出的數(shù)據(jù),發(fā)送操作不管接收操作是否執(zhí)行都可以進(jìn)行,而且發(fā)送操作可以正確返回而不要求接收操作收到發(fā)送的數(shù)據(jù)。
(2)緩存通信模式(BufferedMode)。緩存通信模式若需要直接對(duì)通信緩沖區(qū)進(jìn)行控制,可采用緩存通信模式。在這種模式下由用戶直接對(duì)通信緩沖區(qū)進(jìn)行申請(qǐng)、使用和釋放,因此緩存模式下對(duì)通信緩沖區(qū)的合理與正確使用是由程序設(shè)計(jì)人員自己保證。采用緩存通信模式時(shí),消息發(fā)送能否進(jìn)行及能否正確返回,不依賴于接收進(jìn)程,而是完全依賴于是否有足夠的通信緩沖區(qū)可用,當(dāng)緩存發(fā)送返回后,并不意味者該緩沖區(qū)可以自由使用,只有當(dāng)緩沖區(qū)中的消息發(fā)送出去后才可以釋放該緩沖區(qū)。
(3)同步通信模式(Synehronous-mode)。同步通信模式的開始不依賴于接收進(jìn)程相應(yīng)的接收操作是否己經(jīng)啟動(dòng),但是同步發(fā)送卻必須等到相應(yīng)的接收進(jìn)程開始后才可以正確返回。因此同步發(fā)送返回后意味著發(fā)送緩沖區(qū)中的數(shù)據(jù)已經(jīng)全部被系統(tǒng)緩沖區(qū)緩存,并且己經(jīng)開始發(fā)送,這樣當(dāng)同步發(fā)送返回后,發(fā)送緩沖區(qū)可以被釋放或重新使用。
(4)就緒通信模式(Ready-mode)。在就緒通信模式中,只有當(dāng)接收進(jìn)程的接收操作已經(jīng)啟動(dòng)時(shí)才可以在發(fā)送進(jìn)程啟動(dòng)發(fā)送操作,否則當(dāng)發(fā)送操作啟動(dòng)而相應(yīng)的接收還沒有啟動(dòng)時(shí)發(fā)送操作將出錯(cuò)。就緒通信模式的特殊之處在于它要求接收操作先于發(fā)送操作而被啟動(dòng),因此在一個(gè)正確的程序中,一個(gè)就緒發(fā)送能被一個(gè)標(biāo)準(zhǔn)發(fā)送替代。該模式對(duì)程序的語(yǔ)義沒有影響,而對(duì)程序的性能有影響。
2.2 MPI調(diào)用的參數(shù)說(shuō)明
對(duì)于有參數(shù)的MPI調(diào)用,MPI首先給出一種獨(dú)立于具體語(yǔ)言的說(shuō)明。對(duì)各個(gè)參數(shù)的性質(zhì)進(jìn)行介紹,然后在給出它相對(duì)于FORTRAN和C的原型說(shuō)明。在MPI-2中還給出了C++形式的說(shuō)明,MPI對(duì)參數(shù)說(shuō)明的方式有IN、OUT和INOUT三種。它們的含義分別是: IN為輸入調(diào)用部分傳遞給MPI的參數(shù),MPI除了使用該參數(shù)外不允許對(duì)這一參數(shù)做任何修改;OUT為輸出MPI返回給調(diào)用部分的結(jié)果參數(shù),該參數(shù)的初始值對(duì)MPI沒有任何意義;INOUT為輸入輸出調(diào)用部分,首先將該參數(shù)傳遞給MPI,MPI對(duì)這一參數(shù)引用、修改后,將結(jié)果返回給外部調(diào)用。該參數(shù)的初始值和返回結(jié)果都有意義。
如果某一個(gè)參數(shù)在調(diào)用前后沒有改變,例如某個(gè)隱含對(duì)象的句柄,但是該句柄指向的對(duì)象被修改了,則這一參數(shù)仍然被說(shuō)明為OUT或INOUT。MPI的定義在最大范圍內(nèi)避免了INOUT參數(shù)的使用,因?yàn)檫@些使用易于出錯(cuò),特別是對(duì)標(biāo)量參數(shù)的使用。
還有一種情況是MPI函數(shù)的一個(gè)參數(shù)被一些并行執(zhí)行的進(jìn)程用作IN,而被另一些同時(shí)執(zhí)行的進(jìn)程用作OUT。雖然在語(yǔ)義上它不是同一個(gè)調(diào)用的輸入和輸出,這樣的參數(shù)語(yǔ)法上也記為INOUT。
當(dāng)一個(gè)MPI參數(shù)僅對(duì)一些并行執(zhí)行的進(jìn)程有意義,而對(duì)其他的進(jìn)程沒有意義時(shí),不關(guān)心該參數(shù)取值的進(jìn)程可以將任意的值傳遞給該參數(shù)。如圖1所示。
3 建筑并行云計(jì)算架構(gòu)
3.1 ANSYS分布式并行計(jì)算
ANSYS軟件是最常用的建筑結(jié)構(gòu)有限元求解軟件之一,其核心是一系列面向各個(gè)領(lǐng)域應(yīng)用的高級(jí)求解器。ANSYS支持在異種、異構(gòu)平臺(tái)上的網(wǎng)絡(luò)浮動(dòng),其強(qiáng)大的并行計(jì)算功能支持共享內(nèi)存(share memory)和分布式內(nèi)存(distributed memory)兩種并行方式。共享內(nèi)存式并行計(jì)算,是指單機(jī)多CPU的并行計(jì)算、分布內(nèi)存式并行計(jì)算及多機(jī)多CPU的并行計(jì)算;分布式內(nèi)存并行往往比共享內(nèi)存并行有更好的并行效能,ANSYS分布式求解技術(shù)核心是基于MPI的編制的計(jì)算程序。近幾年,隨著CPU多核,高速互聯(lián)等技術(shù)的發(fā)展,低成本高效率的Linux集群系統(tǒng)成為高性能計(jì)算平臺(tái)的主流。
3.2 Hadoop的MapReduce 模式計(jì)算流程
Hadoop的MapReduce計(jì)算架構(gòu)實(shí)現(xiàn)了由Google工程師提出的MapReduce編程模型。它將復(fù)雜的、運(yùn)行于大規(guī)模集群上的并行計(jì)算過(guò)程高度地抽象到了Map和 Reduce兩個(gè)函數(shù), 待處理的數(shù)據(jù)集可以分解成許多小的數(shù)據(jù)集,而且每一個(gè)小數(shù)據(jù)集都可以完全并行地進(jìn)行處理。MapReduce的計(jì)算流程如圖2所示。
(1)數(shù)據(jù)劃分。首先將數(shù)量眾多的文件進(jìn)行劃分,分成大小不一的若干小塊數(shù)據(jù)。通常數(shù)據(jù)塊大小可以由用戶根據(jù)需要自行控制,然后將這些數(shù)據(jù)塊備份分配到各個(gè)機(jī)器集群中存儲(chǔ)。
(2)讀取數(shù)據(jù)并在本地進(jìn)行歸并。被指定執(zhí)行映射任務(wù)的工作站節(jié)點(diǎn)讀取要處理的數(shù)據(jù)塊,然后從原始數(shù)據(jù)塊中將數(shù)據(jù)解析成鍵/值的形式,通過(guò)用戶定義的映射函數(shù)處理得到中間鍵/值對(duì),存入本地內(nèi)存緩沖區(qū)。緩沖區(qū)中的數(shù)據(jù)集合被劃分函數(shù)分配到各個(gè)區(qū)域,然后寫入本機(jī)磁盤。返回管理機(jī)本地磁盤中數(shù)據(jù)的存放位置信息,管理機(jī)隨后將這些數(shù)據(jù)位置信息告訴執(zhí)行規(guī)約任務(wù)的相關(guān)工作站節(jié)點(diǎn)。
(3)指派映射/規(guī)約任務(wù)。在這些數(shù)據(jù)塊備份中有一個(gè)管理機(jī)主程序,其余的均為工作站節(jié)點(diǎn)程序,由管理機(jī)指派任務(wù)給各工作站。主程序?qū)⒅概商幱诳臻e狀態(tài)的工作站來(lái)執(zhí)行規(guī)約任務(wù)或映射任務(wù)。
(4)遠(yuǎn)程讀取。在通知執(zhí)行歸并任務(wù)的工作站數(shù)據(jù)的存儲(chǔ)位置信息后,reduce工作站通過(guò)遠(yuǎn)程方式讀取執(zhí)行map任務(wù)工作站中的緩存數(shù)據(jù)。reduce工作站取得所有需要的中間數(shù)據(jù)后,按照關(guān)鍵字對(duì)中間數(shù)據(jù)鍵/值對(duì)進(jìn)行排序,把相同關(guān)鍵字的數(shù)據(jù)劃分到同一類中去。不同的關(guān)鍵字映射后都要進(jìn)行相同的規(guī)約操作,所以對(duì)中間數(shù)據(jù)進(jìn)行排序非常必要。假如產(chǎn)生的中間數(shù)據(jù)集的數(shù)量非常大無(wú)法存入內(nèi)存,可以利用外部存儲(chǔ)器存儲(chǔ)。
(5)寫入輸出文件。最后的reduce工作站對(duì)每個(gè)歸并操作的中間數(shù)據(jù)按中間關(guān)鍵字進(jìn)行排列,傳送中間鍵/值對(duì)數(shù)據(jù)給用戶定義的歸約函數(shù)。歸約函數(shù)的最終輸出結(jié)果將被追加到輸出結(jié)果文件中。在所有的映射任務(wù)和歸約任務(wù)完成之后,管理機(jī)喚醒用戶程序以繼續(xù)之前的程序執(zhí)行,完成下一階段的任務(wù)。
3.3 建筑結(jié)構(gòu)并行云計(jì)算方法
建筑結(jié)構(gòu)有限元求解軟件ANSYS支持MPI并行編程模式,如何利用其高效的性能并結(jié)合云計(jì)算技術(shù)是一個(gè)新出現(xiàn)的研究問(wèn)題。使用Google提供的MR_MIP庫(kù)(Library)能夠解決這個(gè)問(wèn)題。MR-MPI提供了云計(jì)算的MPI庫(kù),結(jié)合相應(yīng)程序接口可以實(shí)現(xiàn)并行計(jì)算與云計(jì)算的結(jié)合。圖3給出了兩種先進(jìn)的計(jì)算技術(shù)結(jié)合的高效能計(jì)算過(guò)程。
在建筑結(jié)構(gòu)并行云計(jì)算的執(zhí)行過(guò)程中,Master占據(jù)核心位置,為計(jì)算程序的順利運(yùn)行提供各種服務(wù)并負(fù)責(zé)任務(wù)的調(diào)度。為將要執(zhí)行的MPI程序提供MR-MPI庫(kù),同時(shí)選擇執(zhí)行Map和Reduce程序的節(jié)點(diǎn)機(jī),讀取節(jié)點(diǎn)機(jī)上相應(yīng)的數(shù)據(jù)塊進(jìn)行分布式并行計(jì)算。同時(shí)Master還定期探測(cè)worker,當(dāng)某個(gè)testworker任務(wù)失敗時(shí),相應(yīng)的map操作將被通知重起。這種計(jì)算模式綜合了云計(jì)算和并行計(jì)算的各自優(yōu)勢(shì),在高速計(jì)算的同時(shí)又實(shí)現(xiàn)了系統(tǒng)的負(fù)載均衡和故障恢復(fù)。
高性能計(jì)算技術(shù)可高效地解決建筑行業(yè)中大型復(fù)雜結(jié)構(gòu)高精度分析、優(yōu)化和控制等問(wèn)題,從而促進(jìn)建筑工程結(jié)構(gòu)設(shè)計(jì)水平和設(shè)計(jì)質(zhì)量的提高。本文給出了將Hadoop的MapReduce計(jì)算架構(gòu)與MPI相互整合的應(yīng)用方法,提出了云計(jì)算在建筑結(jié)構(gòu)程序并行化上的應(yīng)用,為大規(guī)模工程計(jì)算技術(shù)發(fā)展提供了新思路。
參考文獻(xiàn)
[1] MATTSON T G. 并行編程模式[M].北京:清華大學(xué)出版社,2005.
[2] 王文義,劉輝.并行程序設(shè)計(jì)環(huán)境MPICH的應(yīng)用機(jī)理分析[J].計(jì)算機(jī)應(yīng)用,2004,22(4):1-3.
[3] 王鵬. 云計(jì)算的關(guān)鍵技術(shù)與應(yīng)用實(shí)例[M]. 北京:人民郵電出版社, 2010.
[4] WHITE T. Hadoop: the definitive guide[M].Oreilly Media, 2009.
[5] GHEMAWAT S, GOBIOFF H, LEUNG S T. The google file system[J].ACM SIGOPS Operating Systems,2003,9(8):1-5.
[6] 張林波,遲學(xué)斌,莫?jiǎng)t堯.并行計(jì)算導(dǎo)論[M].北京:清華大學(xué)出版社,2006.