1序言
为了实现Windows平台和Linux平台之间使用MPI进行通讯,特进行本文的实验。
本文的实验环境:
实验条件
实验版本
MPI
MPICH2
32-bit的WindowsXP
Linux操作系统
32-bit的RedhatLinux6.0
1.1哪些是MPICH2
MPI是MessagePassingInterface三个英语词组首字母的简称。对MPI的定义是多种多样的,但不外乎下边三个方面,它们限定了MPI的内涵和外延:
1、MPI是一个库,而不是一门语言。许多人觉得嵌入式linux驱动程序设计从入门到精通,MPI就是一种并行语言,这是不确切的。并且,根据并行语言的分类linux更改ip地址,可以把FORTRAN+MPI或C+MPI看作是一种在原先串行语言基础之上扩充后得到的,并行语言MPI库可以被FORTRAN77/C/Fortran90/C++调用,从句型上说,它遵循所有对库函数/过程的调用规则,和通常的函数/过程没有哪些区别;
2、MPI是一种标准或规范的代表,而不特指某一个对它的具体实现,迄今为止,所有的并行计算机制造商都提供对MPI的支持red hat linux 90 安装,可以在网上免费得到MPI在不同并行计算机上的实现,一个正确的MPI程序可以不加更改地在所有的并行机上运行;
3、MPI是一种消息传递编程模型,并成为这些编程模型的代表。事实上,标准MPI其实很庞大,而且它的最终目的是服务于进程间通讯这一目标的;
而MPICH2是MPI(Message-PassingInterface)的一个应用实现,支持最新的MPI-2插口标准,是用于并行运算的工具,在程序设计语言上支持C/C++和Fortran。
1.2哪些是Cygwin
简而言之,cygwin是一个在windows平台上运行的linux模拟环境,是cygnussolutions公司开发的自由软件(该公司开发了好多好东西,知名的还有eCos,不过现已被Redhat竞购)。以下引用网上的一段话用于说明cygwin的工作机制:cygnus当年首先把gcc,gdb,gas等开发工具进行了改进,使她们才能生成并解释win32的目标文件。
之后,她们要把这种工具移植到windows平台起来。一种方案是基于win32api对这种工具的源代码进行急剧更改,这样做反倒须要大量工作。为此,她们采取了一种不同的方式——他们写了一个共享库(就是cygwindll),把win32api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在上面,也就是说,她们基于win32api写了一个unix系统库的模拟层。
这样,只要把这种工具的源代码和这个共享库联接到一起,就可以使用unix主机上的交叉编译器来世成可以在windows平台上运行的工具集。以这种移植到windows平台上的开发工具为基础,cygnus又逐渐把其他的工具(几乎不须要对源代码进行更改,只须要更改她们的配置脚本)软件移植到windows上来。这样,在windows平台上运行bash和开发工具、用户工具,觉得似乎在unix上工作。关于cygwin实现的更详尽描述,请参考。Cygwin中国站点:。
2安装2.1下载安装包
1.mpich2-1.4.1p1
mpich2-1.4.1p1.tar.gz
2.cygwin
2.2Linux下安装MPICH2
1.解压
tarxzvfmpich2-1.4.1p1.tar.gz
2.配置
选择socket作为默认的通讯通道。
cdmpich2-1.4.1p1
./configure --prefix=/home/Administrator/mpich2 --with-pm=smpd --with-pmi=smpd --with-device=ch3:sock
3.编译
make
4.安装
makeinstall
5.设置环境变量
PATH=/home//mpich2-install/bin:$PATH;exportPATH
6.运行smpd-s
Pleasespecifyanauthenticationpassphraseforthissmpd:
Wouldyouliketosavethispassphrasein'/home/{xxx}/.smpd'?
7.在linux下加入其它要运行MPI的机器
su
vi/etc/hosts
例如加入自己的IP和一台Windows机器,
10.225.95.55yangsq
10.225.95.51yangsq-redhat32
8.测试是否在本机上可用
mpiexec-n2hostname
2.3Windows下安装
1.安装cygwin
点击2.1包含的setup.exe文件进行安装。
2.安装MPICH2
在安装好的Cygwin的终端下依次执行:
l ./configure --prefix=/cygdrive/d/cygwin/home/Administrator/mpich2 --with-pm=smpd --with-pmi=smpd --with-device=ch3:sock
lmake
lmakeinstall
3.设置环境变量
把安装目录bin设置到系统环境变量中。
4.运行smpd–install,在Windows平台上安装并启动smpd服务。
5.测试是否在本机上可用
mpiexec -n 2 hostname #运行一个non-mpi程序
#复印出主机名2次
注意:需要确保Windows平台和Linux平台上运行MPI程序的用户名和密码相同,另外在启动smpd服务时提示敲入的密码也需要所有机器一样。另外,一定要关闭所有机器的防火墙。并且经试验验证Windows和Linux平台之间MPI通信不用像Linux平台之间通信那样需要安装ssh服务。
3实验过程及结果
测试程序为cpi.c,功能是计算圆周率。Windows和Linux平台下的源文件相同,然后在Windows和Linux下分别编译。
3.1Windows测试MPICH2安装
3.2Linux测试MPICH2安装
3.3在Windows下跨平台执行MPI
其中mf.txt文件的内容如下:
10.225.95.51
10.225.95.55
由上图可看出red hat linux 90 安装,主节点rank(0)在主机名为yangsq的Windows平台上。
mf.txt文件的内容如下:
10.225.95.51:2
10.225.95.52:4
可以通过mf.txt文件来制定每个节点上运行的进程数目。
3.4在Linux下跨平台执行MPI
mf文件的内容如下:
10.225.95.55
10.225.95.51
上图可看出,主节点rank(0)在主机名为yangsq-redhat32的Linux平台上。
mf 文件的内容如下:
10.225.95.55:2
10.225.95.51:4
可以通过mf文件来制定每个节点上运行的进程数目。