Refs #401. Added NO_AVX2 flag for old binutils (e.g. RHEL6)
authorZhang Xianyi <traits.zhang@gmail.com>
Wed, 16 Jul 2014 00:37:55 +0000 (08:37 +0800)
committerZhang Xianyi <traits.zhang@gmail.com>
Wed, 16 Jul 2014 00:38:25 +0000 (08:38 +0800)
Makefile.rule
Makefile.system
cpuid_x86.c
driver/others/dynamic.c

index bc05fe3..83c157c 100644 (file)
@@ -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
 
index 1f9e861..c872a55 100644 (file)
@@ -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
 
index b7355df..53016e1 100644 (file)
@@ -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;
         }
index a044343..1235df2 100644 (file)
@@ -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