windows visual studio 2012下MPI并行环境搭建
2014-05-11 18:12
519 查看
因为课程作业的缘故需要编写并行计算的程序,准备写一下MPI程序,MPI的全称是Message
Passing Interface即标准消息传递界面,可以用于并行计算。MPI的具体实现一般采用MPICH。下面介绍如何在Windows 8系统下visual studio 2012中搭建MPI环境来编写MPI程序。
Pack 2012 SDK。然而在网上查找资料发现都是关于MPICH2的,所以又下载安装了这个,并根据博客的内容进行了配置。后文的结果是我写的hello
world程序能够成功运行,但前面安装了两次这个过程却给我后面工作带来了很大麻烦。
加入代码:
说明程序正确运行。但是从程序运行中看到只运行了一个进程,没有看到所谓的并行运算呀。别着急下一节进行介绍。
mpiexec -n 4 helloworld.exe
结果出现了下面的问题:
ERROR:unable to read the cmd header on the pmi context, Error = -1
stackoverflow上的大牛说明产生这个问题的原因在于系统中安装了两个版本的mpi,分别是c:\program files\mpich2\bin和c:\program
files\microsoft hpc pack 2012\bin.
根据上面的方法,我将hpc pack 2012卸载了(因为到处都是MPICH的使用,所以就卸载了微软提供的了),重新运行上面的命令,又产生了问题:
Please specify an authentication passphrase for smpd:
stackoverflow上提供的解决方法是使用wmpiregister进行注册,具体方法参考资料1中提供了,但仍然没有解决该问题。又卸载并重新安装了MPICH这次,直接提示没有mpiexec命令了。我猜想MPICH是由第三方库提供的,而hpc pack 2012是微软自己的东西,因此使用MPICH时需要进行一些环境上的配置,而hpc
pack 2012不需要,所以又卸载了MPICH并安装会pc pack 2012。这次再运行mpiexec命令竟然成功了!得到运行10次结果如下:
从上面结果还可以看出,系统调用不同线程的顺序由系统随机决定的,线程的结束时间无法确定。
一点感想:编程不光是个技术活也是个体力活,很多时候遇到一个问题需要不停的去google寻找解决方法,但我们平时遇到的大部分问题都是有很多人遇到过的,这个过程就要求我们不急不躁,仔细去查找前人的解决方案了。
Error = -1问题的解决方法:http://stackoverflow.com/questions/10977026/mpi-runtime-errorunable-to-read-the-cmd-header-on-the-pmi-context-error-1
authentication问题解决方法:http://stackoverflow.com/questions/13926882/please-specify-an-authentication-passphrase-for-smpd
Passing Interface即标准消息传递界面,可以用于并行计算。MPI的具体实现一般采用MPICH。下面介绍如何在Windows 8系统下visual studio 2012中搭建MPI环境来编写MPI程序。
安装MPI实现库
MPICH官网上给出了windows下的下载地址。可以看出链接到了微软的官网,根据我的版本下载并安装了HPCPack 2012 SDK。然而在网上查找资料发现都是关于MPICH2的,所以又下载安装了这个,并根据博客的内容进行了配置。后文的结果是我写的hello
world程序能够成功运行,但前面安装了两次这个过程却给我后面工作带来了很大麻烦。
实现第一个MPI程序
在visual studio 2012中新建控制台程序,配置mpi的include和Lib路径。打开应用程序属性->VC目录下进行更改。加入代码:
#include "stdafx.h" #include "mpi.h" #include <stdio.h> #include <math.h> #pragma comment (lib, "msmpi.lib") int _tmain(int argc, char* argv[]) { 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); fprintf(stderr, "Hello World! Process %d of %d on %s\n", myid, numprocs, processor_name); MPI_Finalize(); return 0; }运行得到:
说明程序正确运行。但是从程序运行中看到只运行了一个进程,没有看到所谓的并行运算呀。别着急下一节进行介绍。
MPI并行运算
使用控制台命令调用上面的helloworld.exe程序,得到并行运算结果。输入命令:mpiexec -n 4 helloworld.exe
结果出现了下面的问题:
ERROR:unable to read the cmd header on the pmi context, Error = -1
stackoverflow上的大牛说明产生这个问题的原因在于系统中安装了两个版本的mpi,分别是c:\program files\mpich2\bin和c:\program
files\microsoft hpc pack 2012\bin.
根据上面的方法,我将hpc pack 2012卸载了(因为到处都是MPICH的使用,所以就卸载了微软提供的了),重新运行上面的命令,又产生了问题:
Please specify an authentication passphrase for smpd:
stackoverflow上提供的解决方法是使用wmpiregister进行注册,具体方法参考资料1中提供了,但仍然没有解决该问题。又卸载并重新安装了MPICH这次,直接提示没有mpiexec命令了。我猜想MPICH是由第三方库提供的,而hpc pack 2012是微软自己的东西,因此使用MPICH时需要进行一些环境上的配置,而hpc
pack 2012不需要,所以又卸载了MPICH并安装会pc pack 2012。这次再运行mpiexec命令竟然成功了!得到运行10次结果如下:
从上面结果还可以看出,系统调用不同线程的顺序由系统随机决定的,线程的结束时间无法确定。
一点感想:编程不光是个技术活也是个体力活,很多时候遇到一个问题需要不停的去google寻找解决方法,但我们平时遇到的大部分问题都是有很多人遇到过的,这个过程就要求我们不急不躁,仔细去查找前人的解决方案了。
参考资料:
windows xp下配置MPICH:/article/1392207.htmlError = -1问题的解决方法:http://stackoverflow.com/questions/10977026/mpi-runtime-errorunable-to-read-the-cmd-header-on-the-pmi-context-error-1
authentication问题解决方法:http://stackoverflow.com/questions/13926882/please-specify-an-authentication-passphrase-for-smpd
相关文章推荐
- Windows 7系统下搭建MPI(并行计算)环境
- Windows系统下搭建MPI(并行计算)环境
- 并行环境搭建:Windows环境下的vs2013配置MPI
- Windows 7系统下搭建MPI(并行计算)环境
- Windows系统下搭建MPI(并行计算)环境
- Windows环境下Visual Studio 2012中搭建Cocos2d-x 3.1集成开发环境
- Windows系统下搭建MPI(并行计算)环境
- windows下Cocos2d-x3.2 + Visual Studio 2012开发环境搭建
- Ubuntu下搭建MPI并行计算环境
- Windows系统下搭建MPI(并行计算)环境<转>
- MPI并行计算环境搭建以及集群测试
- windows8 搭建MPI并行环境
- 用MDT 2012为企业部署windows 7(二)---基础环境搭建介绍
- OpenCV环境搭建(Windows+Visual studio)及Hello World
- Windows下MPI编程环境的搭建
- opencv入门学习之一:安装OpenCV 2.4.9和Visual Studio 2012开发环境的搭建
- windows2012core下php5.5兼容mssql数据库 (完美WASP环境搭建)
- Windows系统 为 Visual Studio软件 搭建 OpenCV2 开发环境
- Windows系统 为 Visual Studio软件 搭建 OpenCV2 开发环境