gcc - 发行版将 GCC 升级到 5.5.0 后,AVX512 内在函数头会产生许多错误

标签 gcc compiler-errors intrinsics avx512 gcc5

我的 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。

最佳答案

显然,涉及到一个 GCC 错误:

Bug 76731 - [AVX512] _mm512_i32gather_epi32 and other scatter/gather routines have incorrect signature

似乎 GCC 5.5 附带了一些 avx512?intrin.h header ,这些 header 已切换为使用 void*const void*, 但无需切换内置函数即可执行相同的操作。这个问题在 GCC 5 的发布后版本中得到了解决。关于 GCC 6.x - 我不确定。

this forum thread 上讨论了解决此问题的方法。 :从 GNU 服务器下载修补的 header 。

与 GCC 5 一起使用的 Shell 脚本(在 Linux 系统上):

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 个版本的文件可能都是相同的,但我没有检查过。

注意:如果您想知道为什么使用用户代理字符串 - 这是为了避免服务器拒绝它不喜欢“禁止”响应的客户端。当然,它不一定是这个特定的 UA 字符串。

关于gcc - 发行版将 GCC 升级到 5.5.0 后,AVX512 内在函数头会产生许多错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50815093/

相关文章:

c - 非simd intel intrinsic的隐式定义

c++ - 在 C++ 中自动将内部类型转换为枚举

c - 将 volatile int 变量定义为 extern int

c++ - 非标准代码,还是 g++ 错误?

c++ - 如何解决退出状态1错误?

xcode - 在Xcode上取消引用void *警告

GCC:内联汇编 - 适合吗?

C: 使一个类型与任何其他类型不兼容

linux - Ndless makefile/make 安装错误linux

arm - 如何使用 NEON 比较(大于或等于)指令?