write By csmathboy
虽然推荐的MPI使用环境是Linux,配置方便并且有诸多强大的工具可以使用,但是对广大的研究人员和学生而言对Linux的了解并不是很多,又可能没有充足的时间和具体的打算进行系统的学习。然而对Windows系统,本身一个商业化性质很浓的系统在用户体验方面做了较多的努力,虽然可能没有足够的专业强大的工具,但在易用性上的便利是不容忽视的。考虑到上述情况,给出Windows下MPI环境的搭建方法及MPI程序的编写、编译连接及运行是十分有必要的。笔者也将在后面的示例中在Windows下完成绝大多数的操作。大致步骤及说明如下:
1) 编译器
推荐使用gcc/g++,虽然也可以使用诸如VC++ 6.0的编译器CL,但是考虑到最终代码可能要在Linux机群下运行,使用gcc保证了这种平台无关性。在Windows下使用gcc,可以通过安装Cygwin、Mingw以及DEV C++这三个免费软件包之一来获取,其中DEV C++包含Mingw32。考虑到DEV C++的流行,我们这里通过安装DEV C++获取Windows下的gcc支持。你可以容易的在网络上找到一份DEV C++的安装拷贝并安装到自己的Windows系统上,这里我安装到D:/Program Files/DEV-CPP下。
2) MPICH
你需要安装MPICH,这里选择MPICH2,可以到官方网站上免费获取安装映像,这里使用mpich2- 1.0.7-win32-ia32.msi并安装到D:/Program Files/MPICH2下。
3) IDE
在Windows下你当然可以选择VC++ 6.0,但是会逐渐发现针对MPI程序设计的诸多不便之处,对每一个程序需要完整的工作空间,配置环境变量和重复性的连接包含库的配置等,这样使得可以在VC中编译MPI程序,要运行还需要在命令行中使用mpiexec手动启动,十分的不方面。DEV C++也有类似的问题。
这里我选择Notepad++来做MPI程序设计的IDE,本身Notepad++作为一个记事本扩展具有不少漂亮的功能,至少语法着色和自动缩进的功能是不缺乏的,同时更重要的是,Notepad++提供了不少使用的插件,比如Function List和NppExec。NppExec是一个重要的扩展,很类似于DOS的批处理,同时提供的宏替换使得可以方面的通过命令行调用外部的丰富的工具来扩展Notepad++的功能,比如调用外部编译器和几乎所有DOS命令等,这使得把Notepad++作为一个MPI开发环境成为可能。你可以安装Notepadd++或者简单的寻找其可用的绿色版,其中NppExec的具体用法可以参加Notepad++文件目录下的plugins/doc/NppExec.txt文件。
把如下的命令保存为Link & Run(np4)(MPICH2)(g++)(Dos)则可以在编辑完代码后简单的通过F6键实现MPI程序的编译连接和运行:
npp_save
npp_run cmd /c "del $(CURRENT_DIRECTORY)/$(NAME_PART).exe"
D:/PROGRA~1/DEV-CPP/Bin/g++ $(FULL_CURRENT_PATH) -ID:/PROGRA~1/MPICH2/include -LD:/PROGRA~1/MPICH2/lib -lmpi -o $(CURRENT_DIRECTORY)/$(NAME_PART).exe
npp_run cmd /k "if exist $(CURRENT_DIRECTORY)/$(NAME_PART).exe (D:/PROGRA~1/MPICH2/bin/mpiexec -n 4 -localonly $(CURRENT_DIRECTORY)/$(NAME_PART).exe) else (@echo Commpile or Linking failed...Please Check!!)"
命令的第一行是保存当前打开的文档,第二行是通过调用DOS命令删除可执行文件,第三行调用DEV C++中的g++编译器编译代码,具体参数可以找g++参考,最后一行是调用外部DOS命令行检测是否存在可执行文件,如果存在表明编译连接成功则通过mpiexec默认在本地用4个进程运行程序(这里如果需要传入参数的话可以在适当的位置添加),否则提示出错。命令的具体用法可以参考NppExec的介绍。
至此你已经完成Windows下MPI编程环境的搭建,可以尝试用Notepad++编译运行一些简单的MPI程序,体会命令行
的强大力量了。
(1)在安装MPICH2时,系统会提示我没有安装Visual Studio2005 SP1 C Runtime(x86)的更新文件,只要在Google上搜索其名称,在微软网站上下载安装就可,然后在点击安装MPICH2。
(2)一定要把写的代码另存为后再运行(另存为的目录名一定不能空格:如E:/Program Files/Source.c;这样会造成第三句中的g $(FULL_CURRENT_PATH)被替换成g E:/Program Files/Source.c,这样在命令行中Program与Files/Source.c中间有空格,造成命令行运行出错)。如不另存为,系统自动保存为E:/Program Files/Notepad /localization/new 1,这样也会出现空格。