MPI环境配置
MPI落地
如果前面的方法都没有用,没有关系。我们这边直接来一个微型mpi环境的搭建,一切为了运行自己的第一个mpi程序。
通用操作:
进入官网以后点击download,将里面的msmpisetup.exe
和msmpisdk.msi
都下载下来。这里默认下载下来以后一直点的是确认,没有修改安装地址,如果有修改,根据笔者的代码自行修改地址那边的信息。
注意往下拉,找到x86_64-posix-seh
,点击下载,最好是64位的,好像32位不是很匹配。以及环境变量的配置,一样找到我的电脑(此电脑),右键选择属性,然后找到高级系统设置,然后找到环境变量,点进去。
在用户变量和系统变量找到path,然后刚才下载下来的x86_64-posix-seh
,解压完成之后,找到里面的文件夹bin,比如笔者的就是C:\Program Files\mingw64\bin
,也就是我将mingw64放在了C盘的program files下,然后在每个path下加入就可以了。
检验的过程就是仍然是同时按win
+R
,唤出dos系统,输入gcc --version
,如果在一大堆英文中看到8.1.0就说明安装以及配置环境变量成功了。
vscode
一进宫
推荐去官网下载,点击download即可,里面的配置可以放心选择默认。如果下载完vscode,可以唤出dos系统,然后输入code -v
,如果第一行是版本号,第三行是x64说明安装成功了。
二进宫
这里第一次打开vscode是英文界面,不熟悉的同学没有关系,往右边的悬浮窗口寻找,找到第五个扩展,或者直接Ctrl+Shift+X
,在里面输入Chinese,然后下载应用就可以了,记得做完退出再进来就是中文界面了。
三进宫
接下来一样的操作,仍然是在拓展窗口,这时候我们搜索code runner,下载并且应用,点确认就可以了。然后依然是退出再进去。
我不来啦
最后一次进去,点击拓展界面,这时候应该能看到code runner在你的搜索栏下面,这时候右键,找到拓展设置点击,然后在里面找到这个Code-runner:Executor Map,如果觉得麻烦,直接Ctrl+F
,然后再那个框中粘贴Code-runner:Executor Map
,按个回车就能找到了,然后点击下面的在setting.json中编辑
,找到里面的:
"c":"...."
"cpp":"...."
我们要修改的就是这个。
造宫殿
将原先的替换成下面的:
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt -fopenmp -l msmpi -L \"C:\\Program Files (x86)\\Microsoft SDKs\\MPI\\Lib\\x64\" -I \"C:\\Program Files (x86)\\Microsoft SDKs\\MPI\\Include\" && mpiexec -n 4 $fileNameWithoutExt",
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt -fopenmp -l msmpi -L \"C:\\Program Files (x86)\\Microsoft SDKs\\MPI\\Lib\\x64\" -I \"C:\\Program Files (x86)\\Microsoft SDKs\\MPI\\Include\" && mpiexec -n 4 $fileNameWithoutExt",
注意这里面的MS-MPI库的位置(\"C:\\Program Files (x86)\\Microsoft SDKs\\MPI\\Lib\\x64\"
和\"C:\\Program Files (x86)\\Microsoft SDKs\\MPI\\Include\"
),尤其注意"
和\
之前都要加上转义符号\
,否则vscode后面运行的时候会出现no this file or directionary
,这边也可以按照自己之前下载的位置找到x64和Include对应替换就可以了
运行自己的第一个mpi程序
拷贝下面程序,然后在vscode上运行,记着点击右上角的三角,或者直接Ctrl+Alt+N
,就可以测试自己的mpi环境搭建的如何了。
#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);
cout << "Hello World! Process" << myid << "of" << numprocs << " on " << processor_name << endl;
MPI_Finalize();
return 0;
}
如果输出为
hello
hello
hello
hello
Hello World! Process0of4 on ...
Hello World! Process1of4 on ...
Hello World! Process2of4 on ...
Hello World! Process3of4 on ...
这里的...
每个人可能不一样,应该是硬件的一种编号,大致类似就可以了。接下来就可以mpi的探索之旅啦。
DevCPP
又是我们梦开始的dev,不过因为目前dev的mingw64版本是5.11,编译mpi程序的时候会有错误,所以我们要给自己的dev升级一下。
告别往昔
点击Tools,在点击Compiler Options,进入编译器选项界面后,右上角从左到右点击第三个Add a compiler set by folder,然后找到前面下载的mingw64文件夹,点击确定。然后再点从左到右第四个(向右的箭头)Rename the selected compiler set,为自己新搭建的编译器起个名字。注意,如果以后想要换回以前的编译环境,可以往上面的菜单栏中找到help,往下一行最右边,就会看到刚才自己为编译器起的名字,这时候点击,然后选择里面的第一个就是以前自己的编译器环境,以后切换可以在这边实现。或者就是在刚才的Compiler Options里面的第一栏点击选择就可以了。
浴火重生
在Add the following commands when calling the compiler里面添加下列代码:
-L "C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64" -I "C:\Program Files (x86)\Microsoft SDKs\MPI\Include"
注意这里面的MS-MPI库的位置("C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64"
和`"C:\Program Files ,这边也可以按照自己之前下载的位置找到x64和Include对应替换就可以了
注意修改之前先在之前打勾,不然没法选择。
接着就是在下面的Add the following commands when calling the linker中改成下面的语句:
-static-libgcc -fopenmp -l msmpi
这里的-fopenmp
是为了运行omp,而-l msmpi
是为了运行mpi,根据自己的需要自行选择。
偷懒是一辈子的事情
这时候理论上可以开始运行自己的第一个mpi程序了,但是还不够方便,因为此时编译运行是没有并行的感觉,所以我们还要进行一步操作。
点击Tools,再点击Configure Tools,点击里面的Add,下面的内容copy即可
标题 | 需要填写的内容 |
---|---|
Title | MPI RUN FOR 4 |
Program | C:\Windows\System32\cmd.exe |
Working Directory | C:\Windows\System32\ |
Parameters | /c cd/d <PROJECTPATH> & mpiexec -n 4 <EXENAME> & "<EXECPATH>ConsolePauser.exe" |
这边的parameters里面的数字4就是我们同时运行的线程有多少,这里可以根据自己的需要自行修改
运行自己的第一个mpi程序
拷贝下面程序,然后在dev运行,注意先编译,然后点击Tools,然后选择里面的Package Manager,点击自己刚刚搭建的MPI RUN FOR 4,就可以测试自己的mpi环境搭建的如何了。
#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);
cout << "Hello World! Process" << myid << "of" << numprocs << " on " << processor_name << endl;
MPI_Finalize();
return 0;
}
如果输出为
hello
hello
hello
hello
Hello World! Process0of4 on ...
Hello World! Process1of4 on ...
Hello World! Process2of4 on ...
Hello World! Process3of4 on ...
这里的...
每个人可能不一样,应该是硬件的一种编号,大致类似就可以了。接下来就可以mpi的探索之旅啦。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)