avx512 fat runtime support: experimental

This commit is contained in:
Matthew Barr
2016-12-14 11:47:28 +11:00
parent 91db20d8eb
commit ec7869711f
5 changed files with 59 additions and 20 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2016, Intel Corporation
* Copyright (c) 2016-2017, Intel Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
@@ -33,8 +33,14 @@
#include "util/cpuid_flags.h"
#include "util/join.h"
#if defined(DISABLE_AVX512_DISPATCH)
#define avx512_ disabled_
#define check_avx512() (0)
#endif
#define CREATE_DISPATCH(RTYPE, NAME, ...) \
/* create defns */ \
RTYPE JOIN(avx512_, NAME)(__VA_ARGS__); \
RTYPE JOIN(avx2_, NAME)(__VA_ARGS__); \
RTYPE JOIN(corei7_, NAME)(__VA_ARGS__); \
RTYPE JOIN(core2_, NAME)(__VA_ARGS__); \
@@ -46,6 +52,9 @@
\
/* resolver */ \
static void(*JOIN(resolve_, NAME)(void)) { \
if (check_avx512()) { \
return JOIN(avx512_, NAME); \
} \
if (check_avx2()) { \
return JOIN(avx2_, NAME); \
} \

View File

@@ -133,13 +133,12 @@ int check_avx2(void) {
#endif
}
static
int check_avx512(void) {
/*
* For our purposes, having avx512 really means "can we use AVX512BW?"
*/
#if defined(__INTEL_COMPILER)
return _may_i_use_cpu_feature(_FEATURE_AVX512BW);
return _may_i_use_cpu_feature(_FEATURE_AVX512BW | _FEATURE_AVX512VL);
#else
unsigned int eax, ebx, ecx, edx;

View File

@@ -41,6 +41,7 @@ u64a cpuid_flags(void);
u32 cpuid_tune(void);
int check_avx512(void);
int check_avx2(void);
int check_ssse3(void);
int check_sse42(void);