使用GCC与AVX - avxintrin.h文件丢失

11

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

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

编译器会抛出错误:

在此范围内未声明类型“__m256”

我查看了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'

提前致谢!


1
你在GCC标志中包含了-march=native吗?默认情况下,GCC不会启用AVX指令。 - Nemo
请确保您正在使用 gcc -mavx ... 进行编译。 - Paul R
1
好的,我使用了-march=native编译,它起作用了。谢谢!但是我仍然不知道如何在Eclipse中添加这个标志?当涉及到创建自己的makefile时,我有点懒。有什么想法吗? - toebs
1
你也懒得看Eclipse文档吗?你也懒得搜索"eclipse添加编译器标志"之类的东西吗? - Jonathan Wakely
3个回答

17

使用-mavx编译,告诉编译器你想要使用AVX指令。


0

编译时请使用以下命令:

gcc -mavx program_name.c

否则将会出现 __m256 错误。

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

非法指令 (core dumped)

要检查 CPU 标志,请使用以下命令:

cat /proc/cpuinfo


0
为了“修复”eclipse“实时代码分析”的问题,您需要在Window ->首选项 -> C/C++ ->构建 ->设置(发现) -> CDT GCC内置编译器设置中全局更新设置(而不仅仅是对于该项目)。
在那个页面上,您应该在编译器规范的末尾添加以下内容: -std=c++11 -mavx
这样做会在eclipse中启用avx以进行实时代码分析,并且可以识别m256数据类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接