因为要上并行计算的课,需要使用MPI进行并行计算程序制作,但是网上能搜到的最新的教程也就是win7 +vs2012,貌似没有找到windows10 + vs2015的,所以,今天给大家详细介绍一下安装及配置方法。
1.当然是下载MPICH,官方网址是www.mpich.org,这个网站是全英文的,我直接告诉大家怎样下载
(3)这里可以看到,有32位和64位兼容版,这里因为我的电脑是64位,VS也是64位的,所以我下载的是64位兼容版
(4)如果大家还是搞不定,我这里也有共享的网盘,大家可以到这里下载http://pan.baidu.com/s/1qWGFXQs
2.接下来是创建Administrator账户,我们必须以管理员身份进行安装,但是对于原版的windows(非Ghost及其它非官方安装),Administrator账户默认是锁定的,所以我们先需要创建管理员账户
(1)右键 此电脑,点击管理,找到并展开本地用户和组,点击用户,可以看到许多账户,
(2)双击Administrator,可以看到账户被禁用,我们把这个勾去掉,点击确定
(3)然后我们点击开始按钮,点击最上面的用户,可以看到Administrator账户
(4)点击Administrator,并登录这个账户,第一次登陆比较慢
(5)如果你发现已经是Administrator账户了,那可以跳过上面几步
3.切换到Administrator账户后,我们就可以安装这个软件了,大家根据自己的平台选择合适的软件,进行安装
(1)直接全部都进行下一步就行了,中间会要求你输入一个密码,默认是behappy,这个密码被用来访问所有的smpd服务程序,而且这个软件很小,装在默认目录也没什么关系,而且可能减少不少麻烦
4.创建并配置你的MPI项目
(1)打开VisualStudio2015,新建VC++的win32 控制台应用程序
(2)右键项目,点击属性,首先找到VC++目录,点击右边的包含目录,可以看到右边有下拉箭头,点击并选择编辑,
(3)找到你的MPI的安装路径,选择安装路径下的include目录
(4)再找到VC++目录下的库目录,使用相同的方法,选择安装路径下的lib文件夹
(5)展开C/C++目录,点击预处理器,选择预处理器定义,使用相同的方法添加 MPICH_SKIP_MPICXX 这一项
(6)选择预处理器下面的代码生成,点击运行库,选择 多线程调试 (/MTd)
(7)展开连接器,选择输入,点击附加依赖库,使用同样的方法田间mpi.lib 项
(8)这时候如果是32位环境下已经可以编译运行了,但是对于64位环境,还需要继续配置
(10)如果没有x64,在活动解决方案平台中选择新建,然后在弹出的对话框中填入信息
(12)现在应该在VS中就可以正常运行了
4.配置MPICH
(1)找到MPICH2目录下的wmpiregister,点击打开的
(2)在account中输入你的电脑的登陆用户名,这里是很纠结的一个地方,因为很多人是以微软账户登录的,解决方法就是用找到刚才启用Administrator账户的地方,找到你的本地账户用户名,然后再把你的Microsoft账户的密码填入password中,点击Register,再点击OK,当然,如果你知道你的本地用户名密码就最好了,实在不行就自行百度吧
(3)再打开wmpiconfig,以此点击Get Hosts,Scan Hosts 和Scan for versions,点击确定
(4)最后,你就可以用wmpiexec运行你的VS生成的可执行文件了,可以选择你的核心数量来模拟,这里我建议如果是单机模拟最好把网络断开,否则运行会很慢
提供一个MPI的hello world测试源码
<span style="font-size:24px;">#include "stdafx.h" #include "mpi.h" #include <stdio.h> #include <math.h> #include <Windows.h> int main(int argc, char* argv[]) { int myid, numproces; int namelen; char processor_name[MPI_MAX_PROCESSOR_NAME]; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &numproces); MPI_Get_processor_name(processor_name, &namelen); fprintf(stderr, "hello world! process %d of %d on %s\n", myid, numproces, processor_name); MPI_Finalize(); //system("pause"); return 0; }</span>