我正在尝试使用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 = skylake-avx512,则会出现以下错误:
src/main.c:1:0: error: bad value (skylake-avx512) for -march= switch
我的GCC版本是4.8.5 20150623,CPU是“英特尔(R)至强(R)金6154”。我该怎么做才能克服这个问题?在此先感谢。
答案 0 :(得分:2)
GCC 4.8不支持任何AVX-512变体。如果这是Red Hat Enterprise Linux 7的系统编译器,则可以使用Red Hat Developer Toolset中的新GCC版本,该版本为以后的CPU功能提供支持。 (DTS也可用于CentOS。)