将 AVX 与 GCC 一起使用 - 缺少 avxintrin.h

Posted

技术标签:

【中文标题】将 AVX 与 GCC 一起使用 - 缺少 avxintrin.h【英文标题】:Using AVX with GCC - avxintrin.h missing 【发布时间】:2013-09-05 13:44:50 【问题描述】:

我在 Ubuntu-64bit 12.04LTS 上运行我的笔记本电脑(coreI5)。我正在尝试使用 AVX 生成一些随机数。

在 Eclipse-CDT 中,我使用 Linux GCC 创建了一个新的 C++“Hello World”项目。我包含了 immintrin.h 并尝试加载 __m256 类型的内容。

编译器抛出错误:

Type '__m256' was not declared in this scope

我查看了 immintrin.h 并查找了 avxintrin.h,以防万一出现拼写错误。在 avxintrin.h Eclipse 上单击打开声明时说:

Could not find include file 'avxintrin.h' on include paths

所有文件都在 /usr/lib/gcc/x86_64-linux-gnu/4.6/include/avxintrin.h 中可用。

谁能给我提示,怎么办?网上没有很多关于 AVX 的教程或帮助。我想我必须对编译器选项或类似的东西进行一些调整(!?)

这里是代码:

#include <immintrin.h>
#include <iostream>
using namespace std;

int main() 
    float out[8];
    float a[8] =  0.0,1.0,2.0,3.0,4.0,5.0,6.0,7;
    __m256 test =  _mm256_load_ps(&a[0]);
    cout << "" << endl; // prints 
    return 0;

这里有错误:

../src/seminar.cpp:15:2: error: '__m256' was not declared in this scope
../src/seminar.cpp:15:9: error: expected ';' before 'test'

提前致谢!

【问题讨论】:

您的 GCC 标志中是否包含 -march=native?默认情况下,GCC 不会启用 AVX 指令。 确保使用gcc -mavx ...进行编译。 好的,我用 -march=native 编译并且它有效。谢谢 !但是我仍然不知道如何在 Eclipse 中添加这个标志?在创建自己的 makefile 时,我有点懒惰。有什么想法吗? 也懒得看 eclipse 文档?懒得上网搜索“eclipse 添加编译器标志”之类的东西? 【参考方案1】:

使用-mavx 编译以告诉编译器您要使用 AVX 指令。

【讨论】:

【参考方案2】:

为了“修复”eclipse“实时代码分析”的问题,您必须在 Window -> Preferences -> C/C++ -> Build -> Settings (Discovery) 中全局更新设置(不仅仅是项目) ) -> CDT GCC 内置编译器设置。

在该页面中,您应该在编译器规范的末尾添加以下内容: -std=c++11 -mavx

这样做您将启用 avx 以在 eclipse 中进行实时代码分析,并且 m256 数据类型将被识别

【讨论】:

【参考方案3】:

编译使用命令

gcc -mavx program_name.c

否则 __m256 将通过错误。

如果您的 avx 标志被禁用,您将收到以下错误

非法指令(核心转储)

使用以下命令检查您的 cpu 标志

cat /proc/cpuinfo

【讨论】:

以上是关于将 AVX 与 GCC 一起使用 - 缺少 avxintrin.h的主要内容,如果未能解决你的问题,请参考以下文章

在 GCC 上设置打包的 long long 的正确对齐以与 avx2 指令一起使用

在没有AVX的情况下编译boost

GCC avx2intrin.h(版本 X-9.2)中缺少 _mm_broadcastsd_pd

为啥 gcc -O3 处理 avx256 的内在比较与 gcc -O0 和 clang 不同?

缺少掩码的 AVX-512 内在函数?

在没有 AVX 的情况下编译 boost