__AVX2__ 似乎没有在 eclipse-cdt 中定义

Posted

技术标签:

【中文标题】__AVX2__ 似乎没有在 eclipse-cdt 中定义【英文标题】:__AVX2__ appears not to be defined in eclipse-cdt 【发布时间】:2019-09-05 12:33:14 【问题描述】:

我的编译器支持 avx2,我在 C++ 标志中添加了-mavx2,但是 __AVX2__ 宏未在我的代码中定义。

#ifdef __AVX2__
#include <immintrin.h>
#endif

似乎在代码中被禁用。

编辑:

我的编译器版本是:

g++ (Ubuntu 8.3.0-6ubuntu1) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

【问题讨论】:

-mavx2 应该与 gcc-4.7 或更高版本一起使用:godbolt.org/z/aEZQez 你是在使用它还是 -march=native?在后一种情况下,你确定你的 CPU 支持 AVX2 吗? 谢谢,我正在使用-mavx2。是的,做cat /proc/cpuinfo 显示支持avx2。可悲的是,我必须手动检查 cpuinfo,然后定义这些宏。 你能显示gcc --version(或g++ --version)的输出吗? 完整的编译器命令行是什么?以及您是如何确定未定义 __AVX2__ 的? @FlorianWeimer 我正在使用 cmake 生成 make 文件和编译器命令。我知道 __AVX2__ 没有定义,因为我的编辑器 Eclipse CDT 使代码变灰。 【参考方案1】:

要让 eclipse 知道 AVX2 可用,您可以转到

下的项目属性
C/C++ General
    Preprocessor Include Paths, Macros etc.
        Providers
            CDT GCC Built-in Compiler Settings

并将-mavx2-march=native 添加到“获取编译器规范的命令”中。

或者,您可以在

下的全局首选项中进行设置
C/C++
    Build
        Settings
            Discovery
                CDT GCC Built-in Compiler Settings

注意当您处于该设置时,您还可以添加诸如-std=c++17(或您通常使用的任何标准)之类的内容。

【讨论】:

谢谢!我在 Discovery 中添加了 $COMMAND $FLAGS -E -P -v -dD "$INPUTS" "-mavx2" 但不幸的是它没有改变任何东西 另外,我在项目设置下没有看到CDT GCC Built-in Compiler Settings 的条目 省略-mavx2 周围的"。也许在"$INPUTS" 前面试试。您可能需要重新索引您的项目(先用一个小型测试项目尝试此操作)。 谢谢,删除引号,将其移到前面,并重新编入索引 - 仍然是灰色的 :(

以上是关于__AVX2__ 似乎没有在 eclipse-cdt 中定义的主要内容,如果未能解决你的问题,请参考以下文章

AVX2 的汇编错误

加载指令与 AVX 中的 AVX2 __m256i const* mem_addr [关闭]

int64_t 指针转换为 AVX2 内在 _m256i

有没有办法用 AVX2 编写 _mm256_shldi_epi8(a,b,1) ? (向量之间每 8 位元素移位一位)

在AVX2中重现_mm256_sllv_epi16和_mm256_sllv_epi8

AVX2:U8绝对差