__m256 неизвестный тип (процессор clang 5.1 / i5)?

#c #x86 #clang #intrinsics #avx

#c #x86 #clang #встроенные #avx

Вопрос:

Я только начал экспериментировать со встроенными. Мне удалось успешно скомпилировать программу с помощью __m128 на Mac с использованием Clang 5.1. Процессор на этом Mac — Intel core i5 M540.

Когда я попытался скомпилировать тот же код с __m256 , я получаю следующее сообщение:

 simple.cpp:4:2: error: unknown type name '__m256'
    __m256 A;
  

Код выглядит следующим образом:

 #include <immintrin.h>
int main()
{
    __m256 A;
    return 0;
}
  

И вот команда, используемая для его компиляции:

 c   -o simple simple.cpp -march=native -O3
  

Просто мой процессор слишком стар для поддержки набора инструкций AVX? Все ли параметры, которые я использую (в командной строке), верны? Я проверил immintrin.h включаемый файл, и он вызывает другой включающий файл, который, похоже, определяет встроенные функции AVX. Прошу прощения, если вопрос наивный или терминология использована неправильно, как я уже сказал, я новичок в этой теме.

Комментарии:

1. Вы имеете в виду 540M ? Если это верно, то процессор не поддерживает AVX, потому что это очень старый Nehalem. AVX доступен только с Sandy Bridge

2. Большое вам спасибо. Он отображается как M 540, когда я выполняю sysctl -n machdep.cpu.brand_string, так что да, я думаю, это 540M. Если вы напишете свой комментарий в качестве ответа, я приму его.

Ответ №1:

Процессор Intel 540M выполнен в микроархитектуре Westmere (извините за ошибку в комментарии), которая появилась до Sandy Bridge, когда был представлен AVX, поэтому он не поддерживает AVX. Термин «core i5» охватывает широкий спектр архитектур от Nehalem до Haswell (текущей), поэтому использование процессора core i5 не означает, что у вас будет поддержка всех наборов команд, подобных последним.