diff --git a/.travis.yml b/.travis.yml index 71875d79c..51cd5ea76 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,33 +1,73 @@ language: c sudo: false +os: + - linux + - osx + compiler: - gcc + - clang env: - - RUN_TEST=1 BUILD_CONFIG="auto" - - RUN_TEST=1 BUILD_CONFIG="reference" - - RUN_TEST=1 BUILD_CONFIG="dunnington" - - RUN_TEST=0 BUILD_CONFIG="sandybridge" - - RUN_TEST=0 BUILD_CONFIG="haswell" - - RUN_TEST=0 BUILD_CONFIG="bulldozer" - - RUN_TEST=0 BUILD_CONFIG="piledriver" - - RUN_TEST=0 BUILD_CONFIG="carrizo" + - RUN_TEST=1 THREADING="none" BUILD_CONFIG="auto" + - RUN_TEST=1 THREADING="none" BUILD_CONFIG="reference" + - RUN_TEST=1 THREADING="none" BUILD_CONFIG="dunnington" + - RUN_TEST=0 THREADING="none" BUILD_CONFIG="sandybridge" + - RUN_TEST=0 THREADING="none" BUILD_CONFIG="knl" + - RUN_TEST=0 THREADING="none" BUILD_CONFIG="haswell" + - RUN_TEST=0 THREADING="none" BUILD_CONFIG="bulldozer" + - RUN_TEST=0 THREADING="none" BUILD_CONFIG="piledriver" + - RUN_TEST=0 THREADING="none" BUILD_CONFIG="carrizo" + - RUN_TEST=0 THREADING="openmp" BUILD_CONFIG="auto" + - RUN_TEST=0 THREADING="pthreads" BUILD_CONFIG="auto" + +matrix: + allow_failures: + - env: RUN_TEST=0 THREADING="none" BUILD_CONFIG="knl" + exclude: + - os: linux + compiler: clang + - os: osx + compiler: gcc + - os: osx + env: RUN_TEST=1 THREADING="none" BUILD_CONFIG="reference" + - os: osx + env: RUN_TEST=1 THREADING="none" BUILD_CONFIG="dunnington" + - os: osx + env: RUN_TEST=0 THREADING="none" BUILD_CONFIG="sandybridge" + - os: osx + env: RUN_TEST=0 THREADING="none" BUILD_CONFIG="knl" + - os: osx + env: RUN_TEST=0 THREADING="none" BUILD_CONFIG="haswell" + - os: osx + env: RUN_TEST=0 THREADING="none" BUILD_CONFIG="bulldozer" + - os: osx + env: RUN_TEST=0 THREADING="none" BUILD_CONFIG="piledriver" + - os: osx + env: RUN_TEST=0 THREADING="none" BUILD_CONFIG="carrizo" + - os: osx + env: RUN_TEST=0 THREADING="openmp" BUILD_CONFIG="auto" install: -- if [ "$CC" = "gcc" ]; then export CC="gcc-4.9"; fi + - if [ "$CC" = "gcc" ] && [ "$TRAVIS_OS_NAME" = "linux" ]; then export CC="gcc-5"; fi + addons: apt: sources: - ubuntu-toolchain-r-test packages: - - gcc-4.9 + - gcc-5 - clang - - - + script: - - ./configure $BUILD_CONFIG - - make CC=gcc-4.9 + - ./configure -t $THREADING CC=$CC $BUILD_CONFIG + - $CC --version + - make -j 2 + - export BLIS_IC_NT=2 + - export BLIS_JC_NT=1 + - export BLIS_IR_NT=1 + - export BLIS_JR_NT=1 - if [ $RUN_TEST -eq 1 ]; then make BLIS_ENABLE_TEST_OUTPUT=yes test; fi - if [ $RUN_TEST -eq 1 ]; then ./build/check-test.sh ./output.testsuite; fi + diff --git a/build/auto-detect/cpuid_x86.c b/build/auto-detect/cpuid_x86.c index 9a703c085..07ca004f0 100644 --- a/build/auto-detect/cpuid_x86.c +++ b/build/auto-detect/cpuid_x86.c @@ -43,14 +43,18 @@ #define CPUNAME_DUNNINGTON 1 #define CPUNAME_SANDYBRIDGE 2 #define CPUNAME_HASWELL 3 -#define CPUNAME_BULLDOZER 4 -#define CPUNAME_PILEDRIVER 5 +#define CPUNAME_KNL 4 +#define CPUNAME_KNC 5 +#define CPUNAME_BULLDOZER 6 +#define CPUNAME_PILEDRIVER 7 static char *cpuname[] = { "reference", "dunnington", "sandybridge", "haswell", + "knl", + "mic", "bulldozer", "piledriver", }; @@ -118,6 +122,19 @@ int support_avx(){ return ret; } +int support_avx512(){ + int eax, ebx, ecx, edx; + int ret=0; + + cpuid(1, &eax, &ebx, &ecx, &edx); + if ((ecx & (1 << 28)) != 0 && (ecx & (1 << 27)) != 0 && (ecx & (1 << 26)) != 0){ + xgetbv(0, &eax, &edx); + if((eax & 0xE6) == 0xE6){ + ret=1; //OS support AVX-512 + } + } + return ret; +} int cpu_detect() { @@ -136,79 +153,56 @@ int cpu_detect() model = BITMASK( eax, 4, 0x0f ); if (vendor == VENDOR_INTEL){ + model |= extend_model<<4; switch (family) { case 0x6: - switch (extend_model) { - case 1: - switch (model) { - case 7: - //penryn uses dunnington config. + switch (model) { + case 0x0F: //Core2 + case 0x16: //Core2 + case 0x17: //Penryn + case 0x1D: //Penryn + case 0x1A: //Nehalem + case 0x1E: //Nehalem + case 0x2E: //Nehalem + case 0x25: //Westmere + case 0x2C: //Westmere + case 0x2F: //Westmere return CPUNAME_DUNNINGTON; - case 13: - return CPUNAME_DUNNINGTON; - } - break; - case 2: - switch (model) { - case 10: - case 13: + case 0x2A: //Sandy Bridge + case 0x2D: //Sandy Bridge + case 0x3A: //Ivy Bridge + case 0x3E: //Ivy Bridge if(support_avx()) { return CPUNAME_SANDYBRIDGE; }else{ return CPUNAME_REFERENCE; //OS doesn't support AVX } - } - break; - case 3: - switch (model) { - case 10: - case 14: - //Ivy Bridge - if(support_avx()) { - return CPUNAME_SANDYBRIDGE; - }else{ - return CPUNAME_REFERENCE; //OS doesn't support AVX - } - case 12: - case 15: - //Haswell - case 13: //Broadwell + case 0x3C: //Haswell + case 0x3F: //Haswell + case 0x3D: //Broadwell + case 0x47: //Broadwell + case 0x4F: //Broadwell + case 0x56: //Broadwell + case 0x4E: //Skylake + case 0x5E: //Skylake if(support_avx()) { return CPUNAME_HASWELL; }else{ return CPUNAME_REFERENCE; //OS doesn't support AVX } - - } - break; - case 4: - switch (model) { - case 5: - case 6: - //Haswell - case 7: - case 15: - //Broadwell - if(support_avx()) { - return CPUNAME_HASWELL; + case 0x57: //KNL + if(support_avx512()) { + return CPUNAME_KNL; }else{ return CPUNAME_REFERENCE; //OS doesn't support AVX } - } - break; - case 5: - switch (model) { - case 6: - //Broadwell - if(support_avx()) { - return CPUNAME_HASWELL; - }else{ - return CPUNAME_REFERENCE; //OS doesn't support AVX - } - } - break; } break; + case 0xB: + switch (model) { + case 0x01: //KNC + return CPUNAME_KNC; + } } }else if (vendor == VENDOR_AMD){ switch (family) { diff --git a/config/reference/make_defs.mk b/config/reference/make_defs.mk index 736e5ee4d..16e4b1294 100644 --- a/config/reference/make_defs.mk +++ b/config/reference/make_defs.mk @@ -47,9 +47,7 @@ ifeq ($(CC),) CC := gcc CC_VENDOR := gcc endif -ifneq ($(CC_VENDOR),gcc) -$(error gcc is required for this configuration.) -endif + # Enable IEEE Standard 1003.1-2004 (POSIX.1d). # NOTE: This is needed to enable posix_memalign(). CPPROCFLAGS := -D_POSIX_C_SOURCE=200112L @@ -70,6 +68,17 @@ endif CVECFLAGS := CKOPTFLAGS := $(COPTFLAGS) +ifeq ($(CC_VENDOR),gcc) +else +ifeq ($(CC_VENDOR),icc) +else +ifeq ($(CC_VENDOR),clang) +else +$(error gcc, icc, or clang is required for this configuration.) +endif +endif +endif + # --- Determine the archiver and related flags --- AR := ar ARFLAGS := cru