MPI在windows上的扯淡
MPI的實現一般使用MPICH與OpenMPI,這兩個庫在12年的版本就已經停止了對windows的更新,不支持MPI的新特性(也不知道有沒有bug方面的問題),配置的時候教程較少,配置也出現了一些不好解決的問題。
吐槽一下,MPICH官方不對Windows更新的原因是“開發人員精力不足”,也許在windows上使用MPI的人太少吧。。
MS-MPI (Microsoft MPI ) 現在更新到V7測試版 (2015年),微軟基於MPICH向windows上的移植,實現了很多新的 MPI特性,主要用在 HPC Pack。使用全套系統需要一個windows server系統的電腦作為頭結點,實現了完整的管理功能。不過MS-MPI也可以單獨使用(沒有界面)。
MS-MPI環境配置
微軟官方教程多為HPC server的, 東西太多現在懶得配置。 MS-MPI的使用教程比較少,各種被坑之后得出下文:
下載安裝包並安裝
https://www.microsoft.com/en-us/download/details.aspx?id=47259 這是MS-MPI v6安裝包,現在v7的測試版已出。安裝完成后去SDK目錄,找到include 與 lib 文件夾。
在visual studio中新建C++ win32 空項目,將項目編譯改為x64(我的是64位 win7)
右鍵項目 -- 屬性 -- vc++ 目錄中 包含目錄 添加 include 文件夾路徑,庫目錄 中添加 lib 文件夾路徑。
屬性 -- 鏈接器 -- 輸入 -- 附加依賴項中 添加 msmpi.lib;msmpifec.lib;msmpifmc.lib;新建cpp文件,代碼如下
#include "mpi.h"
#include <iostream>
int main(int argc, char* argv[])
{
int rank;
int size;
MPI_Init(0,0);//MPI環境初始化
MPI_Comm_rank(MPI_COMM_WORLD, &rank); //獲取當前進程號
MPI_Comm_size(MPI_COMM_WORLD, &size); //獲取進程總數
std::cout<<"Hello world from process "<<rank<<" of "<<size<<std::endl;
MPI_Finalize();
return 0;
}
- 將編譯得到的 exe文件放在安裝的MS-MPI的bin目錄下(和sdk不在一個安裝包)
- 按住shift鍵在bin文件夾空白處右鍵單擊,選擇命令行窗口
- 輸入 smpd -d 運行MPI進程
- 輸入 mpiexec -n 4 test.exe 得到運行結果如下
Hello world from process 1 of 4
Hello world from process 0 of 4
Hello world from process 3 of 4
Hello world from process 2 of 4