| @@ -99,6 +99,9 @@ NO_AFFINITY = 1 | |||||
| # and OS. However, the performance is low. | # and OS. However, the performance is low. | ||||
| # NO_AVX = 1 | # NO_AVX = 1 | ||||
| # Don't use Haswell optimizations if binutils is too old (e.g. RHEL6) | |||||
| # NO_AVX2 = 1 | |||||
| # Don't use parallel make. | # Don't use parallel make. | ||||
| # NO_PARALLEL_MAKE = 1 | # NO_PARALLEL_MAKE = 1 | ||||
| @@ -109,6 +109,10 @@ ifeq ($(BINARY), 32) | |||||
| GETARCH_FLAGS += -DNO_AVX | GETARCH_FLAGS += -DNO_AVX | ||||
| endif | endif | ||||
| ifeq ($(NO_AVX2), 1) | |||||
| GETARCH_FLAGS += -DNO_AVX2 | |||||
| endif | |||||
| ifeq ($(DEBUG), 1) | ifeq ($(DEBUG), 1) | ||||
| GETARCH_FLAGS += -g | GETARCH_FLAGS += -g | ||||
| endif | endif | ||||
| @@ -385,7 +389,10 @@ endif | |||||
| ifeq ($(ARCH), x86_64) | ifeq ($(ARCH), x86_64) | ||||
| DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO | DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO | ||||
| ifneq ($(NO_AVX), 1) | 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 | ||||
| endif | endif | ||||
| @@ -777,6 +784,10 @@ ifeq ($(BINARY), 32) | |||||
| CCOMMON_OPT += -DNO_AVX | CCOMMON_OPT += -DNO_AVX | ||||
| endif | endif | ||||
| ifeq ($(NO_AVX2), 1) | |||||
| CCOMMON_OPT += -DNO_AVX2 | |||||
| endif | |||||
| ifdef SMP | ifdef SMP | ||||
| CCOMMON_OPT += -DSMP_SERVER | CCOMMON_OPT += -DSMP_SERVER | ||||
| @@ -1062,7 +1062,11 @@ int get_cpuname(void){ | |||||
| case 12: | case 12: | ||||
| case 15: | case 15: | ||||
| if(support_avx()) | if(support_avx()) | ||||
| #ifndef NO_AVX2 | |||||
| return CPUTYPE_HASWELL; | return CPUTYPE_HASWELL; | ||||
| #else | |||||
| return CPUTYPE_SANDYBRIDGE; | |||||
| #endif | |||||
| else | else | ||||
| return CPUTYPE_NEHALEM; | return CPUTYPE_NEHALEM; | ||||
| } | } | ||||
| @@ -1072,7 +1076,11 @@ int get_cpuname(void){ | |||||
| case 5: | case 5: | ||||
| case 6: | case 6: | ||||
| if(support_avx()) | if(support_avx()) | ||||
| #ifndef NO_AVX2 | |||||
| return CPUTYPE_HASWELL; | return CPUTYPE_HASWELL; | ||||
| #else | |||||
| return CPUTYPE_SANDYBRIDGE; | |||||
| #endif | |||||
| else | else | ||||
| return CPUTYPE_NEHALEM; | return CPUTYPE_NEHALEM; | ||||
| } | } | ||||
| @@ -1471,7 +1479,11 @@ int get_coretype(void){ | |||||
| case 12: | case 12: | ||||
| case 15: | case 15: | ||||
| if(support_avx()) | if(support_avx()) | ||||
| #ifndef NO_AVX2 | |||||
| return CORE_HASWELL; | return CORE_HASWELL; | ||||
| #else | |||||
| return CORE_SANDYBRIDGE; | |||||
| #endif | |||||
| else | else | ||||
| return CORE_NEHALEM; | return CORE_NEHALEM; | ||||
| } | } | ||||
| @@ -1481,7 +1493,11 @@ int get_coretype(void){ | |||||
| case 5: | case 5: | ||||
| case 6: | case 6: | ||||
| if(support_avx()) | if(support_avx()) | ||||
| #ifndef NO_AVX2 | |||||
| return CORE_HASWELL; | return CORE_HASWELL; | ||||
| #else | |||||
| return CORE_SANDYBRIDGE; | |||||
| #endif | |||||
| else | else | ||||
| return CORE_NEHALEM; | return CORE_NEHALEM; | ||||
| } | } | ||||
| @@ -66,7 +66,11 @@ extern gotoblas_t gotoblas_BOBCAT; | |||||
| extern gotoblas_t gotoblas_SANDYBRIDGE; | extern gotoblas_t gotoblas_SANDYBRIDGE; | ||||
| extern gotoblas_t gotoblas_BULLDOZER; | extern gotoblas_t gotoblas_BULLDOZER; | ||||
| extern gotoblas_t gotoblas_PILEDRIVER; | extern gotoblas_t gotoblas_PILEDRIVER; | ||||
| #ifdef NO_AVX2 | |||||
| #define gotoblas_HASWELL gotoblas_SANDYBRIDGE | |||||
| #else | |||||
| extern gotoblas_t gotoblas_HASWELL; | extern gotoblas_t gotoblas_HASWELL; | ||||
| #endif | |||||
| #else | #else | ||||
| //Use NEHALEM kernels for sandy bridge | //Use NEHALEM kernels for sandy bridge | ||||
| #define gotoblas_SANDYBRIDGE gotoblas_NEHALEM | #define gotoblas_SANDYBRIDGE gotoblas_NEHALEM | ||||