系統環境配置
Win2K Adv Svr + VC6
MPI開發包下載
網上搜索下載MPICH2地址http://www-unix.mcs.anl.gov/mpi/mpich2/
MPI開發包安裝
?????? 下載完畢,開始安裝MPICH2開發包,提示需要.NET 1.1 框架。鑒于本人對VS.NET 2003愛好,直接安裝了整個開發環境,也可以只安裝.NET框架。可以到微軟官方網站下載安裝包(http://msdn.microsoft.com/netframework/downloads/framework1_1/)。安裝.NET框架后便可以安裝MPICH2開發包。安裝后可以看到MPICH2目錄層次:
環境配置
?????? “我的電腦”path中設置MPICH2的bin目錄(%MPICH2%\bin)以便運行mpiexec程序。我的具體設置如下:
?????? VC6開發環境中包含MPICH2開發包的include目錄和lib目錄。具體步驟:打開VC6,選擇”Tools->Options”,在彈出的“Options”對話框中選擇Directories選項卡,分別設置如下圖:
(設置Include目錄%MPICH2%/include)
(設置Lib目錄%MPICH2%/LIB)
?????? MPICH2環境配置。運行%MPICH2%/LIB下wmpiregister,在注冊界面輸入本機器用戶名和密碼以便mpiexec運行程序。
開發第一個程序“Hello World”
?????? 經過上面的步驟,MPICH2開發環境已經建立好,下面便可以步入MPICH2的大殿了。開始最簡單也是最經典程序“Hello World”,在過程中倒是遇到不少麻煩。
?????? 打開VC6,建立一個控制臺應用程序,如下圖:
?????? 依照課本,包含頭文件且把代碼敲入main函數中。
?????? #include "mpi.h"
#include <cstdio>
int main(int argc, char* argv[])
{
??????
?????? MPI_Init(&argc, &argv);
?????? printf("Hello World!\n");
?????? MPI_Finalize();
?????? return 0;
}
?????? 編譯程序,發現出現很多編譯錯誤,一時間不知道怎么辦好。在細看錯誤,都是一些函數重載錯誤。原本想修改代碼,但是沒有全部源代碼。再進一步,發現全部是mpicxx.h文件導致的錯誤,于是想是否MPI_Init等函數與此文件有關。通過搜索包含文字,發現MPI_Init等函數只在mpi.h中定義,于是想辦法不包含mpicxx.h文件以避開問題。在mpi.h中發現代碼:
#if !defined(MPICH_SKIP_MPICXX)
#include "mpicxx.h"
#endif
#endif
這下有辦法,在程序中定義宏MPICH_SKIP_MPICXX,然后重新編譯程序(注意在包含mpi.h前定義)。哈哈,果然避開了mpicxx.h文件,有出現幾個為定義錯誤,包含Lib文件就OK!如下圖:
?????? 有個建議,既然包含頭文件必須連接庫的話,可以在頭文件中指定庫。本人在開發過程中一直這樣做,感覺很好。這樣可以避免入門者不會設定庫。
?????? 下面是運行。運行命令行,輸入:
E:\MyProject\MPIPractice\HelloWorld\Debug>mpiexec -np 4 helloworld
輸出結果:
Hello World!
Hello World!
Hello World!
Hello World!
這樣便完成第一個MPI程序,下面的任務就是依據并行算法思想解決復雜問題,留帶大家自己解決。
總結
?????? 耗費一下午重新安裝系統和各種軟件,大約一個小時編制及調試“Hello World”程序,盡管簡單,但是畢竟對于MPI編程入門,感覺良好。耗費一小時書寫文檔,總結問題,以便其他同學遇到麻煩好解決,希望互相學習進步。
萬連文