我的 Intel MPI 筆記

我的 Intel MPI 筆記

起步

使用流程

intel_mpi_flowchart_5cbf318b292719df555eea3a5fc7dfcbe69cc837.png

安裝

根據手冊安裝 Intel MPI 庫,保正庫、腳本和實用程序安裝正常。

起步

  1. 加載 mpivars.[c]sh 腳本 (或者以其它類似方式加載 Intel MPI 庫的環境)。
  2. 創建文本文件 mpd.hosts ,其中保存有集羣的節點列表,每行一個名字
  3. (只針對開發者) 確保環境變量 PATH 中包含有相應的編譯器,比如 icc。
  4. (只針對開發者) 使用適當的編譯驅動編譯測試程序,比如 mpiicc
    $ mpiicc -o test  test.c
  5. 使用 mpirun 運行測試程序
    $ mpirun -r ssh -f mpd.hosts -n <# of processes> ./test

編譯和鏈接

(只針對開發者) 編譯和鏈接 Intel MPI 庫:

  1. 保證在 PATH 環境變量中編譯器設置正確。使用 Intel 編譯器,注意 LD_LIBRARY_PATH 環境變量中含有編譯庫的路徑。
  2. 通過相應的 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 守護進程。這種設置增強了系統安全性,併爲控制可執行程序的環境提供了 更強的靈活性。

設置守護進行的步驟如下:

  1. 設置相應的環境變量和目錄。比如,在 .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 腳本來設置。
    • 設置應用程序所需要的其它環境變量。
  2. 創建 $HOME/.mpd.conf 文件,設置 MPD 密碼,需要在文件中寫入一行:
    secretword=<mpd secret word>

    不要使用 Linux 登陸密碼。 <mpd secret word> 可爲任意字符串,它僅僅在不同 的集羣用戶對 MPD 守護進程進行控制時有用。

  3. 使用 chmod 設置 $HOME/.mpd.conf 文件的權限,使得它只能被你自己讀寫:
    $ chmod 600 $HOME/.mpd.conf
  4. 保證你在集羣的所有節點上 rsh 命令看到同樣的 PATH.mpd.conf 內容。 比如在集羣的所有節點上執行下面的命令:
    $ rsh <node> env
    $ rsh <node> cat $HOME/.mpd.conf

    保證每個節點都能夠與其它任意節點連接。可使用安裝中提供的 sshconnectivity 腳本。該腳本使用提供所有節點列表的文件作爲參數,每個節點一行:

    $ sshconnectivity.exp machines.LINUX

    或集羣使用的是 ssh 而不是 rsh , 可參考後面的註釋 1 作相應的命令調整。

  5. 創建文本文件 mpd.hosts , 其中列出了集羣中所有的節點,每行一個主機名。比如:
    $ cat > mpd.hosts
    node1
    node2
    ...
    <ctrl>D
  6. 使用 mpdallexit 命令關閉上一次的 MPD 守護進程。
    $ mpdallexit
  7. 使用 mpdboot 2 命令啓動 MPD 守護進程。
    $ mpdboot -n <#nodes>

    如果文件 $PWD/mpd.hosts 存在,則會被用作默認參數。如果沒有主機名文件,啓 用 mpdboot 只會在本地機器上運行 MPD 守護進程。

  8. 使用 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章