作者:dasgsdfsddsadas_501 | 来源:互联网 | 2024-10-20 11:57
MPI的全称是MessagePassingInterface即标准消息传递界面,可以用于并行计算。MPI的具体实现一般采用MPICH。下面介绍如何在WindowsXP系统下VC6中搭建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中的字符串,可以在控制台下输入应该字符串得到类似结果,这里就不再介绍了。
二.第一个MPI程序
加入之后,新建Win32 Console Application工程,加入如下代码:
注意要把库文件 mpi.lib添加进去或者
#pragma comment (lib, "mpi.lib")
#include
#include
#include
#include
#define MPICH_SKIP_MPICXX
#include
using namespace std;
int main() {
MPI_Status status;
char str[] = "abcdef\n";
int myid;
//printf( "%s\n", str );
//str = ( char * )malloc( 100 * sizeof( char ) );
//str[5] = '\0';
MPI_Init( NULL, NULL );
MPI_Comm_rank( MPI_COMM_WORLD, &myid );
if( myid == 2 ) {
MPI_Send( "HELLO", 5, MPI_CHAR, 7, 1234, MPI_COMM_WORLD );
}
if( myid == 7 ) {
MPI_Recv( str, 5, MPI_CHAR, 2, 1234, MPI_COMM_WORLD, &status );
printf( "Got %s from P%d, tag %d\n", str, status.MPI_SOURCE, status.MPI_TAG );
}
MPI_Finalize();
return 0;
}
编译运行,第一个MPI程序就诞生了。注意要用mpi自带的wmpiexec运行生成的.exe程序