共計 6372 個字符,預(yù)計需要花費 16 分鐘才能閱讀完成。
這篇文章給大家分享的是有關(guān)基于 Intel 的并行計算 MPI 環(huán)境如何搭建的內(nèi)容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。
MPI 是一個庫,而不是一門語言。許多人認為,MPI 就是一種并行語言,這是不準確的。但是,按照并行語言的分類,可以把 FORTRAN+MPI 或 C +MPI 看作是一種在原來串行語言基礎(chǔ)之上擴展后得到的,并行語言 MPI 庫可以被 FORTRAN77/C/Fortran90/C++ 調(diào)用,從語法上說,它遵守所有對庫函數(shù) / 過程的調(diào)用規(guī)則,和一般的函數(shù) / 過程沒有什么區(qū)別。
MPI 已在 IBM PC 機上、MS Windows 上、所有主要的 Unix 工作站上和所有主流的并行機上得到實現(xiàn)。使用 MPI 作消息傳遞的 C 或 Fortran 并行程序可不加改變地運行在 IBM PC、MS Windows、Unix 工作站、以及各種并行機上。
高性能并行計算計算機技術(shù)由于具有巨大的數(shù)值計算和數(shù)據(jù)處理能力,在國內(nèi)外受到高度重視,他在科學(xué)研究、工程技術(shù)以及軍事等方面的應(yīng)用,已經(jīng)取得巨大的成就。并行計算就是通過把一個大的計算問題分解成許多彼此獨立且有相關(guān)的子問題,然后把他們散列到各個節(jié)點機上并行執(zhí)行從而最終解決問題的一種方法。
一、安裝環(huán)境
CentOS 6.4 最小化圖形安裝,保證每個節(jié)點的 sshd 服務(wù)能正常啟動,確保防火墻與 selinux 已經(jīng)關(guān)閉,所需軟件:Intel_ Fortran,Intel_C++,Intel_ MPI
二、設(shè)置通過主機名無密碼登錄
1、通過主機名訪問
為每個節(jié)點分配 IP 地址,IP 地址 *** 連續(xù)分配,配置 /etc/hosts 文件,實現(xiàn) IP 地址和機器的對應(yīng)解析。可以在所有機器上使用同樣的 /etc/hosts 文件,它包含如下形式的內(nèi)容:
10.12.190.183 dell 10.12.190.187 lenovo hellip; hellip;
2、計算節(jié)點之間的無密碼訪問
假設(shè) A(110.12.190.183)為客戶機器,B(10.12.190.187)為目標機,加密方式選 rsa|dsa 均可以,默認 rsa。
#ssh-keygen -t rsa # 使用 rsa 加密,默認就是 rsa 加密
顯示信息如下,遇到系統(tǒng)詢問直接回車即可。
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: b3:8e:87:44:71:67:81:06:d2:51:01:a4:f8:74:78:fd root@kvm.local The key s randomart image is: +--[ RSA 2048]----+ | .o==oo.. | | . +o.+ o | | . + o+.o | | o o. . | | .. S E | | . o | | . .. | | .o. | | ... | +-----------------+
將會生成密鑰文件和私鑰文件 id_rsa,id_rsa.pub。
將 A 的~/.ssh/ id_rsa.pub 文件復(fù)制到 B 機器的 .ssh 目錄,并 cat id_rsa.pub ~/.ssh/authorized_keys,同樣方法,把 B 的~/.ssh/ id_rsa.pub 也復(fù)制到 A 機器上。
設(shè)置 authorized_keys 權(quán)限:
#chmod 600 authorized_keys
設(shè)置.ssh 目錄權(quán)限:
#chmod 700 -R .ssh
如果使用 ssh-copy-id 命令,可以更方便把本地主機的公鑰復(fù)制到遠程主機的 authorized_keys 文件上,ssh-copy-id 也會給遠程主機的用戶主目錄(home)和~/.ssh, 和~/.ssh/authorized_keys 設(shè)置合適的權(quán)限。
#ssh-copy-id ndash;i ~/.ssh/id_rsa.pub 10.12.190.187
完成以上操作之后,用戶從本地機器到遠程機器就不需要用密碼了,文件和目錄的權(quán)限千萬別設(shè)置成 chmod 777. 這個權(quán)限太大了,不安全,數(shù)字簽名也不支持。
也可以用一臺機器生成 ssh-keygen,將.ssh 目錄連同 id_rsa,authorized_keys 一起復(fù)制到每個節(jié)點上去。檢查是否可以直接(不需要密碼,詢問時輸入 yes 回車)登錄其他節(jié)點:
ssh node1 ssh node2 ssh node3 ssh node4
如能任意兩節(jié)點之間不需要密碼登錄其他節(jié)點則表明配置成功。
三、NFS 文件系統(tǒng)的配置
方法示例如下(假設(shè) NFS 服務(wù)器 IP 為 10.12.190.183,配置需在 root 用戶下完成):
服務(wù)器端配置方法 (下面的配置只在主節(jié)點進行):
1. /etc/exports 文件配置
在文件 /etc/exports 中增加以下幾行:
/home/cluster 10.12.190.183(rw,sync,no_root_squash) /home/cluster 10.12.190.185(rw,sync,no_root_squash) /home/cluster 10.12.190.187(rw,sync,no_root_squash)
這幾行文字表明 NFS 服務(wù)器向 IP 地址為 10.12.190.183,10.12.190.185,10.12.190.185 的三個節(jié)點共享其 /home/cluster 目錄,并使這些節(jié)點具有可讀寫權(quán)限。如有更多的節(jié)點可按此方法填寫。
接著執(zhí)行如下命令,啟動端口映射:
# /etc/rc.d/init.d/rpcbind start (注:在 *** 內(nèi)核中 NFS 守護進程改為 rpcbind,如是舊內(nèi)核啟動 NFS 守護進程的命令是 service portmapstart)
*** 執(zhí)行如下命令啟動 NFS 服務(wù),此時 NFS 會激活守護進程,然后就開始監(jiān)聽 Client 端的請求:
# /etc/rc.d/init.d/nfs start # chkconfig nfs on
也可以重新啟動 Linux 服務(wù)器,自動啟動 NFS 服務(wù)。
2、客戶端配置方法(需要在所有子節(jié)點做同樣的配置)
建立與服務(wù)器相同的共享目錄用于共享服務(wù)器文件:
mkdir /usr/cluster
查看服務(wù)器已有的共享目錄(這步可省略)
showmount -e 10.12.190.183
通過這條命令我們可以查看 IP 地址為 10.12.190.183 的服務(wù)器可以共享的目錄情況。
掛載共享目錄:
mount -t nfs 10.12.190.183:/home/cluster /home/cluster
這一命令將 NFS 服務(wù)器 10.12.190.183 上的共享目錄掛載到本地 /home/cluster 目錄下。我們也可在所有子節(jié)點的 /etc/fstab 文件中輸入以下的代碼,使文件系統(tǒng)在啟動時實現(xiàn)自動掛載 NFS:
10.12.190.183:/home/cluster /home/cluster nfs defaults 0 0
至此我們已可以實現(xiàn)對 NFS 共享目錄的本地訪問,所有子節(jié)點的 /home/cluster 文件夾都共享了 NFS 服務(wù)器的同名文件夾的內(nèi)容,我們可以像訪問本地文件一樣訪問共享文件。用戶存放并行程序的文件夾都可以實現(xiàn) NFS 共享,從而避免了每次向各節(jié)點發(fā)送程序副本。
四、安裝 Intel_C++
#tar xvzf l_ccompxe_2013.1.117.tgz # cd composer_xe_2013.1.117 #./install.sh
設(shè)置環(huán)境變量:
#vi /etc/profile
添加一行 source /opt/intel/composer_xe_2013.1.117/bin/iccvars.sh intel64
測試環(huán)境變量設(shè)置:
#which icc
如果能看到 /opt/intel/composer_xe_2013.1.117/bin/intel64/icc,那么就安裝設(shè)置成功了。
五、安裝 Intel_Fortran 編譯器
#tar fxvz l_fcompxe_2013.1.117.tgz # cd l_fcompxe_2013.1.117 #./install.sh
設(shè)置環(huán)境變量:
#vi /etc/profile
添加一行 source /opt/intel/composer_xe_2013.1.117/bin/compilervars.sh intel64。
測試環(huán)境變量設(shè)置:
#which ifort
如果能看到 /opt/intel/composer_xe_2013.1.117/bin/intel64/ifort ,那么就安裝設(shè)置成功了。
六、配置安裝 Intel_MPI
1、安裝與設(shè)置
安裝前一定要將 Fortran 編譯器安裝好,c++ 放到 *** 沒有影響,其它版本 MPI 就需要先將前 2 個軟件安裝好,設(shè)置好環(huán)境變量,*** 在安裝 MPI 程序,如開源的 mpich。
#tar fxvz l_mpi_p_4.1.3.045.tgz #cd l_mpi_p_4.1.3.045 #./install.sh
設(shè)置環(huán)境變量:
#vi /etc/profile
添加一行 source /opt/intel/impi/4.1.3.045/bin64/mpivars.sh。
測試環(huán)境變量設(shè)置:
#which mpd #which mpicc #which mpiexec #which mpirun
如果能看到所有命令的路徑說明,安裝設(shè)置成功了。
修改 /etc/mpd.conf 文件,內(nèi)容為 secretword=myword 或 MPD_SECRETWORD=myword:
vi /etc/mpd.conf
設(shè)置文件讀取權(quán)限為只有自己能讀寫:
chmod 600 /etc/mpd.conf
非 root 用戶在家目錄創(chuàng)建內(nèi)容相同的.mpd.conf,每個節(jié)點都要添加:
創(chuàng)建主機名稱集合文件 /root/mpd.hosts:
#vi mpd.hosts
文件內(nèi)容如下:
dell #主機名 1 ,(主機名: 數(shù)字 可以指定節(jié)點開啟的進程數(shù) dell:2) lenovo # 主機名 2
在協(xié)處理器上 *** 運行 MPI 應(yīng)用之前,請將 MPI 庫復(fù)制到該系統(tǒng)的所有節(jié)點以下目錄。
# scp /opt/intel/impi/4.1.3.045/mic/bin/* dell:/bin/ mpiexec 100% 1061KB 1.0MB/s 00:00 pmi_proxy 100% 871KB 871.4KB/s 00:00 hellip; hellip; #scp /opt/intel/impi/4.1.3.045/mic/lib/* dell:/lib64/ libmpi.so.4.1 100% 4391KB 4.3MB/s 00:00 libmpigf.so.4.1 100% 321KB 320.8KB/s 00:00 libmpigc4.so.4.1 100% 175KB 175.2KB/s 00:00 hellip; hellip; # scp /opt/intel/composer_xe_2013_sp1.0.080/compiler/lib/mic/* dell:/lib64/ libimf.so 100% 2516KB 2.5MB/s 00:01 libsvml.so 100% 4985KB 4.9MB/s 00:01 libintlc.so.5 100% 128KB 128.1KB/s 00:00 hellip; hellip;
以上是 intel 官方文檔的操作步驟,個人感覺比較麻煩,沒有采用這種方法。
http://software.intel.com/en-us/articles/using-the-intel-mpi-library-on-intel-xeon-phi-coprocessor-systems
我使用的是將 /opt 設(shè)置成 nfs 共享,然后掛載到每個節(jié)點下的相同目錄,設(shè)置一下環(huán)境變量就可以了。服務(wù)器端一定要將 Intel_ Fortran,Intel_C++,Intel_ MPI 全部安裝上,各個節(jié)點只需要 MPI 就可以了,服務(wù)器端將程序編譯好后,分發(fā)給各個節(jié)點,然后這個程序就可以通過 MPI 接口,進行并行運算了。
2、MPI 使用方法
MPI 采用 mpd 服務(wù)來對進程進行管理,使用 mpiexec 或 mpirun 運行 mpi 程序。
啟動單機上的 mpd 服務(wù):
# mpd
查看 mpd 服務(wù):
# mpdtrace 查看主機名 # mpdtrace -l 查看主機名和端口號
關(guān)閉 mpd 進程管理:
#mpdallexit
測試 mpi 程序,編譯 mpi 文件 (-o Hello 指定輸出文件的名稱):
#mpicc -o Hello Hello.c // 生成可執(zhí)行文文件 Hello #mpicc cpi.c // 默認輸出文件名 a.out #mpdrun -np 4 ./a.out //- n 或 -np 啟動的進程數(shù) #mpiexec [-h or -help or --help] // 查看幫助文件
啟動集群上的 mpd 服務(wù):
# mpdboot -n process-num -f mpd.hosts
啟動 process-num 個進程,mpd.hosts 是前面創(chuàng)建的文件。
mpi 默認是使用 ssh 來登陸集群里的其他機器,也可以使用 rsh 來登陸集群里的其他機器來啟動 mpd 服務(wù)。
只要使用 -rsh 選項就可以指定用 ssh 或 rsh:
#mpdboot --rsh=rsh -n process-num -f hostfile 或 #mpdboot --rsh=ssh -n process-num -f hostfile
關(guān)閉 mpd 服務(wù):
#mpdallexit
使用 MPIEXEC|MPIRUN 來執(zhí)行 mpi 任務(wù):
#mpiexec -np 4 ./a.out //a.out 所有節(jié)點在相同的路徑下,需都有 a.out 文件 或 mpiexec -machinefile filename -np 4 ./a.out
http://blog.sina.com.cn/s/blog_605f5b4f0100sw3j.html
運行結(jié)果如下:
[root@kvm ~]# mpiexec -np 4 ./a.out Process 0 of 4 is on dell Process 2 of 4 is on dell Process 3 of 4 is on kvm.local Process 1 of 4 is on kvm.local pi is approximately 3.1415926544231274, Error is 0.0000000008333343 wall clock time = 0.037788
注意:以上的環(huán)境變量設(shè)置好后都需要重啟,或者使用 source 命令重新執(zhí)行一下文件。
感謝各位的閱讀!關(guān)于“基于 Intel 的并行計算 MPI 環(huán)境如何搭建”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!