我试图用AVX512内部函数编译下面的代码,但是出现了编译错误。
#include <immintrin.h>
static inline __attribute__((always_inline)) void
mov64(uint8_t *dst, const uint8_t *src)
{
__m512i zmm0;
zmm0 = _mm512_load_si512((const void *)src);
_mm512_store_si512((void *)dst, zmm0);
}
编译错误:
gcc -D_GNU_SOURCE -DINFO_LOG_DEBUG --std=c99 -march=native -O3 -DNDEBUG -m64 -mtune=native -Werror -Wall -Wundef -Wpointer-arith -Wstrict-prototypes -Wnested-externs -fomit-frame-pointer -DTRANSPORT_CONFIG_OPT_HDR='<ci/internal/transport_config_opt_extra.h>' -c src/main.c -o obj/main.o
src/main.c: In function ‘mov64’:
src/main.c:15:9: error: unknown type name ‘__m512i’
__m512i zmm0;
^
src/main.c:17:9: error: implicit declaration of function ‘_mm512_load_si512’ [-Werror=implicit-function-declaration]
zmm0 = _mm512_load_si512((const void *)src);
^
src/main.c:17:9: error: nested extern declaration of ‘_mm512_load_si512’ [-Werror=nested-externs]
src/main.c:18:9: error: implicit declaration of function ‘_mm512_store_si512’ [-Werror=implicit-function-declaration]
_mm512_store_si512((void *)dst, zmm0);
^
src/main.c:18:9: error: nested extern declaration of ‘_mm512_store_si512’ [-Werror=nested-externs]
cc1: all warnings being treated as errors
此外,如果我添加-march=native、avx512f或-mavx512f或--march=native=skylake-avx512,它会给出以下错误:
src/main.c:1:0: error: bad value (skylake-avx512) for -march= switch
我的GCC版本是4.8.5 20150623,中央处理器是"Intel(R) Xeon(R) Gold6154“。我应该怎么做才能克服这个问题?提前谢谢..
发布于 2019-07-16 15:01:08
GCC 4.8不支持AVX-512的任何变体。如果这是Red Hat Enterprise Linux7的系统编译器,那么您可以使用Red Hat Developer Toolset的新的GCC版本,该版本为以后的CPU特性提供了支持。(DTS也可用于CentOS。)
https://stackoverflow.com/questions/57043592
复制相似问题