笔者因项目需求,需要做Fortran77代码的MPI并行,因此在 WIN10 下安装了 VS2017 和 Intel Parallel Studio XE 2018 Update 3 Cluster Edition for Windows(以下简称IVF2018Cluster) ,并做相应配置,最终以MPI并行的Hello World程序单机环境运行验证。
IVF2018Cluster 版本已经包含 Intel 自家的 Fortran 编译器和 64位MPI 库,然后将其集成到 VS2017 集成开发环境中,最后在 VS2017 中编码、编译、运行。
本文主旨是为这段时间的学习做笔记记录与具体教程,相关说明如“为何简称为IVF2018”等皆放于文末,如需了解可先移步文末;关键配置步骤在3.5至3.9
1.2 建议安装到默认目录,以免环境变量什么的麻烦
1.3 等待安装完成,然后关闭 VS2017 ,否则后续装 IVF 时不能识别以致安装失败
3.1 打开 VS2017 ,新建一个项目
3.2 选择 Intel® Visual Fortran => Console Application =>Empty Project ,确定目录、解决方案名称、项目名,然后点击“确定”创建一个项目
3.3 因为MPI的配置是对每个项目都要做更改,不能全局更改,所以笔者自建了一个配置模板项目,需要的时候就直接复制使用。右键点击该项目,选择“属性”
3.4->3.6配置编译环境
3.4 在 Fortran => General => Additional Include Directories,添加 Intel MPI 的包含目录 C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2018.3.210\windows\mpi\intel64\include 点击右下角的“应用“生效
3.5 在 Linker => General => Additional Library Directories,添加 Intel MPI 的库目录 C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2018.3.210\windows\mpi\intel64\lib 点击右下角的“应用“生效
3.6 在 Linker => Input => Additional Dependencies,添加附属依赖项 impi.lib 点击右下角的“应用“生效
3.7 在 配置管理器=>平台,选择“x64”平台(因为 Cluster 版只包含64位 MPI 库,如果是在 Intel 官网下载的 MPI 库,则兼有32位 MPI 库)
3.7->3.8配置调试环境
3.7 在 Debugging=>Command,添加mpiexec.exe的路径 C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2018.3.210\windows\mpi\intel64\bin\mpiexec.exe 点击右下角的“应用“生效
3.8 在 Debugging=>Command Arguments ,添加 -n 4 “$(TargetPath)” ,其中4为并行需要的进程数,可更改。点击右下角的“应用“生效
3.9 此外,MPI程序运行需要确保 hydra_service 服务已开启,且要进行用户授权
3.9.1 以管理员身份打开cmd,输入 hydra_service -status,回车,查看状态,如果是显示以下信息,说明该服务已启动
如果不是的话,重新启动或者重新安装它,具体可以直接输入 hydra_service 获取帮助,再相应输入命令行参数
一般初次安装并确认已启动的话,以后都会开机自启,只要不作死修改什么开机启动项啥啥啥的
3.9.2 要进行用户授权,同样以管理员身份打开cmd。输入 mpiexec -register,回车后提示输入账户与密码,然后键入当前Windows登录账户名与密码,再确认一遍密码,就将账户与密码存到注册表了
也可以直接输入 mpiexec ,看看后面的命令参数作用与怎么使用,篇幅过大就不放图了。
这里笔者碰到个问题,就是用自己登录电脑的账号密码注册后,在后面运行mpi程序时总是显示 Credentials for XXX rejected connecting to XXX ,搜了下说是登录信息不对。后来看到有帖子说只要本地上有一个管理员权限的账户就行,也不用登录它。于是笔者先在本地再新建一个用户并给它管理员权限,再用注册这个用户的账号密码,这时运行mpi程序就没问题了。如果有碰到这个问题的可以这么尝试一下,或者有谁知道该怎么解决的,也可以在评论里分享,万分感谢!
这里用MPI并行编程方式编写一段Fortran77代码,让各个进程都在显示器显示HelloWorld
program main
include "mpif.h"
character * (mpi_max_processor_name) processor_name
integer myid,numprocs,namelen,rc,ierr
call mpi_init(ierr)
call mpi_comm_rank(mpi_comm_world,myid,ierr)
call mpi_comm_size(mpi_comm_world,numprocs,ierr)
call mpi_get_processor_name(processor_name,namelen,ierr)
write(*,10) myid,numprocs,processor_name
10 format('hello,world!processor ',i2,' of ',i1,' on ',20a)
call mpi_finalize(rc)
end
然后点击 生成 => 生成项目,生成.exe可执行程序
直接点击 调试 => 开始执行(不调试),结果如下:
【这里是因为在前面3.7->3.8配置了调试环境,才能直接用VS的调试功能;如果没有做3.7->3.8的话,只能在命令行里手动输入,下面也给出命令行窗口执行方法:
在.exe可执行程序所在文件夹,空白处 shift+鼠标右键 ,然后点击打开Powershell窗口,再键入 mpiexec -n 4 可执行程序名 ,回车即可。这一方法对需要频繁更改并行进程数运行方便】
笔者去年上半年接到这个项目时,由于大学只学过C语言且很久没用过了,非常紧张,天天在网上搜相关资料,幸亏发现了一个很适合小白入门的Fortran网站 Fortran Coder,丰富的资料、资源,对求助一语中的的建议,都助我度过了前期那段艰难的入门阶段,真的是太感谢了。后来搭 MPI 并行环境时,也是在各个论坛到处搜索相关帖子,参考尝试,个中辛酸,到最终解决的一刻是真的欣慰,也算是接触学习了很多新的知识。但由于当时管理习惯不够好,曾搜到的网址方法无暇再翻寻,所以不再一一贴出,谨在此致以深深的谢意!