win10,vs2017下mpi安装与入门

win10,vs2017下mpi安装与入门

一、mpi的安装

去微软下载安装
直接下载地址(点击下载)

1、点击下面下载的页面
2、直接点击download
下载页面
3、直接运行msi文件,按照安装提示安装
4、安装后会有3个文件夹
在这里插入图片描述
主要是头文件include与库文件lib
5、打开vs2017,创建一个空的.cpp文件
在这里插入图片描述
右击上面的那个,调出菜单,找到最下面的“”属性“”
在这里插入图片描述

打开是这样子的
在这里插入图片描述
3、导入头文件,库文件

(1)头文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果是64位选择x86文件夹,32位选x64
(2)库文件夹
在这里插入图片描述
导入方式和头文件的一样,不过应该注意的是选文件夹是一定要选x86或者是x64,否则可能会报找不到xxx.lib
(3)添加依赖项

在这里插入图片描述
点击小勾,这个地方选中这行是会出现小勾在这里插入图片描述

复制几个xxx.lib的名字依次填进去中间用;隔开或者换行写
在这里插入图片描述

最后点击“”应用“”就行
在这里插入图片描述

二、mpi的简单运用运用

(1)常用的基本函数

    int  MPI_Init(int* argc ,char** argv[] );//初始化
    
    int MPI_Comm_size(MPI_Comm comm ,int* size);//进程数
        
    int MPI_Comm_rank(MPI_Comm comm ,int* rank);//当前进程号
    
    int MPI_Send(void *message, int count, MPI_Datatype datatype, int rank, int tag, MPI_Comm comm);//发送信息
    
    int MPI_Recv(void *message, int count, MPI_Datatype datatype, int rank, int tag, MPI_Comm comm, MPI_Status *status);//接受信息
    
    int MPI_Finalize(void);//释放init的资源

(2)函数参数介绍

     MPI_Comm comm  通信域,一组共享该空间的进程
     
     int *size 进程数将会存在里面
     
     int *rank 进程号将会存在里面,进程号为大于等于0的整数,其中主进程进程号(rank)为0
     
     void *message 为被发送的信息
     
     int count  你发送的消息的个数(注意:不是长度,例如你要发送一个int整数,这里就填写1,如要是发
     送“hello”字符串,这里就填写6(C语言中字符串未有一个结束符,需要多一位))。
     
     MPI_Datatype datatype 你要发送的数据类型,需要用MPI定义的数据类型
     
     int dest 进程号
     
     int tag 信息标签(当发送的信息标签和接受端的信息标签相等时在,接受端才接受)
     
     MPI_Status *status 包含实际接收到的消息的有关信息      
      
(3)简单实例
#include<stdio.h>
#include<string.h>
#include<mpi.h>
#pragma comment(lib,"msmpi.lib")

int main(int argc, char* argv[])
{
	int proceNum;//进程数量


	int thisId;//当前进程id

	MPI_Status  status;//状态信息

	char message[1024];//发送信息内容

	MPI_Init(&argc, &argv);//初始化mpi进程

	
	MPI_Comm_rank(MPI_COMM_WORLD, &thisId);//获取当前进程号
	
	if (thisId == 0)
	{
		MPI_Comm_size(MPI_COMM_WORLD, &proceNum);//获取进程数量
		
		printf("当前共有%d个进程\n", proceNum);
	}

	if (thisId != 0) //当前进程不是主进程
	{
		printf ("我是进程%d,正在发送......", thisId);

		sprintf(message, "你好主进程!!");
	  // int MPI_Send(void *message, int count, MPI_Datatype datatype, int rank, int tag, MPI_Comm comm);发送信息到0进程(主进程)
		MPI_Send(message,  strlen(message)+1, MPI_CHAR, 0, 9527, MPI_COMM_WORLD); //MPI_COMM_WORLD:包含程序中所有MPI进程

	}
	else {//thisId != 0即不是主进程,那么这里就是主进程
		for (int i = 1; i < proceNum; i++)//其实这是阻塞式的发送和接受,所以可以靠循环来读取message所指缓冲区的信息
		{
			// int MPI_Recv(void *message, int count, MPI_Datatype datatype, int rank, int tag, MPI_Comm comm, MPI_Status *status);//接受信息
			MPI_Recv(message, 1024, MPI_CHAR, i, 9527, MPI_COMM_WORLD, &status);


			printf("你好,进程%d\n", status.MPI_SOURCE);
			

		}
	}



	MPI_Finalize();



	return 0;
}

运行方法(vs2017命令参数真的搞不懂,反正我加参数所以没反应)
直接生成
在这里插入图片描述
然后右击左上角蓝色的mai.cpp打开所在文件夹
在这里插入图片描述
返回上一级
在这里插入图片描述
进入Debug文件夹
在这里插入图片描述
空白处shift+鼠标右键,打开菜单然后打开Powershell窗口,输入mpiexec -n 17 mpi.exe,17为进程数将会生成0-16的进程号。
在这里插入图片描述
结果:
在这里插入图片描述

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值