自从失恋以来,很久没有写随笔,多谢大家对我鼓励,总觉得要写一点什么的,苦于学校压力和外面工作需要,时间甚少。这里先发关于上学期一门课程开发入门文章,是我自己写的。随后将推出一系列软件设计的文章,因为目前跟孙辉老师学技术,将拿出来和大家分享,也算是技术推广吧!
系统环境配置
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中设置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程序,下面的任务就是依据并行算法思想解决复杂问题,留带大家自己解决。
总结
耗费一下午重新安装系统和各种软件,大约一个小时编制及调试“Hello World”程序,尽管简单,但是毕竟对于MPI编程入门,感觉良好。耗费一小时书写文档,总结问题,以便其他同学遇到麻烦好解决,希望互相学习进步。
万连文
2005/10/19晚于寝室
posted on 2006-06-12 17:50
万连文 阅读(19171)
评论(42) 编辑 收藏 引用 所属分类:
乱七八糟