diff --git a/cpuid_x86.c b/cpuid_x86.c index dff150701..6b6bc0f26 100644 --- a/cpuid_x86.c +++ b/cpuid_x86.c @@ -1205,8 +1205,34 @@ int get_cpuname(void){ #endif else return CPUTYPE_NEHALEM; + case 7: + // Xeon Phi Knights Landing + if(support_avx()) +#ifndef NO_AVX2 + return CPUTYPE_HASWELL; +#else + return CPUTYPE_SANDYBRIDGE; +#endif + else + return CPUTYPE_NEHALEM; + case 12: + // Apollo Lake + return CPUTYPE_NEHALEM; } break; + case 8: + switch (model) { + case 14: // Kaby Lake + if(support_avx()) +#ifndef NO_AVX2 + return CPUTYPE_HASWELL; +#else + return CPUTYPE_SANDYBRIDGE; +#endif + else + return CPUTYPE_NEHALEM; + } + break; } break; case 0x7: @@ -1713,8 +1739,24 @@ int get_coretype(void){ #endif else return CORE_NEHALEM; - } + case 7: + // Phi Knights Landing + if(support_avx()) +#ifndef NO_AVX2 + return CORE_HASWELL; +#else + return CORE_SANDYBRIDGE; +#endif + else + return CORE_NEHALEM; + case 12: + // Apollo Lake + return CORE_NEHALEM; + } break; + case 8: + if (model == 14) // Kaby Lake + return CORE_HASWELL; } break; diff --git a/driver/others/dynamic.c b/driver/others/dynamic.c index a09660f94..9bb96b76e 100644 --- a/driver/others/dynamic.c +++ b/driver/others/dynamic.c @@ -264,7 +264,6 @@ static gotoblas_t *get_coretype(void){ } //Intel Braswell / Avoton if (model == 12 || model == 13) { - openblas_warning(FALLBACK_VERBOSE, NEHALEM_FALLBACK); return &gotoblas_NEHALEM; } return NULL; @@ -287,6 +286,29 @@ static gotoblas_t *get_coretype(void){ return &gotoblas_NEHALEM; //OS doesn't support AVX. Use old kernels. } } + //Intel Phi Knights Landing + if (model == 7) { + if(support_avx()) + return &gotoblas_HASWELL; + else{ + openblas_warning(FALLBACK_VERBOSE, NEHALEM_FALLBACK); + return &gotoblas_NEHALEM; //OS doesn't support AVX. Use old kernels. + } + } + //Apollo Lake + if (model == 14) { + return &gotoblas_NEHALEM; + } + return NULL; + case 8: + if (model == 14 ) { // Kaby Lake + if(support_avx()) + return &gotoblas_HASWELL; + else{ + openblas_warning(FALLBACK_VERBOSE, NEHALEM_FALLBACK); + return &gotoblas_NEHALEM; //OS doesn't support AVX. Use old kernels. + } + } return NULL; } case 0xf: