首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

VS2019: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)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。

我想:你值得拥有。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210525A0D9U400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券