github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/third_party/toolchains/clang6/README.md (about) 1 # TensorFlow Bazel Clang 2 3 This is a specialized toolchain that uses an old Debian with a new Clang that 4 can cross compile to any x86_64 microarchitecture. It's intended to build Linux 5 binaries that only require the following ABIs: 6 7 - GLIBC_2.18 8 - CXXABI_1.3.7 (GCC 4.8.3) 9 - GCC_4.2.0 10 11 Which are available on at least the following Linux platforms: 12 13 - Ubuntu 14+ 14 - CentOS 7+ 15 - Debian 8+ 16 - SuSE 13.2+ 17 - Mint 17.3+ 18 - Manjaro 0.8.11 19 20 # System Install 21 22 On Debian 8 (Jessie) Clang 6.0 can be installed as follows: 23 24 ```sh 25 cat >>/etc/apt/sources.list <<'EOF' 26 deb http://apt.llvm.org/jessie/ llvm-toolchain-jessie main 27 deb-src http://apt.llvm.org/jessie/ llvm-toolchain-jessie main 28 EOF 29 wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - 30 apt-key fingerprint |& grep '6084 F3CF 814B 57C1 CF12 EFD5 15CF 4D18 AF4F 7421' 31 apt-get update 32 apt-get install clang lld 33 ``` 34 35 # Bazel Configuration 36 37 This toolchain can compile TensorFlow in 2m30s on a 96-core Skylake GCE VM if 38 the following `.bazelrc` settings are added: 39 40 ``` 41 startup --host_jvm_args=-Xmx30G 42 startup --host_jvm_args=-Xms30G 43 startup --host_jvm_args=-XX:MaxNewSize=3g 44 startup --host_jvm_args=-XX:-UseAdaptiveSizePolicy 45 startup --host_jvm_args=-XX:+UseConcMarkSweepGC 46 startup --host_jvm_args=-XX:TargetSurvivorRatio=70 47 startup --host_jvm_args=-XX:SurvivorRatio=6 48 startup --host_jvm_args=-XX:+UseCMSInitiatingOccupancyOnly 49 startup --host_jvm_args=-XX:CMSFullGCsBeforeCompaction=1 50 startup --host_jvm_args=-XX:CMSInitiatingOccupancyFraction=75 51 52 build --jobs=100 53 build --local_resources=200000,100,100 54 build --crosstool_top=@local_config_clang6//clang6 55 build --noexperimental_check_output_files 56 build --nostamp 57 build --config=opt 58 build --noexperimental_check_output_files 59 build --copt=-march=native 60 build --host_copt=-march=native 61 ``` 62 63 # x86_64 Microarchitectures 64 65 ## Intel CPU Line 66 67 - 2003 P6 M SSE SSE2 68 - 2004 prescott SSE3 SSSE3 (-march=prescott) 69 - 2006 core X64 SSE4.1 (only on 45nm variety) (-march=core2) 70 - 2008 nehalem SSE4.2 VT-x VT-d (-march=nehalem) 71 - 2010 westmere CLMUL AES (-march=westmere) 72 - 2012 sandybridge AVX TXT (-march=sandybridge) 73 - 2012 ivybridge F16C MOVBE (-march=ivybridge) 74 - 2013 haswell AVX2 TSX BMI2 FMA (-march=haswell) 75 - 2014 broadwell RDSEED ADCX PREFETCHW (-march=broadwell - works on trusty gcc4.9) 76 - 2015 skylake SGX ADX MPX AVX-512[xeon-only] (-march=skylake / -march=skylake-avx512 - needs gcc7) 77 - 2018 cannonlake AVX-512 SHA (-march=cannonlake - needs clang5) 78 79 ## Intel Low Power CPU Line 80 81 - 2013 silvermont SSE4.1 SSE4.2 VT-x (-march=silvermont) 82 - 2016 goldmont SHA (-march=goldmont - needs clang5) 83 84 ## AMD CPU Line 85 86 - 2003 k8 SSE SSE2 (-march=k8) 87 - 2005 k8 (Venus) SSE3 (-march=k8-sse3) 88 - 2008 barcelona SSE4a?! (-march=barcelona) 89 - 2011 bulldozer SSE4.1 SSE4.2 CLMUL AVX AES FMA4?! (-march=bdver1) 90 - 2011 piledriver FMA (-march=bdver2) 91 - 2015 excavator AVX2 BMI2 MOVBE (-march=bdver4) 92 93 ## Google Compute Engine Supported CPUs 94 95 - 2012 sandybridge 2.6gHz -march=sandybridge 96 - 2012 ivybridge 2.5gHz -march=ivybridge 97 - 2013 haswell 2.3gHz -march=haswell 98 - 2014 broadwell 2.2gHz -march=broadwell 99 - 2015 skylake 2.0gHz -march=skylake-avx512 100 101 See: <https://cloud.google.com/compute/docs/cpu-platforms>