安裝
Documenthtml
系統配置/含NFSnode
編譯環境
設置
- 加載 mpivars.[c]sh 腳本。
- 建立文本文件 mpd.hosts ,其中保存有集羣的節點列表,每行一個名字 (只針對開發者) 確保環境變量 PATH 中包含有相應的編譯器,好比 icc。 (只針對開發者) 使用適當的編譯驅動編譯測試程序,好比 mpiicc。
$ mpiicc -o test test.c
- 使用 mpirun 運行測試程序
$ mpirun -r ssh -f mpd.hosts -n <# of processes> ./test
編譯連接
- 保證在
PATH
環境變量中編譯器設置正確。使用Intel編譯器,確保LD_LIBRARY_PATH環境變量中含有編譯庫的路徑。 - 經過相應的 mpi 命令編譯 MPI 程序。好比調用 mpicc 使用 GNU C 編譯器:
$ mpicc <path-to-test>/test.c
(因此支持的編譯器都有對應的以 mpi 開頭的命令,好比 Intel Fortran (ifort ) 對應的爲mpiifort
).
運行MPI程序
設置 MPD 守護進程
Intel MPI 庫使用 Multi-Purpose Daemon (MPD) 任務調度機制。爲運行使用 mpiicc 編譯的程序,首先須要設置好 MPD 守護進程。 與系統管理員爲系統中全部用戶啓動一次 MPD 守護進程不一樣,用戶須要啓動和維護本身的一組 MPD 守護進程。這種設置加強了系統安全性,併爲控制可執行程序的環境提供了更強的靈活性。linux
設置MPD的步驟以下:安全
-
設置相應的環境變量和目錄。好比,在
.zshrc
或.bashrc
文件中:bash- 保證 PATH 變量中包含有
<installdir>/bin
或者 Intel 64 位架構對應的<installdir>/bin64
目錄,其中<installdir>
指的是 MPI 的安裝路徑。可 使用 Intel MPI 庫中帶有的mpivars.[c]sh
來設置此變量。 - 確保 PATH 中包含有的 Python 至少爲 2.2 或以上版本。
- 若是使用 Intel 編譯器,確保
LD_LIBRARY_PATH
變量包含有編譯器的庫目錄。可以使用編譯器中帶有的{icc,ifort}*vars.[c]sh
腳原本設置。 - 設置應用程序所須要的其它環境變量。
- 保證 PATH 變量中包含有
-
建立
$HOME/.mpd.conf
文件,設置 MPD 密碼,須要在文件中寫入一行:secretword=<mpd secret word>
不要使用 Linux 登錄密碼。<mpd secret word>
可爲任意字符串,它僅僅在不一樣的集羣用戶對 MPD 守護進程進行控制時有用。網絡 -
使用 chmod 設置
$HOME/.mpd.conf
文件的權限$ chmod 600 $HOME/.mpd.conf
架構 -
保證你在集羣的全部節點上 rsh 命令看到一樣的
PATH
和.mpd.conf
內容。 好比在集羣的全部節點上執行下面的命令:$ rsh <node> env
$ rsh <node> cat $HOME/.mpd.conf
保證每一個節點都可以與其它任意節點鏈接。可以使用安裝中提供的sshconnectivity
腳本。該腳本使用提供全部節點列表的文件做爲參數,每一個節點一行:$ sshconnectivity.exp machines.LINUX
集羣使用的是 ssh 而不是 rsh:ssh- 須要確保任一節點與其它節點連 接時都不須要密碼。這須要參照系統管理手冊。
- 在啓動 mpdboot 時須要加上調 用參數
-r ssh
或--rsh=ssh
-
建立文本文件
mpd.hosts
, 其中列出了集羣中全部的節點,每行一個主機名。好比:socket
$ cat > mpd.hosts node1 node2 ...
- 使用 mpdallexit 命令關閉上一次的 MPD 守護進程。
$ mpdallexit
- 使用 mpdboot 命令啓動 MPD 守護進程。
$ mpdboot -n <#nodes>
若是文件$PWD/mpd.hosts
存在,則會被用做默認參數。若是沒有主機名文件,啓用mpdboot
只會在本地機器上運行 MPD 守護進程。 - 使用
mpdtrace
命令檢查MPD
守護進程的狀態:$ mpdtrace
其輸出結果應該爲當前進行 MPD 守護進程的節點列表。該列表應該與mpd.hosts
文件中節點列表符合。
網絡結構選擇
Intel MPI 庫會動態選擇大部分適用的網絡結構以便 MPI 進程之間進行通信。設置環境變量 I_MPI_DEVICE爲下表中的某個值:ide
I_MPI_DEVICE 值 | 支持的結構 |
---|---|
sock | TCP/Ethernet/sockets |
shm | Shared memory only (no sockets) |
ssm | TCP + shared memory |
rdma[:<provider>] | InfiniBand, Myrinet (via specified DAPL provider) |
rdssm[:<provider>] | TCP + shared memory + DAPL |
要保證所選擇的網絡結構可用。好比,使用 shm 只有當全部進程能夠經過共享內存進 行通信時才行;使用 rdma 只有當全部進程能夠經過單一的 DAPL 相互通信時才行。
運行MPI程序
運行使用 Intel MPI 庫鏈接的程序,使用 mpiexec 命令: $ mpiexec -n <# of processes> ./myprog
使用 -n
參數設置進程數,這是 mpiexec
惟一須要明顯指定的選項。 若是使用的網絡結構與默認的不一樣,須要使用 -genv
選項來提供一個能夠賦給 I_MPI_DEVICE
變量的值。 好比使用 shm 結構來運行 MPI 程序,可執行以下命令: $ mpiexec -genv I_MPI_DEVICE shm -n <# of processes> ./myprog
好比使用 rdma 結構來運行 MPI 程序,可執行以下命令: $ mpiexec -genv I_MPI_DEVICE rdma -n <# of processes> ./myprog
能夠經過命令選擇任何支持的設備。 若是應用程序運行成功,可將其移動到使用不一樣結構的集羣中,不須要從新連接程序。