李曉佳 董延華
摘要:隨著材料科學(xué)技術(shù)的發(fā)展,模擬計(jì)算需要處理的數(shù)據(jù)量逐漸增多,僅通過(guò)提高單個(gè)處理器的運(yùn)算速度和傳統(tǒng)的串行計(jì)算技術(shù)已難以解決上述問(wèn)題。大規(guī)模問(wèn)題的解決通常需要高性能計(jì)算集群的支持,由于其花費(fèi)較高,中小型及個(gè)人的科研支出無(wú)力承擔(dān)。本文主要介紹微處理器集群的優(yōu)勢(shì)及特點(diǎn),利用普通PC機(jī)搭建并行計(jì)算環(huán)境,通過(guò)實(shí)例的運(yùn)行,驗(yàn)證并行計(jì)算的優(yōu)勢(shì)及高效性。
關(guān)鍵詞:微處理器:串行計(jì)算:并行計(jì)算
0引言
隨著硬件技術(shù)的發(fā)展成熟。計(jì)算機(jī)處理數(shù)據(jù)和信息的能力日益提高,從計(jì)算機(jī)的發(fā)展歷程中可以看到,每次的更新?lián)Q代都是為了達(dá)到快速計(jì)算的目的,這就要求對(duì)計(jì)算機(jī)的體系結(jié)構(gòu)不斷的改進(jìn)。單核處理器和使用串行計(jì)算無(wú)法滿足科研人員對(duì)計(jì)算速度的追求,而并行處理技術(shù)和并行計(jì)算的提出為此提供了一種實(shí)現(xiàn)高速計(jì)算的有效途徑。并行計(jì)算的思想是對(duì)于一個(gè)給定的問(wèn)題,劃分成多個(gè)獨(dú)立的小任務(wù),將這些獨(dú)立的任務(wù)分別分配給多個(gè)處理器的運(yùn)行,最后將得到的結(jié)果匯總。從而提高解決問(wèn)題的效率,縮短任務(wù)完成的時(shí)間。在這個(gè)過(guò)程中,需要使用多個(gè)微處理來(lái)部署并行計(jì)算平臺(tái),由于資金等方面的限制,考慮在普通微處理器上運(yùn)行并行程序,通過(guò)調(diào)整參數(shù)和性能使之計(jì)算能力達(dá)到在高性能計(jì)算系統(tǒng)上對(duì)數(shù)據(jù)處理的標(biāo)準(zhǔn),這種由普通微處理器節(jié)點(diǎn)構(gòu)成的機(jī)群具有統(tǒng)一調(diào)度,維護(hù)方便的特點(diǎn),因此受到廣大科研愛(ài)好者的推崇。
1 PC機(jī)群的搭建
并行計(jì)算機(jī)并不是將所有硬件整合到一起就能自動(dòng)并行工作的,要使多個(gè)微處理器能正常運(yùn)轉(zhuǎn)并完成計(jì)算任務(wù),首先需要對(duì)機(jī)群系統(tǒng)環(huán)境進(jìn)行有效的配置,本文選擇的操作系統(tǒng)環(huán)境是Linux系統(tǒng)中的Centos6.0,后續(xù)利用平臺(tái)要進(jìn)行并行程序的設(shè)計(jì)和運(yùn)行,因此基礎(chǔ)環(huán)境配置完畢后。安裝IFORT編譯器、MKL庫(kù)和并行函數(shù)MPICH都是必不可少的。
對(duì)于傳統(tǒng)網(wǎng)絡(luò)傳輸軟件,在數(shù)據(jù)交流過(guò)程中極易受到網(wǎng)絡(luò)中其它主機(jī)監(jiān)聽(tīng)和攻擊,從而竊取數(shù)據(jù)。因此采用遠(yuǎn)程登錄時(shí)需要考慮數(shù)據(jù)的加密設(shè)置。為了方便與機(jī)群中各節(jié)點(diǎn)建立信息通信,同時(shí)具有可靠性、安全性和穩(wěn)定性等特點(diǎn),SSH無(wú)疑是最佳選擇。
1.1 什么是SSH
早期網(wǎng)絡(luò)服務(wù)和協(xié)議存在各種隱患,采用口令單一的認(rèn)證方法無(wú)法保證數(shù)據(jù)傳輸?shù)陌踩?。SSH(Secure Shell)協(xié)議的原理是依賴于非對(duì)稱(chēng)加密技術(shù),支持多種安全驗(yàn)證方式,同時(shí)MD5和SHA-1等算法使用避免了數(shù)據(jù)在傳輸過(guò)程中被篡改和源/目的地址的偽造,確保了數(shù)據(jù)的完整性。SSH提供了強(qiáng)大的認(rèn)證和加密性能。需要客戶端和服務(wù)器共同合作才能完成解密的過(guò)程,降低了數(shù)據(jù)泄露的風(fēng)險(xiǎn),同時(shí)對(duì)于客戶端而言僅通過(guò)安裝OpenSSH軟件就可以進(jìn)行與主機(jī)的信息交互和文件的傳輸,擁有下載方便,節(jié)省經(jīng)費(fèi)的特點(diǎn)。
1.2 并行節(jié)點(diǎn)的認(rèn)證過(guò)程
一般來(lái)說(shuō),對(duì)于客戶端而言SSH提供了兩種安全認(rèn)證級(jí)別,基于口令的安全認(rèn)證和基于密匙的安全認(rèn)證。在并行環(huán)境的部署過(guò)程中,為了實(shí)現(xiàn)各節(jié)點(diǎn)間無(wú)障礙的信息交流,提高通信效率的同時(shí)又可保障安全性。實(shí)驗(yàn)過(guò)程中采用基于密匙的無(wú)密碼認(rèn)證方案,這種認(rèn)證方案是安裝MPI程序必備條件,通過(guò)配置機(jī)群中各節(jié)點(diǎn)可以互認(rèn)為可信任節(jié)點(diǎn),從而實(shí)現(xiàn)無(wú)密碼信息傳遞。新用戶nodeA需要加入到機(jī)群中作為新節(jié)點(diǎn)實(shí)現(xiàn)通信,需要完成如下配置:
(1)在客戶端nodeA中建立公鑰id_das。pub和私鑰id_dsa。通過(guò)運(yùn)行ssh-keygen -t dsa命令,隨機(jī)產(chǎn)生所需要的文件,并存放在-/。ssh路徑下。
(2)將產(chǎn)生的公鑰作為認(rèn)證依據(jù),進(jìn)行訪問(wèn)授權(quán),nodeA將公鑰文件拷貝到服務(wù)器端nodeB的-/。ssh/authorized_keys路徑下,修改其讀寫(xiě)權(quán)限,使服務(wù)器端信任客戶端的公鑰。
(3)服務(wù)器端nodeB將所有的公鑰合成在一個(gè)authorized_keys文件中,再將文件回傳給各個(gè)節(jié)點(diǎn)的。shh目錄中,即可實(shí)現(xiàn)節(jié)點(diǎn)間無(wú)密碼互通。認(rèn)證具體過(guò)程如圖1所示。
1.3 進(jìn)程管理器hydra的安裝
在搭建并行計(jì)算環(huán)境的過(guò)程中,MPICH是提供并行運(yùn)算的必要工具,也是MPI標(biāo)準(zhǔn)的一種重要實(shí)現(xiàn)。實(shí)驗(yàn)過(guò)程中采用MPICH2版本,其與MPICHl最大的不同在于進(jìn)程管理器的選擇。早期的版本默認(rèn)為mpd,需要額外啟動(dòng)服務(wù)器端,對(duì)于參數(shù)的配置方面也比較復(fù)雜。MPICH2選擇的進(jìn)程管理器是hydra,在配置方面要比mpd簡(jiǎn)單,屬于輕量的PM(Processor Manager),但在運(yùn)算過(guò)程中,機(jī)群中某一節(jié)點(diǎn)發(fā)生故障,整個(gè)應(yīng)用就會(huì)被停止,而使用mpd管理時(shí),則會(huì)跳過(guò)發(fā)生故障的節(jié)點(diǎn),其余節(jié)點(diǎn)正常分配計(jì)算任務(wù),這也是hydra的弊端所在。實(shí)驗(yàn)中選用版本MPICH2_I。4.1使用的進(jìn)程管理器為hydra,在nodel上實(shí)現(xiàn)的配置如下:
(1)Hydra配置時(shí)需要填寫(xiě)hosts文件,將所有允許訪問(wèn)進(jìn)行并行計(jì)算的機(jī)器名填入,并標(biāo)明CPU數(shù)量。文件結(jié)構(gòu)如下:
$ vi mpd。hosts
node1:4
node2:4
node3:4
node4:4
冒號(hào)分隔的前半部為機(jī)器名,可以使用節(jié)點(diǎn)名也可以使用節(jié)點(diǎn)對(duì)應(yīng)的ip地址,后半部分為可用的CPU數(shù)量。
(2)配置參數(shù),在PA了H中寫(xiě)入hosts文件的路徑,重新打開(kāi)命令行窗口后執(zhí)行。配置界面如圖2所示。
(3)測(cè)試之前各節(jié)點(diǎn)的主目錄下應(yīng)生成mpd。conf文件,它是mpd進(jìn)程能夠正常開(kāi)啟的關(guān)鍵。查看完成后,編譯、運(yùn)行mpirun命令,以自帶的cpi程序?yàn)槔?,測(cè)試環(huán)境是否搭建成功。測(cè)試結(jié)果如圖3所示。
2 并行計(jì)算與串行計(jì)算的區(qū)別與優(yōu)勢(shì)
2.1 概念不同
串行計(jì)算的運(yùn)算原理是,進(jìn)程l和進(jìn)程2均要執(zhí)行計(jì)算任務(wù),任務(wù)執(zhí)行前,為待執(zhí)行的程序分配一段內(nèi)存空間,進(jìn)程按順序調(diào)入cpu執(zhí)行且在一定時(shí)間內(nèi)獨(dú)占cpu資源,cpu的性能在串行計(jì)算過(guò)程中顯得尤為重要,圖4為串行計(jì)算的工作過(guò)程。對(duì)于并行計(jì)算而言,進(jìn)程1和進(jìn)程2被切割成幾個(gè)獨(dú)立的子進(jìn)程分別分配處理器和內(nèi)存資源,執(zhí)行效率較高,在存儲(chǔ)單元的使用上也可以實(shí)現(xiàn)共享,線程間的消息傳遞主要靠在cpu間的數(shù)據(jù)復(fù)制,因此數(shù)據(jù)復(fù)制的速度和延遲是影響消息傳遞效率最關(guān)鍵因素,圖5為并行計(jì)算工作過(guò)程。
2.2 函數(shù)的組成不同
并行程序的設(shè)計(jì)類(lèi)似于串行程序,基本結(jié)構(gòu)簡(jiǎn)單,程序構(gòu)成比較固定。但調(diào)用方法和具體實(shí)現(xiàn)方面還是與串行程序有所不同。所有的并行程序的執(zhí)行過(guò)程大致為:對(duì)頭文件的聲明:申明程序中使用的變量;調(diào)用MPI-Init、MPI_Comm_size和MPI_Comm_rank函數(shù),對(duì)并行環(huán)境初始化;執(zhí)行MPI_Send和MPI_Recv函數(shù),實(shí)現(xiàn)程序中消息的發(fā)送與接收:調(diào)用MPI_Finalize函數(shù)消除MPI環(huán)境,結(jié)束程序。在并行程序的設(shè)計(jì)過(guò)程中。MPI_Init和MPI_Finalize的調(diào)用只能使用一次,程序的主體部分應(yīng)被每一個(gè)節(jié)點(diǎn)所執(zhí)行。MPI調(diào)用接口的總數(shù)雖然龐大,但大多數(shù)的并行程序都可以使用表1中這6個(gè)基本函數(shù)實(shí)現(xiàn)。
2.3 運(yùn)行效率對(duì)比
在并行編程的研究過(guò)程中,矩陣的實(shí)現(xiàn)和操作是很重要的研究方向。很多問(wèn)題的解決都可以轉(zhuǎn)化成矩陣來(lái)解決。在設(shè)計(jì)矩陣相乘的計(jì)算過(guò)程中,大多數(shù)的矩陣操作在并行程序中都采用主從模式,主節(jié)點(diǎn)負(fù)責(zé)將問(wèn)題切割成小部分,從節(jié)點(diǎn)將得到的問(wèn)題進(jìn)行計(jì)算并將結(jié)果返回到主節(jié)點(diǎn)匯總,本文以矩陣A、B相乘為例,矩陣A的規(guī)模是y*y,矩陣B的規(guī)模是y * 1,實(shí)驗(yàn)中選擇的矩陣規(guī)模是200,通過(guò)添加MPI_Wtime函數(shù)對(duì)數(shù)據(jù)通信的時(shí)間進(jìn)行統(tǒng)計(jì),并行環(huán)境下代碼的平均消耗時(shí)間要比串行環(huán)境低0.402S,充分體現(xiàn)了并行算法的優(yōu)勢(shì)。具體操作流程如圖6所示。
由于在運(yùn)算過(guò)程中,存在各節(jié)點(diǎn)間的傳輸延時(shí),若程序運(yùn)行時(shí)間較短則無(wú)法體現(xiàn)并行的優(yōu)勢(shì)。因此,在矩陣規(guī)模和算法的選擇上是十分重要的。
3 結(jié)束語(yǔ)
本文從不同角度對(duì)比了并行計(jì)算與串行計(jì)算解決問(wèn)題的效率,并依據(jù)實(shí)例驗(yàn)證了并行思想的高效。在此基礎(chǔ)上。通過(guò)對(duì)基于微處理器并行計(jì)算系統(tǒng)的搭建和研究。提出了基于密匙的無(wú)密碼認(rèn)證方案和認(rèn)證過(guò)程,在保證節(jié)點(diǎn)間無(wú)障礙通信的前提下,提高了遠(yuǎn)程登錄過(guò)程中信息交互的安全性和效率,具有一定的應(yīng)用價(jià)值。在實(shí)驗(yàn)過(guò)程中,發(fā)現(xiàn)并行平臺(tái)中計(jì)算節(jié)點(diǎn)通常較多,而且不同的計(jì)算任務(wù)需要重新配置環(huán)境,為了避免在部署的過(guò)程中做重復(fù)性工作,下一步研究的重點(diǎn)考慮使用PXE無(wú)盤(pán)啟動(dòng)技術(shù)來(lái)進(jìn)行節(jié)點(diǎn)的維護(hù)。