1.关于MPI多机通信
一台计算机处理数据的能力是有限的,MPI的主要作用就是用来实现并行计算机,即将多台主机联机,实现大规模、高性能的计算机机群。我们知道一台计算机同时运行多个进程时,由于计算机资源是共享的,多个进程都会占用一些资源,每个进程运行的效率就会降低,比如当一台计算机同时跑着多个大型应用时会变得非常卡顿。所谓多机通信,可以理解为将本应该在同一台主机上运行的多个进程分配到多台主机上,以往多进程间的通信也就演变成多主机间的通信,就能同时利用多台主机的计算资源,从而提高计算效率。
2.选择MS-MPI的原因
就纯粹的多机通信来说,我更推荐使用Intel MPI,它对于初学者非常友好,Intel公司提供了很多开发资料,也有很多Sample。相对来说微软提供的关于MS-MPI的学习资料就没有那么多了,也可能是我没有找到的原因。我是在Windows系统上开发程序,在我的实践中,Intel MPI和OpenGL放到一起时,可以在本地模式下创建OpenGL窗口,在联机情况下却无法创建窗口,MPI程序和OpenGL程序分开来都能运行,这个问题困惑了我两周左右,在StackOverflow上提问也没有得到用之有效的解决办法,只能选择MS-MPI代替。但MS-MPI不愧是亲生的,完全支持MPI + OpenGL的开发框架,而且相对Intel MPI更轻量,开发更方便,这一点让我很欣慰,MS_MPI多机通信的实现过程中也有几个需要注意的点,下面会做介绍。
1)注意点1:环境配置
多机通信中,有些堪称苛刻的条件需要满足:这些主机必须使用相同的用户名(管理员权限)和相同的密码登录;同时MSMPI的安装路径也必须相同,MPI SDK的安装路径可以不同,这一点十分重要;另外在程序运行之前,必须将相同的程序复制到各个主机的相同路径下;然后,各个主机需要到MPI的bin目录下使用cmd命令执行smpd -d指令,该窗口要一直开着,不能关闭。
这一部分很重要,要确保都没有问题才可以,再总结一遍:
- 相同的用户名(管理员权限)和密码
- 相同的MPI安装路径
- 相同的程序,要放在相同的路径
- 同时开启smpd -d,窗口不能关闭
2)注意点2:网络配置
多机通信中,多个主机需要在同一局域网下,有相同的网络掩码。这个局域网可以是有线也可以是无线的。在我的实践中,我测的是两台主机之间的通信,使用我的个人手机发热点,分别得到两台主机的IP地址:192.168.43.192和192.168.43.219。这在之后会用到。