龙空技术网

VS2019: OpenMP更新及错误修复

漫漫开发路 122

前言:

而今你们对“编译openmp”大概比较关注,咱们都需要剖析一些“编译openmp”的相关文章。那么小编同时在网摘上搜集了一些有关“编译openmp””的相关内容,希望你们能喜欢,姐妹们快快来学习一下吧!

在我们之前的一篇有关OpenMP的文章中,我们宣布了在Visual Studio 2019 v16.9中添加了”-openmp:llvm”开关来启用面向x64架构的LLVM OpenMP运行时库的代码编译。这个编译开关支持-openmp开关所支持的OpenMP 2.0中的所有指令,同时还有一些额外的新特性,例如并行循环中的无符号整数复数,以及被-openmp:experimental开关锁支持的SIMD指令集的一个子集。另外,它还包含了一些错误修复。从Visual Studio 2019 v16.10 预览版2开始,-openmp:llvm开关将会同时支持x86和arm64平台。另外,我们在16.10 预览版3中也修复了一些Bug。

-openmp:llvm现已在x86和arm64平台上可用

从Visual Studio 2019 v16.10预览版2开始,除了对X64的支持外,我们还添加了针对x86和ARM64体系结构的LLVM的OpenMP运行时库的支持。当以x86或libomp140.aarch64.dll(或/DEBUG下的libomp140d.aarch64.dll)为目标时,使用-openmp:llvm进行编译将自动向libomp140.i386.dll(或/DEBUG下的libomp140d.i386.dll)添加动态链接。以ARM64为目标时。你可以在VC\Redist\MSVC\<版本>\debug_nonredist\\Microsoft.VC142.OpenMP.LLVM的Visual Studio安装目录下找到这些库。

请注意,-openmp:llvm开关是试验性的,并且在Visual Studio版本16.9中与-openmp:llvm开关一起添加的OpenMP 3.0功能仅在Visual Studio版本16.10中仍受附加的-openmp:experimental标志支持。因此在16.10中有某些限制。特别是,#pragma omp task在x86或arm64上尚不可用,并且在16.10中的x64上仅具有有限的功能。最后,LLVM OpenMP运行时DLL的未来版本可能不向后兼容,并且这些DLL的当前版本也不能重新发行。

修复的Bug

并行区域内的return语句现在会发出有用的错误消息,因为它们不符合要求。 以下代码段以前会使编译器崩溃,并出现内部编译器错误。

if子句现在可以为变量选择正确的范围。在下面的代码段中,内部if子句引用值为1的外部共享变量i,而不是值为0的内部私有变量i,从而导致程序打印“嵌套”四次而不是一次。类似的修复方法也应用于num_threads子句。

我们关于OpenMP的计划

从16.10开始,尽管我们进行了一些改进并修复了一些长期存在的错误,但当前支持的标准仍是OpenMP 2.0。 我们已经开始了漫长的过程来支持OpenMP标准的较新版本。 我们的目标是支持最新的OpenMP标准,并将逐步逐步实现,并利用LLVM的OpenMP运行时提供新功能。 OpenMP的下一步将是支持OpenMP 3.1标准中添加的其他功能。 然后,我们将添加对不涉及卸载的OpenMP 4.5标准中添加的编译指示和子句的支持。

总结

新技术值得研究。

立FLAG:下周一定找时间研究。

最后

Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新的开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。

本文来自:《OpenMP Updates and Fixes for C++ in Visual Studio 2019 version 16.10》

最近我写了个东西

正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。

我想:你值得拥有。

标签: #编译openmp