并行编程我的第一个

来源:互联网 发布:携程数据分析师笔试题 编辑:程序博客网 时间:2024/04/20 02:08
MPI开发包下载

网上搜索下载MPICH2地址http://www-unix.mcs.anl.gov/mpi/mpich2/

MPI开发包安装

       下载完毕,开始安装MPICH2开发包,提示需要.NET 1.1 框架。鉴于本人对VS.NET 2003爱好,直接安装了整个开发环境,也可以只安装.NET框架。可以到微软官方网站下载安装包(http://msdn.microsoft.com/netframework/downloads/framework1_1/)。安装.NET框架后便可以安装MPICH2开发包。安装后可以看到MPICH2目录层次:

环境配置

       “我的电脑”path中设置MPICH2的bin目录(%MPICH2%\bin)以便运行mpiexec程序。我的具体设置如下:

       VC6开发环境中包含MPICH2开发包的include目录和lib目录。具体步骤:打开VC6,选择”Tools->Options”,在弹出的“Options”对话框中选择Directories选项卡,分别设置如下图:

(设置Include目录%MPICH2%/include)

(设置Lib目录%MPICH2%/LIB)

       MPICH2环境配置。运行%MPICH2%/LIB下wmpiregister,在注册界面输入本机器用户名和密码以便mpiexec运行程序。

开发第一个程序“Hello World”

       经过上面的步骤,MPICH2开发环境已经建立好,下面便可以步入MPICH2的大殿了。开始最简单也是最经典程序“Hello World”,在过程中倒是遇到不少麻烦。

       打开VC6,建立一个控制台应用程序,如下图:

       依照课本,包含头文件且把代码敲入main函数中。

       #include "mpi.h"

#include <cstdio>

int main(int argc, char* argv[])

{

      

       MPI_Init(&argc, &argv);

       printf("Hello World!\n");

       MPI_Finalize();

       return 0;

}

       编译程序,发现出现很多编译错误,一时间不知道怎么办好。在细看错误,都是一些函数重载错误。原本想修改代码,但是没有全部源代码。再进一步,发现全部是mpicxx.h文件导致的错误,于是想是否MPI_Init等函数与此文件有关。通过搜索包含文字,发现MPI_Init等函数只在mpi.h中定义,于是想办法不包含mpicxx.h文件以避开问题。在mpi.h中发现代码:

#if !defined(MPICH_SKIP_MPICXX)

#include "mpicxx.h"

#endif

#endif

这下有办法,在程序中定义宏MPICH_SKIP_MPICXX,然后重新编译程序(注意在包含mpi.h前定义)。哈哈,果然避开了mpicxx.h文件,有出现几个为定义错误,包含Lib文件就OK!如下图:

       有个建议,既然包含头文件必须连接库的话,可以在头文件中指定库。本人在开发过程中一直这样做,感觉很好。这样可以避免入门者不会设定库。

       下面是运行。运行命令行,输入:

E:\MyProject\MPIPractice\HelloWorld\Debug>mpiexec -np 4 helloworld

输出结果:

Hello World!

Hello World!

Hello World!

Hello World!

这样便完成第一个MPI程序,下面的任务就是依据并行算法思想解决复杂问题,留带大家自己解决。

原创粉丝点击