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

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

  • 安装Visual Studio 2022 Community
  • 安装oneAPI
  • 建立Fortran工程项目测试
    • 建立单核运行的Fortran运行算例
    • 建立并行运行的Fortran运行算例
  • 结语

安装Visual Studio 2022 Community

访问微软Visual Studio官网,下载社区版(Visual Studio Community)即可,不用破解,是免费版的。网址为https://visualstudio.microsoft.com/zh-hans/free-developer-offers/
微软官网
安装过程非常简单。此处不再赘述。如遇到问题,可以留言评论,笔者经常看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。如果还是下载不了,需要检查一下是否是浏览器把下载页面的弹窗页面给阻拦掉了,解除阻拦页面即可。
微软oneAPI页面
需要先安装oneAPI Base Toolkit,再安装oneAPI HPC Toolkit。
进入oneAPI Base Toolkit下载页面后。选择Windows系统;选择在线/离线安装都可以。在线安装的灵活度更大一些,可以自定义安装哪些组件;建议选择安装最新版本。
提示:不必注册后下载,点击下方不注册直接下载的链接就可以直接下载。
oneAPI base toolkit下载页面
进入oneAPI HPC Toolkit下载页面后,和上述选择一样。
oneAPI HPC Toolkit下载页面
安装过程非常简单,此处不再赘述。如遇到问题,可以留言评论,笔者经常看CSDN的。

建立Fortran工程项目测试

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

打开Visual Studio 2022,点击创建新项目
Visual Studio 2022
语言选择Fortran,新建Main Program Code,点击下一步
Fortran
配置新项目,本文工程文档较少,因此点选了将解决方案和项目放在同一目录中
配置新项目
点击下一步后,出现内置的Fortran示例代码。
Fortran内置示例代码
点击启动,就只会看到黑框闪一下,是因为运行完就退出了,建议在end program Console 1上一行加一行pause,这样运行结束后,会出现终端显示Hello World
在这里插入图片描述
随便敲击键盘一个按键即可退出终端。
此时可以验证Visual Studio的Fortran环境配置无误可以正常运行了。

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

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

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

和上述一样,先新建一个项目。本文新建项目Console2。
点击Visual Studio上方的项目>>属性,打开项目属性页对话框。
属性页
点击左侧Fortran>>General,点击右侧Additional Include Directories右侧的下拉三角,点击Edit...
Fortran General
输入oneAPI安装路径的include文件夹位置,点击OK

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

include文件
设置include
再点击左侧Linker>>General,点击右侧Additional Library Directories右侧的下拉三角,点击Edit...
Linker
输入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

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

impi.lib impicxx.lib

dependencies

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

mpif.h
再编辑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

点击运行
并行运行
此时已验证成功并行环境可以启动。下一步验证程序可以并行运行。
在程序文件夹路径下,新建文本文件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

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

结语

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/33138.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【java】HashMap扩容机制详解

文章目录 JDK1.7下的扩容机制JDK1.8下的扩容机制 JDK1.7下的扩容机制 JDK1.7下的resize()方法是这样的: void resize(int newCapacity) { Entry[] oldTable table; int oldCapacity oldTable.length; if (oldCapacity MAXIMUM_CAPACITY) { threshold Integer.…

git上传云效codeup

为了标识身份,建议先完成 Git 全局设置 git config --global user.name "xxx" git config --global user.email "xxxxxxqq.com" 1.删除本地 .git文件夹 2.云效上 添加库-新建代码库 3.在 git bash 里 按照 建好的代码库 下方的 命令行指引-…

无迹卡尔曼滤波在目标跟踪中的作用(一)

在前一节中,我们介绍了扩展卡尔曼滤波算法EKF在目标跟踪中的应用,其原理是 将非线性函数局部线性化,舍弃高阶泰勒项,只保留一次项 ,这就不可避免地会影响结果的准确性,除此以外,实际中要计算雅各…

美团动态线程池实践思路,开源了

使用线程池 ThreadPoolExecutor 过程中你是否有以下痛点呢? 1.代码中创建了一个 ThreadPoolExecutor,但是不知道那几个核心参数设置多少比较合适 2.凭经验设置参数值,上线后发现需要调整,改代码重启服务,非常麻烦 3.线…

TypeScript学习(一):快速入门

文章目录 一、TypeScript 简介1、TypeScript 是什么?2、TypeScript 与 JavaScript 的区别3、JavaScript 的缺点4、为什么使用 TypeScript 二、TypeScript 开发环境搭建1、下载Node.js2、安装Node.js3、使用npm全局安装TypeScript4、创建一个ts文件5、使用tsc对ts文件…

【资料分享】全志科技T507-H评估板规格书(4核ARM Cortex-A53,主频1.416GHz)

1 评估板简介 创龙科技TLT507-EVM是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53国产工业评估板,主频高达1.416GHz,由核心板和评估底板组成。核心板CPU、ROM、RAM、电源、晶振等所有器件均采用国产工业级方案,国产化率100%。同时&a…

Nexus如何导入jar以及批量导入Maven的本地库目录

前言 本篇基于 Nexus 的版本是 nexus-3.55.0-01本方法适用Linux和WindowsWindows 需要安装Git , 使用Git Bash执行 Nexus上传依赖包的方式 上传依赖包到Nexus 服务器的方式有多种, 包含: 单个jar上传: 在Nexus管理台页面上传单个jar源码编…

Thinkphp5分页后携带参数进行跳转传递

问题: 我在tp框架中写了一个图书详情分页的,代码如下: public function verify_details(){$sell_order_numinput(sell_order_num);$resDB::table(verif)->where(["sell_order_num">$sell_order_num])->paginate(10);// 模…

(三)灌溉系统WIFI通信部分

ESP8266 ESP8266S烧录器:CH430C arduino离线配置esp8266参考:参考文章 灯光闪烁就是烧录成功 ESP8266调试入门:参考文章 ESP8266调试:参考文章 人麻了已经,尝试半天了,AT指令没回应,尝试刷固…

【自监督论文阅读 4】BYOL

文章目录 一、摘要二、引言三、相关工作四、方法4.1 BYOL的描述4.2 Intuitions on BYOL’s behavior(BYOL行为的直觉)4.3 实验细节 五、实验评估5.1 Linear evaluation on ImageNet(ImageNet上的线性评估)5.2 Semi-supervised tra…

Office远程代码执行漏洞(CVE-2017-11882)漏洞复现

Office远程代码执行漏洞(CVE-2017-11882)漏洞复现 1.漏洞原理2.在Kali平台查看漏洞利用文件3.登录目标靶机,打开FTP服务器4.登录Kali,利用FTP服务器上传payload-cale.doc文件5.登录目标靶机,触发doc文件,验…

Angular 与 PDF之五 实现方式的选择与扩展

在纯web的前提下(不考虑移动端native),PDF的功能基本包括: 客户端PDF:最简单的场景,实现方式也很多,基本不需要有什么顾虑的地方,简单的实现可以参考系列第一篇文章。客户端PDF预览&…

华为战略方法论:BLM模型之差距分析(限制版)

目录 说明 差距类型 1、业绩差距 2、机会差距 3、对标差距 专栏列表 个人简介 说明 今天就来谈谈 BLM 模型中的第一把钥匙,也就是差距分析。 从本质上来看。 BLM 模型中的差距与你在日常生活中听到或用到的差距在意义都是一样的。 不同之处就在于问题的复…

网络安全(黑客)自学

建议一:黑客七个等级 黑客,对很多人来说充满诱惑力。很多人可以发现这门领域如同任何一门领域,越深入越敬畏,知识如海洋,黑客也存在一些等级,参考知道创宇 CEO ic(世界顶级黑客团队 0x557 成员&…

java Collection集合使用笔记

1、Collection集合概述 它是单例集合的最顶层接口,它表示一组对象,这些对象也称之为Collection的元素JDK不提供此接口任何直接实现,但提供更具体的子接口(如:List和Set)实现创建Collection集合对象的方法&…

Ant Design Vue 走马灯实现单页多张图片轮播

最近的项目有个需求是,这种单页多图一次滚动一张图片的轮播效果,项目组件库是antd、vue3 然而用了antd的走马灯是这样子的 我们可以看到官网给的api是没有这种功能,百度上也多是在css上动刀,那样也就毕竟繁琐了,我们是…

测试Hyperledger Fabric环境

首先进入fabric-samples目录中的first-networked 子目录 cd fabric-samples/first-network 在first-network目录下有一个自动化脚本byfn.sh,可以使用-help参数查看相应的可 用命令,在命令提示符中输入如下命令: ./byfn.sh --help命令执行成功后&#…

力扣 106. 从中序与后序遍历序列构造二叉树

题目来源:https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/description/ C题解:中序遍历是左中右,后序遍历是左右中,所以拿到两个遍历数组,我们可以从后序遍历获取中间节点…

西安石油大学期末考试C++真题解析

1、一、类型、返回值类型 二、参数表、函数重载 2、一、实例化 二、实例化的类型或类类是对象的蓝图,对象是类的实例化 3、const 4、一个 两个 5、一、公有继承 二、私有继承、保护继承 6、抽象类、实例化对象 7、函数模板、类模板 8、try、catch、throw 9、…

SpringBoot初始化接口CommandLineRunner

CommandLineRunner的使用 接口定义使用执行顺序使用 Order 注解实现Orderd接口排序总结 接口定义 Spring官方给出的接口定义 package org.springframework.boot;FunctionalInterface public interface CommandLineRunner {void run(String... args) throws Exception; }在 Sp…