1.MPI全稱是message passing interface,即信息傳遞接口,是用於跨節點通訊的基礎軟件環境。它提供讓相關進程之間進行通信,同步等操作的API,可以說是並行計算居家出游必備的基礎庫。
一個 MPI 程序包含若干個進程。每個 mpi 進程都運行一份相同的代碼,進程的行為由通訊域(communication world)和該通訊域下的 id(rank id)所決定。
MPI的編程方式,是“一處代碼,多處執行”。編寫過多線程的人應該能夠理解,就是同樣的代碼,不同的進程執行不同的路徑。
2.它是一個庫,不是一門語言。可以被fortran,c,c++等調用。MPI允許靜態任務調度,顯示並行提供了良好的性能和移植性,用MPI編寫的程序可直接在多核集群上運行。在集群系統中,集群的各節點之間可以采用 MPI 編程模型進行程序設計,每個節點都有自己的內存,可以對本地的指令和數據直接進行訪問,各節點之間通過互聯網絡進行消息傳遞,這樣設計具有很好的可移植性,完備的異步通信功能,較強的可擴展性等優點。
3.MPI常用命令
對於登錄集群計算而言,我們只需要掌握兩種mpi運行指令即可,它們分別是:mpirun
、mpiexec
。
簡而言之mpirun
和mpiexec
均是MPI程序運行命令:
mpirun
:MPI程序快速執行命令,運行前不必運行mpdboot開啟守護進程。mpiexec
:MPI程序運行命令,運行前必須開啟mpd守護進程。
守護進程(daemon)是一類在后台運行的特殊進程,用於執行特定的系統任務。很多守護進程在系統引導的時候啟動,並且一直運行直到系統關閉。另一些只在需要的時候才啟動,完成任務后就自動結束。
簡單來說,在服務器配置良好的情況下,絕大多數情況不需要考慮選項的配置,基本語句如下:
mpirun -n 20 vasp_std
//20核心並行vasp_std程序,vasp_std需要加入環境變量
mpiexec.hydra -n 20 vasp_std
//20核心並行vasp_std程序,vasp_std需要加入環境變量
此時節點和核心的分配完全由PBS系統進行分配,跨節點運行時也會自動進行核心和節點的匹配
另外,在實際操作過程中,我發現部分同學對於PBS和mpirun -np
的作用可能不太理解,在這里想簡單解釋如下:
- PBS是作業分配系統,通過.pbs腳本像PBS作業管理軟件申請相應的核心數量和節點數量。
- 但要注意,這並不意味着通過分配的作業會完全按照申請的資源運行。下面看一個小小的例子:
1 |
#PBS -l nodes=2:ppn=20 |
這意味着#PBS -l
命令部分決定問集群申請多少計算資源。