在发行版将GCC升级到5.5.0之后,AVX512 intrinsics标头会产生许多错误

在发行版将GCC升级到5.5.0之后,AVX512 intrinsics标头会产生许多错误,gcc,compiler-errors,intrinsics,avx512,gcc5,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

我的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错误:

GCC 5.5似乎附带了一些
avx512?intrin.h
头,这些头切换到使用
void*
const void*,
,但没有切换内置项来执行相同的操作。这在GCC 5的发布后版本中得到了解决。关于GCC 6.x-我不确定

解决这一问题的方法将在上讨论:从GNU服务器下载经过修补的头文件

用于GCC 5的Shell脚本(在Linux系统上):

实际上,所有3个版本的文件可能都是相同的,但我还没有检查


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

gcc7.3相当不错;如果您需要手动升级gcc,我建议您这样做。gcc7有一些很好的功能,比如存储合并(相邻的窄存储通过一条
mov
指令完成),非常适合具有窄成员的结构。@PeterCordes:我刚才说的是我的发行版的默认设置。当然,如果相关的话,我可以使用另一个版本的GCC——但你不能真正“升级”——所有编译的库都是用发行版默认版本构建的。编译器升级不会改变C ABI,因此你可以使用更新的编译器,而无需重建系统库。IDK关于C++ABI,尽管如此。gcc5已经很老了,所以如果你真的在使用AVX512,你可能想要一个更新的gcc来获得更好的代码生成。@PeterCordes:想想CUDA 8。这应该被后传到gcc5
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/