Windows系統下搭建MPI(平行計算)環境

NO IMAGE

 

Windows系統下搭建MPI環境

MPI的全稱是Message Passing Interface即標準訊息傳遞介面,可以用於平行計算。MPI的具體實現一般採用MPICH。下面介紹如何在Windows XP系統下VC6中搭建MPI環境來編寫MPI程式。

一.準備工作

1.1   安裝MPI的SDK——MPICH2。

mpich2-1.4.1p1-win-ia32安裝程式的下載地址:

http://www.mcs.anl.gov/research/projects/mpich2/downloads/tarballs/1.4.1p1/mpich2-1.4.1p1-win-ia32.msi

本文以設定安裝在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