1. 程式人生 > >VC6環境下的MPI配置(轉)

VC6環境下的MPI配置(轉)

MPI開發包安裝

下載完畢,開始安裝MPICH2開發包,提示需要.NET 1.1 框架。鑑於本人對VS.NET 2003愛好,直接安裝了整個開發環境,也可以只安裝.NET框架。可以到微軟官方網站下載安裝包(http://msdn.microsoft.com/netframework/downloads/framework1_1/)。安裝.NET框架後便可以安裝MPICH2開發包。安裝後可以看到MPICH2目錄層次:

環境配置

我的電腦”path中設定MPICH2bin目錄(%MPICH2%\bin)以便執行mpiexec程式。我的具體設定如下:

VC6開發環境中包含MPICH2開發包的include

目錄和lib目錄。具體步驟:開啟VC6,選擇”Tools->Options”,在彈出的“Options”對話方塊中選擇Directories選項卡,分別設定如下圖:

(設定Include目錄%MPICH2%/include

(設定Lib目錄%MPICH2%/LIB

MPICH2環境配置。執行%MPICH2%/LIBwmpiregister,在註冊介面輸入本機器使用者名稱和密碼以便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程式,下面的任務就是依據並行演算法思想解決複雜問題,留帶大家自己解決。