SPEC(R) CPU2017 Floating Point Rate Result Lenovo Global Technology ThinkSystem SR850 (2.10 GHz, Intel Xeon Platinum 8176M) CPU2017 License: 9017 Test date: Mar-2018 Test sponsor: Lenovo Global Technology Hardware availability: Aug-2017 Tested by: Lenovo Global Technology Software availability: Feb-2018 Base Base Base Peak Peak Peak Benchmarks Copies Run Time Rate Copies Run Time Rate --------------- ------- --------- --------- ------- --------- --------- 503.bwaves_r 224 2297 978 S 224 2293 980 S 503.bwaves_r 224 2294 979 * 224 2292 980 S 503.bwaves_r 224 2290 981 S 224 2292 980 * 507.cactuBSSN_r 224 652 435 * 224 658 431 * 507.cactuBSSN_r 224 652 435 S 224 657 432 S 507.cactuBSSN_r 224 653 434 S 224 658 431 S 508.namd_r 224 554 384 S 224 541 394 S 508.namd_r 224 551 386 S 224 544 391 S 508.namd_r 224 553 385 * 224 541 393 * 510.parest_r 224 2483 236 * 224 2484 236 S 510.parest_r 224 2482 236 S 224 2499 235 S 510.parest_r 224 2502 234 S 224 2491 235 * 511.povray_r 224 879 595 S 224 732 715 S 511.povray_r 224 878 596 * 224 729 718 S 511.povray_r 224 878 596 S 224 732 715 * 519.lbm_r 224 993 238 S 224 983 240 S 519.lbm_r 224 992 238 S 224 983 240 * 519.lbm_r 224 993 238 * 224 983 240 S 521.wrf_r 224 1133 443 S 224 1134 442 * 521.wrf_r 224 1141 440 S 224 1132 443 S 521.wrf_r 224 1134 442 * 224 1136 442 S 526.blender_r 224 628 544 S 224 619 551 S 526.blender_r 224 626 545 S 224 620 550 S 526.blender_r 224 627 544 * 224 620 551 * 527.cam4_r 224 716 547 S 224 713 549 * 527.cam4_r 224 717 546 * 224 714 549 S 527.cam4_r 224 719 545 S 224 713 549 S 538.imagick_r 224 675 825 S 224 674 826 * 538.imagick_r 224 674 826 S 224 675 826 S 538.imagick_r 224 674 826 * 224 674 827 S 544.nab_r 224 515 732 S 224 504 748 * 544.nab_r 224 517 730 S 224 505 747 S 544.nab_r 224 516 731 * 224 503 749 S 549.fotonik3d_r 224 2890 302 S 224 2891 302 * 549.fotonik3d_r 224 2894 302 S 224 2891 302 S 549.fotonik3d_r 224 2890 302 * 224 2892 302 S 554.roms_r 224 1889 188 * 224 1850 192 S 554.roms_r 224 1889 188 S 224 1838 194 S 554.roms_r 224 1892 188 S 224 1845 193 * ================================================================================= 503.bwaves_r 224 2294 979 * 224 2292 980 * 507.cactuBSSN_r 224 652 435 * 224 658 431 * 508.namd_r 224 553 385 * 224 541 393 * 510.parest_r 224 2483 236 * 224 2491 235 * 511.povray_r 224 878 596 * 224 732 715 * 519.lbm_r 224 993 238 * 224 983 240 * 521.wrf_r 224 1134 442 * 224 1134 442 * 526.blender_r 224 627 544 * 224 620 551 * 527.cam4_r 224 717 546 * 224 713 549 * 538.imagick_r 224 674 826 * 224 674 826 * 544.nab_r 224 516 731 * 224 504 748 * 549.fotonik3d_r 224 2890 302 * 224 2891 302 * 554.roms_r 224 1889 188 * 224 1845 193 * SPECrate2017_fp_base 442 SPECrate2017_fp_peak 451 HARDWARE -------- CPU Name: Intel Xeon Platinum 8176M Max MHz.: 3800 Nominal: 2100 Enabled: 112 cores, 4 chips, 2 threads/core Orderable: 2,4 chips Cache L1: 32 KB I + 32 KB D on chip per core L2: 1 MB I+D on chip per core L3: 38.5 MB I+D on chip per chip Other: None Memory: 1536 GB (48 x 32 GB 2Rx4 PC4-2666V-R) Storage: 1 x 800 GB SAS SSD Other: None SOFTWARE -------- OS: SUSE Linux Enterprise Server 12 SP2 (x86_64) Kernel 4.4.114-92.64-default Compiler: C/C++: Version 18.0.0.128 of Intel C/C++ Compiler for Linux; Fortran: Version 18.0.0.128 of Intel Fortran Compiler for Linux Parallel: No Firmware: Lenovo BIOS Version TEE119R 1.22 released Feb-2018 File System: xfs System State: Run level 3 (multi-user) Base Pointers: 64-bit Peak Pointers: 64-bit Other: None Submit Notes ------------ The numactl mechanism was used to bind copies to processors. The config file option 'submit' was used to generate numactl commands to bind each copy to a specific processor. For details, please see the config file. Operating System Notes ---------------------- Stack size set to unlimited using "ulimit -s unlimited" General Notes ------------- Environment variables set by runcpu before the start of the run: LD_LIBRARY_PATH = "/home/cpu2017.1.0.2.ic18.0/lib/ia32:/home/cpu2017.1.0.2.ic18.0/lib/intel64" LD_LIBRARY_PATH = "$LD_LIBRARY_PATH:/home/cpu2017.1.0.2.ic18.0/je5.0.1-32:/home/cpu2017.1.0.2.ic18.0/je5.0.1-64" Binaries compiled on a system with 1x Intel Core i7-4790 CPU + 32GB RAM memory using Redhat Enterprise Linux 7.4 Transparent Huge Pages enabled by default Prior to runcpu invocation Filesystem page cache synced and cleared with: sync; echo 3> /proc/sys/vm/drop_caches runcpu command invoked through numactl i.e.: numactl --interleave=all runcpu Yes: The test sponsor attests, as of date of publication, that CVE-2017-5754 (Meltdown) is mitigated in the system as tested and documented. Yes: The test sponsor attests, as of date of publication, that CVE-2017-5753 (Spectre variant 1) is mitigated in the system as tested and documented. Yes: The test sponsor attests, as of date of publication, that CVE-2017-5715 (Spectre variant 2) is mitigated in the system as tested and documented. Platform Notes -------------- BIOS configuration: Choose Operating Mode set to Maximum Performance SNC set to Enable MONITORMWAIT set to Enable Execute Disable Bit set to Disable DCA set to Enable Sysinfo program /home/cpu2017.1.0.2.ic18.0/bin/sysinfo Rev: r5797 of 2017-06-14 96c45e4568ad54c135fd618bcc091c0f running on Electron-node-01 Fri Mar 30 18:03:12 2018 SUT (System Under Test) info as seen by some common utilities. For more information on this section, see https://www.spec.org/cpu2017/Docs/config.html#sysinfo From /proc/cpuinfo model name : Intel(R) Xeon(R) Platinum 8176M CPU @ 2.10GHz 4 "physical id"s (chips) 224 "processors" cores, siblings (Caution: counting these is hw and system dependent. The following excerpts from /proc/cpuinfo might not be reliable. Use with caution.) cpu cores : 28 siblings : 56 physical 0: cores 0 1 2 3 4 5 6 8 9 10 11 12 13 14 16 17 18 19 20 21 22 24 25 26 27 28 29 30 physical 1: cores 0 1 2 3 4 5 6 8 9 10 11 12 13 14 16 17 18 19 20 21 22 24 25 26 27 28 29 30 physical 2: cores 0 1 2 3 4 5 6 8 9 10 11 12 13 14 16 17 18 19 20 21 22 24 25 26 27 28 29 30 physical 3: cores 0 1 2 3 4 5 6 8 9 10 11 12 13 14 16 17 18 19 20 21 22 24 25 26 27 28 29 30 From lscpu: Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 224 On-line CPU(s) list: 0-223 Thread(s) per core: 2 Core(s) per socket: 28 Socket(s): 4 NUMA node(s): 8 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) Platinum 8176M CPU @ 2.10GHz Stepping: 4 CPU MHz: 2095.077 BogoMIPS: 4190.15 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 1024K L3 cache: 39424K NUMA node0 CPU(s): 0-3,7-9,14-17,21-23,112-115,119-121,126-129,133-135 NUMA node1 CPU(s): 4-6,10-13,18-20,24-27,116-118,122-125,130-132,136-139 NUMA node2 CPU(s): 28-31,35-37,42-45,49-51,140-143,147-149,154-157,161-163 NUMA node3 CPU(s): 32-34,38-41,46-48,52-55,144-146,150-153,158-160,164-167 NUMA node4 CPU(s): 56-59,63-65,70-73,77-79,168-171,175-177,182-185,189-191 NUMA node5 CPU(s): 60-62,66-69,74-76,80-83,172-174,178-181,186-188,192-195 NUMA node6 CPU(s): 84-87,91-93,98-101,105-107,196-199,203-205,210-213,217-219 NUMA node7 CPU(s): 88-90,94-97,102-104,108-111,200-202,206-209,214-216,220-223 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch ida arat epb invpcid_single pln pts dtherm intel_pt rsb_ctxsw spec_ctrl retpoline kaiser tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 cqm_llc cqm_occup_llc /proc/cpuinfo cache data cache size : 39424 KB From numactl --hardware WARNING: a numactl 'node' might or might not correspond to a physical chip. available: 8 nodes (0-7) node 0 cpus: 0 1 2 3 7 8 9 14 15 16 17 21 22 23 112 113 114 115 119 120 121 126 127 128 129 133 134 135 node 0 size: 193129 MB node 0 free: 192913 MB node 1 cpus: 4 5 6 10 11 12 13 18 19 20 24 25 26 27 116 117 118 122 123 124 125 130 131 132 136 137 138 139 node 1 size: 193528 MB node 1 free: 193369 MB node 2 cpus: 28 29 30 31 35 36 37 42 43 44 45 49 50 51 140 141 142 143 147 148 149 154 155 156 157 161 162 163 node 2 size: 193528 MB node 2 free: 193335 MB node 3 cpus: 32 33 34 38 39 40 41 46 47 48 52 53 54 55 144 145 146 150 151 152 153 158 159 160 164 165 166 167 node 3 size: 193528 MB node 3 free: 193325 MB node 4 cpus: 56 57 58 59 63 64 65 70 71 72 73 77 78 79 168 169 170 171 175 176 177 182 183 184 185 189 190 191 node 4 size: 193528 MB node 4 free: 193368 MB node 5 cpus: 60 61 62 66 67 68 69 74 75 76 80 81 82 83 172 173 174 178 179 180 181 186 187 188 192 193 194 195 node 5 size: 193528 MB node 5 free: 193358 MB node 6 cpus: 84 85 86 87 91 92 93 98 99 100 101 105 106 107 196 197 198 199 203 204 205 210 211 212 213 217 218 219 node 6 size: 193528 MB node 6 free: 193222 MB node 7 cpus: 88 89 90 94 95 96 97 102 103 104 108 109 110 111 200 201 202 206 207 208 209 214 215 216 220 221 222 223 node 7 size: 193525 MB node 7 free: 193348 MB node distances: node 0 1 2 3 4 5 6 7 0: 10 11 21 21 21 21 31 31 1: 11 10 21 21 21 21 31 31 2: 21 21 10 11 31 31 21 21 3: 21 21 11 10 31 31 21 21 4: 21 21 31 31 10 11 21 21 5: 21 21 31 31 11 10 21 21 6: 31 31 21 21 21 21 10 11 7: 31 31 21 21 21 21 11 10 From /proc/meminfo MemTotal: 1584973904 kB HugePages_Total: 0 Hugepagesize: 2048 kB From /etc/*release* /etc/*version* SuSE-release: SUSE Linux Enterprise Server 12 (x86_64) VERSION = 12 PATCHLEVEL = 2 # This file is deprecated and will be removed in a future service pack or release. # Please check /etc/os-release for details about this release. os-release: NAME="SLES" VERSION="12-SP2" VERSION_ID="12.2" PRETTY_NAME="SUSE Linux Enterprise Server 12 SP2" ID="sles" ANSI_COLOR="0;32" CPE_NAME="cpe:/o:suse:sles:12:sp2" uname -a: Linux Electron-node-01 4.4.114-92.64-default #1 SMP Thu Feb 1 19:18:19 UTC 2018 (c6ce5db) x86_64 x86_64 x86_64 GNU/Linux run-level 3 Mar 30 17:57 SPEC is set to: /home/cpu2017.1.0.2.ic18.0 Filesystem Type Size Used Avail Use% Mounted on /dev/sda4 xfs 688G 274G 415G 40% /home Additional information from dmidecode follows. WARNING: Use caution when you interpret this section. The 'dmidecode' program reads system data which is "intended to allow hardware to be accurately determined", but the intent may not be met, as there are frequent changes to hardware, firmware, and the "DMTF SMBIOS" standard. BIOS Lenovo -[TEE119R-1.22]- 02/06/2018 Memory: 48x Samsung M393A4K40BB2-CTD 32 GB 2 rank 2666 (End of data from sysinfo program) Compiler Version Notes ---------------------- ============================================================================== CC 519.lbm_r(base) 538.imagick_r(base, peak) 544.nab_r(base) ------------------------------------------------------------------------------ icc (ICC) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. ------------------------------------------------------------------------------ ============================================================================== CC 519.lbm_r(peak) 544.nab_r(peak) ------------------------------------------------------------------------------ icc (ICC) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. ------------------------------------------------------------------------------ ============================================================================== CXXC 508.namd_r(base) 510.parest_r(base) ------------------------------------------------------------------------------ icpc (ICC) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. ------------------------------------------------------------------------------ ============================================================================== CXXC 508.namd_r(peak) 510.parest_r(peak) ------------------------------------------------------------------------------ icpc (ICC) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. ------------------------------------------------------------------------------ ============================================================================== CC 511.povray_r(base) 526.blender_r(base) ------------------------------------------------------------------------------ icpc (ICC) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. icc (ICC) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. ------------------------------------------------------------------------------ ============================================================================== CC 511.povray_r(peak) 526.blender_r(peak) ------------------------------------------------------------------------------ icpc (ICC) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. icc (ICC) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. ------------------------------------------------------------------------------ ============================================================================== FC 507.cactuBSSN_r(base) ------------------------------------------------------------------------------ icpc (ICC) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. icc (ICC) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. ifort (IFORT) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. ------------------------------------------------------------------------------ ============================================================================== FC 507.cactuBSSN_r(peak) ------------------------------------------------------------------------------ icpc (ICC) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. icc (ICC) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. ifort (IFORT) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. ------------------------------------------------------------------------------ ============================================================================== FC 503.bwaves_r(base, peak) 549.fotonik3d_r(base, peak) 554.roms_r(base) ------------------------------------------------------------------------------ ifort (IFORT) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. ------------------------------------------------------------------------------ ============================================================================== FC 554.roms_r(peak) ------------------------------------------------------------------------------ ifort (IFORT) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. ------------------------------------------------------------------------------ ============================================================================== CC 521.wrf_r(base) 527.cam4_r(base) ------------------------------------------------------------------------------ ifort (IFORT) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. icc (ICC) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. ------------------------------------------------------------------------------ ============================================================================== CC 521.wrf_r(peak) 527.cam4_r(peak) ------------------------------------------------------------------------------ ifort (IFORT) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. icc (ICC) 18.0.0 20170811 Copyright (C) 1985-2017 Intel Corporation. All rights reserved. ------------------------------------------------------------------------------ Base Compiler Invocation ------------------------ C benchmarks: icc C++ benchmarks: icpc Fortran benchmarks: ifort Benchmarks using both Fortran and C: ifort icc Benchmarks using both C and C++: icpc icc Benchmarks using Fortran, C, and C++: icpc icc ifort Base Portability Flags ---------------------- 503.bwaves_r: -DSPEC_LP64 507.cactuBSSN_r: -DSPEC_LP64 508.namd_r: -DSPEC_LP64 510.parest_r: -DSPEC_LP64 511.povray_r: -DSPEC_LP64 519.lbm_r: -DSPEC_LP64 521.wrf_r: -DSPEC_LP64 -DSPEC_CASE_FLAG -convert big_endian 526.blender_r: -DSPEC_LP64 -DSPEC_LINUX -funsigned-char 527.cam4_r: -DSPEC_LP64 -DSPEC_CASE_FLAG 538.imagick_r: -DSPEC_LP64 544.nab_r: -DSPEC_LP64 549.fotonik3d_r: -DSPEC_LP64 554.roms_r: -DSPEC_LP64 Base Optimization Flags ----------------------- C benchmarks: -xCORE-AVX2 -ipo -O3 -no-prec-div -qopt-prefetch -ffinite-math-only -qopt-mem-layout-trans=3 C++ benchmarks: -xCORE-AVX2 -ipo -O3 -no-prec-div -qopt-prefetch -ffinite-math-only -qopt-mem-layout-trans=3 Fortran benchmarks: -xCORE-AVX2 -ipo -O3 -no-prec-div -qopt-prefetch -ffinite-math-only -qopt-mem-layout-trans=3 -nostandard-realloc-lhs -align array32byte Benchmarks using both Fortran and C: -xCORE-AVX2 -ipo -O3 -no-prec-div -qopt-prefetch -ffinite-math-only -qopt-mem-layout-trans=3 -nostandard-realloc-lhs -align array32byte Benchmarks using both C and C++: -xCORE-AVX2 -ipo -O3 -no-prec-div -qopt-prefetch -ffinite-math-only -qopt-mem-layout-trans=3 Benchmarks using Fortran, C, and C++: -xCORE-AVX2 -ipo -O3 -no-prec-div -qopt-prefetch -ffinite-math-only -qopt-mem-layout-trans=3 -nostandard-realloc-lhs -align array32byte Base Other Flags ---------------- C benchmarks: -m64 -std=c11 C++ benchmarks: -m64 Fortran benchmarks: -m64 Benchmarks using both Fortran and C: -m64 -std=c11 Benchmarks using both C and C++: -m64 -std=c11 Benchmarks using Fortran, C, and C++: -m64 -std=c11 Peak Compiler Invocation ------------------------ C benchmarks: icc C++ benchmarks: icpc Fortran benchmarks: ifort Benchmarks using both Fortran and C: ifort icc Benchmarks using both C and C++: icpc icc Benchmarks using Fortran, C, and C++: icpc icc ifort Peak Portability Flags ---------------------- Same as Base Portability Flags Peak Optimization Flags ----------------------- C benchmarks: 519.lbm_r: -prof-gen(pass 1) -prof-use(pass 2) -ipo -xCORE-AVX2 -O3 -no-prec-div -qopt-prefetch -ffinite-math-only -qopt-mem-layout-trans=3 538.imagick_r: -xCORE-AVX2 -ipo -O3 -no-prec-div -qopt-prefetch -ffinite-math-only -qopt-mem-layout-trans=3 544.nab_r: Same as 519.lbm_r C++ benchmarks: -prof-gen(pass 1) -prof-use(pass 2) -ipo -xCORE-AVX2 -O3 -no-prec-div -qopt-prefetch -ffinite-math-only -qopt-mem-layout-trans=3 Fortran benchmarks: 503.bwaves_r: -xCORE-AVX2 -ipo -O3 -no-prec-div -qopt-prefetch -ffinite-math-only -qopt-mem-layout-trans=3 -nostandard-realloc-lhs -align array32byte 549.fotonik3d_r: Same as 503.bwaves_r 554.roms_r: -prof-gen(pass 1) -prof-use(pass 2) -ipo -xCORE-AVX2 -O3 -no-prec-div -qopt-prefetch -ffinite-math-only -qopt-mem-layout-trans=3 -nostandard-realloc-lhs -align array32byte Benchmarks using both Fortran and C: -prof-gen(pass 1) -prof-use(pass 2) -ipo -xCORE-AVX2 -O3 -no-prec-div -qopt-prefetch -ffinite-math-only -qopt-mem-layout-trans=3 -nostandard-realloc-lhs -align array32byte Benchmarks using both C and C++: -prof-gen(pass 1) -prof-use(pass 2) -ipo -xCORE-AVX2 -O3 -no-prec-div -qopt-prefetch -ffinite-math-only -qopt-mem-layout-trans=3 Benchmarks using Fortran, C, and C++: -prof-gen(pass 1) -prof-use(pass 2) -ipo -xCORE-AVX2 -O3 -no-prec-div -qopt-prefetch -ffinite-math-only -qopt-mem-layout-trans=3 -nostandard-realloc-lhs -align array32byte Peak Other Flags ---------------- C benchmarks: -m64 -std=c11 C++ benchmarks: -m64 Fortran benchmarks: -m64 Benchmarks using both Fortran and C: -m64 -std=c11 Benchmarks using both C and C++: -m64 -std=c11 Benchmarks using Fortran, C, and C++: -m64 -std=c11 The flags files that were used to format this result can be browsed at http://www.spec.org/cpu2017/flags/Intel-ic18.0-official-linux64.html http://www.spec.org/cpu2017/flags/Lenovo-Platform-SPECcpu2017-Flags-V1.2-SKL-C.html You can also download the XML flags sources by saving the following links: http://www.spec.org/cpu2017/flags/Intel-ic18.0-official-linux64.xml http://www.spec.org/cpu2017/flags/Lenovo-Platform-SPECcpu2017-Flags-V1.2-SKL-C.xml SPEC is a registered trademark of the Standard Performance Evaluation Corporation. All other brand and product names appearing in this result are trademarks or registered trademarks of their respective holders. -------------------------------------------------------------------------------------------------------------------- For questions about this result, please contact the tester. For other inquiries, please contact info@spec.org. Copyright 2017-2018 Standard Performance Evaluation Corporation Tested with SPEC CPU2017 v1.0.2 on 2018-03-30 06:03:11-0400. Report generated on 2018-10-31 17:52:18 by CPU2017 ASCII formatter v6067. Originally published on 2018-06-12.