VS2013下MPI环境配置

一、MPICH2安装配置

下载Windows下的MPI

二、MPI与VS2013关联问题

1.新建项目,打开属性,包含目录为MPICH2安装目录下的include,库目录为lib.

2.在预处理器中添加“ MPICH_SKIP_MPICXX ”:

3.在代码生成中选择多线程调试:MTd

4.在链接器的输入中,选择附加依赖项,添加mpi.lib,如果下载的MPI文件为Microsoft MPI (ms mpi)那么需要添加的文件为msmpi.lib:

三、代码测试

样例1:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <mpi.h>
//#pragma comment(lib,"mpi.lib") //在连接器中配置mpi.lib

using namespace std;

int main(int argc, char**argv){
      int rank, size;
      MPI_Init(&argc, &argv);
      MPI_Comm_size(MPI_COMM_WORLD, &size);
      MPI_Comm_rank(MPI_COMM_WORLD, &rank);
      if (rank == 0){
            cout << "I am rank" << rank << endl;
      }
      cout << "Size " << size << "Rank " << rank << endl;

      MPI_Finalize();
      return 0;
}

样例2:

#include <stdio.h>
#include <string.h>
#include <mpi.h>

int main(int argc, char *argv[])  // main必须带参数运行
{
      int myid, numprocs, source;
      MPI_Status status;

      char message[100];

      MPI_Init(&argc, &argv);//完成MPI程序的所有初始化,启动MPI环境,标志并行代码的开始

      printf("Hello World ! \n");
      MPI_Comm_rank(MPI_COMM_WORLD, &myid);/*获取进程的id,函数为int MPI_Common_rank(MPI_Comm comm,  int *rank) */
      MPI_Comm_size(MPI_COMM_WORLD, &numprocs); /*获取进程个数,函数为int MPI_Common_size(MPI_Comm comm,  int *size) */
      /*MPI_COMMON_WORLD为通讯组,一个通讯组是一个进程组和上下文的集合,上下文可以看作为组的超级标签,用于区分不同的通讯组,该参数用于限定参加通讯的进程的范围*/
      printf("I am %d of %d \n", myid, numprocs);

      if (myid != 0) //注意进程为非0
      {
            strcpy(message, "Hello World !");
            MPI_Send(message, strlen(message) + 1, MPI_CHAR, 0, 99, MPI_COMM_WORLD);
            /*先将字符串拷贝到发送缓冲区message中,然后调用MPI_Send语句将它发出,用
            strlen(message)指定消息的长度,用MPI_CHAR指定消息的数据类型1,指明发往进程0, 使
            用的消息标识是99 ,MPI_COMM_WORLD是包含本进程 和接收消息的进程进
            程0 的通信域,发送方和接收方必须在同一个通信域中,由通信域来统一协调和控制消息
            的发送和接收*/
      }
      else
      {
            for (source = 1; source < numprocs; source++)
            {
                  MPI_Recv(message, 100, MPI_CHAR, source, 99, MPI_COMM_WORLD, &status);
                  printf("%s\n", message);
                  /*进程0直接执行接收消息的操作,这里它使用message作为接收缓冲区,
                  由此可见,对于同一个变量在发送进程和接收进程中的作用是不同的,
                  它指定接收消息的最大长度为100,消息的数据类型为MPI_CHAR字符型,
                  接收的消息来自进程source ,而接收消息携带的标识必须为99,
                  使用的通信域也是MPI_COMM_WORLD, 接收完成后的各种状态信息存放在status中,
                  接收完成后它直接将接收到的字符串打印在屏幕上*/

            }
      }
      MPI_Finalize(); // 结束MPI程序的运行,标志并行代码结束,结束除主进程外其它进程
      return 0;
}

注:样例2测试代码来源不明,时间太久,自行整理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值