| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #pragma once |
| | #if defined(CAFFE2_PERF_WITH_SVE) || defined(CAFFE2_PERF_WITH_AVX512) || \ |
| | defined(CAFFE2_PERF_WITH_AVX2) || defined(CAFFE2_PERF_WITH_AVX) |
| | #include <cpuinfo.h> |
| | #endif |
| |
|
| | |
| | |
| |
|
| | #define BASE_DO(funcname, ...) return funcname##__base(__VA_ARGS__); |
| |
|
| | #ifdef CAFFE2_PERF_WITH_SVE |
| | #define SVE_DO(funcname, ...) \ |
| | { \ |
| | static const bool isDo = cpuinfo_initialize() && cpuinfo_has_arm_sve(); \ |
| | if (isDo) { \ |
| | return funcname##__sve(__VA_ARGS__); \ |
| | } \ |
| | } |
| | #else |
| | #define SVE_DO(funcname, ...) |
| | #endif |
| |
|
| | #ifdef CAFFE2_PERF_WITH_AVX512 |
| | #define AVX512_DO(funcname, ...) \ |
| | { \ |
| | static const bool isDo = cpuinfo_initialize() && \ |
| | cpuinfo_has_x86_avx512f() && cpuinfo_has_x86_avx512dq() && \ |
| | cpuinfo_has_x86_avx512vl(); \ |
| | if (isDo) { \ |
| | return funcname##__avx512(__VA_ARGS__); \ |
| | } \ |
| | } |
| | #else |
| | #define AVX512_DO(funcname, ...) |
| | #endif |
| |
|
| | #ifdef CAFFE2_PERF_WITH_AVX2 |
| | #define AVX2_DO(funcname, ...) \ |
| | { \ |
| | static const bool isDo = cpuinfo_initialize() && cpuinfo_has_x86_avx2(); \ |
| | if (isDo) { \ |
| | return funcname##__avx2(__VA_ARGS__); \ |
| | } \ |
| | } |
| | #define AVX2_FMA_DO(funcname, ...) \ |
| | { \ |
| | static const bool isDo = cpuinfo_initialize() && cpuinfo_has_x86_avx2() && \ |
| | cpuinfo_has_x86_fma3(); \ |
| | if (isDo) { \ |
| | return funcname##__avx2_fma(__VA_ARGS__); \ |
| | } \ |
| | } |
| | #else |
| | #define AVX2_DO(funcname, ...) |
| | #define AVX2_FMA_DO(funcname, ...) |
| | #endif |
| |
|
| | #ifdef CAFFE2_PERF_WITH_AVX |
| | #define AVX_DO(funcname, ...) \ |
| | { \ |
| | static const bool isDo = cpuinfo_initialize() && cpuinfo_has_x86_avx(); \ |
| | if (isDo) { \ |
| | return funcname##__avx(__VA_ARGS__); \ |
| | } \ |
| | } |
| | #define AVX_F16C_DO(funcname, ...) \ |
| | { \ |
| | static const bool isDo = cpuinfo_initialize() && cpuinfo_has_x86_avx() && \ |
| | cpuinfo_has_x86_f16c(); \ |
| | if (isDo) { \ |
| | return funcname##__avx_f16c(__VA_ARGS__); \ |
| | } \ |
| | } |
| | #else |
| | #define AVX_DO(funcname, ...) |
| | #define AVX_F16C_DO(funcname, ...) |
| | #endif |
| |
|