首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何限制GCC的自动矢量化水平?

如何限制GCC的自动矢量化水平?
EN

Stack Overflow用户
提问于 2019-06-08 13:39:32
回答 1查看 695关注 0票数 4

换句话说,是否可以将自动向量化指令(用-fast-math -ftree-vectorize获得)限制为类似于AVX的指令,同时仍然通过显式的内在调用使用AVX512

此刻,

  • 没有 -mavx512f,GCC说没有AVX-512 f支持就无法编译我的程序。当然可以。
  • -mavx512f,GCC开始使用everywhere

我没有找到任何选择,让GCC使用明确的AVX512本质,同时限制自己的其他东西,自动向量化。

编辑:只是为了提供更多的上下文…我有skylake-avx512 Xeon节点(2个FMA单元)和一个特定于域的程序.

当我使用-Ofast -march=skylake-avx512 -mtune=skylake-avx512编译并在one核心上运行时,比-march=haswell …多出30%的性能。

当我增加所有24核的核数时,-march=haswell … it -march=skylake-avx512 …快两倍!

其原因是臭名昭著的核心节流…。

但我的领域专用软件已经包括了手动矢量化部分。我确实在-fno-tree-vectorize -march=skylake-avx512 …中获得了性能上的胜利(但不足以用所有24个内核和autovec击败-march=haswell … ),因此自动矢量化很重要。

最后,如果我在AVX2-optimized手工矢量化内核中使用-march=skylake-avx512 …,我的性能也会很差,因此,我认为导致节流的昂贵部分确实是自动向量化,因此我最初的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-08 15:29:24

您可以使用目标属性在每个函数的基础上启用指令,从而允许您调用否则不允许的本质。

我猜您希望根据在运行时确定的CPU功能在某些功能的实现之间切换。如果是这样的话,您可能也想看看target_clones属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56506950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档