Refs #529. Support Intel Broadwell by Haswell kernels.
authorZhang Xianyi <traits.zhang@gmail.com>
Thu, 2 Apr 2015 16:08:03 +0000 (11:08 -0500)
committerZhang Xianyi <traits.zhang@gmail.com>
Thu, 2 Apr 2015 16:08:03 +0000 (11:08 -0500)
cpuid_x86.c
driver/others/dynamic.c

index ef90b26..aece9d8 100644 (file)
@@ -1101,6 +1101,16 @@ int get_cpuname(void){
 #endif
           else
            return CPUTYPE_NEHALEM;
+       case 13:
+         //Broadwell
+          if(support_avx())
+#ifndef NO_AVX2
+            return CPUTYPE_HASWELL;
+#else
+           return CPUTYPE_SANDYBRIDGE;
+#endif
+          else
+           return CPUTYPE_NEHALEM;
        }
        break;
       case 4:
@@ -1115,8 +1125,33 @@ int get_cpuname(void){
 #endif
           else
            return CPUTYPE_NEHALEM;
+       case 7:
+       case 15:
+         //Broadwell
+          if(support_avx())
+#ifndef NO_AVX2
+            return CPUTYPE_HASWELL;
+#else
+           return CPUTYPE_SANDYBRIDGE;
+#endif
+          else
+           return CPUTYPE_NEHALEM;
         }
         break;
+      case 5:
+        switch (model) {
+       case 6:
+         //Broadwell
+          if(support_avx())
+#ifndef NO_AVX2
+            return CPUTYPE_HASWELL;
+#else
+           return CPUTYPE_SANDYBRIDGE;
+#endif
+          else
+           return CPUTYPE_NEHALEM;
+       }
+       break;
       }
       break;
     case 0x7:
@@ -1528,6 +1563,16 @@ int get_coretype(void){
 #endif
           else
            return CORE_NEHALEM;
+       case 13:
+         //broadwell
+          if(support_avx())
+#ifndef NO_AVX2
+            return CORE_HASWELL;
+#else
+           return CORE_SANDYBRIDGE;
+#endif
+          else
+           return CORE_NEHALEM;
        }
        break;
       case 4:
@@ -1542,8 +1587,33 @@ int get_coretype(void){
 #endif
           else
            return CORE_NEHALEM;
+       case 7:
+       case 15:
+         //broadwell
+          if(support_avx())
+#ifndef NO_AVX2
+            return CORE_HASWELL;
+#else
+           return CORE_SANDYBRIDGE;
+#endif
+          else
+           return CORE_NEHALEM;
         }
         break;
+      case 5:
+        switch (model) {
+       case 6:
+         //broadwell
+          if(support_avx())
+#ifndef NO_AVX2
+            return CORE_HASWELL;
+#else
+           return CORE_SANDYBRIDGE;
+#endif
+          else
+           return CORE_NEHALEM;
+       }
+       break;
       }
       break;
 
index 60b3c72..6945c17 100644 (file)
@@ -221,6 +221,15 @@ static gotoblas_t *get_coretype(void){
            return &gotoblas_NEHALEM; //OS doesn't support AVX. Use old kernels.
          }
        }
+       //Intel Broadwell
+       if (model == 13) {
+         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 4:
                //Intel Haswell
@@ -232,6 +241,26 @@ static gotoblas_t *get_coretype(void){
            return &gotoblas_NEHALEM; //OS doesn't support AVX. Use old kernels.
          }
        }
+       //Intel Broadwell
+       if (model == 7 || model == 15) {
+         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 5:
+       //Intel Broadwell
+       if (model == 6) {
+         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: