Windows系統下搭建MPI環境
MPI的全稱是Message Passing Interface即標準消息傳遞界面,可以用於並行計算。MPI的具體實現一般採用MPICH。下面介紹如何在Windows XP系統下VC6中搭建MPI環境來編寫MPI程序。
一.準備工作
1.1 安裝MPI的SDK——MPICH2。
mpich2-1.4.1p1-win-ia32安裝程序的下載地址:
本文以設置安裝在C:\Program Files\MPICH2目錄下爲例。
測試所安裝的MPICH2
測試前首先需要註冊一個用戶,具體操作如下:“開始”按鈕-->所有程序-->MPICH2-->wmpiregister.exe。輸入用戶名、密碼。有一點需要說明:該用戶名須爲有效的操作系統管理員賬戶,密碼對應爲系統登錄密碼。如圖所示:
接下來選擇開始-->所有程序-->MPICH2-->wmpiexec.exe;
選擇Application爲 c:\program files\mpich2\examples\cpi.exe (就是自帶的一個計算圓周率的例子程序)。在Number of processes的數量選擇2表示用二個進程來協同完成。選中“run in separate windw”選項。再點擊Excute就可以執行了。
然後在控制檯窗口下提示輸入number of intervals ,隨便輸入個大點的數字(50000,5000000)就可以看到求的的圓周率值。如下圖:
注意到上圖中的Show Comman中的字符串,可以在控制檯下輸入應該字符串得到類似結果,這裏就不再介紹了。
1.2 在VC6中添加MPICH2
先在VC6.0中加入mpi的include和lib。VC6.0程序菜單中“Tools” --> “Optains”-->“Directories”然後添加,如下圖所示:
二.第一個MPI程序
加入之後,新建Win32 Console Application工程,加入如下代碼:
- #include <mpi.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <conio.h>
- #pragma comment (lib, "mpi.lib")
- int main(int argc, char* argv[])
- {
- int myid,numprocs;
- int namelen;
- char processor_name[MPI_MAX_PROCESSOR_NAME];
- MPI_Init(&argc, &argv);
- //用MPI_Comm_rank 獲得進程的rank,該rank值爲0到p-1間的整數,相當於進程的ID
- MPI_Comm_rank(MPI_COMM_WORLD, &myid);
- //用MPI_Comm_size 獲得進程個數 int MPI_Comm_size(MPI_Comm comm, int *size);
- MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
- MPI_Get_processor_name(processor_name, &namelen);
- printf("Hello World! by MoreWindows\nProcess %d of %d on %s\n", myid, numprocs, processor_name);
- MPI_Finalize();
- if (myid == 1)
- {
- printf("\nPress a key and exit.\n");
- getch();
- }
- return 0;
- }
編譯運行,第一個MPI程序就誕生了。下面是我電腦上的運行結果:
三.多臺電腦上協同運行MPI
只有多臺電腦集羣后才能更好的發揮並行計算的威力,當然由於MPI的幫助,這個工作將變得異常簡單。下面以二臺PC協同運行前面提到過的cpi.exe爲例。
3.1 多臺電腦運行MPI的條件
第一.參加並行計算的機器須至少註冊一個相同的賬戶,如兩臺PC上都註冊了一個 mpi 帳號。
第二.創建JOB目錄。每臺機器上須有一個路徑相同的目錄,用於存放待執行的JOB(即 exe 程序),如創建的目錄是 d:\MPI\,再將測試用的可執行文件複製到二臺PC的該目錄下。
3.2 聯機執行命令解釋
可以在控制檯下輸入"C:\Program Files\MPICH2\bin\mpiexec.exe" -help2來查看其所以參數,這裏不一一介紹了,重點介紹下用於聯機操作的命令:
聯機執行命令: -hosts n Node_1 Node_2 ... Node_n -noprompt ExePath
“-hosts”表示要聯機運行,n 表示有n臺機器參加運算,Node_1(及Node_2 ...)爲各機器的計算機名或IP。ExePath爲exe的文件路徑如d:\MPI\cpi.exe。
3.3 聯機效果示範
可以這個結果與上面單機運行的結果作個比較。
不難發現,由於MPI的幫助,使用多臺電腦來進行並行計算其實也是一件比較容易的事件。
轉載請標明出處,原文地址:http://blog.csdn.net/morewindows/article/details/6823436