【发布时间】:2019-06-16 19:04:30
【问题描述】:
我正在尝试学习 AVX 指令,并且在运行我收到的基本代码时
非法指令(核心转储)
下面提到了代码,我正在使用它编译它
g++ -mavx512f 1.cpp
究竟是什么问题以及如何克服它? 谢谢!
#include <immintrin.h>
#include<iostream>
using namespace std;
void add(const float a[], const float b[], float res[], int n)
{
int i = 0;
for(; i < (n&(~0x31)) ; i+=32 )
{
__m512 x = _mm512_loadu_ps( &a[i] );
__m512 y = _mm512_loadu_ps( &b[i] );
__m512 z = _mm512_add_ps(x,y);
_mm512_stream_ps(&res[i],z);
}
for(; i<n; i++) res[i] = a[i] + b[i];
}
int main()
{
int n = 100000;
float a[n], b[n], res[n];
for(int i = 0;i < n; i++)
{
a[i] = i;
b[i] = i+10;
}
add(a,b,res,n);
for(int i=0;i<n;i++) cout<<res[i]<<" ";
cout<<endl;
return 0;
}
【问题讨论】:
-
欢迎来到Stack Overflow。如果我们不能完全编译它,就很难帮助你调试你的代码。您应该添加足够的代码minimal reproducible example,这样其他人就不必创建其他位来测试它。就目前而言,不值得花时间测试您的代码。在这种情况下,您是否还可以确保您的 CPU 支持 AVX2 和 AVX512。 :)
-
可能你的 CPU 不支持 AVX512。使用
g++ -march=native启用您的 CPU 支持的所有功能。如果您遇到编译错误,则您的 CPU 不支持 AVX512。 -
什么让你认为你可以在你的 CPU 上使用这条指令?
-
@PeterCordes 我得到了编译错误。所以,我的 CPU 不支持 AVX512。谢谢!
标签: c++ x86 avx instruction-set avx512