avx512的编译错误,这是GCC问题吗?

时间:2019-07-15 16:12:04

标签: c gcc x86 avx512

我正在尝试使用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”。我该怎么做才能克服这个问题?在此先感谢。

1 个答案:

答案 0 :(得分:2)

GCC 4.8不支持任何AVX-512变体。如果这是Red Hat Enterprise Linux 7的系统编译器,则可以使用Red Hat Developer Toolset中的新GCC版本,该版本为以后的CPU功能提供支持。 (DTS也可用于CentOS。)