128-bit AVX2 SIMD for AMD Ryzen
commit570db57b3ce38bd13c1ed3d13d1a34264f42e590
authorErik Lindahl <erik.lindahl@gmail.com>
Tue, 14 Mar 2017 13:35:35 +0000 (14 14:35 +0100)
committerErik Lindahl <erik.lindahl@gmail.com>
Sun, 19 Mar 2017 12:16:40 +0000 (19 13:16 +0100)
treeaa9817d2ec20bf99469dcf64f48006b93d359643
parent4dbb7fdefc0e8faa2c5dda36eaf1ae4a95c5b501
128-bit AVX2 SIMD for AMD Ryzen

While Ryzen supports 256-bit AVX2, the internal units are organized
to execute either a single 256-bit instruction or two 128-bit SIMD
instruction per cycle. Since most of our kernels are slightly
less efficient for wider SIMD, this improves performance by roughly
10%.

Change-Id: Ie601b1dbe13d70334cdf9284e236ad9132951ec9
18 files changed:
CMakeLists.txt
cmake/gmxDetectSimd.cmake
cmake/gmxManageSimd.cmake
src/config.h.cmakein
src/gromacs/hardware/cpuinfo.cpp
src/gromacs/hardware/cpuinfo.h
src/gromacs/simd/impl_x86_avx2_128/impl_x86_avx2_128.h [new file with mode: 0644]
src/gromacs/simd/impl_x86_avx2_128/impl_x86_avx2_128_definitions.h [new file with mode: 0644]
src/gromacs/simd/impl_x86_avx2_128/impl_x86_avx2_128_general.h [new file with mode: 0644]
src/gromacs/simd/impl_x86_avx2_128/impl_x86_avx2_128_simd4_double.h [new file with mode: 0644]
src/gromacs/simd/impl_x86_avx2_128/impl_x86_avx2_128_simd4_float.h [new file with mode: 0644]
src/gromacs/simd/impl_x86_avx2_128/impl_x86_avx2_128_simd_double.h [new file with mode: 0644]
src/gromacs/simd/impl_x86_avx2_128/impl_x86_avx2_128_simd_float.h [new file with mode: 0644]
src/gromacs/simd/impl_x86_avx2_128/impl_x86_avx2_128_util_double.h [new file with mode: 0644]
src/gromacs/simd/impl_x86_avx2_128/impl_x86_avx2_128_util_float.h [new file with mode: 0644]
src/gromacs/simd/simd.h
src/gromacs/simd/support.cpp
src/gromacs/simd/support.h