MPI windows+VS环境下的配置+快速入门

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a19990412/article/details/85307056

简述

MPI用于在windows下的高性能计算
目前主要用于在超级计算机上的并行计算
所以有兴趣的做超级计算方面的,或者对这个感兴趣的,学习下这个也蛮好的

可见下图知乎内容,李沐大神的回答
在这里插入图片描述

安装

进入到微软的链接

https://docs.microsoft.com/en-us/message-passing-interface/microsoft-mpi

  • 点击下图中位置
    在这里插入图片描述

  • 在点击下图标记位置

在这里插入图片描述

这时就会下载两个文件。点击这个两个文件,然后一路默认就好了(软件非常小,不用担心空间问题)

vs配置

按照下面图的要求配置就好了

  • 先设置为debug模式,再设置为X64
    • 再给个提示,下面的配置中,每写一页的内容,就点应用一次。保证覆盖掉原来的~

在这里插入图片描述

  • 这个写对应的地址,如果你是默认的话,应该是跟我一样的,你也可以去检查下是否有对应的文件夹

在这里插入图片描述

  • 再改链接器
    这个无论你是否跟我一样的安装目录,都写一样的

在这里插入图片描述

测试

测试的话,当然是使用类似于hello world的方式

MPI的逻辑

先简单讲讲MPI的逻辑,MPI的话,会用一个mpiexec程序,去调用我们已经编译好的mpi程序(.app或.exe或.out之类的) 然后,设置节点数目,让同一个程序在不同的节点上跑起来。之后,给每个节点分配一个rank。

所以,在代码上我们就需要交待这个交互的逻辑,在一份代码中实现不同的节点的不同任务。
但是,注意到我们之前说的,是一份程序,让不同节点来操作,唯一可以区分彼此的就是rank不同。因此,在代码中我们需要对rank进行判断,根据不同的rank给出不同的操作的代码空间(一般是用if-else来实现的)

根据我们之前说的,除了导入包之外,这里我们一般必用的有四个函数。

  • 根据名字也能猜出对应的作用
    • 第一个做初始化的
    • 第二个获取所有的节点数
    • 第三个获取当前的rank数目
    • 第四个做收尾工作的
MPI_Init(NULL, NULL);
MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
MPI_Finalize();

实例代码

#include <mpi.h>
#include <stdio.h>
#include <string>
#include <string.h>
#pragma warning(disable : 4996)
const int MAX_STRING = 100;

int main() {
	char greeting[MAX_STRING];
	int comm_sz;
	int my_rank;

	MPI_Init(NULL, NULL);
	MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);
	MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);

	if (my_rank != 0) {
		sprintf(greeting, "Greetings from process %d of %d\n", my_rank, comm_sz);
		MPI_Send(greeting, strlen(greeting) + 1, MPI_CHAR, 0, 0, MPI_COMM_WORLD);
	}
	else {
		printf("Greetings from process %d of %d\n", my_rank, comm_sz);
		for (int i = 1; i < comm_sz; ++i) {
			MPI_Recv(greeting, MAX_STRING, MPI_CHAR, i, 0, MPI_COMM_WORLD, MPI_STATUSES_IGNORE);
			printf(greeting);
		}
	}
	MPI_Finalize();
}

在VS上编译好,之后,找到.exe所在的文件夹

在这里插入图片描述

  • 用shift+鼠标右键 会看到有命令行打开(或者powershell)
    • 输入下面的内容,就会输出下面的节点数。注意,最好是数字不要超过电脑的数目,因为超过了也没用,最多就是电脑的核数来进行计算,剩余的都要来排队。
PS D:\Code\C++\repo\MPITest\x64\Debug>mpiexec -n 4 ./MPITest.exe
Greetings from process 0 of 4
Greetings from process 1 of 4
Greetings from process 2 of 4
Greetings from process 3 of 4

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/a19990412/article/details/85307056
mpi