Я пытаюсь запустить код, подобный следующему
#include <immintrin.h>
void foo() {
__m128i a = _mm_set_epi8 (0,0,6,5,4,3,2,1,8,7,6,5,4,3,2,1);
__m128i b = _mm_set_epi8 (0,0,0,0,0,0,0,1,8,7,6,5,4,3,2,1);
__mmask16 m = _mm_cmpeq_epi8_mask(a,b); // supposedly requires avx512vl and avx512bw
std::cout<<m<<std::endl;
}
void bar() {
int dataa[8] = {1,0,1,0,1,0,1,0};
__m256i points = _mm256_lddqu_si256((__m256i *)&dataa[0]); // requires just mavx
(void)points;
}
Однако я продолжаю сталкиваться с ошибкой Illegal instruction (core dumped)
Я компилирую код с
g ++ -std = c ++ 11 -march = broadwell -mavx -mavx512vl -mavx512bw tests.cpp
Согласно встроенной документации Intel, этих флагов должно быть достаточно для запуска foo
и bar
. Однако при выполнении foo
или bar
появляется то же сообщение об ошибке.
Однако, если я удалю foo
и скомпилирую БЕЗ -mavx512vl
, я смогу без проблем запустить bar
.
Я уже проверил, что мой процессор поддерживает флаги mno-avx512vl
и mno-avx512bw
, поэтому он должен поддерживать mavx512vl
и mavx512bw
, верно?
Какие флаги я должен включить, чтобы запустить обе функции? Или я что-то упускаю?