From 944dab13514f21d923b503ecc63274df1d03810a Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Fri, 11 May 2018 11:53:34 -0600 Subject: [PATCH 1/6] USER-INTEL: enforce icc and add icc flags --- cmake/CMakeLists.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 71070aff45..875cbada3a 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -527,6 +527,18 @@ if(ENABLE_OPT) endif() if(ENABLE_USER-INTEL) + if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + message(FATAL_ERROR "USER-INTEL is only useful together with intel compiler") + endif() + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "2016") + message(FATAL_ERROR "USER-INTEL is needed at least 2016 intel compiler") + endif() + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "2017.3") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHost") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xCOMMON-AVX512") + endif() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -qopenmp -qno-offload -fno-alias -ansi-alias -restrict -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG-O2 -fp-model fast=2 -no-prec-div -qoverride-limits -qopt-zmm-usage=high") set(USER-INTEL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-INTEL) set(USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/intel_preprocess.h ${USER-INTEL_SOURCES_DIR}/intel_buffers.h From 4820cef5d434f70619fac68f0ec89a55e7a48304 Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Fri, 11 May 2018 15:19:29 -0600 Subject: [PATCH 2/6] cmake: USER-INTEL fix flags --- cmake/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index a84b98a388..59f6545a5c 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -609,12 +609,12 @@ if(PKG_USER-INTEL) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "2016") message(FATAL_ERROR "USER-INTEL is needed at least 2016 intel compiler") endif() - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "2017.3") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHost") - else() + if(CMAKE_CXX_COMPILER_VERSION MATCHES "^2017\.[34].*") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xCOMMON-AVX512") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHost") endif() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -qopenmp -qno-offload -fno-alias -ansi-alias -restrict -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG-O2 -fp-model fast=2 -no-prec-div -qoverride-limits -qopt-zmm-usage=high") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -qopenmp -qno-offload -fno-alias -ansi-alias -restrict -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG -O2 -fp-model fast=2 -no-prec-div -qoverride-limits -qopt-zmm-usage=high") set(USER-INTEL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-INTEL) set(USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/intel_preprocess.h ${USER-INTEL_SOURCES_DIR}/intel_buffers.h From b3b3c225e8aa6996208eb88a97e26a94de7d726e Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Fri, 11 May 2018 15:27:24 -0600 Subject: [PATCH 3/6] cmake: check that USER-INTEL flags actually work --- cmake/CMakeLists.txt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 59f6545a5c..e4a8231684 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -182,7 +182,7 @@ if(PKG_KSPACE) if(NOT FFT STREQUAL "KISSFFT") find_package(${FFT} REQUIRED) if(NOT FFT STREQUAL "FFTW3F") - add_definitions(-DFFT_FFTW) + add_definitions(-DFFT_FFTW) else() add_definitions(-DFFT_${FFT}) endif() @@ -614,7 +614,13 @@ if(PKG_USER-INTEL) else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHost") endif() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -qopenmp -qno-offload -fno-alias -ansi-alias -restrict -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG -O2 -fp-model fast=2 -no-prec-div -qoverride-limits -qopt-zmm-usage=high") + include(CheckCXXCompilerFlag) + foreach(_FLAG -qopenmp -qno-offload -fno-alias -ansi-alias -restrict -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG -O2 "-fp-model fast=2" -no-prec-div -qoverride-limits -qopt-zmm-usage=high) + check_cxx_compiler_flag("${__FLAG}" COMPILER_SUPPORTS${_FLAG}) + if(COMPILER_SUPPORTS${_FLAG}) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_FLAG}") + endif() + endforeach() set(USER-INTEL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-INTEL) set(USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/intel_preprocess.h ${USER-INTEL_SOURCES_DIR}/intel_buffers.h @@ -856,5 +862,5 @@ if(ENABLED_GPU) endif() endif() if(PKG_KSPACE) - message(STATUS "Using ${FFT} as FFT") + message(STATUS "Using ${FFT} as FFT") endif() From 8952b1107ce064ec62b19197522ed0608efb69dd Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Fri, 11 May 2018 15:33:18 -0600 Subject: [PATCH 4/6] cmake: add user overwrite for USER-INTEL --- cmake/CMakeLists.txt | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index e4a8231684..0f91452123 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -56,6 +56,8 @@ option(BUILD_SHARED_LIBS "Build shared libs" OFF) if(BUILD_SHARED_LIBS) # for all pkg libs, mpi_stubs and linalg set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif() +option(DEVELOPER_MODE "Enable developer mode" OFF) +mark_as_advanced(DEVELOPER_MODE) include(GNUInstallDirs) set(LAMMPS_LINK_LIBS) @@ -603,24 +605,29 @@ if(PKG_OPT) endif() if(PKG_USER-INTEL) - if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - message(FATAL_ERROR "USER-INTEL is only useful together with intel compiler") - endif() - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "2016") - message(FATAL_ERROR "USER-INTEL is needed at least 2016 intel compiler") - endif() - if(CMAKE_CXX_COMPILER_VERSION MATCHES "^2017\.[34].*") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xCOMMON-AVX512") - else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHost") - endif() - include(CheckCXXCompilerFlag) - foreach(_FLAG -qopenmp -qno-offload -fno-alias -ansi-alias -restrict -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG -O2 "-fp-model fast=2" -no-prec-div -qoverride-limits -qopt-zmm-usage=high) - check_cxx_compiler_flag("${__FLAG}" COMPILER_SUPPORTS${_FLAG}) - if(COMPILER_SUPPORTS${_FLAG}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_FLAG}") + if(NOT DEVELOPER_MODE) + if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + message(FATAL_ERROR "USER-INTEL is only useful together with intel compiler") endif() - endforeach() + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "2016") + message(FATAL_ERROR "USER-INTEL is needed at least 2016 intel compiler") + endif() + endif() + option(INJECT_INTEL_FLAG "Inject OMG fast flags for USER-INTEL" ON) + if(INJECT_INTEL_FLAG AND CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + if(CMAKE_CXX_COMPILER_VERSION MATCHES "^2017\.[34].*") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xCOMMON-AVX512") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHost") + endif() + include(CheckCXXCompilerFlag) + foreach(_FLAG -qopenmp -qno-offload -fno-alias -ansi-alias -restrict -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG -O2 "-fp-model fast=2" -no-prec-div -qoverride-limits -qopt-zmm-usage=high) + check_cxx_compiler_flag("${__FLAG}" COMPILER_SUPPORTS${_FLAG}) + if(COMPILER_SUPPORTS${_FLAG}) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_FLAG}") + endif() + endforeach() + endif() set(USER-INTEL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-INTEL) set(USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/intel_preprocess.h ${USER-INTEL_SOURCES_DIR}/intel_buffers.h From 55bd823339216553db5958d5d527fb36c2f6d46a Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Fri, 11 May 2018 17:48:31 -0600 Subject: [PATCH 5/6] cmake: fix icc versioning --- cmake/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 0f91452123..94da9a2f3e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -609,13 +609,13 @@ if(PKG_USER-INTEL) if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel") message(FATAL_ERROR "USER-INTEL is only useful together with intel compiler") endif() - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "2016") - message(FATAL_ERROR "USER-INTEL is needed at least 2016 intel compiler") + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) + message(FATAL_ERROR "USER-INTEL is needed at least 2016 intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}") endif() endif() option(INJECT_INTEL_FLAG "Inject OMG fast flags for USER-INTEL" ON) if(INJECT_INTEL_FLAG AND CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - if(CMAKE_CXX_COMPILER_VERSION MATCHES "^2017\.[34].*") + if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.4) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xCOMMON-AVX512") else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHost") From 06c18dd36c94799af848ad5f923e5b5162e4bfc0 Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Fri, 11 May 2018 17:50:50 -0600 Subject: [PATCH 6/6] cmake: make CMAKE_VERBOSE_MAKEFILE option visible --- cmake/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 94da9a2f3e..a69a72922b 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -58,6 +58,7 @@ if(BUILD_SHARED_LIBS) # for all pkg libs, mpi_stubs and linalg endif() option(DEVELOPER_MODE "Enable developer mode" OFF) mark_as_advanced(DEVELOPER_MODE) +option(CMAKE_VERBOSE_MAKEFILE "Generate verbose Makefiles" OFF) include(GNUInstallDirs) set(LAMMPS_LINK_LIBS)