Почему вы используете заголовки из такой старой версии gcc с ICC?Серия GCC 4.4 предшествует AVX.(4.4.7 с 2012 года, но все еще относительно древний).Текущий GCC составляет 8,2 или 7,4 для старой стабильной.(Если вас интересует, насколько хорошо GCC настраивается для современных процессоров, особенно с AVX, используйте более новый GCC, который знает -march=skylake
и -march=znver1
).
ICC зависит от заголовков GCCпо какой-то причине, видимо, в том числе и за immintrin.h
.IDK, почему ICC не в полной мере предоставляет свои собственные определения встроенных функций Intel.
Рабочая установка ICC17 понимает , что встроенная функция GCC после вас #include <immintrin.h>
.https://godbolt.org/z/PKumZx. Но я думаю, что с более поздним immintrin.h
.
И в отличие от ICC17, ICC19 скомпилирует __builtin_ia32_loadupd256(p)
для double*p
даже без каких-либо объявлений или включений.
ICC жалуется, если вы объявляете, что владеете __m256d
, если вы не указали __attribute__
в правильном порядке и т. Д. В любом случае, попробуйте извлечь заголовки из более нового gcc, ваш ICC может быть слишком новым для этого gcc .
Кроме того, не включайте avxintrin.h
напрямую, включите immintrin.h
.
avxintrin.h из gcc8.2 имеет ifdef для # error "Never use <avxintrin.h> directly; include <immintrin.h> instead."
.Может быть, ваша старая версия GCC отсутствует.