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