Replace intrinsic with inline asm for AVX512 unit test
commit391ce917362fd6409477793b7cef2a398e3f2f84
authorRoland Schulz <roland.schulz@intel.com>
Wed, 29 Nov 2017 02:04:31 +0000 (28 18:04 -0800)
committerMark Abraham <mark.j.abraham@gmail.com>
Mon, 11 Dec 2017 12:15:40 +0000 (11 13:15 +0100)
tree50621630153345d2b994ad7fa0ad71d3323160b3
parent24452f957d73d2e0f355fef842923e9e7522011c
Replace intrinsic with inline asm for AVX512 unit test

Without high optimization, some compilers (icc) produce
assembly that lead to lots of store-to-load forwarding
during initialization, which screws up timing results.
The modified code uses inline asm without loading from
memory, which is fine since the inline (volatile) asm
will not be optimized. Tested to work and detect 2 FMA
units on Core i9-7920X and 1 FMA on Xeon Silver 4116,
with with gcc-5.4, gcc-7.1, icc 2017 and clang-5 with
optimization levels from -O0 to -O3. We also avoid
warning if we override the architecture with the
AVX-512 flags for the source file containing the asm.

Fixes #2340.

Change-Id: I3aea95b162c55c7773182a69f639dff1a01d0603
cmake/gmxDetectSimd.cmake
cmake/gmxManageSimd.cmake
src/gromacs/CMakeLists.txt
src/gromacs/hardware/identifyavx512fmaunits.cpp