diff --git a/CMakeLists.txt b/CMakeLists.txt index be8d1decc0c6cc6f344edd8cfc201289ca0b0931..a94f61ab8e8bd5fd87275896a3ef56446283dcd3 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 c3982b9485fc1c99a83a83bd419c09f8417eb3eb..b15e252acf81e3cb2338f45971c50582c5136a06 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 ace0936e5ac3aaa88ab9f73d0474275f269a7f5c..569f85a5ffa097a87f9a8714713ad8d43e4b72b7 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()