Chinaunix首页 | 论坛 | 博客
  • 博客访问: 290212
  • 博文数量: 52
  • 博客积分: 2586
  • 博客等级: 少校
  • 技术积分: 508
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-29 19:06
文章分类

全部博文(52)

文章存档

2022年(1)

2019年(1)

2018年(1)

2013年(1)

2012年(1)

2011年(10)

2010年(16)

2009年(13)

2008年(6)

2007年(2)

我的朋友

分类: 系统运维

2010-07-08 10:29:54

windows平台下mpi程序的运行(转载)

并行计算 2008-08-18 18:01:19 阅读446 评论1 字号:

在前面的文章里已经阐述了windows下并行编译环境的配置,得到了可执行程序,怎么运行呢?

一、单机测试。

1、命令行方式:

注册:mpiexec -register

输入你当前登陆帐户名和密码,不注册的话每次执行程序都要求输入帐户和密码。

运行:mpiexec -n 2 helloworld.exe

这里用两个进程执行当前目录下的helloworld.exe,如果在linux下就应该写为mpiexec -n 2 ./helloworld.exe

2、GUI方式:

注册:开始菜单=>所有程序=>MPICH2=>wmpiregister.exe

填上当前登陆用户名和密码,点击“register”将信息写入磁盘,再点“ok”关闭程序。若先点击“ok”则是写入内存,重启机器后还要再注册。想更换其他用户运行mpi程序时,点“remove”将原来的信息删除。

运行:开始菜单=>所有程序=>MPICH2=>wmpiexec.exe

在Application处选择可执行程序,在Number of processes处选择用几个进程。点“Execute”执行,“break”终止程序。下面有个选项“more options”,选中后有更多的参数可选用,包括用配置文件执行程序,单机测试没必要写配置文件了吧。

二、多机协同作业

首先、在其他的机器上也安装mpich2,版本不应该相差太远,最好同样版本,如mpich2-1.0.6。

其次、给个机器上的帐户要一样,如administrator,更重要的是密码也要一样!我把老婆的机器也装上MPICH2了,我们两个平时都用的是administrator用户,但密码不一样,我开始以为帐户一样就行呢,结果老是失败。希望新手要注意:用户和密码都要求一致。

再次、一定要把所有机器的防火墙都关掉,windows防火墙最好也关掉,不然可能相互连接不上,或者执行的时候有奇怪的错误。

最后、是注册,配置,运行,还是有两种方式,分别介绍一下。

1、命令行方式:

注册:将每台机器都注册,与单机测试时一样。

配置:

写配置文件,在MPICH2中配置文件config_mpich2的格式如下:

-n 2 -host 192.168.1.104 c:\mpi\helloworld.exe

-n 2 -host 192.168.1.123 c:\mpi\helloworld.exe

表示在两台机器上各启动两个进程,这里可以写IP,也可以写机器名,如我WXFENG,JLU-F0BCE9654EA等等。

在MPICH1中配置文件config_mpich1的格式如下:

exe c:\mpi\helloworld.exe

hosts

192.168.1.123 2

192.168.1.104 2

运行:

用MPICH2格式的配置文件,mpiexec -configfile config_mpich2

用MPICH1格式的配置文件,mpiexec -file config_mpich1

不用配置文件,mpiexec -hosts 2 192.168.1.123 192.168.1.104 c:\mpi\helloworld.exe

这里都假定可执行文件在各机器同一工作目录下c:\mpi\helloworld.exe,若用配置文件执行程序的话,可以指定不同的目录。

2、GUI方式:

注册:开始菜单=>所有程序=>MPICH2=>wmpiregister.exe ,将每台机器都注册,与单机测试时一样。

配置:开始菜单=>所有程序=>MPICH2=>wmpiconfig.exe

只在提交任务的机器上配置就可以了,其他机器可以不做。先在Domain里写上所有机器所在的工作组,如workgroup,然后Get Hosts找到在这个工作组下的所有机器,再Scan Hosts找出哪些机器安装了MPICH,而哪些没有。安装了的会显示绿色,没安装的显示灰色。这时一般就有版本信息了,若没有的话,Scan for Version试试。将绿色显示的机器名记下来,在运行的时候用。

运行:开始菜单=>所有程序=>MPICH2=>wmpiexec.exe

点击“more options”,在hosts那个文本框中填入想使用的机器的机器名,如WXFENG,JLU-F0BCE9654EA,就是配置那一步所查询到可用的机器。点击“Execute”执行程序。

这里有一个简单的代码,用来检查程序是否在多台机器启动了,

program main

! include 'mpif.h'

use mpi

implicit none

integer i,ierr,rc,namelen,num,l,m

character(MPI_MAX_PROCESSOR_NAME) name

call MPI_INIT(ierr)

call MPI_COMM_RANK(MPI_COMM_WORLD,i,ierr)

call MPI_COMM_SIZE(MPI_COMM_WORLD,num,ierr)

call MPI_GET_PROCESSOR_NAME(name,namelen,ierr)

write(*,"('hello world ! processor',I2,' of ',I1,' on ',20A)")i,num,name

do l=1,100000

do m=1,100000

enddo

enddo

write(*,"('program is over ! processor',I2,' of ',I1,' on ',20A)")i,num,name

call MPI_FINALIZE(rc)

end program main

打开各机器的任务管理器,看看是不是CPU都用上了。我发现spmd.exe会占用90%多的CPU,而真正的可执行程序占的CPU并不多,不知道是怎么回事,以后试试其他的程序再说吧,而且spmd.exe占用内存也很大。

结束语,想说说GUI方式的“配置”这个步骤,个人觉得没什么用,也许是现在我还不会用吧。只不过是查询一下有哪个机器可以安装了MPICH,可以被使用而已,记录下这些机器的机器名,在wmpiexec.exe中当做参数使用。比较而言,还是以命令行方式执行程序,写配置文件比较顺手一些,似乎也更地道一些,本来MPICH大多数都是在linux下使用的嘛。

 

在需要运行MPI程序的机器上:

1 安装.net框架(dotnetfx.exe)

2 拷贝smpd.exe, 并运行smpd -install

这会安装一个服务“MPICH2 Process Manager, Argonne National Lab”

开机时启动smpd进程,它打开端口8676和另一个端口

3 拷贝所需的程序和DLL到每台机器, 如d:\mpi\目录

包括任务程序如testMPI.exe,及所有mpich2*.dll(在完整安装了mpich2的机器system32\下)

任务程序也可以放在服务器的共享目录

4 D:\mpi>mpiexec.exe -hosts 2 host1 host2 d:\mpi\testMPI.exe

前提是两台机器都启动了smpd。该命令会在每台机器上启动testMPI.exe,并行完成任务

对于前面那个计算Pi的例子程序,只在第1台机器(即运行mpiexec的localhost)上有输入输出,它相当于master processor

任务程序如果在服务器,则运行

D:\mpi>mpiexec.exe -hosts 2 host1 host2

命令行也可以用图形界面的wmpiexec.exe来代替,可以方便的设置一些选项,可以保存/加载job

首次运行时需要输入用户名和密码,这可以用wmpiregister.exe输入并(加密)保存起来

wmpiconfig.exe用来配置一些MPI运行环境参数,比如可以把优先级改为idle

运行结果的观察:

1 每次执行mpiexec.exe -hosts 2 host1 host2 d:\mpi\testMPI.exe

会在目标机上增加一个testMPI.exe进程和smpd.exe进程

运行mpiexec.exe -n 3 testMPI.exe

会生成3个testMPI.exe进程,但只有一个smpd.exe

2 关掉运行mpi的cmd窗口时,会自动退出mpi任务,显示(我抓图看到的:)

mpiexec aborting job ...

job aborted:

rank: node: exit: code[: error message]

0: host1: 123: mpiexec aborting job

1: host2: 123

3 多次运行mpiexec,它们的进程通信空间是独立的。

如第1次运行mpiexec -n 2 testmpi.exe

第2次运行mpiexec -n 3 testmpi.exe

则第1个任务的numprocs=2

则第2个任务的numprocs=3

互不影响

阅读(7318) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~