MPI联机测试

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

      这里使用的MPI lib的下载地址:http://www-unix.mcs.anl.gov/mpi/

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

  这里将在2台双核的PC上,构成的一个机群行计算环境。

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

  • Microsoft .NET Framework 2.0:每个节点必须的环境;
  • 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中。

  每个节点中新建一个用户,该用户应该具有管理员权限,隶属Administrators组。

  在每个节点新建相同的目录,来存放并行程序,该目录都应该在相同的位置。比如C:/MPIAPP。

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

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

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


联机测试
  这里将在具有2个节点的PC集群上测试。首先将Console Test.exe程序拷贝到每个节点的C:/MPIAPP目录中,然后执行命令(要求两台机器上注册证户名和密码相同的MPICH2用户 ,第一次运行要有耐心等一下):
mpiexec -hosts 2 133.133.133.84 133.133.133.95 "C:/MPIAPP/Console Test.exe"

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

      也可以用MPICH2自带的界面方式运行,选择“more option”打开下拉对话框,可以设置主机,空格分隔。

与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的并行程序了。

 

Console Test程序如下:

# include <stdlib.h>
# include <stdio.h>
# include <math.h>


#define MPICH_SKIP_MPICXX   //这句一定要有,否则报错
#include "mpi.h"

void main(int argc, char *argv[] )
{
    int my_id, num_procs;
    double wtime_start, wtime_end, wtime_interval;
    int n = 100000000000;
    double sum = 0.0;
    MPI_Init ( &argc, &argv );
    MPI_Comm_size ( MPI_COMM_WORLD, &num_procs );
    MPI_Comm_rank ( MPI_COMM_WORLD, &my_id );
   
    if ( my_id == 0 )
    {
        sum = 0.0;
        wtime_start = MPI_Wtime ( );
    }
   
    double sum0 = 0.0;
    int begin = my_id * n / num_procs;
    int end = (my_id + 1) * n / num_procs;
    for(int i = begin; i < end; i++)
        sum0 += i;

    printf ( "/nNow porcessor%d is running, Totally %d processors/n", my_id, num_procs );
//    MPI_Barrier(MPI_COMM_WORLD);
    MPI_Reduce(&sum0 , &sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);

    if ( my_id == 0 )
    {
        wtime_end = MPI_Wtime ( );
        wtime_interval = wtime_end - wtime_start;
        printf ( "  Elapsed wall clock seconds = %f/n",
            wtime_interval );
    }

//    MPI_Barrier(MPI_COMM_WORLD);
    MPI_Finalize ( );
}

 

运行脚本:

mpiexec -hosts 2 133.133.133.84 133.133.133.95 "C:/MPIAPP/Console Test.exe"
pause

 

mpiexec -hosts 4 133.133.133.84 133.133.133.84 133.133.133.84 133.133.133.95 "C:/MPIAPP/Console Test.exe"
pause


联机运行结果:
-2 6.674519s

-4 3.052571s

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值