Intel MPI 配置與基本使用

安裝

Documenthtml

系統配置/含NFSnode

編譯環境

設置

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

編譯連接

  1. 保證在PATH環境變量中編譯器設置正確。使用Intel編譯器,確保LD_LIBRARY_PATH環境變量中含有編譯庫的路徑。
  2. 經過相應的 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的步驟以下:安全

  1. 設置相應的環境變量和目錄。好比,在 .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 腳原本設置。
    • 設置應用程序所須要的其它環境變量。
  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:ssh

    • 須要確保任一節點與其它節點連 接時都不須要密碼。這須要參照系統管理手冊。
    • 在啓動 mpdboot 時須要加上調 用參數 -r ssh--rsh=ssh
  5. 建立文本文件 mpd.hosts , 其中列出了集羣中全部的節點,每行一個主機名。好比:socket

$ cat > mpd.hosts

node1

node2

...
  1. 使用 mpdallexit 命令關閉上一次的 MPD 守護進程。 $ mpdallexit
  2. 使用 mpdboot 命令啓動 MPD 守護進程。 $ mpdboot -n <#nodes> 若是文件 $PWD/mpd.hosts 存在,則會被用做默認參數。若是沒有主機名文件,啓用 mpdboot 只會在本地機器上運行 MPD 守護進程。
  3. 使用 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 能夠經過命令選擇任何支持的設備。 若是應用程序運行成功,可將其移動到使用不一樣結構的集羣中,不須要從新連接程序。

相關文章
相關標籤/搜索