知道MPI这个名词是靠博客里面一位网友,在我的蚁群算法文章里面他问我是否有用MPI实现过相类似的算法,在此谢谢这个网友,下面讲讲我在了解和学习MPI过程中遇到的问题。
首先,学习的最好地方自然是MPI的官方网站,http://www-unix.mcs.anl.gov/mpi/ 这里介绍了MPI的来源,目的,如何学习以及MPI标准,这部分有兴趣可以直接看官网,我就不详述了,现在重点说的MPICH2,它是MPI的一个实现版 本,官网是http://www.mcs.anl.gov/research/projects/mpich2/,官网上有一些安装和配置文档非常值得认 真的看一看,我使用的是UBUNTU8.10,虽然有官方安装文档,但我的安装过程却并不是一帆风顺的,后面总结了一下,是因为有些开发包没有安装完 全,ubuntu默认是不安装开发包的,build-essential这个包是一定要安装的,这包里面含GCC等各类编译器及相关的库文件。
下面是配置方法:
首先:从MPICH2官网下载源代码,http://www.mcs.anl.gov/research/projects/mpich2 /downloads/tarballs/1.0.8/mpich2-1.0.8.tar.gz 目前最新的是1.0.8,当然如果你使用的windows平台也可以下载http://www.mcs.anl.gov/research /projects/mpich2/downloads/tarballs/1.0.8/mpich2-1.0.8-win-ia32.msi,以及 http://www.mcs.anl.gov/research/projects/mpich2/documentation/files/mpich2-1.0.8-windevguide.pdf 这是windows平台下的开发文档。
然后,将mpich2-1.0.8.tar.gz解压你愿意的任何目录,我放在了我的用户目录/home/jack/mpich2-1.0.8中,进入 mpich2-1.0.8目录,运行 ./configure (虽然安装文档上说源码目录和安装目录最好不要是一个,但我编译没有什么问题,暂时也就不管了), 如果想看安装日志 可以使用sudo ./configure >log (运行完成后打开LOG文件就行了),如果第一步没有问题,再运行sudo make, 最后运行sudo make install 这就大功造成了。很容易吧,唯一要注意的就是各种开发包一定要安装全。
接着运行一下测试程序吧.
C程序用 mpicc编译,C++程序用mpicxx编译
下面代码是C程序所以用:mpicc -o hello hello.c
启动并行环境 mpdboot
第一次使用这个命令时,可能会出现错误,执行以下代码
cd ~
touch .mpd.conf //这是修改mpd配置文件的时间戳
chmod 600 .mpd.conf //这是修改配置文件的权限
然后运行 mpdboot 即可。
运行程序: mpirun -np 4 ./hello
-np 是指用几个进程模拟运行,这里用4个
/*出现如下的错误*/
1. no mpd is running on this host
2. an mpd is running but was started without a "console" (-n option)
In case 1, you can start an mpd on this host with:
mpd &
and you will be able to run jobs just on this host.
For more details on starting mpds on a set of hosts, see
the MPICH2 Installation Guide.
输入如下可解决:
# mpd &
再次输入如下:
# mpirun -np 4 ./hello
可得如下输出结果: (下面结果每台机器可能都不一样,是正常的)
Hello World! Process 1 of 4 on jack-laptop
Hello World! Process 3 of 4 on jack-laptop
Hello World! Process 2 of 4 on jack-laptop
Hello World! Process 0 of 4 on jack-laptop
想停止并行运行环境
mpdcleanup