并行编程--MPI开发入门

并行编程--MPI开发入门
自从失恋以来,很久没有写随笔,多谢大家对我鼓励,总觉得要写一点什么的,苦于学校压力和外面工作需要,时间甚少。这里先发关于上学期一门课程开发入门文章,是我自己写的。随后将推出一系列软件设计的文章,因为目前跟孙辉老师学技术,将拿出来和大家分享,也算是技术推广吧!

系统环境配置

Win2K Adv Svr + VC6

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中设置MPICH2bin目录(%MPICH2%\bin)以便运行mpiexec程序。我的具体设置如下:

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

(设置Include目录%MPICH2%/include

(设置Lib目录%MPICH2%/LIB

       MPICH2环境配置。运行%MPICH2%/LIBwmpiregister,在注册界面输入本机器用户名和密码以便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程序,下面的任务就是依据并行算法思想解决复杂问题,留带大家自己解决。

总结

       耗费一下午重新安装系统和各种软件,大约一个小时编制及调试“Hello World”程序,尽管简单,但是毕竟对于MPI编程入门,感觉良好。耗费一小时书写文档,总结问题,以便其他同学遇到麻烦好解决,希望互相学习进步。

 

万连文

2005/10/19 晚于寝室

你可能感兴趣的:(并行编程--MPI开发入门)