• Windows下MPI并行程序运行环境的搭建 - [开发手记]

    2008-03-21 | Tag:高性能计算 MPI 并行计算

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://mryang.blogbus.com/logs/17396382.html

      这几日对并行计算有了大概的了解,其中关键的还是并行程序的设计,搞了一早上终于弄清楚了在Windows下的MPI并行程序运行环境的搭建。

    什么是MPI?
      MPI(Message Passing Interface),消息传递编程接口,是全球工业、科研和政府部联合建立的一个消息传递编程标准。是目前最为通用的并行编程方式。MPI标准中定了一组函数接口,用于进程间的消息传递。函数的具体实现由各计算机厂商来完成,然这些都是要付费的;也有一些免费的通用MPI系统,比较著名的就是MPICH(http://www.mcs.anl.gov/research/projects/mpich2/)和LAM MPI(http://www.lam-pi.org)。[1]

      单来说,要让你的单个PC机能运行并行程序的运行,就需要有MPI的运行环境。而PICH几乎支持所有的Linux/Unix和Windows,可以在单台PC或工作站上模拟MPI并行程,也可以在SMP系统或者机群环境上建立实用的并行计算环境。

      这里将在一台双核的PC上,利用虚拟机及MPICH2建立一个由3台PC节点构成的一个机群行计算环境。

    软硬件准备
    硬件:一台普通PC,当然硬盘和内存越大越好,我是用的是160G的硬盘,1G的内存。
    软件:

    • VMware Workstation 6.0,在VM上虚拟两个PC,与物理主机构成3个节点的机群可以安装一个虚拟PC,然后实用VM的克隆功能。
    • Microsoft Windows XP Pro:每个节点的操作系统;
    • Microsoft .NET Framework 2.0:每个节点必须的环境;
    • vcredist_x86.exe(VC8运行库):在安装MPICH2时需要,安装时会提示Visual C++2005 sp1的提示,安装vcredist_x86.exe后,就可以正常安装MPICH2了;
    • mpich2-1.0.6p1-win32-ia32.msi:MPICH2安装程序,可到http://www.mcs.anl.gov/research/projects/mpich2/的Downloads中下载。

    环境搭建
      在每台机器上均安装上Microsoft .NET Framework2.0和MPICH2。MPICH2的默认安装路在C:\Program Files\MPICH2,将MPICH2\bin加入系统环境变量的Path中。

      每个节点中新建一个用户,该用户应该具有管理员权限。我这里新建了用户mpi,密为111,隶属Administrators组。

      在每个节点新建相同的目录,来存放并行程序,该目录都应该在相同的位置。我这里的C:\mpitest。

    单机测试
      首先需要注册一个用户,运行MPICH2的wmpiregister.exe,在开始->所有成程序-MPICH2中可以找到。将上一步中的用户名和密码在这里进行注册即可。

      后可以采用MPICH2提供的GUI界面进行测试,可以在在开始->所有成程序->MPICH2中到wmpiexec.exe;在MPICH2的examples下有个测试程序cpi.exe,选择后执行即可。

      可以到命令行方式执行命令:mpiexec -n 2 C:\Program Files\MPICH2examples\cpi.exe即可。命令中-n是参数,后面的2表示有两个节点并行计算。


    联机测试
      这里将在具有3个节点的PC集群上测试。首先将cpi.exe程序拷贝到每个节点的C:\mpitest目录中,然后执行命令:
    mpiexec -hosts 3 210.45.*.* 210.45.*.* 210.45.*.* C:\mpitest\cpi.exe

      注意:在联机测试时将XP的防火墙关闭。

    与VC++ 6.0集成开发环境
      有了MPI的运行环境后,还需要一个MPI的开发环境。MPICH2可以和VC开发环境集成,集的方法很简单,将MPICH2的Include和lib添加到VC的Directories的Include files和ibary files中即可。同时在Project Settings中将mpi.lib添加到Object/library modules中,然后就可以采用VC++ 6.0开发MPI的并行程序了。

    [1] 张林波,尺学斌等.并行计算导论. 北京:清华大学出版社,2006年7月

    [2]  http://read.newbooks.com.cn/info/175818.html


    随机文章:

    又回到USTC了 2008-04-14
    ITwiki 2007-04-11

    收藏到:Del.icio.us
    引用地址:

    评论

  • 谢谢博主了,您有没有这方面的书,最好是C语言的。
    MrYang回复sety说:
    你可以到网上搜一下这本书《高性能计算并行编程技术— MPI 并行程序设计》
    2008-12-07 22:51:53
  • 当我按照你说的执行以下操作也出现类似的问题
    mpiexec -hosts 2 192.168.0.5 192.168.0.6 E:\cpi.exe

    结果如下:
    abort:Unable to connect to 192.168.0.6

    PS:我的防火墙已经关掉了
    MrYang回复wb说:
    应该是网络问题吧。
    2008-12-07 22:52:37
  • 当我按照你说的执行以下操作也出现类似的问题
    mpiexec -hosts 2 192.168.0.5 192.168.0.6 E:\cpi.exe

    结果如下:
    abort:Unable to connect to 192.168.0.6

    PS:我的防火墙已经关掉了
  • 博主,你好,我在内网两台机器上做实验出现问题,请求帮助!!!
    我先在一台机器上做实验
    mpiexec -n 1 -host 6ff5073c93ba4ce E:\cpi.exe
    注:6ff5073c93ba4ce是一台机器名
    结果成功
    在内网另外一台机器上做实验
    mpiexec -n 1 -host 21c69670c4064f7 C:\cpi.exe
    注:21c69670c4064f7 是另外一台机器名
    结果成功

    现在我在一台机器上(6ff5073c93ba4ce )运行命令
    mpiexec -configfile E:\mpiconfig.txt
    结果显示连接不上另一台机器(21c69670c4064f7 )
    如下:
    abort:Unable to connect to 21c69670c4064f7

    换另一台机器21c69670c4064f7 ,进行上述操作,结果类似,显示连接不上机器6ff5073c93ba4ce

    注:mpiconfig.txt内容为:
    -n 1 -host 6ff5073c93ba4ce E:\cpi.exe
    -n 1 -host 21c69670c4064f7 C:\cpi.exe
    MrYang回复wb说:
    好好检查一下网络吧,或者是配置问题。
    2008-12-07 22:50:41
  • 请问,怎样编写并行程序,可以在多个机器上运行,进行不同的计算工作。不用MPICH2提供的GUI界面
    MrYang回复sety说:
    并行程序的编写不是几句话就说的清楚的,建议去查看相关的书籍。另外MPICH2并没有提供一个GUI界面,它只是提供了一个并行运行环境而已,并行程序的编写还是使用C或C++或者其他的程序设计语言。
    2008-12-06 16:34:53
  • 你好,我把机器配好,执行命令
    mpiexec -n 1 A C:\Program Files\MPICH2examples\cpi.exe
    正常
    mpiexec -n 1 B C:\Program Files\MPICH2examples\cpi.exe
    也正常
    但是
    mpiexec -n 2 A B C:\Program Files\MPICH2examples\cpi.exe
    就不会出现结果了,请问这是为什么?如果有时间的话能不能帮我解答一下?谢谢!
    MrYang回复CYW说:
    不太清楚你命令行里面的A B是指什么,另外也不太清楚你的环境,实在单机测试呢还是在网络环境下,最终的提示信息是什么?
    2008-11-24 22:42:37
  • 谢谢
    把windows防火墙关了就好了,原来只关了其他的防火墙
  • 你好,我多机测试时遇到如下提示:
    C:\Documents and Settings\zhenglei>mpiexec -n 3 sum
    Unable to connect to 'csu-e71c70ed0c8:8676',
    sock error: generic socket failure, error stack:
    MPIDU_Sock_post_connect(1228): unable to connect to csu-e71c70ed0c8 on port 8676
    , exhausted all endpoints (errno -1)
    MPIDU_Sock_post_connect(1244): gethostbyname failed,不知道这样的主机。 (errno 10011)

    博主有空帮我看一下,除了什么问题
    谢谢
    MrYang回复gp8209说:
    把防火墙关掉吧,从提示看,是连接不上主机以及相应的段都不能用。因此把防火墙关了试试看!
    2008-10-22 18:26:11
  • 请问下大侠,我用两台机器联机,为什么只能在一台机器上同时检测到两台机器安装了MPICH2,而在另外一台机器上却只能看到它自己。
    还有,我是VF6.5,编译环境如何整合啊?是不是只有编译环境整合后,才能测试例子cpi?
    MrYang回复HH说:
    对于第一个问题不知你是如何检测的。要用VF6.5整合的话,要看MPICH2是否有支持MPICH2的部分,如果没有,就没办法了。
    2008-08-07 20:44:18
  • 安装mpich2完毕,运行后输出为:"enter the number of intervals", 我随机输入非零值,然后输出pi 和error, 并没有给出processor 状态,请问如何解决。
    MrYang回复apple说:
    这是mpi程序里面输出的,如果你的mpi程序中没有输出处理器的状态的代码的话,运行后的结果肯定是不会有输出的。
    2008-07-03 13:51:51
  • 请教下,MPI中,单机双核运行,是否可以共享内存?如何访问同一块内存?是否可以传递内存地址?
    MrYang回复syc说:
    MPI主要用在分布式并行系统中,如果要共享内存,那是SMP,需要使用OpenMP。如果是单CPU双核中的核与核之间的内存共享的话,我想这应该是操作系统的任务,或者要看CPU厂家的编译器是否支持,具体没有用过,需要查阅资料。
    2008-05-08 22:26:17
  • 原来账户不能空密码……
    不过老弹出windows防火墙安全警报真是烦人。

    麻烦你了:)
    MrYang回复syc说:
    把防火墙关了,账号给个密码就可以了。
    2008-03-28 22:09:48
  • 单机多进程的话,用wmpiexec.exe运行,提示无权/无法连接。
    请问下这边的account和password要如何设置?
    MrYang回复syc说:
    随便设个用户和密码即可。
    2008-03-28 22:10:16
  • 呃。。VMware没用过。。
    能不能稍微说一下这方面。。
    谢谢了。
    MrYang回复syc说:
    单机不需要VMware,直接安装了MPICH测试就可以了。
    2008-03-28 17:05:32
  • 能不能麻烦稍微说下单击双核(甚至单核)的话,MPICH应该如何设置?最近毕业设计搞到这个题目,,一头雾水。。
    MrYang回复syc说:
    兄弟,上面的文章中已经写得很清楚了啊。文章就是杂单机双核的情况做的。
    2008-03-28 09:43:59
  • 请问单击双核的话是否可以使用mpich?
    甚至单核的单机是否可模拟使用mpich?
    可以的话烦稍微教一下。
    谢谢!
    MrYang回复syc说:
    单机双核当然可以,我上面做过测试,文章中有提到。单击单核没有做过测试,不过我想应该可以,因为MPI是在进程间进行消息传递,只要有多个进程同时运行就可以了。我在双核上测试了4个进程的,也可以运行。
    2008-03-27 16:40:45

About Me

MrYang

教师,供职于SWUST。

日历

  • 自2008年3月有来访问