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間的整數,相當於進程的IDMPI_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