Windows VScode 配置MPI库

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 <iostream>
#include <mpi.h>
#include <stdint.h>
using namespace std;

int main(int argc,char* argv[]){
    cout<<"hello"<<endl;
    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 "<<myid<<" of "<<numprocs<<" on "<<processor_name<<std::endl;
    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的语法,导致我一直没配成功

要在VS Code中配置MPI,您可以按照以下步骤进行操作: 1. 首先,确保已经安装了MPI的开发环境。例如,在Linux上可以使用OpenMPI,而在Windows上可以使用MS-MPI。 2. 打开VS Code,并安装相关的插件。可以搜索并安装 "C/C++" 和 "MPI" 插件。 3. 在VS Code中创建一个新的C/C++项目或打开现有的项目。 4. 在项目的根目录中创建一个名为 ".vscode" 的文件夹(如果不存在)。 5. 在 ".vscode" 文件夹中创建一个名为 "tasks.json" 的文件,并将以下内容复制到该文件中: ```json { "version": "2.0.0", "tasks": [ { "label": "Compile MPI", "type": "shell", "command": "mpicc", "args": [ "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "group": { "kind": "build", "isDefault": true }, "problemMatcher": [] } ] } ``` 请注意,这个示例中使用的是mpicc命令进行编译。如果您使用的是不同的MPI实现,请相应地修改命令。 6. 保存并关闭 "tasks.json" 文件。 7. 在VS Code中打开您的MPI源文件(".c" 或 ".cpp" 文件)。 8. 按下Ctrl + Shift + B(或选择菜单中的 "终端" -> "运行生成任务")来编译MPI源文件。 9. 如果一切顺利,您会在输出窗口中看到编译的结果。 10. 您现在可以使用VS Code的调试功能来调试MPI程序。可以使用 "launch.json" 文件进行配置,以定义要运行的MPI进程数量和其他调试选项。 希望这些步骤能够帮助您在VS Code中成功配置MPI!如果您有任何进一步的问题,请随时提问。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值