VC6環境下的MPI配置(轉)
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
(設定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檔案導致的錯誤,於是想是否
#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程式,下面的任務就是依據並行演算法思想解決複雜問題,留帶大家自己解決。