Получение незаконных инструкций при выполнении базового кода Avx512 - PullRequest
1 голос
/ 16 июня 2019

Я пытаюсь выучить инструкции 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;
}

1 Ответ

6 голосов
/ 16 июня 2019

Возможно, ваш процессор вообще не поддерживает AVX512. В основном его поддерживают только серверные чипы (например, skylake-server, Cascade Lake и Xeon Phi). Кроме того, очень ограниченный выпуск чипа для ноутбука Cannon Lake , от которого отказывается Intel; Планируется, что Ice Lake станет первым клиентским процессором, поддерживающим AVX512. См. Также процессоры Википедии с таблицей AVX-512 .


Используйте g++ -O3 -march=native для включения всего, что поддерживает ваш ЦП.

Если вы получаете ошибки компиляции (например, необъявленная функция _mm512_loadu_ps), ваш ЦП не поддерживает AVX512, поэтому g ++ не включил его, поэтому immintrin.h не определит эту внутреннюю сущность.

(или другой возможной ошибкой является ошибка «встраивания» встроенной функции, которая не разрешена целевыми параметрами.)

Используйте отдельные опции -mavx512f и -mtune=, только если вы хотите создать двоичный файл для других процессоров, а не только для компьютера, на котором вы компилируете.


Похожие: Как проверить инструкции AVX-512 без поддерживаемого оборудования?

...