From a3db4e6bdfe745083acf704ab0f51f74ea869538 Mon Sep 17 00:00:00 2001 From: Devin Matthews Date: Tue, 1 Nov 2016 10:33:18 -0500 Subject: [PATCH 1/5] Update .travis.yml with additional tests - Test knl configuration (without running of course). - Test openmp and pthreads threading for auto configuration with 4 threads. - Test auto configuration with and without pthreads on OSX. - Also, run make in parallel. I don't know how the `addons:` section works on OSX; hopefully it is just ignored. --- .travis.yml | 60 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/.travis.yml b/.travis.yml index 71875d79c..e08146656 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,21 +1,50 @@ language: c sudo: false +os: + - linux + - osx + compiler: - gcc 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=1 THREADING="openmp" BUILD_CONFIG="auto" + - RUN_TEST=1 THREADING="pthreads" BUILD_CONFIG="auto" + +matrix: + exclude: + - 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=1 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-4.9"; fi + addons: apt: sources: @@ -23,11 +52,14 @@ addons: packages: - gcc-4.9 - clang - - - + script: - - ./configure $BUILD_CONFIG - - make CC=gcc-4.9 + - ./configure -t $THREADING $BUILD_CONFIG + - $CC --version + - make -j 4 + - export BLIS_IC_NT=2 + - export BLIS_JC_NT=1 + - export BLIS_IR_NT=1 + - export BLIS_JR_NT=2 - 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 From 2cd82d67b372cad1bed50cfd99e524f1f40b4e24 Mon Sep 17 00:00:00 2001 From: Devin Matthews Date: Tue, 1 Nov 2016 13:25:50 -0500 Subject: [PATCH 2/5] Some fixes for .travis.yml - Switch to gcc-5 to support knl - Don't run tests in parallel -- it is super slow. - Use clang on OSX since gcc is only a zombie husk. --- .travis.yml | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index e08146656..3539425c0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,7 @@ os: compiler: - gcc + - clang env: - RUN_TEST=1 THREADING="none" BUILD_CONFIG="auto" @@ -18,11 +19,15 @@ env: - 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=1 THREADING="openmp" BUILD_CONFIG="auto" - - RUN_TEST=1 THREADING="pthreads" BUILD_CONFIG="auto" + - RUN_TEST=0 THREADING="openmp" BUILD_CONFIG="auto" + - RUN_TEST=0 THREADING="pthreads" BUILD_CONFIG="auto" matrix: exclude: + - os: linux + compiler: clang + - os: osx + compiler: gcc - os: osx env: RUN_TEST=1 THREADING="none" BUILD_CONFIG="reference" - os: osx @@ -40,26 +45,26 @@ matrix: - os: osx env: RUN_TEST=0 THREADING="none" BUILD_CONFIG="carrizo" - os: osx - env: RUN_TEST=1 THREADING="openmp" BUILD_CONFIG="auto" + env: RUN_TEST=0 THREADING="openmp" BUILD_CONFIG="auto" install: - - if [ "$CC" = "gcc" ] && [ "$TRAVIS_OS_NAME" = "linux" ]; 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 -t $THREADING $BUILD_CONFIG + - ./configure -t $THREADING CC=$CC $BUILD_CONFIG - $CC --version - - make -j 4 + - make -j 2 - export BLIS_IC_NT=2 - export BLIS_JC_NT=1 - export BLIS_IR_NT=1 - - export BLIS_JR_NT=2 + - 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 From 1a67e3688edb073a9d44c160e7b0798e08796b8a Mon Sep 17 00:00:00 2001 From: Devin Matthews Date: Tue, 1 Nov 2016 13:53:18 -0500 Subject: [PATCH 3/5] Bogus commit Need to trigger another Travis build. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 3539425c0..50de3a766 100644 --- a/.travis.yml +++ b/.travis.yml @@ -68,3 +68,4 @@ script: - 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 + From 8f9010542c751ae3cbfe6121cb011d8985c1e00d Mon Sep 17 00:00:00 2001 From: Devin Matthews Date: Wed, 2 Nov 2016 11:18:32 -0500 Subject: [PATCH 4/5] Fix some problems with OSX builds: - Update CPU detection for Intel archs (esp. Skylake) - Allow clang for the reference config --- build/auto-detect/cpuid_x86.c | 108 ++++++++++++++++------------------ config/reference/make_defs.mk | 15 ++++- 2 files changed, 63 insertions(+), 60 deletions(-) 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 From 62987f60a6a6ff0a75b31d0404f493593ce35ccc Mon Sep 17 00:00:00 2001 From: Devin Matthews Date: Wed, 2 Nov 2016 11:20:37 -0500 Subject: [PATCH 5/5] Allow KNL to fail --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 50de3a766..51cd5ea76 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,6 +23,8 @@ env: - 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