From 153aeaeec6354525025d453eb76d3159f8c9dcd3 Mon Sep 17 00:00:00 2001 From: Vasileios Karakasis <vkarak@gmail.com> Date: Thu, 15 Jun 2017 08:48:00 +0200 Subject: [PATCH] AVX512 CMake target (#288) Adds a new AVX512 target for processors supporting only the core AVX512 functionality, which currently means SkyLake Xeon processors. --- CMakeLists.txt | 6 ++++-- cmake/CompilerOptions.cmake | 8 +++++--- mechanisms/CMakeLists.txt | 2 ++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index be8d1dec..a94f61ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -178,8 +178,8 @@ endif() #---------------------------------------------------------- # vectorization target #---------------------------------------------------------- -set(NMC_VECTORIZE_TARGET "none" CACHE STRING "CPU target for vectorization {KNL,AVX,AVX2}") -set_property(CACHE NMC_VECTORIZE_TARGET PROPERTY STRINGS none KNL AVX AVX2) +set(NMC_VECTORIZE_TARGET "none" CACHE STRING "CPU target for vectorization {KNL,AVX,AVX2,AVX512}") +set_property(CACHE NMC_VECTORIZE_TARGET PROPERTY STRINGS none KNL AVX AVX2 AVX512) if(NMC_VECTORIZE_TARGET STREQUAL "KNL") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXXOPT_KNL}") @@ -187,6 +187,8 @@ elseif(NMC_VECTORIZE_TARGET STREQUAL "AVX") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXXOPT_AVX}") elseif(NMC_VECTORIZE_TARGET STREQUAL "AVX2") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXXOPT_AVX2}") +elseif(NMC_VECTORIZE_TARGET STREQUAL "AVX512") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXXOPT_AVX512}") endif() #---------------------------------------------------------- diff --git a/cmake/CompilerOptions.cmake b/cmake/CompilerOptions.cmake index c3982b94..b15e252a 100644 --- a/cmake/CompilerOptions.cmake +++ b/cmake/CompilerOptions.cmake @@ -27,7 +27,8 @@ if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") # supported in gcc 4.9.x and later. set(CXXOPT_KNL "-march=knl") set(CXXOPT_AVX "-mavx") - set(CXXOPT_AVX2 "-march=core-avx2") + set(CXXOPT_AVX2 "-mavx2") + set(CXXOPT_AVX512 "-mavx512f -mavx512cd") # Disable 'maybe-uninitialized' warning: this will be raised # inappropriately in some uses of util::optional<T> when T @@ -42,7 +43,8 @@ if(${CMAKE_CXX_COMPILER_ID} MATCHES "Intel") # Compiler flags for generating KNL-specific AVX512 instructions. set(CXXOPT_KNL "-xMIC-AVX512") - set(CXXOPT_AVX "-mavx") - set(CXXOPT_AVX2 "-march=core-avx2") + set(CXXOPT_AVX "-xAVX") + set(CXXOPT_AVX2 "-xCORE-AVX2") + set(CXXOPT_AVX512 "-xCORE-AVX512") endif() diff --git a/mechanisms/CMakeLists.txt b/mechanisms/CMakeLists.txt index ace0936e..569f85a5 100644 --- a/mechanisms/CMakeLists.txt +++ b/mechanisms/CMakeLists.txt @@ -16,6 +16,8 @@ elseif(NMC_VECTORIZE_TARGET STREQUAL "AVX") set(modcc_target "cpu") elseif(NMC_VECTORIZE_TARGET STREQUAL "AVX2") set(modcc_target "avx2") +elseif(NMC_VECTORIZE_TARGET STREQUAL "AVX512") + set(modcc_target "avx512") else() set(modcc_target "cpu") endif() -- GitLab