Windows11安装oneAPI和Visual Studio 2022配置Fortran并行环境

2301_81505962 2024-01-28 11:14:50

安装Visual Studio 2022 Community

访问微软Visual Studio官网,下载社区版(Visual Studio Community)即可,不用破解,是免费版的。网址为https://visualstudio.microsoft.com/zh-hans/free-developer-offers/

https://img-blog.csdnimg.cn/12dcf073c1c141518ae2573468e78de3.png#pic_center


安装过程非常简单。此处不再赘述。如遇到问题,可以留言评论,笔者经常看CSDN的。

安装oneAPI

访问微软oneAPI官网,网址为https://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/toolkits.html。注意,如果中文页面下载不了,可以右上角切换语言到USA(English),切换到英文页面,网址为https://www.intel.com/content/www/us/en/developer/tools/oneapi/toolkits.html。如果还是下载不了,需要检查一下是否是浏览器把下载页面的弹窗页面给阻拦掉了,解除阻拦页面即可。

https://img-blog.csdnimg.cn/247ac1e11ad44145b6641fb63dc7b465.png#pic_center


需要先安装oneAPI Base Toolkit,再安装oneAPI HPC Toolkit。 进入oneAPI Base Toolkit下载页面后。选择Windows系统;选择在线/离线安装都可以。在线安装的灵活度更大一些,可以自定义安装哪些组件;建议选择安装最新版本。 提示:不必注册后下载,点击下方不注册直接下载的链接就可以直接下载。

https://img-blog.csdnimg.cn/c034efd7e2474c32b153a59eacaab4f3.png#pic_center


进入oneAPI HPC Toolkit下载页面后,和上述选择一样。

https://img-blog.csdnimg.cn/a1e71f67a8f0477c836a9c0f3e0a3d25.png#pic_center


安装过程非常简单,此处不再赘述。如遇到问题,可以留言评论,笔者经常看CSDN的。

建立Fortran工程项目测试

建立单核运行的Fortran运行算例

打开Visual Studio 2022,点击创建新项目

https://img-blog.csdnimg.cn/ea38658ede9c43b0bdfb18f5ff98b3da.png#pic_center


语言选择Fortran,新建Main Program Code,点击下一步

https://img-blog.csdnimg.cn/50b09c4801bc4a188b3d2b28d5f59d41.png#pic_center


配置新项目,本文工程文档较少,因此点选了将解决方案和项目放在同一目录中

https://img-blog.csdnimg.cn/c91d3f8e2ab9443ea9ccf6163320d20d.png#pic_center


点击下一步后,出现内置的Fortran示例代码。

https://img-blog.csdnimg.cn/22713733226447b7919415f3e57363ed.png#pic_center


点击启动,就只会看到黑框闪一下,是因为运行完就退出了,建议在end program Console 1上一行加一行pause,这样运行结束后,会出现终端显示Hello World

https://img-blog.csdnimg.cn/e29241de59434a658bc1772a3242ec65.png#pic_center


随便敲击键盘一个按键即可退出终端。 此时可以验证Visual Studio的Fortran环境配置无误可以正常运行了。

此处将此文件代码粘贴到这里,以便建立空文件的读者直接验证程序。

program Console1
    implicit none
    print *, 'Hello World'
    pause
end program Console1

建立并行运行的Fortran运行算例

和上述一样,先新建一个项目。本文新建项目Console2。 点击Visual Studio上方的项目>>属性,打开项目属性页对话框。

https://img-blog.csdnimg.cn/f09edf311cd3407ba10b5e194a77b644.png#pic_center


点击左侧Fortran>>General,点击右侧Additional Include Directories右侧的下拉三角,点击Edit...

https://img-blog.csdnimg.cn/4d77d2f39c264f768d3136e60a3625d6.png#pic_center

 C:\Program Files (x86)\Intel\oneAPI\mpi\2021.9.0\include;
 C:\Program Files (x86)\Intel\oneAPI\mpi\2021.9.0\include\ilp64

https://img-blog.csdnimg.cn/88d98a04156f405a827e660b52bac931.png#pic_center

https://img-blog.csdnimg.cn/9b92cb9971aa4c81be71c3d1e1521f48.png#pic_center


再点击左侧Linker>>General,点击右侧Additional Library Directories右侧的下拉三角,点击Edit...

https://img-blog.csdnimg.cn/d018b3082c6f45128a369d8e164b8dd3.png#pic_center


输入oneAPI安装路径的lib文件夹位置,点击OK,点击

C:\Program Files (x86)\Intel\oneAPI\mpi\2021.9.0\lib;
C:\Program Files (x86)\Intel\oneAPI\mpi\2021.9.0\lib\debug

https://img-blog.csdnimg.cn/67601974868443afa7dcc3ac5014a815.png#pic_center

https://img-blog.csdnimg.cn/6067872b0855486297cffc6034b3d541.png#pic_center


再点击左侧Linker>>Input,点击右侧Additional Dependencies,输入

impi.lib impicxx.lib

https://img-blog.csdnimg.cn/61e3ee4f7b16416284ab2b344af2bf3e.png#pic_center

在右侧解决方案,项目Console2的Header Files右击,添加>现有项,输入oneAPI安装路径的include文件夹位置C:\Program Files (x86)\Intel\oneAPI\mpi\2021.9.0\include,右下方选择所有文件,选择添加文件mpif.h

https://img-blog.csdnimg.cn/bb6558d2715c4ca4abd116bf27ba3363.png#pic_center

https://img-blog.csdnimg.cn/e36bb1b62c6c4b4792d43a6ab3158870.png#pic_center


再编辑Console2.f90代码,输入以下测试算例。该测试算例为网络上找到的一段代码,因为忘记从哪里粘贴的了,所以未能给出源地址。

    PROGRAM hello_world_mpi
    include 'mpif.h'

    integer process_Rank, size_Of_Cluster, ierror

    call MPI_INIT(ierror)
    call MPI_COMM_SIZE(MPI_COMM_WORLD, size_Of_Cluster, ierror)
    call MPI_COMM_RANK(MPI_COMM_WORLD, process_Rank, ierror)

    print *, 'Hello World from process: ', process_Rank, 'of ', size_Of_Cluster

    if (process_Rank==0) then
        pause
    end if
  
    call MPI_FINALIZE(ierror)
    END PROGRAM

点击运行

https://img-blog.csdnimg.cn/b7f12d6e3574455e8c58ab65efd5309f.png#pic_center


此时已验证成功并行环境可以启动。下一步验证程序可以并行运行。 在程序文件夹路径下,新建文本文件runMpiExec_Debug.txt,输入以下内容

title %cd%
mpiexec -n 8 ./x64/Debug/Console2.exe
pause

保存后,将文件重命名为runMpiExec_Debug.bat,点击运行。

如果报错有类似如下信息:

[unset]: unable to decode hostport from b4272c0e-bc89-43ab-a94f-d3903edf303f
Abort(1090831) on node 0 (rank 0 in comm 0): Fatal error in PMPI_Init: Other MPI error, error stack:
MPIR_Init_thread(176):
MPID_Init(1437)......:
MPIR_pmi_init(118)...: PMI_Init returned -1
[unset]: write_line error; fd=-1 buf=:cmd=abort exitcode=1090831
:
system msg for write_line failure : No error
forrtl: severe (157): Program Exception - access violation
Image              PC                Routine            Line        Source
impi.dll           00007FFCCFF66BC4  Unknown               Unknown  Unknown
impi.dll           00007FFCCFFA045E  Unknown               Unknown  Unknown
impi.dll           00007FFCD078C3FC  Unknown               Unknown  Unknown
Console2.exe       00007FF728E31065  MAIN__                      6  Console2.f90
Console2.exe       00007FF728E3122B  Unknown               Unknown  Unknown
Console2.exe       00007FF728E319B9  Unknown               Unknown  Unknown
Console2.exe       00007FF728E318DE  Unknown               Unknown  Unknown
Console2.exe       00007FF728E3179E  Unknown               Unknown  Unknown
Console2.exe       00007FF728E31A2E  Unknown               Unknown  Unknown
KERNEL32.DLL       00007FFD25ED26AD  Unknown               Unknown  Unknown
ntdll.dll          00007FFD2752A9F8  Unknown               Unknown  Unknown

则表明Windows系统中默认的mpiexec不是oneAPI的mpiexec可执行文件。则需要指定mpiexec路径,需要修改runMpiExec_Debug.bat文件内容为

title %cd%
"C:\Program Files (x86)\Intel\oneAPI\mpi\2021.9.0\bin\mpiexec.exe" -n 8 ./x64/Debug/Console2.exe
pause

再次运行

https://img-blog.csdnimg.cn/517eb49dc3a14f7d86be198d58ea8960.png#pic_center


表明程序成功开启并行环境,进行了8进程并行运行。

结语

此为笔者历时很久探索出来的,比较可靠、稳定在Windows11系统下配置oneAPI并行环境,进行Fortran并行程序开发(C++并行程序开发应该也没问题)的步骤。终于腾出时间来写这篇博客,截图耗时耗力,昨晚搞了很久,今早打开草稿箱继续写。收到CSDN消息推送,一位陌生人评论我Visual Studio代码整体增加缩进或减少缩进博客文不对题,虽然我点进去后,发现评论已经删掉了,但是良言一句三冬暖,恶语伤人六月寒,端午节前后正是北京最热的天气,我确实感受到了很大的寒意,直接就不想写这篇博文了。但是思来想去,可能是我那篇博文写的确实粗糙简陋,游客从百度搜过来,没有看清楚我表达了什么,所以随口评论的。恢复心情后,继续一鼓作气把这篇博客写完。希望读者不吝赐赞,遇到问题可以友好评论,我经常看CSDN的,可以一块讨论交流,不要再给博主泼冷水了。

补充(2024.01.09)

进行了测试,发现使用mpi环境可以直接use mpi,不必须再使用include ‘mpif.h’了。代码如下:

    PROGRAM main     
        use mpi     
        integer :: my_Process_ID !< 进程编号
        integer :: num_processes !< 所有进程
        integer :: ierror
         
        call MPI_INIT(ierror)
        call MPI_COMM_SIZE(MPI_COMM_WORLD, num_processes, ierror)
        call MPI_COMM_RANK(MPI_COMM_WORLD, my_Process_ID, ierror)
         
        print *, 'Hello World from process: ', my_Process_ID, 'of ', num_processes
        if (my_Process_ID==0) then
        pause
        end if
         
        call MPI_FINALIZE(ierror)
        END PROGRAM

补充注意事项(2024.01.09)

  • 2024.01.09 有小伙伴在调试中,识图移除“mpif.h”时,不小心点击了“移除并删除文件”,将mpi安装目录下的mpif.h文件删除了,不得不重新安装mpi环境。因此操作时请谨慎操作,选择“仅移除”,就不会删除安装目录下的mpif.h文件。或者按照我“补充(2024.01.09)”设置成use mpi也可以。

文章来源: https://blog.csdn.net/youshenfan/article/details/131388015
版权声明: 本文为博主原创文章,遵循CC 4.0 BY-SA 知识共享协议,转载请附上原文出处链接和本声明。


...全文
1531 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jamerri 2024-07-16
  • 打赏
  • 举报
回复

请问下这个问题如何解决?

img

生684 2024-07-17
  • 举报
回复
@jamerri 我也是这个问题,请问你解决了吗

6,749

社区成员

发帖
与我相关
我的任务
社区描述
微软技术社区为中国的开发者们提供一个技术干货传播平台,传递微软全球的技术和产品最新动态,分享各大技术方向的学习资源,同时也涵盖针对不同行业和场景的实践案例,希望可以全方位地帮助你获取更多知识和技能。
windowsmicrosoft 企业社区
社区管理员
  • 微软技术分享
  • 郑子铭
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

微软技术社区为中国的开发者们提供一个技术干货传播平台,传递微软全球的技术和产品最新动态,分享各大技术方向的学习资源,同时也涵盖针对不同行业和场景的实践案例,希望可以全方位地帮助你获取更多知识和技能。

予力众生,成就不凡!微软致力于用技术改变世界,助力企业实现数字化转型。

试试用AI创作助手写篇文章吧