当前位置:首页 > 天道酬勤 > 正文内容

编译器(开发一个编译器)

张世龙2021年12月21日 17:35天道酬勤530

蝎子

visualstudio2019v16.3开始,在MSVC编译器的自动量化中增加了对AVX-512指令集的支持。 本文主要提供了一些示例说明开发人员如何在项目中启用此功能

什么是自动向量?

MSVC编译器的自动向量通过分析用户代码的循环部分,生成向量目标的矢量化代码,提高了灵活性和运行时性能。 我们先来看看下面的代码片段。

例如,如果使用[ cl.exe/O2/FP : fast/arch : avx2]为avx2编译上面的代码,则会得到如下所示的汇编代码。

上面汇编代码的第11~15行是使用[ymm]寄存器的矢量化循环。 第16~21行计算向量化循环的矢量值的标量值的和。 请注意,向量环中的迭代次数只是标量环的1/8。 这意味着性能得到了提高。

什么是AVX-512

英特尔于2008年3月首次提出了AVX指令集。 这是x86 SSE指令集的扩展版,可以说使执行效率提高了一倍。 的升级版AVX2支持256位宽操作,引入了FMA指令集,但最新的AVX-512实际上被认为是AVX3,该指令集将位宽操作提高到了512位。

AVX-512是英特尔引进的处理器扩展集,目的是通过将矢量扩展到512位宽来加强矢量计算,将矢量寄存器增加一倍,并引入“element-wise操作掩码”特性通过测试[__isa_available]变量的值,可以判断AVX-512的支持情况。 该值为6以上时,表示支持AVX-512。 另外,这还表示了f (金融)命令和VL、BW、DQ、CD扩展中的命令支持。

这些命令使用附加的AVX-512寄存器添加整数向量操作、128位宽和256位宽操作以及支持标量存储的地址冲突检测。 这些命令与下面介绍的编译开关[/arch:AVX512]启用的命令相同。

这些扩展功能可用于支持AVX-512的所有处理器。 有关AVX-512和Visual Studio的更多文章,请参见以下两篇文章。

微软visual studio 2017 supportsintelavx-512

加速计算-智能工作负载swithintelavx-512

如何启用AVX-512向量化

[/arch:AVS512]编译开关用于启用对AVX-512的支持,包括自动矢量化。 通过这个开关,自动向量机可以通过AVX-512的f、VL、BW、DQ、CD扩展量化一个周期。

以下是将AVX-512矢量化特性编译到您的APP中的步骤。 在Visual Studio IDE中,可以将编译开关[/arch:AVX512]添加到“属性页/命令行辅助选项”或“项目类型” 在“codegenerationenableenhancedinstanced”的配置路径中,选择“高级向量扩展512”

第二种方法适用于Visual Studio 2019 v16.4发行版。 在命令行中使用cl.exe时,可以将[/arch:AVX512]编译开关添加到/link选项中。

再次使用[ cl.exe/O2/FP : fast/arch : avx 512 ]编译上一个示例的代码,将得到以下支持AVX-512的汇编代码。

在上面的汇编代码中,第7~11行是向量环。 请注意,环路是使用“zmm”寄存器而不是“ymm”寄存器进行矢量化的。 根据[zmmx]寄存器的扩展位宽,AVX-512的向量环的迭代次数只有AVX2版本的一半。

总结

你开发的APP和AVX-512的距离好像还很远吗? 否则,MSVC编译器将支持丰富的AVX-512扩展功能,从而可以在APP应用中轻松启用AVX-512扩展功能,大幅提高了运行效率。

还是大胆拥抱c这个性能怪物吧。

扫描二维码推送至手机访问。

版权声明:本文由花开半夏のブログ发布,如需转载请注明出处。

本文链接:https://www.zhangshilong.cn/work/26465.html

标签: 位宽指令集
分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。