Windows下用VC与QT编译MPI程序入门
2017-01-25 21:39
351 查看
MPI是
PS:这段代码中,由于VS高版本安全性能的提升,不能使用
添加MPI安装路径里的Inc路径到环境变量
添加MPI的lib文件所在路径到环境变量
第一句代表链接到msmpi.lib文件。第二句是为了后面更好的运行程序,更改了我们程序生成的路径。
其中,执行的是mpiexec.exe,“MPITest.exe”为程序生成的exe。这一步的目的跟VS中的一样。
mpiexec.exe来启动程序。由本文可以看出,文中提供Win下两种IDE编译MPI程序的方法,大同小异。
MPICH官网
http://www.chenguanzhou.com/2014/04/29/2014-04-29-win-mpi/
信息传递接口的简称,常用来进行进程间、机器间的通信与并行计算。一般而言,MPI都会部署在*nix系统下,在Windows下面直接编译、配置MPI并不容易。本文利用MS提供的编译好的MPI的版本,介绍如何在Windows原生环境下(不包括MinGW、CygWin),使用VC或QT编译MPI程序。
下载、安装MPI
MS官网提供编译好的MPI安装程序,可以直接下载【传送门】。下载好后,直接安装既可。使用VS编写MPI程序
1. 新建工程
新建VC控制台工程。2. 配置路径
“项目右键→属性→配置属性→VC++目录”中,分别将MPI安装路径里的Inc与Lib路径添加到包含目录和
库目录中。PS:上述Lib路径,32位环境下面是指Lib下面的i386文件夹,64位库则是指amd64文件夹。
3. 配置lib文件
“项目右键→属性→配置属性→链接器→输入→附加依赖项”,添加MPI的lib文件,即msmpi.lib4. code
在cpp文件中,写入如下代码(找不到stdafx.h的,可以删掉第一句):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include "stdafx.h" #include <mpi.h> #include <stdio.h> #include <string.h> #define BUFSIZE 128 #define TAG 0 int main(int argc, char *argv[]) { char idstr[32]; char buff[BUFSIZE]; int numprocs; int myid; int i; MPI_Status stat; /* MPI programs start with MPI_Init; all 'N' processes exist thereafter */ MPI_Init(&argc,&argv); /* find out how big the SPMD world is */ MPI_Comm_size(MPI_COMM_WORLD,&numprocs); /* and this processes' rank is */ MPI_Comm_rank(MPI_COMM_WORLD,&myid); /* At this point, all programs are running equivalently, the rank distinguishes the roles of the programs in the SPMD model, with rank 0 often used specially... */ if(myid == 0) { printf("%d: We have %d processors\n", myid, numprocs); for(i=1;i<numprocs;i++) { sprintf_s(buff, "Hello %d! ", i); MPI_Send(buff, BUFSIZE, MPI_CHAR, i, TAG, MPI_COMM_WORLD); } for(i=1;i<numprocs;i++) { MPI_Recv(buff, BUFSIZE, MPI_CHAR, i, TAG, MPI_COMM_WORLD, &stat); printf("%d: %s\n", myid, buff); } } else { /* receive from rank 0: */ MPI_Recv(buff, BUFSIZE, MPI_CHAR, 0, TAG, MPI_COMM_WORLD, &stat); sprintf_s(idstr, "Processor %d ", myid); strncat_s(buff, idstr, BUFSIZE-1); strncat_s(buff, "reporting for duty\n", BUFSIZE-1); /* send to rank 0: */ MPI_Send(buff, BUFSIZE, MPI_CHAR, 0, TAG, MPI_COMM_WORLD); } /* MPI programs end with MPI Finalize; this is a weak synchronization point */ MPI_Finalize(); return 0; } |
sprintf、
strncat函数,因此,代码中全部被改为了
sprintf_s与
strncat_s。低版本的VS抱错的话,请自动改回来。
5. 修改调试方式
由于MPI程序要能并行计算,必须由mpiexec.exe启动,不能直接运行程序的exe,因此需要修改程序的运行方式。“项目右键→属性→配置属性→调试”,将
命令改为
mpiexec,
工作参数改为
$(TargetPath)。
6. 生成
不报错即可。生成后结果如下:使用Qt编写MPI程序
其实严格来说,这讲的是用QtCreator来构建,实际上编译器还是VC的。1. 新建工程
新建项目→非Qt项目→纯c++语言项目2. 配置环境变量
可以直接在系统环境变量中配置,也可以在Qt中的“项目→构建与运行→构建变量”中进行。具体设置如下:添加MPI安装路径里的Inc路径到环境变量
include中(不存在则新建这个环境变量,下同);
添加MPI的lib文件所在路径到环境变量
lib中。(与前文一样,注意32位与64位的区别)
3. 修改pro文件
在项目pro文件,在里面添加下面2行代码,并重新qmake:1 2 | LIBS += -lmsmpi DESTDIR = ./ |
4. code
代码跟前文VS里的一样,只需把第一行去掉5. 修改调试方式
“项目→构建与运行→运行”设置如下图:其中,执行的是mpiexec.exe,“MPITest.exe”为程序生成的exe。这一步的目的跟VS中的一样。
6. 构建并运行
运行结果应该跟VS的一样总结
MPI程序在Win下面跟普通的第三方库并没有太大区别,只是在运行的时候,需要由mpiexec.exe来启动程序。由本文可以看出,文中提供Win下两种IDE编译MPI程序的方法,大同小异。
参考资料
MPI维基百科MPICH官网
http://www.chenguanzhou.com/2014/04/29/2014-04-29-win-mpi/
相关文章推荐
- QT初探-在windows下编译QT程序
- Windows下静态编译QT程序
- 使用VC2005编译真正的静态Qt程序-Qt中文论坛-夏威夷雪人
- Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)
- Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)
- [转载]QT+MinGW在windows中静态编译程序
- windows环境中使用VC的nmake和makefile编译c++程序
- Windows下编译好的Qt程序运行问题
- Fedora 11中用MinGW编译Windows的Qt4程序(在Linux系统下编译Windows的程序)
- QT+MinGW在windows中静态编译程序
- windows qtcreator,vs2008 编译QT程序 的配置
- 今天重头开始学学vc,,写个windows入门的程序
- Qt开发:windows下发布动态编译程序
- Windows环境下MPI程序的编译与运行
- Windows下编译静态Qt程序
- 使用VC2005编译真正的静态Qt程序
- Windows下用Scons编译QT程序
- 使用VC2005编译真正的静态Qt程序
- 用VC2013编译了一个程序,在Windows 8、Windows 7(64位、32位)下都能正常运行。但在Win XP,Win2003下运行时,却报错不能运行
- 在windows直接运行Qt编译出来的可执行程序出现了如下提示错误: this application has requested the runtime to terminate it an unu