admin管理员组文章数量:1646242
Win10下用GCC+Code::Blocks搭建mpi编译环境
- 预备知识(一定要看懂)
- MPI简介(为什么不用MSMPI)
- Win10下用Code::Blocks搭建MPI开发环境
- 下载MPICH文件
- Code::Blocks中配置
- TestCode
- 编译运行
- 更新一下2020.12.04
预备知识(一定要看懂)
可以先读一下以下四篇文章:
C语言编译过程详解:https://wwwblogs/CarpenterLee/p/5994681.html
VS各目录介绍:https://blog.csdn/u012043391/article/details/54972127
GCC编译命令:https://wwwblogs/testlife007/p/6555404.html
(浏览一下就行)Windows环境下的vs2013配置MPI:https://blog.csdn/z909768094/article/details/50926162
MPI简介(为什么不用MSMPI)
隐藏下载地址(下载这个里面的1.4版本以前的!):http://www.mpich/static/tarballs/
MPICH2开发之前有独立的Win10版本,在版本1.4之后,就没有MPICH2的Win安装包了。
mpich2-1.4大概是13年发布的,里面有mpi.h mpi.lib mpi.a,然后之后就可以在微软官网上有了MS-MPI的版本大概14-15年,这时候的软件包中的东西就少了一些,分成了两个下载程序,一个是mpisetup用于运行mpi的.exe文件,另一个就是mpisdk。只包含了mpi.h和.lib文件(没有.a文件)。
可以从mpi的官网看到,最后面的windows下版本是基于MPICH2-1.0.3开发的,现在已经到了MS-MPIv10.0。
目前可以从mpi官网进入微软官网下载ms-mpi,为什么不推荐下载官网的这个,ms-mpi与mpich2少了一些编译要用的文件,这些东西被加到了微软的开发环境中(VS、VC),也就是说你如果想用ms-mpi但是不用visual studio的话,会出很多错。
之前文章有讲,.lib , .a, .so文件都是静态链接库,如果用VS就往里面添加.lib,如果用其他编译器的话,就要用.a或.so文件,而ms-mpi里面已经没有.a文件了,这就是为什么不用VS的话,就不用ms-mpi了。
VS自带的编译器是CLang,对C++的语法支持较差,在VS中可以使用Intel compiler(ICC)编译器(我没用过),但是目前没找到在VS中用GCC的方法,所以如果想用gcc+mpi的话,就只能换别的IDE。
但是这样的话用的mpi版本就不是最新的了。。。。不过应该问题不大。
我更推荐在LINUX系统(国产deepin很好用了)下编译MPI程序,就不会有这么多麻烦了,linux下有最新的mpich3.x,不需要VS。
在Linux下下载mpi大礼包以后会送一个mpicc,这是一个编译器,跟gcc一样用,就是不用自己配置文件了。
而Win下的mpi大礼包没有mpicc,mpicc=gcc+mpi配置,所以我们可以自己来搭建。
Win10下用Code::Blocks搭建MPI开发环境
下载MPICH文件
下载这个里面的1.4版本以前的! 就是上面说过的那个链接:http://www.mpich/static/tarballs/
安装,哪儿都行只要你找得到
Code::Blocks中配置
有两个地方可以设置(下面二选一设置就行):
-
全局设置( 会改变全局的编译器设置,以后所有的程序都会用这个设置)
Settings->Compiler->Search Directory
1 在compiler里面添加mpi.h所在目录 例如:安装目录\inlcude
2 在linker里面添加libmpi.a所在目录 例如:安装目录\lib (其实可以不加,正确添加下一步就行)
3 在Settings->Compiler->linker setting中添加libmpi.a文件(不是文件夹了) 例如:安装目录\lib\libmpi.a
-
针对单个项目设置
在项目处右键有Build Option,按上面同样配置就行。
TestCode
#include "mpi.h"
#include <stdio.h>
int main(int argc, char* argv[])
{
int rank, numproces;
int namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);//获得进程号
MPI_Comm_size(MPI_COMM_WORLD, &numproces);//返回通信子的进程数
MPI_Get_processor_name(processor_name, &namelen);
fprintf(stderr, "hello world! process %d of %d on %s\n", rank, numproces, processor_name);
MPI_Finalize();
return 0;
}
编译运行
x86_64-w64-mingw32-g++.exe -Wall -fexceptions -m64 -g -I"C:\Program Files\MPICH2\include" -c E:\Workspace\mpitest\main.cpp -o obj\Debug\main.o
x86_64-w64-mingw32-g++.exe -L"C:\Program Files\MPICH2\lib" -o bin\Debug\mpitest.exe obj\Debug\main.o -m64 "C:\Program Files\MPICH2\lib\libmpi.a"
编译可以看到在Build log中可以看到两行命令,结合gcc的命令,如果上面配置不正确可以从这儿检查,其中第二条命令的-m64不是必须有的,我用的是TDM-GCC64位所以就加上了。
编译后有一大堆warning,不用管它,如果没有error能编译成功就行了!!
更新一下2020.12.04
上面是我刚入门并行时候写的,当时经验还是不够,写的可能比较粗糙。
现在给后来人一些建议:
- 推荐一个好用的编译器 QtCreator ,codeblock已经很久没有更新了,语法高亮 补全功能都不是很完善。强烈推荐QTCreator,个人感觉比VS好用
- 做并行开发的话,就不要在windows下做了,MSMPI+VS的并行程序只能在windows下运行,就选你写完了,找一台windows系统的服务器可能都很不容易,如果规模很大想找windows的集群根本没地方找。而且MPI虽然是标准了,在我使用的过程中,不同mpi的实现还是有很大差别的,如果是msmpi到时候想换成别的mpi可能会不太容易。建议用openmpi或者mpich,intelmpi的话,接口都不一样的。
- 祝大家科研顺利,开了个qq小号,1845303506,精力有限,白嫖就别啦 ==、,多看几遍内容都在这里面了,特别是把前面的几个基础内容好好看懂,你就会发现,其实所有的库搭建方式都是一样的,mpi只是个普通的三方库,没有任何特别之处~~
版权声明:本文标题:Win10下用GCC+Code::Blocks搭建mpi编译环境 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1729420744a1200547.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论