(转)MPICH2安装配置2

转自http://www.cnblogs.com/microant/archive/2008/12/03/873644.html

windows下mpich2的安装, 及在VS2005下的设置

    最近正在搞我的毕业论文,要用的集群,搞分布式计算,所以就研究了一下mpich的安装,也是边学边做记号,一直到现在都没有调通,呵呵,一会提出来,还请高手给指点。
    1、MPICH安装配置
    下载就不必多说了,到官方网站下载就行了http://www.mcs.anl.gov/mpi/mpich2 。
     在配置前每个主机最好都添加一个用户名和密码都相同的管理员帐户。
    安装时在每台主机上用具有管理权限的帐户登录,运行直接安装就可以了。安装之后在安装路径有MPICH2的目录,并且进程管理器中可以看到smpd.exe的进程,说明安装已经成功,接下来就是如何配置的问题了。
    首先要在每台主机上进行注册,注册可在安装目录bin目录下运行wmpiregister.exe,输入前面添加的用户名密码,如图:

    也可在运行中直接输入mpiexec -register,完成用户的注册。

    此时,可运行wmpiexec.exe使用示例程序cpi.ext进行单机的验证,不再多述。

联机测试:(it's important)

 参加并行计算的机器须至少注册一个相同的账户,如笔者两台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" 必须位于前面设置的目录中。

    
     我这边就出了问题,如果连接正常的话两台主机都是高亮显示的,ZLH这台机器无法连接上,虽然局域网可以访问。我试了好多方法,包括把安装目录共享,关闭防火墙和杀毒软件,希望大家能帮忙给解决一下,的确是相当郁闷。
    原来局域网是无法访问的,所以就把局域网的两台机器放到一个workgroup中,附一下局域网访问条件:
        1) 双方计算机打开,且设置了网络共享资源;
        2) 双方的计算机添加了 "Microsoft 网络文件和打印共享" 服务;
        3) 双方都正确设置了网内IP地址,且必须在一个网段中;
        4) 双方的计算机中都关闭了防火墙,或者防火墙策略中没有阻止网上邻居访问的策略(UDP-137、UDP-138、TCP-139、TCP-445)。

    2、VS2005中的配置
    我用的是c++,环境VS2005,配置如下:
    1)首先,添加MPI库文件:
          单击“工具”——“选项”,在弹出对话框中双击树型目录中的“项目和解决方案”。在其子目录里面选中“VC++目录”,此时右侧显示相应属性,选择“库文件”,加入lib目录。


     问题出在多机的连接上面,这个需要配置程序来进行多机配置,如图,运行wmpiconfig.exe:
        


2、按此方法加入“引用文件”


3、在你所在的项目属性页中,如下图,配置下拉列表框的“配置属性”,“链接器”——“输入”——“附加依赖项”,加入mpi.lib
       同样,在release选项中,同样加上mpi.lib,配置完成
         


一小段代码,以供测试:

#include  " stdafx.h "
#include 
" mpi.h "
#include 
< cstdio >
#include 
< math.h >

void  main( int  argc,  char *  argv[])
{
    
int myid,numprocs;
    
int namelen;
    
char processor_name[MPI_MAX_PROCESSOR_NAME];

    MPI_Init(
&argc,&argv);/*程序初始化*/
    MPI_Comm_rank(MPI_COMM_WORLD,
&myid);/*得到当前进程号*/
    MPI_Comm_size(MPI_COMM_WORLD,
&numprocs);/*得到总的进程数*/
    MPI_Get_processor_name(processor_name,
&namelen);/*得到机器名*/

    fprintf(stderr,
" Process %d of %d SAY HELLO TO MPI on %s/n",
    myid, numprocs, processor_name);
    
    MPI_Finalize();
/*结束*/


}

示例:
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页