您的当前位置:首页正文

MPICH在windows下搭建集群系统

2021-03-29 来源:我们爱旅游
一、首先自己的计算机上进行测试

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,更重要的是密码也要一样!希望新手要注意:用户和密码都要求一致。

再次、一定要把所有机器的防火墙都关掉,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\estMPI.exe

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

对于前面那个计算Pi的例子程序,只在第1台机器(即运行mpiexec的localhost)上有输入输出,它相当于master processor任务程序如果在服务器,则运行D:\\mpi>mpiexec.exe -hosts 2 host1 host2 \\\\server\\mpi\estMPI.exe 命令行也可以用图形界面的wmpiexec.exe来代替,可以方便的设置一些选项,可以保存/加载job

首次运行时需要输入用户名和密码,这可以用wmpiregister.exe输入并(加密)保存起来 wmpiconfig.exe用来配置一些MPI运行环境参数,比如可以把优先级改为idle 运行结果的观察:

1 每次执行mpiexec.exe -hosts 2 host1 host2 d:\\mpi\estMPI.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 互不影响

因篇幅问题不能全部显示,请点此查看更多更全内容