分类: 系统运维
2010-07-08 10:13:56
收藏
--- By coolbattier
--- Mail :
摘要:对于MPI不做过多介绍,百度一下会有很多解释。本文着重介绍MPI的一个实现---MPICH2。开发者在对MPICH2的定位中提到,会提供对以下计算和通信平台的支持:
作为简单测试,笔者使用了实验室的两台PC搭建了一个小的并行计算环境,希望能对刚接触这一领域的人有所帮助。
下面,本文分三个部分来展开:
1 准备工作
2 环境搭建
3 MPI程序编译及运行
1 准备工作:
- 操作系统分别为 Win XP 和 Win 2003 server;
- Microsoft .NET Framework 2.0 :必需;
- vcredist_x86.exe :可能会用得到。笔者在安装时碰到需要安装visual c++ 2005 sp1 的提示,此时安装该 vcredist 程序即可。
- mpich2-1.0.6p1-win32-ia32.msi :mpich2的安装文件;
- mpich2 主页:.从这里可以下载所需 mpich2 程序和相应文档。
2 环境搭建
2.1 在两台机器上分别安装Microsoft .NET Framework 2.0和vcredist_x86.exe;
2.2 在两台机器上分别安装mpich2-1.0.6p1-win32-ia32.msi;
2.3 安装完成后,其目录结构如下(假定安装路径为 D:\Program Files\MPICH2 ):
将...\MPICH2\bin(即安装目录,如:D:\Program Files\MPICH2\bin)添加至系统环境变量path中。
2.4 单机测试 mpich2 。
测试前首先需要注册一个用户,具体操作如下:开始-->所有程序-->MPICH2-->wmpiregister.exe:
有一点需要说明:该用户名须为有效的操作系统管理员账户,密码对应为系统登录密码。
接下来,测试时有两种方式可供选择:GUI界面和命令行。
- GUI方式:开始-->所有程序-->MPICH2-->wmpiexec.exe;
- 命令行方式:mpiexec -n 2 D:\Program Files\MPICH2\examples\cpi.exe。
2.5 联机测试mpich2。有以下几个要点:
- 参加并行计算的机器须至少注册一个相同的账户,如笔者两台PC上都注册了一个 mpi 帐号;这些账户最好位于同一工作组,当然不在同一工作组也可以,笔者作过测试,没有问题。
- 创建JOB目录。每台机器上须有一个路径相同的目录,用于存放待执行的JOB(即 exe 程序),笔者创建的目录是 d:/mpi/ ,并将测试用的 cpi.exe 文件copy至该目录下;
- 联机执行命令:mpiexec -hosts n Node_1 Node_2 ... Node_n .../***.exe 。“-hosts”表示要联机运行,n 表示有两台机器参加运算,Node_1(及Node_2 ...)为各机器的计算机名或IP。".../***.exe" 必须位于前面设置的目录中。
示例:
2.6 与 vc++ 6.0 的集成。在MPICH2的readme文件中有个粗略的说明:
1)Add mpich2\include to the include path
2)Add mpich2\lib to the library path
3)For C applications add mpi.lib to your target link command.
具体到 VC6 中步骤如下:打开VC6,选择”Tools->Options”,在弹出的“Options”对话框中选择Directories选项卡,分别设置如下图:
接着:
最后:
2.7 与 visual studio 2005的集成。和上面差不多,只不过位置稍有不同。
图1:tools-->options
图2 :tools-->options
图3 :project-->references...
3 MPI程序编译及运行
这里假定 MPI 程序的开发分为两个阶段:
- 使用 visual studio 编译MPI程序,将其debug为exe文件;
- 将exe文件copy到上面环境搭建过程中创建的JOB目录下,联机运行。
环境搭建好之后,接下来的编译和运行就非常简单。编译MPI程序前,创建一个c++工程,MPI代码放于工程中的cpp文件中,build,start debuging...,OK,编译完成。copy exe文件至每台机器的JOB目录,进入任何一台机器的cmd下,执行联机运行命令即可。
示例(visual studio 2005):
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liuyongjin1984/archive/2007/12/21/1957286.aspx