__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 中定义的主要内容,如果未能解决你的问题,请参考以下文章
加载指令与 AVX 中的 AVX2 __m256i const* mem_addr [关闭]
有没有办法用 AVX2 编写 _mm256_shldi_epi8(a,b,1) ? (向量之间每 8 位元素移位一位)