我的 Intel MPI 筆記
起步
使用流程
安裝
根據手冊安裝 Intel MPI 庫,保正庫、腳本和實用程序安裝正常。
起步
-
加載
mpivars.[c]sh
腳本 (或者以其它類似方式加載 Intel MPI 庫的環境)。 -
創建文本文件
mpd.hosts
,其中保存有集羣的節點列表,每行一個名字 - (只針對開發者) 確保環境變量 PATH 中包含有相應的編譯器,比如 icc。
-
(只針對開發者) 使用適當的編譯驅動編譯測試程序,比如
mpiicc
$ mpiicc -o test test.c
-
使用
mpirun
運行測試程序$ mpirun -r ssh -f mpd.hosts -n <# of processes> ./test
編譯和鏈接
(只針對開發者) 編譯和鏈接 Intel MPI 庫:
-
保證在
PATH
環境變量中編譯器設置正確。使用 Intel 編譯器,注意LD_LIBRARY_PATH
環境變量中含有編譯庫的路徑。 -
通過相應的
mpi
命令編譯 MPI 程序。比如調用mpicc
使用 GNU C 編譯器:$ mpicc <path-to-test>/test.c
所以支持的編譯器都有對應的以
mpi
開頭的命令,比如 Intel Fortran (ifort
) 對應的爲mpiifort
.
設置 MPD 守護進程
Intel MPI 庫使用 Multi-Purpose Daemon (MPD) 任務調度機制。爲運行使用 mpiicc
(或類似) 編譯的程序,首先需要設置好 MPD 守護進程。
與系統管理員爲系統中所有用戶啓動一次 MPD 守護進程不同,用戶需要啓動和維護自己 的一組 MPD 守護進程。這種設置增強了系統安全性,併爲控制可執行程序的環境提供了 更強的靈活性。
設置守護進行的步驟如下:
-
設置相應的環境變量和目錄。比如,在
.cshrc
或.bashrc
文件中:-
保證
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
腳本來設置。 - 設置應用程序所需要的其它環境變量。
-
保證
-
創建
$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
, 可參考後面的註釋 1 作相應的命令調整。 -
創建文本文件
mpd.hosts
, 其中列出了集羣中所有的節點,每行一個主機名。比如:$ cat > mpd.hosts
node1
node2
...
<ctrl>D -
使用
mpdallexit
命令關閉上一次的 MPD 守護進程。$ mpdallexit
-
使用
mpdboot
2 命令啓動 MPD 守護進程。$ mpdboot -n <#nodes>
如果文件
$PWD/mpd.hosts
存在,則會被用作默認參數。如果沒有主機名文件,啓 用mpdboot
只會在本地機器上運行 MPD 守護進程。 -
使用
mpdtrace
命令檢查 MPD 守護進程的狀態:$ mpdtrace
其輸出結果應該爲當前進行 MPD 守護進程的節點列表。該列表應該與
mpd.hosts
文件中節點列表符合。
選擇網絡結構
Intel MPI 庫會動態選擇大部分適用的網絡結構以便 MPI 進程之間進行通訊。欲選擇特
定的網絡結構,需要設置環境變量 I_MPI_DEVICE
爲下表中的某個值:
I_MPI_DEVICE 值 | 支持的結構 |
---|---|
sock | TCP/Ethernet/sockets |
shm | Shared memory only (no sockets) |
ssm | TCP + shared memory 3 |
rdma[:<provider>] | InfiniBand, Myrinet (via specified DAPL provider) |
rdssm[:<provider>] | TCP + shared memory + DAPL 4 |
要保證所選擇的網絡結構可用。比如,使用 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
可以通過命令選擇任何支持的設備。
如果應用程序運行成功,可將其移動到使用不同結構的集羣中,不需要重新鏈接程序。
除錯
安裝
MPD 設置
編譯運行
Footnotes:
1
注意
: 如果集羣中使用 ssh
而不是 rsh
,
需要確保任一節點與其它節點連
接時都不需要密碼。這需要參照系統管理手冊。
2
注意
: 如果集羣中使用 ssh
而非 rsh
, 在啓動 mpdboot
時需要加上調
用參數 -r ssh
或 --rsh=ssh
.
3 for SMP clusters connected via Ethernet
4 for SMP clusters connected via RDMA-capable fabrics
1 FOOTNOTE DEFINITION NOT FOUND: fn:1
2 FOOTNOTE DEFINITION NOT FOUND: fn:2
3 FOOTNOTE DEFINITION NOT FOUND: fn:net1
4 FOOTNOTE DEFINITION NOT FOUND: fn:net2