将 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 指令一起使用
GCC avx2intrin.h(版本 X-9.2)中缺少 _mm_broadcastsd_pd