summaryrefslogtreecommitdiff
path: root/numpy/distutils/checks
diff options
context:
space:
mode:
authorSayed Adel <seiko@imavr.com>2021-05-26 00:34:57 +0200
committerSayed Adel <seiko@imavr.com>2021-05-26 23:35:47 +0200
commit0ec2c91dfdc6d62c7e2ebd0071a0dc990e1a84ec (patch)
tree399fc264a8b25e48e3aa96fe3b0df584a3c9f7b3 /numpy/distutils/checks
parent5520a1757e4476bc6526973ad46c46b82637ae1c (diff)
downloadnumpy-0ec2c91dfdc6d62c7e2ebd0071a0dc990e1a84ec.tar.gz
BUG, SIMD: Fix detect host/native CPU features on ICC during compile-time
Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics, whether or not the build options for those features are specified. Therefore, we must test #definitions of CPU features when option native/host is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise the test will be broken and leads to enable all possible features.
Diffstat (limited to 'numpy/distutils/checks')
-rw-r--r--numpy/distutils/checks/cpu_avx.c13
-rw-r--r--numpy/distutils/checks/cpu_avx2.c13
-rw-r--r--numpy/distutils/checks/cpu_avx512_clx.c13
-rw-r--r--numpy/distutils/checks/cpu_avx512_cnl.c13
-rw-r--r--numpy/distutils/checks/cpu_avx512_icl.c13
-rw-r--r--numpy/distutils/checks/cpu_avx512_knl.c13
-rw-r--r--numpy/distutils/checks/cpu_avx512_knm.c13
-rw-r--r--numpy/distutils/checks/cpu_avx512_skx.c13
-rw-r--r--numpy/distutils/checks/cpu_avx512cd.c13
-rw-r--r--numpy/distutils/checks/cpu_avx512f.c13
-rw-r--r--numpy/distutils/checks/cpu_f16c.c13
-rw-r--r--numpy/distutils/checks/cpu_fma3.c13
-rw-r--r--numpy/distutils/checks/cpu_popcnt.c15
-rw-r--r--numpy/distutils/checks/cpu_sse.c13
-rw-r--r--numpy/distutils/checks/cpu_sse2.c13
-rw-r--r--numpy/distutils/checks/cpu_sse3.c13
-rw-r--r--numpy/distutils/checks/cpu_sse41.c13
-rw-r--r--numpy/distutils/checks/cpu_sse42.c13
-rw-r--r--numpy/distutils/checks/cpu_ssse3.c13
19 files changed, 248 insertions, 1 deletions
diff --git a/numpy/distutils/checks/cpu_avx.c b/numpy/distutils/checks/cpu_avx.c
index cee4f36ab..26ae18466 100644
--- a/numpy/distutils/checks/cpu_avx.c
+++ b/numpy/distutils/checks/cpu_avx.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #ifndef __AVX__
+ #error "HOST/ARCH doesn't support AVX"
+ #endif
+#endif
+
#include <immintrin.h>
int main(int argc, char **argv)
diff --git a/numpy/distutils/checks/cpu_avx2.c b/numpy/distutils/checks/cpu_avx2.c
index 15b6c919b..ddde868f1 100644
--- a/numpy/distutils/checks/cpu_avx2.c
+++ b/numpy/distutils/checks/cpu_avx2.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #ifndef __AVX2__
+ #error "HOST/ARCH doesn't support AVX2"
+ #endif
+#endif
+
#include <immintrin.h>
int main(int argc, char **argv)
diff --git a/numpy/distutils/checks/cpu_avx512_clx.c b/numpy/distutils/checks/cpu_avx512_clx.c
index 4baa8fea0..81edcd067 100644
--- a/numpy/distutils/checks/cpu_avx512_clx.c
+++ b/numpy/distutils/checks/cpu_avx512_clx.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #ifndef __AVX512VNNI__
+ #error "HOST/ARCH doesn't support CascadeLake AVX512 features"
+ #endif
+#endif
+
#include <immintrin.h>
int main(int argc, char **argv)
diff --git a/numpy/distutils/checks/cpu_avx512_cnl.c b/numpy/distutils/checks/cpu_avx512_cnl.c
index f2ff3725e..5799f122b 100644
--- a/numpy/distutils/checks/cpu_avx512_cnl.c
+++ b/numpy/distutils/checks/cpu_avx512_cnl.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #if !defined(__AVX512VBMI__) || !defined(__AVX512IFMA__)
+ #error "HOST/ARCH doesn't support CannonLake AVX512 features"
+ #endif
+#endif
+
#include <immintrin.h>
int main(int argc, char **argv)
diff --git a/numpy/distutils/checks/cpu_avx512_icl.c b/numpy/distutils/checks/cpu_avx512_icl.c
index 085b947e0..3cf44d731 100644
--- a/numpy/distutils/checks/cpu_avx512_icl.c
+++ b/numpy/distutils/checks/cpu_avx512_icl.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #if !defined(__AVX512VPOPCNTDQ__) || !defined(__AVX512BITALG__) || !defined(__AVX512VPOPCNTDQ__)
+ #error "HOST/ARCH doesn't support IceLake AVX512 features"
+ #endif
+#endif
+
#include <immintrin.h>
int main(int argc, char **argv)
diff --git a/numpy/distutils/checks/cpu_avx512_knl.c b/numpy/distutils/checks/cpu_avx512_knl.c
index 10ba52bcc..b3f4f6976 100644
--- a/numpy/distutils/checks/cpu_avx512_knl.c
+++ b/numpy/distutils/checks/cpu_avx512_knl.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #if !defined(__AVX512ER__) || !defined(__AVX512PF__)
+ #error "HOST/ARCH doesn't support Knights Landing AVX512 features"
+ #endif
+#endif
+
#include <immintrin.h>
int main(int argc, char **argv)
diff --git a/numpy/distutils/checks/cpu_avx512_knm.c b/numpy/distutils/checks/cpu_avx512_knm.c
index d03b0fe8b..2c426462b 100644
--- a/numpy/distutils/checks/cpu_avx512_knm.c
+++ b/numpy/distutils/checks/cpu_avx512_knm.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #if !defined(__AVX5124FMAPS__) || !defined(__AVX5124VNNIW__) || !defined(__AVX512VPOPCNTDQ__)
+ #error "HOST/ARCH doesn't support Knights Mill AVX512 features"
+ #endif
+#endif
+
#include <immintrin.h>
int main(int argc, char **argv)
diff --git a/numpy/distutils/checks/cpu_avx512_skx.c b/numpy/distutils/checks/cpu_avx512_skx.c
index 047618762..8840efb7e 100644
--- a/numpy/distutils/checks/cpu_avx512_skx.c
+++ b/numpy/distutils/checks/cpu_avx512_skx.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #if !defined(__AVX512VL__) || !defined(__AVX512BW__) || !defined(__AVX512DQ__)
+ #error "HOST/ARCH doesn't support SkyLake AVX512 features"
+ #endif
+#endif
+
#include <immintrin.h>
int main(int argc, char **argv)
diff --git a/numpy/distutils/checks/cpu_avx512cd.c b/numpy/distutils/checks/cpu_avx512cd.c
index 52f4c7f8b..5e29c79e3 100644
--- a/numpy/distutils/checks/cpu_avx512cd.c
+++ b/numpy/distutils/checks/cpu_avx512cd.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #ifndef __AVX512CD__
+ #error "HOST/ARCH doesn't support AVX512CD"
+ #endif
+#endif
+
#include <immintrin.h>
int main(int argc, char **argv)
diff --git a/numpy/distutils/checks/cpu_avx512f.c b/numpy/distutils/checks/cpu_avx512f.c
index 22d861471..d0eb7b1ad 100644
--- a/numpy/distutils/checks/cpu_avx512f.c
+++ b/numpy/distutils/checks/cpu_avx512f.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #ifndef __AVX512F__
+ #error "HOST/ARCH doesn't support AVX512F"
+ #endif
+#endif
+
#include <immintrin.h>
int main(int argc, char **argv)
diff --git a/numpy/distutils/checks/cpu_f16c.c b/numpy/distutils/checks/cpu_f16c.c
index 678c582e4..fdf36cec5 100644
--- a/numpy/distutils/checks/cpu_f16c.c
+++ b/numpy/distutils/checks/cpu_f16c.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #ifndef __F16C__
+ #error "HOST/ARCH doesn't support F16C"
+ #endif
+#endif
+
#include <emmintrin.h>
#include <immintrin.h>
diff --git a/numpy/distutils/checks/cpu_fma3.c b/numpy/distutils/checks/cpu_fma3.c
index 2f879c3b3..bfeef22b5 100644
--- a/numpy/distutils/checks/cpu_fma3.c
+++ b/numpy/distutils/checks/cpu_fma3.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #if !defined(__FMA__) && !defined(__AVX2__)
+ #error "HOST/ARCH doesn't support FMA3"
+ #endif
+#endif
+
#include <xmmintrin.h>
#include <immintrin.h>
diff --git a/numpy/distutils/checks/cpu_popcnt.c b/numpy/distutils/checks/cpu_popcnt.c
index 540c98dab..813c461f0 100644
--- a/numpy/distutils/checks/cpu_popcnt.c
+++ b/numpy/distutils/checks/cpu_popcnt.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env vr `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #if !defined(__SSE4_2__) && !defined(__POPCNT__)
+ #error "HOST/ARCH doesn't support POPCNT"
+ #endif
+#endif
+
#ifdef _MSC_VER
#include <nmmintrin.h>
#else
@@ -11,7 +24,7 @@ int main(int argc, char **argv)
unsigned long long a = *((unsigned long long*)argv[argc-1]);
unsigned int b = *((unsigned int*)argv[argc-2]);
-#if defined(_M_X64) || defined(__x86_64__)
+#if defined(_M_X64) || defined(__x86_64__)
a = _mm_popcnt_u64(a);
#endif
b = _mm_popcnt_u32(b);
diff --git a/numpy/distutils/checks/cpu_sse.c b/numpy/distutils/checks/cpu_sse.c
index bb98bf63c..602b74e7b 100644
--- a/numpy/distutils/checks/cpu_sse.c
+++ b/numpy/distutils/checks/cpu_sse.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #ifndef __SSE__
+ #error "HOST/ARCH doesn't support SSE"
+ #endif
+#endif
+
#include <xmmintrin.h>
int main(void)
diff --git a/numpy/distutils/checks/cpu_sse2.c b/numpy/distutils/checks/cpu_sse2.c
index 658afc9b4..33826a9ed 100644
--- a/numpy/distutils/checks/cpu_sse2.c
+++ b/numpy/distutils/checks/cpu_sse2.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #ifndef __SSE2__
+ #error "HOST/ARCH doesn't support SSE2"
+ #endif
+#endif
+
#include <emmintrin.h>
int main(void)
diff --git a/numpy/distutils/checks/cpu_sse3.c b/numpy/distutils/checks/cpu_sse3.c
index aece1e601..d47c20f74 100644
--- a/numpy/distutils/checks/cpu_sse3.c
+++ b/numpy/distutils/checks/cpu_sse3.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #ifndef __SSE3__
+ #error "HOST/ARCH doesn't support SSE3"
+ #endif
+#endif
+
#include <pmmintrin.h>
int main(void)
diff --git a/numpy/distutils/checks/cpu_sse41.c b/numpy/distutils/checks/cpu_sse41.c
index bfdb9feac..7c80238a3 100644
--- a/numpy/distutils/checks/cpu_sse41.c
+++ b/numpy/distutils/checks/cpu_sse41.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #ifndef __SSE4_1__
+ #error "HOST/ARCH doesn't support SSE41"
+ #endif
+#endif
+
#include <smmintrin.h>
int main(void)
diff --git a/numpy/distutils/checks/cpu_sse42.c b/numpy/distutils/checks/cpu_sse42.c
index 24f5d93fe..f60e18f3c 100644
--- a/numpy/distutils/checks/cpu_sse42.c
+++ b/numpy/distutils/checks/cpu_sse42.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #ifndef __SSE4_2__
+ #error "HOST/ARCH doesn't support SSE42"
+ #endif
+#endif
+
#include <smmintrin.h>
int main(void)
diff --git a/numpy/distutils/checks/cpu_ssse3.c b/numpy/distutils/checks/cpu_ssse3.c
index ad0abc1e6..fde390d6a 100644
--- a/numpy/distutils/checks/cpu_ssse3.c
+++ b/numpy/distutils/checks/cpu_ssse3.c
@@ -1,3 +1,16 @@
+#if defined(DETECT_FEATURES) && defined(__INTEL_COMPILER)
+ /*
+ * Unlike GCC and CLANG, Intel Compiler exposes all supported intrinsics,
+ * whether or not the build options for those features are specified.
+ * Therefore, we must test #definitions of CPU features when option native/host
+ * is enabled via `--cpu-baseline` or through env var `CFLAGS` otherwise
+ * the test will be broken and leads to enable all possible features.
+ */
+ #ifndef __SSSE3__
+ #error "HOST/ARCH doesn't support SSSE3"
+ #endif
+#endif
+
#include <tmmintrin.h>
int main(void)