MPI(MessagePassing Interface)标准消息传递界面,主要是用于并行计算,或者用现在很流行的名词,大数据计算、分布式计算系统,其具体实现方式一般是使用MPICH。新瓶装旧酒而已,下面主要说说在Win7系统下VS2012中搭建MPI环境和编写MPI程序。
一、安装MPICH2
mpich2-1.4.1p1-win-ia32.msi下载地址
安装好了后需注册一个用户,我猜测因为是分布式计算,肯定会涉及到很多台主机,故需要一个标志来识别,注册完了之后可以自行测试一下。(可参见http://blog.csdn.net/morewindows/article/details/6823436的1.1部分)
二、一劳永逸修改Include和lib的方法
参考http://www.cnblogs.com/hwangbae/archive/2012/06/24/2560463.html,个人觉得方法二比较好,因为方案一只能对新建的程序有效,但是该博主使用了两个版本的VS,所以需要新建两个文件夹(不过为了保险起见,还是给这种文件做个备份比较好,或者记录为了什么而修改过什么,不然重装个vs也挺蛋疼的)。针对只有VS2012的同学可以使用解决方案一中编辑default.vcxproj的方法编辑Microsoft.Cpp.Win32.user.props即可。这里我使用了方案一,至于为什么,因为最开始看的它照着弄的,之后就懒得改了。。。
三、First MPI Program
这里我使用的是http://blog.csdn.net/morewindows/article/details/6823436的代码,比较懒。。。(打了这么多广告,是不是该收点广告费呢,哈哈哈哈)。在VS中成功Build,Run了一下会一闪而过,在return 0前面加上getchar()之后发现只有一行,当然是因为你只有一台机子,没法并行。所以需要多台电脑协同运行MPI,具体方法我没事,也可以查看本小节提及网址里的第三部分。这里我想在一台机子上用多线程模拟出多个主机,毕竟写个代码要好几台电脑也很麻烦,更别说怎么去弄那第二台了。
四、MPI并行计算
想要多线程运行写出来的程序,有两种办法,一种是找到安装目录下的wmpiexec.exe,然后跟第一步中所说的测试程序一样运行,这样。。。太弱智了,而且明显不符合Coder的逼格,当然是要用敲命令才更好了!!可以在C盘新建一个sbin(名字和地址随意),然后把mpiexec.exe拷到这个文件夹,再新增path环境变量,后面加上C:\sbin,注意要跟前面的有分号隔开。照理说应该可以直接将mpiexec.exe的原始路径新增到path中,不过在我这儿试了很多次都不行。
照上面说的做完了之后,打开cmd,直接敲mpiexec就会出现一些类似于帮助菜单的东西。我所知道的运行你所写代码的exe程序的命令是:
mpiexec -n 4“exe文件路径”(这里路径要包括你所想run程序的名字+.exe,那个4是你想开的线程数),暂时就写这么多了,一晚上两个小时就是折腾这东西然后写篇日志了,也不知道传说中的写技术博客可以增长姿势是真的了。
第一次写博客,第一次写MPI,哎,不归路啊不归路。
五、可能的错误及其他资料
查资料的过程中看到一个博主出现了下面的错误:
ERROR:unable to read the cmd header on the pmi context, Error = -1
所幸我没出现过这么蛋疼的事情,这里贴出他的网站,也给自己备用。接下来就是一些比较好的资料网站,留一下。
1. MPICH2简单的安装配置总结(Linux环境下)
http://blog.csdn.net/cleverysm/article/details/1638651
2.mpich2用户手册
http://www.tuicool.com/articles/U3YfM3
3. 分布式并行库MPICH2安装(VMware10, ubuntu14.04)
http://jacoxu.com/?p=936