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的语法,导致我一直没配成功 推荐链接
发表评论