在 VS22 中,OpenMP 仍为 2.0 版本。可以更新到5.0或者至少3.0吗?我还没有在 VS22 安装程序中找到任何允许这样做的选项。
很长一段时间,MSVC 使用自己的运行时,但现在已经完全过时了,因为它只支持 2002 年发布的 OpenMP 2.0。从 Visual Studio 2019 版本 16.9 开始,MSCV 现在支持 LLVM 的 OpenMP 运行时库(
libomp
也被 ICC 使用)一个新的后端。您可以使用旨在支持 OpenMP 3.1(2011 年发布)的标志 /openmp:llvm
来启用它。您还可以使用标志 /openmp:experimental
来使用 OpenMP 4.5 的某些功能(通常是任务,尽管这是最具实验性的部分)。尚不支持卸载功能(例如在 GPU 上)。 OpenMP 5.0 的支持尚未计划。欲了解更多信息,请阅读此。
正如 @Laci 在评论中指出的,另一种解决方案是使用 Clang-cl 编译器,以便从 Visual Studio 中相对完整的 OpenMP 支持中受益。请注意,使用 Clang-cl 而不是默认编译器可能会导致一些不兼容性(尤其是对于大型代码)。例如,Clang 尚不支持某些 C++17/C++20 功能,例如并行 STL、多态分配器或一些高级原子功能(与 MSVC 相对)。您可以在此处获取有关每个编译器对 C++ 功能的支持的更多信息。
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那就太好了,谢谢!