From c94762bb5610348b46498e82e6f37023be34d4bb Mon Sep 17 00:00:00 2001 From: Zhang Xianyi Date: Wed, 16 Jul 2014 08:37:55 +0800 Subject: [PATCH] Refs #401. Added NO_AVX2 flag for old binutils (e.g. RHEL6) --- Makefile.rule | 3 +++ Makefile.system | 13 ++++++++++++- cpuid_x86.c | 16 ++++++++++++++++ driver/others/dynamic.c | 4 ++++ 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/Makefile.rule b/Makefile.rule index bc05fe31..83c157cb 100644 --- a/Makefile.rule +++ b/Makefile.rule @@ -99,6 +99,9 @@ NO_AFFINITY = 1 # and OS. However, the performance is low. # NO_AVX = 1 +# Don't use Haswell optimizations if binutils is too old (e.g. RHEL6) +# NO_AVX2 = 1 + # Don't use parallel make. # NO_PARALLEL_MAKE = 1 diff --git a/Makefile.system b/Makefile.system index 1f9e8618..c872a55d 100644 --- a/Makefile.system +++ b/Makefile.system @@ -109,6 +109,10 @@ ifeq ($(BINARY), 32) GETARCH_FLAGS += -DNO_AVX endif +ifeq ($(NO_AVX2), 1) +GETARCH_FLAGS += -DNO_AVX2 +endif + ifeq ($(DEBUG), 1) GETARCH_FLAGS += -g endif @@ -385,7 +389,10 @@ endif ifeq ($(ARCH), x86_64) DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO ifneq ($(NO_AVX), 1) -DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER HASWELL +DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER +endif +ifneq ($(NO_AVX2), 1) +DYNAMIC_CORE += HASWELL endif endif @@ -777,6 +784,10 @@ ifeq ($(BINARY), 32) CCOMMON_OPT += -DNO_AVX endif +ifeq ($(NO_AVX2), 1) +CCOMMON_OPT += -DNO_AVX2 +endif + ifdef SMP CCOMMON_OPT += -DSMP_SERVER diff --git a/cpuid_x86.c b/cpuid_x86.c index b7355df9..53016e1e 100644 --- a/cpuid_x86.c +++ b/cpuid_x86.c @@ -1062,7 +1062,11 @@ int get_cpuname(void){ case 12: case 15: if(support_avx()) +#ifndef NO_AVX2 return CPUTYPE_HASWELL; +#else + return CPUTYPE_SANDYBRIDGE; +#endif else return CPUTYPE_NEHALEM; } @@ -1072,7 +1076,11 @@ int get_cpuname(void){ case 5: case 6: if(support_avx()) +#ifndef NO_AVX2 return CPUTYPE_HASWELL; +#else + return CPUTYPE_SANDYBRIDGE; +#endif else return CPUTYPE_NEHALEM; } @@ -1471,7 +1479,11 @@ int get_coretype(void){ case 12: case 15: if(support_avx()) +#ifndef NO_AVX2 return CORE_HASWELL; +#else + return CORE_SANDYBRIDGE; +#endif else return CORE_NEHALEM; } @@ -1481,7 +1493,11 @@ int get_coretype(void){ case 5: case 6: if(support_avx()) +#ifndef NO_AVX2 return CORE_HASWELL; +#else + return CORE_SANDYBRIDGE; +#endif else return CORE_NEHALEM; } diff --git a/driver/others/dynamic.c b/driver/others/dynamic.c index a044343e..1235df2d 100644 --- a/driver/others/dynamic.c +++ b/driver/others/dynamic.c @@ -66,7 +66,11 @@ extern gotoblas_t gotoblas_BOBCAT; extern gotoblas_t gotoblas_SANDYBRIDGE; extern gotoblas_t gotoblas_BULLDOZER; extern gotoblas_t gotoblas_PILEDRIVER; +#ifdef NO_AVX2 +#define gotoblas_HASWELL gotoblas_SANDYBRIDGE +#else extern gotoblas_t gotoblas_HASWELL; +#endif #else //Use NEHALEM kernels for sandy bridge #define gotoblas_SANDYBRIDGE gotoblas_NEHALEM -- 2.34.1