Встроенный заголовок AVX512 выдает много ошибок после обновления дистрибутива GCC до 5.5.0 - PullRequest
0 голосов
/ 12 июня 2018

Мой дистрибутив Linux обновил мою версию GCC до 5.5.0 (черт побери, если я знаю, почему).Теперь, когда я пытаюсь создать код, который включает avx512fintrin.h, я получаю множество ошибок компилятора:

/usr/lib/gcc/x86_64-linux-gnu/5/include/avx512fintrin.h(9220): error: argument of type "const void *" is incompatible with parameter of type "const float *"
/usr/lib/gcc/x86_64-linux-gnu/5/include/avx512fintrin.h(9231): error: argument of type "const void *" is incompatible with parameter of type "const float *"
/usr/lib/gcc/x86_64-linux-gnu/5/include/avx512fintrin.h(9244): error: argument of type "const void *" is incompatible with parameter of type "const double *"
/usr/lib/gcc/x86_64-linux-gnu/5/include/avx512fintrin.h(9255): error: argument of type "const void *" is incompatible with parameter of type "const double *"

и так далее.Почему это происходит и есть ли способ (который, мы надеемся, не слишком специфичен для конкретного дистрибутива), чтобы решить или обойти эту проблему?

PS - В случае, если это имеет значение, я использую GNU / Linux Mint 18.3.

1 Ответ

0 голосов
/ 12 июня 2018

По-видимому, здесь есть ошибка GCC:

Ошибка 76731 - [AVX512] _mm512_i32gather_epi32 и другие подпрограммы разброса / сбора имеют неверную подпись

Похоже на GCC 5.5поставляется с некоторыми заголовками avx512?intrin.h, которые переключились на использование void* и const void*,, но без переключения встроенных функций на то же самое.Эта проблема была решена в GCC 5 после выпуска. О GCC 6.x - я не уверен.

Способ обойти это обсуждается в этой ветке форума :Загрузка пропатченных заголовков с серверов GNU.

Сценарий GCC 5:

for f in avx512fintrin.h avx512pfintrin.h avx512vlintrin.h; do
   curl -H "User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" -o $f "https://gcc.gnu.org/viewcvs/gcc/branches/gcc-5-branch/gcc/config/i386/${f}?view=co&revision=245536&content-type=text%2Fplain&pathrev=245536"
done && mv avx512*intrin.h  /usr/lib/gcc/x86_64-linux-gnu/5/include/

На самом деле файлы могут быть идентичны для всех 3 версий, но я не проверял.

Примечание: Если вам интересно, почему строка user-agent - это чтобы сервер не отклонял клиентов, которые ему не нравятся, с помощью ответа «Запрещено».Конечно, это не обязательно должна быть конкретная строка UA.

...