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