关于使用AVX512进行编译的困惑

问题描述 投票:1回答:2

我正在阅读有关如何使用英特尔C ++编译器和英特尔Knights Landing上的AVX512支持编译C / C ++代码的this文档。

但是,我对这部分有点困惑:

-xMIC-AVX512:使用此选项生成AVX-512F,AVX-512CD,AVX-512ER和AVX-512FP。

-xCORE-AVX512:使用此选项生成AVX-512F,AVX-512CD,AVX-512BW,AVX-512DQ和AVX-512VL。

例如,要为Intel Xeon Phi处理器x200生成Intel AVX-512指令,您应该使用选项-xMIC-AVX512。例如,在Linux系统上

$ icc -xMIC-AVX512 application.c当你想为Intel Xeon Phi处理器x200构建一个巨大的二进制文件时,这个编译器选项很有用。而不是在协处理器上构建它需要更多时间,而是在基于英特尔至强处理器的机器上构建它

我的Xeon Phi KNL没有协处理器(不需要ssh micX或用-mmic标志编译)。但是,我不明白使用-xMIC-xCORE是否更好?

排在第二位的是-ax而不是-x

当您尝试构建可在多个平台上运行的二进制文件时,此编译器选项很有用。

所以qazxsw poi用于跨平台支持,但与qazxsw poi相比有没有任何性能差异?

intel xeon-phi icc avx512
2个回答
2
投票

对于第一个问题,如果要编译Intel Xeon Phi处理器x200(也称为KNL处理器),请使用-xMIC-AVX512。请注意,您提到的论文中的短语是错误的,它应该是“当您想要为英特尔至强融核处理器x200构建一个巨大的二进制文件时,此编译器选项很有用。而不是在英特尔至强融核处理器x200上构建它它将花费更多的时间,在基于英特尔至强处理器的机器上构建。“

对于第二个问题,如果在Intel Xeon Phi处理器x200上运行二进制文件,则不应存在性能差异。但是,符合-ax的二进制文件的大小应该大于使用-x选项编译的大小。


1
投票

您提供的链接中的另一个选项是使用-ax构建。这是一个诱人的选择,因为在我的情况下它具有我需要的所有指令,我可以对KNL和Sklake-AVX512系统使用相同的选项。由于我没有建立在KNL系统上,所以我不能使用-x(或者使用GCC的-xCOMMON-AVX512)。

但是,-xHost不应与KNL一起使用。原因是它生成了-march=native指令(-xCOMMON-AVX512),这不仅不是必需的,它实际上在KNL系统上非常慢。

来自Agner Fog的vzeroupper,他在KNL部分写道。

VZEROALL或VZEROUPPER指令不仅在这里是多余的,它们实际上对性能有害。 VZEROALL或VZEROUPPER指令在64位模式下需要36个时钟周期...

因此对于KNL系统,你应该使用https://godbolt.org/z/PgFX55for其他系统与AVX512你应该使用micro-architecture manual(或-xMIC-AVX512)。我也使用-xCORE-AVX512

我不知道ICC在启用后禁用vzeroupper的开关(使用GCC可以使用-xSKYLAKE-AVX512)。

顺便说一句,按照相同的逻辑,你应该使用-qopt-zmm-usage=high与GCC而不是-mno-vzeroupper(如果你确定你不需要AVX512ER或AVX512PF,可以使用-march=knl)。

© www.soinside.com 2019 - 2024. All rights reserved.