安装 MPICH2 + vs2010 in win7 or win10

2016/11/17 09:14
阅读数 1.7K

     通过安装MPICH构建MPI编程环境,从而进行并行程序的开发。MPICH是MPI(Message-Passing Interface)的一个应用实现,支持最新的MPI-2接口标准,是用于并行运算的工具。MPICH的开发与MPI规范的制订是同步进行的,因此MPICH最能反映MPI的变化和发展。

    open mpi 和mpich都是mpi的应用。它们都是采用MPI标准,在并行计算中,实现节点间通信的开源软件。各自有各自的函数,指令和库。而MPICH2是MPICH的一个版本。(一般来说,open mpi 更适合Mac,mpich更适合linux。)

『win10:【教程】http://blog.csdn.net/wr132/article/details/48285789

【共享网盘:安装包32-64】http://pan.baidu.com/s/1qWGFXQs』   

win7中安装软件都需要管理员权限,而在安装MPICH2的时候需要始终以同一个用户以管理员的身份安装。否则, mpiexec在具体执行的时候,会出现要求要求管理员权限的错误。

    MPICH2下载地址:http://www.mcs.anl.gov/research/projects/mpich2/

    win7下smpd.exe这个组件没有自动运行安装,需要你在管理员的账户下运行,进行安装注册。方法就是:以管理员身份运行cmd,改变路径到到MPICH2的路径下找bin,进入之后,smpd -install -phrase pwd;

配置过程

后面具体的配置过程在网上可以找到,记录一下:

1)然后用VS创建一个C++的Win32控制台空项目,加入你的资源文件。
2)打开项目属性对话框。
3)进入配置属性
1>配置为Debug和Release的时候,“C/C++”选项卡里面的“代码生成”选项卡,选择“运行时库”为“多线程(/MT)”;
2>配置为所有配置的时候,“C/C++”选项卡里面的“常规”选项卡,为“附加包含目录”加入目录“C:\Program Files\MPICH2\Include”;
3>配置为所有配置的时候,“链接器”选项卡里面的“常规”选项卡,为“附加库目录”加入目录“C:\Program Files\MPICH2\Lib”;
4>配置为所有配置的时候,“链接器”选项卡里面的“命令行”选项卡,为“附加选项”加入“mpi.lib fmpich2.lib”。
5>配置为Debug的时候,“链接器”选项卡里面的“命令行”选项卡,为“附加选项”加入“cxxd.lib”;
6>配置为Release的时候,“链接器”选项卡里面的“命令行”选项卡,为“附加选项”加入“cxx.lib”。
7>上面库文件中mpi.lib是用于C语言库,cxx.lib是用于C++语言库(cxxd.lib是debug版本),fmpich2.lib是用于Fortran语言库,可根据使用情况相应增减。
8>进入常规->(项目默认值)MFC的使用,右边选择->在静态库中使用 MFC,可使生成的.exe文件拷贝到其它电脑也能单独运行。
4)配置完成,可以编译并运行你的并行程序了。

这个过程在官网上也有说明:

http://www.mcs.anl.gov/research/projects/mpich2/documentation/files/mpich2-1.3.2-windevguide.pdf

    最后,由于mpiexec执行是通过port进行线程间交换数据的,所以如果遇到问题,还要注意配置防火墙配置。除了一些第三方防火墙,比如360防火墙要设置外,也不要设置windows自身带的防火墙。如果不会设置,最简单的方法就是将防火墙统统关闭。在不使用mpiexec的时候再打开防火墙。

问题:未解析外部符号“符号”
              代码引用链接器在库和目标文件中找不到的东西(如函数,变量或标签)。

http://blog.csdn.net/tianguokaka/article/details/43409707

该网友基本上讲的是他在使用MFC函数库时与默认库冲突了,所以要先链接(在链接器配置)你要使用的。

然后我又查了一下什么样的冲突,可能是两个库存在使用相同名称的函数等,产生使用时指代不明或不能实现相应效果,【http://bbs.csdn.net/topics/120098536】里面有人建议使用bll动态库,或者重新包装库,或者使用函数指针加载并执行(即每次使用函数时都要指明出处)、或者只用名字空间。

然后又查了一下MFC,有人问::作用,有人答:::取全局作用域,对于MFC而言加了的是调用win api,不加的是调用mfc的库。一般调用win api的参数中会多个窗口或者DC句柄。

简单的测试代码:

#include "mpi.h"
#include <cstdio>
#include < math.h>

int main(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," Process %d of %d SAY HELLO TO MPI on %s\n",
myid, numprocs, processor_name);

MPI_Finalize();/**//*结束*/
return 0;

}

 

附:【http://stackoverflow.com/questions/2427399/mpich-vs-openmpi

    一个关于MPICH的常见投诉是它不支持InfiniBand,而OpenMPI则不支持。 然而,MVAPICH和英特尔MPI(两者都是MPICH衍生产品)支持InfiniBand,因此如果有人愿意将MPICH定义为“MPICH及其衍生产品”,则MPICH具有极其广泛的网络支持,包括InfiniBand和专有 互连如Cray Seastar,Gemini和Aries以及IBM Blue Gene(/ L,/ P和/ Q)。 OpenMPI也支持Cray Gemini,但它不是Cray不支持的。 最近,MPICH通过netmod支持InfiniBand,但MVAPICH2具有广泛的优化,使其成为几乎所有情况下的首选实现。

    MPICH已经是MPI标准的每个单独版本的第一个实现,从MPI-1到MPI-3。 OpenMPI最近只支持MPI-3,我发现一些平台上的一些MPI-3功能是有缺陷的。 此外,OpenMPI仍然没有对MPI_THREAD_MULTIPLE的整体支持,这对于某些应用程序至关重要。 它可能在某些平台上支持,但通常不能假定工作。 另一方面,MPICH已经对MPI_THREAD_MULTIPLE已经有多年的整体支持。

    平台评估

1.  Mac OS:OpenMPI和MPICH都应该工作正常。 如果你想要一个支持所有MPI-3或MPI_THREAD_MULTIPLE的发行版本,你可能需要MPICH。 如果你在Mac笔记本电脑上运行,绝对没有理由考虑MPI性能。

2.  Linux与共享内存:OpenMPI和MPICH应该工作很好。 如果你想要一个支持所有MPI-3或MPI_THREAD_MULTIPLE的发行版本,你可能需要MPICH。 我不知道两个实现之间的任何显着的性能差异。 如果操作系统允许,它们都支持单拷贝优化。

3.  Linux与Mellanox InfiniBand:使用OpenMPI或MVAPICH2。 如果你想要一个支持所有MPI-3或MPI_THREAD_MULTIPLE的发行版本,你需要MVAPICH2。 我发现MVAPICH2性能非常好,但没有与InfiniBand上的OpenMPI进行直接比较,部分是因为性能对我最重要的功能(RMA aka单方面)已经在OpenMPI中每次我尝试 使用它们。

4.  Linux与Intel / Qlogic True Scale InfiniBand:我没有在这方面的OpenMPI的任何经验,但基于MPICH的英特尔MPI是这个网络的支持产品,MVAPICH2也支持它。

5.  Cray或IBM超级计算机:MPI在这些机器上自动安装,并且在两种情况下都基于MPICH。

6.  Windows:除了通过Linux虚拟机之外,我在Windows上运行MPI绝对没有意义,但是Microsoft MPI和Intel MPI都支持Windows并且基于MPICH。

    两者都是标准兼容的,所以从正确的角度来看,你使用哪一个都不要紧。 除非有一些功能,如特定的调试扩展,你需要,然后基准和选择哪一个更快你的应用程序的硬件上。 还要考虑有其他MPI实现可能提供更好的性能或兼容性,例如MVAPICH(可以有最好的InfiniBand性能)或英特尔MPI(广泛支持的ISV)。    

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部