1 正常配置流程

1.1 配好C++

超简单视频教程建议 1.1.1 下载mingw-w64、配置环境变量 1.1.2 安装C/C++Compile Run插件 1.1.3 配置C/C++Compile Run插件,主要是配置gcc.exe、g++.exe、gdb.exe的路径

1.2 安装MPI库

参考教程 但是这教程写的该说不说,流程是对的,但是还是有问题 我这里总结、修改一下

1.2.1 下载安装Microsoft MPI

下载地址 就安装最新版吧,下载两个文件msmpisetup.exe和msmpisdk.msi,无先后顺序地分别安装这两个文件,安装的地址可以随便改。 简单介绍一下:sdk(Software Development Kit,软件开发工具包),因此 这个Microsoft MPI包括了mpi.h、omp.h(意味着不需要再配置openmp)等 安装完后理论上已经给加入环境变量了,在cmd中输入 set msmpi 应该是下图的结果

1.3 VScode配置MPI库

1.3.1 运行mpi程序的过程

简单介绍一下运行mpi程序的过程,你有一个写了mpi的cpp文件,会先用编译器进行编译(这里就是g++.exe),编译完后生成一个可执行文件exe,然后再用mpiexec去运行这个exe文件。 是不是听起来挺简单的?确实过程很简单,但是目前麻烦就是麻烦在编译的过程,工具确实是g++,但是为了能够找到mpi运行所需要的各种库文件什么的,你需要指定很多的参数,才能正常、正确编译。(表达可能不专业,但是大致是这个意思) 根据目前网上的我看到的教程,当使用mingw-w64编译器时,你需要指定以下参数

网址 具体到命令就是

g++ 文件名.cpp -o 文件名 -I mpi的Include路径 -L mpi的Lib/x64路径 -lmsmpi

下面举一个实际的例子 下面是一个调用MPI接口的test.cpp文件

#include

#include

#include

using namespace std;

int main(int argc,char* argv[]){

cout<<"hello"<

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);

std::cout<<"Hello World! Process "<

MPI_Finalize();

return 0;

}

定位到test.cpp所在位置,在终端输入以下编译命令

g++ test.cpp -o test -I E:\\Lib\\mpi\\Include -L E:\\Lib\\mpi\\Lib\\x64 -lmsmpi

如果没有报错就是编译成功了,在同样的位置下生成test.exe 然后在终端用下面命令运行

mpiexec test

也可以指定进程数

mpiexec -n 4 test

如果是像我这样的运行结果就对了

1.3.2 VScode配置mpi

按照上面1.3.1说的其实就可以实现mpi开发了,那么为什么还需要配置呢?其实这是为了方便,每次编译都指定一大串的参数太麻烦了,所以就通过配置这些参数,实现每次编译运行的时候都默认加上了这些参数,来简化这个过程。 这里有两种方式 首先把msi的Include加入到c++的includePath里

方式一 task.json中加入这些参数

task.json就是控制如何编译c/c++的配置文件,里面的args关键字就指定编译的参数。在两个args的位置(分别对应c、c++的编译),加入下面的内容。 但是这种方式会让你在当前文件夹下的所有cpp、c都按照这个进行编译。 这种方式按下图方式编译

方式二

安装插件Code Runner,以后运行都通过这个插件,这个插件可以用在很多种编译语言上,并设置如何运行。 配置的内容

"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt -lmsmpi -L E:\\Lib\\mpi\\Lib\\x64\\ -I E:\\Lib\\mpi\\Include\\ && mpiexec -n 4 $fileNameWithoutExt",

"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt -lmsmpi -L \"E:\\Lib\\mpi\\Lib\\x64\" -I \"E:\\Lib\\mpi\\Include\" && mpiexec -n 4 $fileNameWithoutExt",

或者路径不要引号

"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt -lmsmpi -L E:\\Lib\\mpi\\Lib\\x64\\ -I E:\\Lib\\mpi\\Include\\ && mpiexec -n 4 $fileNameWithoutExt",

"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt -lmsmpi -lmsmpi -L E:\\Lib\\mpi\\Lib\\x64\\ -I E:\\Lib\\mpi\\Include\\ && mpiexec -n 4 $fileNameWithoutExt",

这里用插件,不仅配置了参数,而且指定了如何运行的。 后面就通过下面的方式来运行 这种方式的不好的地方在于指定了多少个进程运行,想改得去setting.json中改。

2 碰到的坑

json的坑

最开始我就是按照教程来写入json文件的 教程里面是这样的

"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt -lmsmpi -lmsmpi -L "E:\\Lib\\mpi\\Lib\\x64" -I "E:\\Lib\\mpi\\Include\\" && mpiexec -n 4 $fileNameWithoutExt",

这是错的,要不然把路径的引号去了,要不然就在前引号和后引号之前都加上反斜杠。 因为不懂json的语法,导致我一直没配成功

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: