Separate Skylake X from Skylake
authorMartin Kroeker <martin@ruby.chemie.uni-freiburg.de>
Sun, 3 Jun 2018 21:41:33 +0000 (23:41 +0200)
committerGitHub <noreply@github.com>
Sun, 3 Jun 2018 21:41:33 +0000 (23:41 +0200)
driver/others/dynamic.c

index a0c9794..5e9a24b 100644 (file)
@@ -79,6 +79,11 @@ extern gotoblas_t  gotoblas_EXCAVATOR;
 #else
 extern gotoblas_t  gotoblas_HASWELL;
 extern gotoblas_t  gotoblas_ZEN;
+#ifndef NO_AVX512
+extern gotoblas_t  gotoblas_SKYLAKEX;
+#else
+#define gotoblas_SKYLAKEX gotoblas_HASWELL;
+#endif
 #endif
 #else
 //Use NEHALEM kernels for sandy bridge
@@ -286,8 +291,21 @@ static gotoblas_t *get_coretype(void){
            return &gotoblas_NEHALEM; //OS doesn't support AVX. Use old kernels.
          }
        }
+       if (model == 5) {       
+       // Intel Skylake X
+#ifndef NO_AVX512
+         return $gotoblas_SKYLAKEX;
+#else          
+         if(support_avx())
+           return &gotoblas_HASWELL;
+         else {
+           openblas_warning(FALLBACK_VERBOSE, NEHALEM_FALLBACK);
+           return &gotoblas_NEHALEM;
+         }
+       }
+#endif
        //Intel Skylake
-       if (model == 14 || model == 5) {
+       if (model == 14) {
          if(support_avx())
            return &gotoblas_HASWELL;
          else{
@@ -447,7 +465,8 @@ static char *corename[] = {
     "Haswell",
     "Steamroller",
     "Excavator",
-    "Zen"
+    "Zen",
+    "SkylakeX" 
 };
 
 char *gotoblas_corename(void) {
@@ -475,7 +494,7 @@ char *gotoblas_corename(void) {
   if (gotoblas == &gotoblas_STEAMROLLER)  return corename[21];
   if (gotoblas == &gotoblas_EXCAVATOR)    return corename[22];
   if (gotoblas == &gotoblas_ZEN)          return corename[23];
-
+  if (gotoblas == &gotoblas_SKYLAKEX)     return corename[24];
   return corename[0];
 }
 
@@ -505,6 +524,7 @@ static gotoblas_t *force_coretype(char *coretype){
 
        switch (found)
        {
+               case 24: return (&gotoblas_SKYLAKEX);   
                case 23: return (&gotoblas_ZEN);
                case 22: return (&gotoblas_EXCAVATOR);
                case 21: return (&gotoblas_STEAMROLLER);