【问题标题】:Update OpenMP to higher versions in Visual Studio 2022在 Visual Studio 2022 中将 OpenMP 更新到更高版本
【发布时间】:2022-08-03 01:27:09
【问题描述】:

在 VS22 中,OpenMP 仍然是 2.0 版本。是否可以将其更新到 5.0 或至少 3.0?我还没有设法在 VS22 安装程序中找到任何允许这样做的选项。

  • 您可以在具有 OpenMP 5.0 的 Visual Studio 2022 中使用 LLVM (clang-cl) 编译器。为此,请在安装程序中选择“C++ Clang tools for windows”选项。
  • @Laci 我可以在不卸载clang的情况下在编译器之间切换吗?
  • 当然,只需更改“常规属性/平台工具集”即可。

标签: visual-studio openmp updates visual-studio-2022 vsinstaller


【解决方案1】:

很长一段时间以来,MSVC 都使用自己的运行时,现在完全过时了,因为它只支持 20 年前发布的 OpenMP 2.0。从最近开始,MSCV 现在支持 LLVM 运行时(ICC 也使用 libomp)作为新的后端。您可以使用标志 /openmp:llvm 启用它,以支持 OpenMP 3.1(11 年前发布)。您还可以使用/openmp:experimental,以便能够使用 OpenMP 4.5 的某些功能(通常是任务,尽管这是最具实验性的部分)。尚不支持卸载功能(例如在 GPU 上)。尚未计划对 OpenMP 5.0 的支持。欲了解更多信息,请阅读this

正如@Laci 在 cmets 中指出的那样,另一种解决方案是使用 Clang-cl 编译器,以便从 Visual Studio 中相对完整的 OpenMP 支持中受益。请注意,使用 Clang-cl 代替默认编译器可能会导致一些不兼容(尤其是对于大型代码)。例如,Clang 还不支持某些 C++17/C++20 特性,如并行 STL、多态分配器或一些高级原子特性(与 MSVC 不同)。您可以获取有关每个编译器 here 的 C++ 功能支持的更多信息。

【讨论】:

  • 我尝试了这些选项来启用对任务分配在 OpenMP 中,因为编译器明确需要这些选项。问题是,启用这些选项并且代码中存在任务指令后,编译就会崩溃C1001:内部编译器错误.如果我不应用任务分配,情况并非如此。另外,我到底在做什么并不重要,它可以是一大块几乎是空的代码,错误是一样的。
  • 检查thisthis,它告诉“已添加对#pragma omp task 的有限支持,但不能保证关于任务杂注的条款有效。”
【解决方案2】:

Visual Studio 2022(版本 17.3)支持 OpenMP 3.1 中的所有任务构造和大多数其他功能。见相关博客:https://devblogs.microsoft.com/cppblog/category/openmp/ 支持仍处于试验阶段,libomp140* 运行时还不是 redist 的一部分。 @kaiyakha:如果您可以在这里为编译器崩溃开一张票:https://developercommunity.visualstudio.com/search?space=62&entry=problem 那太好了,谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 2018-04-14
    • 2017-10-06
    • 2022-01-20
    • 2015-01-04
    • 2022-08-05
    • 2022-10-15
    相关资源
    最近更新 更多