diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index f22fa401a2..6fb2f0c65e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -102,31 +102,31 @@ include(CheckIncludeFileCXX) if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") if(CMAKE_SYSTEM_NAME STREQUAL "Windows") if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Qrestrict") + set(CMAKE_CXX_FLAGS_${BTYPE} "${CMAKE_CXX_FLAGS_${BTYPE}} /Qrestrict") endif() if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.4) - set(CMAKE_TUNE_DEFAULT "/QxCOMMON-AVX512") + set(CMAKE_CXX_FLAGS_${BTYPE} "${CMAKE_CXX_FLAGS_${BTYPE}} /QxCOMMON-AVX512") else() - set(CMAKE_TUNE_DEFAULT "/QxHost") + set(CMAKE_CXX_FLAGS_${BTYPE} "${CMAKE_CXX_FLAGS_${BTYPE}} /QxHost") endif() else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -restrict") + set(CMAKE_CXX_FLAGS_${BTYPE} "${CMAKE_CXX_FLAGS_${BTYPE}} -restrict") if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.4) - set(CMAKE_TUNE_DEFAULT "-xCOMMON-AVX512") + set(CMAKE_CXX_FLAGS_${BTYPE} "${CMAKE_CXX_FLAGS_${BTYPE}} -xCOMMON-AVX512") else() - set(CMAKE_TUNE_DEFAULT "-xHost -fp-model fast=2 -no-prec-div -qoverride-limits -diag-disable=10441 -diag-disable=11074 -diag-disable=11076 -diag-disable=2196") + set(CMAKE_CXX_FLAGS_${BTYPE} "${CMAKE_CXX_FLAGS_${BTYPE}} -xHost -fp-model fast=2 -no-prec-div -qoverride-limits -diag-disable=10441 -diag-disable=11074 -diag-disable=11076 -diag-disable=2196") endif() endif() endif() # silence excessive warnings for new Intel Compilers if(CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM") - set(CMAKE_TUNE_DEFAULT "-fp-model precise -Wno-tautological-constant-compare -Wno-unused-command-line-argument") + set(CMAKE_CXX_FLAGS_${BTYPE} "${CMAKE_CXX_FLAGS_${BTYPE}} -fp-model precise -Wno-tautological-constant-compare -Wno-unused-command-line-argument") endif() # silence excessive warnings for PGI/NVHPC compilers if((CMAKE_CXX_COMPILER_ID STREQUAL "NVHPC") OR (CMAKE_CXX_COMPILER_ID STREQUAL "PGI")) - set(CMAKE_TUNE_DEFAULT "-Minform=severe") + set(CMAKE_CXX_FLAGS_${BTYPE} "${CMAKE_CXX_FLAGS_${BTYPE}} -Minform=severe") endif() # this hack is required to compile fmt lib with CrayClang version 15.0.2 @@ -134,17 +134,17 @@ endif() if(CMAKE_VERSION VERSION_LESS 3.28) get_filename_component(_exe "${CMAKE_CXX_COMPILER}" NAME) if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (_exe STREQUAL "crayCC")) - set(CMAKE_TUNE_DEFAULT "-DFMT_STATIC_THOUSANDS_SEPARATOR") + set(CMAKE_CXX_FLAGS_${BTYPE} "${CMAKE_CXX_FLAGS_${BTYPE}} -DFMT_STATIC_THOUSANDS_SEPARATOR") endif() else() if(CMAKE_CXX_COMPILER_ID STREQUAL "CrayClang") - set(CMAKE_TUNE_DEFAULT "-DFMT_STATIC_THOUSANDS_SEPARATOR") + set(CMAKE_CXX_FLAGS_${BTYPE} "${CMAKE_CXX_FLAGS_${BTYPE}} -DFMT_STATIC_THOUSANDS_SEPARATOR") endif() endif() # silence nvcc warnings if((PKG_KOKKOS) AND (Kokkos_ENABLE_CUDA) AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) - set(CMAKE_TUNE_DEFAULT "${CMAKE_TUNE_DEFAULT}" "-Xcudafe --diag_suppress=unrecognized_pragma,--diag_suppress=128") + set(CMAKE_CXX_FLAGS_${BTYPE} "${CMAKE_CXX_FLAGS_${BTYPE}}" "-Xcudafe --diag_suppress=unrecognized_pragma,--diag_suppress=128") endif() # we *require* C++11 without extensions but prefer C++17. @@ -628,10 +628,6 @@ if(WITH_SWIG) add_subdirectory(${LAMMPS_SWIG_DIR} swig) endif() -set(CMAKE_TUNE_FLAGS "${CMAKE_TUNE_DEFAULT}" CACHE STRING "Compiler and machine specific optimization flags (compilation only)") -separate_arguments(CMAKE_TUNE_FLAGS) -target_compile_options(lammps PRIVATE ${CMAKE_TUNE_FLAGS}) -target_compile_options(lmp PRIVATE ${CMAKE_TUNE_FLAGS}) ######################################################################## # Basic system tests (standard libraries, headers, functions, types) # ######################################################################## diff --git a/cmake/Modules/Packages/COLVARS.cmake b/cmake/Modules/Packages/COLVARS.cmake index b943a0345e..8fa0d84f01 100644 --- a/cmake/Modules/Packages/COLVARS.cmake +++ b/cmake/Modules/Packages/COLVARS.cmake @@ -14,10 +14,6 @@ endif() add_library(colvars STATIC ${COLVARS_SOURCES}) target_compile_definitions(colvars PRIVATE -DCOLVARS_LAMMPS) -separate_arguments(CMAKE_TUNE_FLAGS) -foreach(_FLAG ${CMAKE_TUNE_FLAGS}) - target_compile_options(colvars PRIVATE ${_FLAG}) -endforeach() set_target_properties(colvars PROPERTIES OUTPUT_NAME lammps_colvars${LAMMPS_MACHINE}) target_include_directories(colvars PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/colvars) # The line below is needed to locate math_eigen_impl.h diff --git a/cmake/presets/kokkos-hip.cmake b/cmake/presets/kokkos-hip.cmake index 38bf27092f..ba1eeb1853 100644 --- a/cmake/presets/kokkos-hip.cmake +++ b/cmake/presets/kokkos-hip.cmake @@ -10,7 +10,13 @@ set(Kokkos_ENABLE_HIP_MULTIPLE_KERNEL_INSTANTIATIONS ON CACHE BOOL "" FORCE) set(BUILD_OMP ON CACHE BOOL "" FORCE) set(CMAKE_CXX_COMPILER hipcc CACHE STRING "" FORCE) -set(CMAKE_TUNE_FLAGS "-munsafe-fp-atomics" CACHE STRING "" FORCE) +if (CMAKE_CXX_FLAGS) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -munsafe-fp-atomics" CACHE STRING "" FORCE) +endif() +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -munsafe-fp-atomics" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -munsafe-fp-atomics" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -munsafe-fp-atomics" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -munsafe-fp-atomics" CACHE STRING "" FORCE) # If KSPACE is also enabled, use CUFFT for FFTs set(FFT_KOKKOS "HIPFFT" CACHE STRING "" FORCE) diff --git a/cmake/presets/kokkos-sycl-intel.cmake b/cmake/presets/kokkos-sycl-intel.cmake index eba386564d..163d35e031 100644 --- a/cmake/presets/kokkos-sycl-intel.cmake +++ b/cmake/presets/kokkos-sycl-intel.cmake @@ -21,9 +21,16 @@ set(CMAKE_C_COMPILER icx CACHE STRING "" FORCE) set(CMAKE_Fortran_COMPILER "" CACHE STRING "" FORCE) set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE) set(CMAKE_CXX_STANDARD 17 CACHE STRING "" FORCE) -# Silence everything -set(CMAKE_CXX_FLAGS "-w" CACHE STRING "" FORCE) + +# set(_intel_sycl_flags " -w -fsycl -flink-huge-device-code -fsycl-targets=spir64_gen " +set(_intel_sycl_flags " -w -fsycl -fsycl-device-code-split=per_kernel -fsycl-targets=spir64_gen " +if (CMAKE_CXX_FLAGS) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_intel_sycl_flags}" CACHE STRING "" FORCE) +endif() +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${_intel_sycl_flags}" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${_intel_sycl_flags}" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${_intel_sycl_flags}" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${_intel_sycl_flags}" CACHE STRING "" FORCE) + #set(CMAKE_EXE_LINKER_FLAGS "-fsycl -flink-huge-device-code -fsycl-targets=spir64_gen " CACHE STRING "" FORCE) -#set(CMAKE_TUNE_FLAGS "-O3 -fsycl -fsycl-device-code-split=per_kernel -fsycl-targets=spir64_gen" CACHE STRING "" FORCE) -set(CMAKE_EXE_LINKER_FLAGS "-fsycl -flink-huge-device-code " CACHE STRING "" FORCE) -set(CMAKE_TUNE_FLAGS "-O3 -fsycl -fsycl-device-code-split=per_kernel " CACHE STRING "" FORCE) +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsycl -flink-huge-device-code " CACHE STRING "" FORCE) diff --git a/cmake/presets/kokkos-sycl-nvidia.cmake b/cmake/presets/kokkos-sycl-nvidia.cmake index c706aca7d8..678f9f380a 100644 --- a/cmake/presets/kokkos-sycl-nvidia.cmake +++ b/cmake/presets/kokkos-sycl-nvidia.cmake @@ -14,5 +14,13 @@ set(Kokkos_ENABLE_DEPRECATION_WARNINGS OFF CACHE BOOL "" FORCE) set(CMAKE_CXX_COMPILER clang++ CACHE STRING "" FORCE) set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE) set(CMAKE_CXX_STANDARD 17 CACHE STRING "" FORCE) -set(CMAKE_SHARED_LINKER_FLAGS "-Xsycl-target-frontend -O3" CACHE STRING "" FORCE) -set(CMAKE_TUNE_FLAGS "-fgpu-inline-threshold=100000 -Xsycl-target-frontend -O3 -Xsycl-target-frontend -ffp-contract=on -Wno-unknown-cuda-version" CACHE STRING "" FORCE) +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Xsycl-target-frontend -O3 " CACHE STRING "" FORCE) + +set(_intel_sycl_flags "-fgpu-inline-threshold=100000 -Xsycl-target-frontend -O3 -Xsycl-target-frontend -ffp-contract=on -Wno-unknown-cuda-version") +if (CMAKE_CXX_FLAGS) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_intel_sycl_flags}" CACHE STRING "" FORCE) +endif() +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${_intel_sycl_flags}" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${_intel_sycl_flags}" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${_intel_sycl_flags}" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${_intel_sycl_flags}" CACHE STRING "" FORCE) diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index 413744b078..dbcd4ef11d 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -91,7 +91,13 @@ endif() set(DOWNLOAD_VORO ON CACHE BOOL "" FORCE) set(DOWNLOAD_EIGEN3 ON CACHE BOOL "" FORCE) set(LAMMPS_MEMALIGN "0" CACHE STRING "" FORCE) -set(CMAKE_TUNE_FLAGS "-Wno-missing-include-dirs" CACHE STRING "" FORCE) +if (CMAKE_CXX_FLAGS) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-missing-include-dirs" CACHE STRING "" FORCE) +endif() +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wno-missing-include-dirs" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-missing-include-dirs" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -Wno-missing-include-dirs" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -Wno-missing-include-dirs" CACHE STRING "" FORCE) set(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-stdcall-fixup,--as-needed,-lssp" CACHE STRING "" FORCE) set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-stdcall-fixup,--as-needed,-lssp" CACHE STRING "" FORCE) set(BUILD_TOOLS ON CACHE BOOL "" FORCE) diff --git a/cmake/presets/windows-intel-llvm.cmake b/cmake/presets/windows-intel-llvm.cmake index e9d88d22fe..cdde3c146a 100644 --- a/cmake/presets/windows-intel-llvm.cmake +++ b/cmake/presets/windows-intel-llvm.cmake @@ -5,4 +5,10 @@ set(CMAKE_C_COMPILER "icx" CACHE STRING "" FORCE) set(CMAKE_Fortran_COMPILER "ifx" CACHE STRING "" FORCE) set(INTEL_LRT_MODE "C++11" CACHE STRING "" FORCE) unset(HAVE_OMP_H_INCLUDE CACHE) -set(CMAKE_TUNE_FLAGS -Wno-unused-command-line-argument) +if (CMAKE_CXX_FLAGS) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-command-line-argument" CACHE STRING "" FORCE) +endif() +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wno-unused-command-line-argument" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-unused-command-line-argument" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -Wno-unused-command-line-argument" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -Wno-unused-command-line-argument" CACHE STRING "" FORCE) diff --git a/doc/src/Build_basics.rst b/doc/src/Build_basics.rst index be4b312578..f9cf251688 100644 --- a/doc/src/Build_basics.rst +++ b/doc/src/Build_basics.rst @@ -212,11 +212,7 @@ LAMMPS. You can tell CMake to look for a specific compiler with setting CMake variables (listed below) during configuration. For a few common choices, there are also presets in the ``cmake/presets`` - folder. For convenience, there is a ``CMAKE_TUNE_FLAGS`` variable - that can be set to apply global compiler options (applied to - compilation only), to be used for adding compiler or host specific - optimization flags in addition to the "flags" variables listed - below. You may also specify the corresponding ``CMAKE_*_FLAGS`` + folder. You may also specify the corresponding ``CMAKE_*_FLAGS`` variables individually, if you want to experiment with alternate optimization flags. You should specify all 3 compilers, so that the (few) LAMMPS source files written in C or Fortran are built @@ -266,10 +262,6 @@ LAMMPS. ``-C ../cmake/presets/pgi.cmake`` will switch the compiler to the PGI compilers, and ``-C ../cmake/presets/nvhpc.cmake`` will switch to the NVHPC compilers. - Furthermore, you can set ``CMAKE_TUNE_FLAGS`` to specifically add - compiler flags to tune for optimal performance on given hosts. - This variable is empty by default. - .. note:: When the cmake command completes, it prints a summary to the diff --git a/doc/src/Build_settings.rst b/doc/src/Build_settings.rst index 226e19bfc3..7c16409995 100644 --- a/doc/src/Build_settings.rst +++ b/doc/src/Build_settings.rst @@ -18,7 +18,6 @@ explains how to do this for building both with CMake and make. * `Memory allocation alignment`_ * `Workaround for long long integers`_ * `Exception handling when using LAMMPS as a library`_ to capture errors -* `Trigger selected floating-point exceptions`_ ---------- @@ -659,40 +658,3 @@ code has to be set up to *catch* exceptions thrown from within LAMMPS. throw an exception and thus other MPI ranks may get stuck waiting for messages from the ones with errors. ----------- - -.. _trap_fpe: - -Trigger selected floating-point exceptions ------------------------------------------- - -Many kinds of CPUs have the capability to detect when a calculation -results in an invalid math operation, like a division by zero or calling -the square root with a negative argument. The default behavior on -most operating systems is to continue and have values for ``NaN`` (= not -a number) or ``Inf`` (= infinity). This allows software to detect and -recover from such conditions. This behavior can be changed, however, -often through use of compiler flags. On Linux systems (or more general -on systems using the GNU C library), these so-called floating-point traps -can also be selectively enabled through library calls. LAMMPS supports -that by setting the ``-DLAMMPS_TRAP_FPE`` pre-processor define. As it is -done in the ``main()`` function, this applies only to the standalone -executable, not the library. - -.. tabs:: - - .. tab:: CMake build - - .. code-block:: bash - - -D CMAKE_TUNE_FLAGS=-DLAMMPS_TRAP_FPE - - .. tab:: Traditional make - - .. code-block:: make - - LMP_INC = -DLAMMPS_TRAP_FPE - -After compilation with this flag set, the LAMMPS executable will stop -and produce a core dump when a division by zero, overflow, illegal math -function argument or other invalid floating point operation is encountered. diff --git a/doc/src/Howto_cmake.rst b/doc/src/Howto_cmake.rst index 6b8fc82bad..64acee47dd 100644 --- a/doc/src/Howto_cmake.rst +++ b/doc/src/Howto_cmake.rst @@ -285,7 +285,7 @@ when used before the CMake directory, there may be a space between the can have boolean values (on/off, yes/no, or 1/0 are all valid) or are strings representing a choice, or a path, or are free format. If the string would contain whitespace, it must be put in quotes, for example -``-D CMAKE_TUNE_FLAGS="-ftree-vectorize -ffast-math"``. +``-D CMAKE_CXX_FLAGS="-O3 -Wall -ftree-vectorize -ffast-math"``. CMake variables fall into two categories: 1) common CMake variables that are used by default for any CMake configuration setup and 2) project @@ -341,8 +341,6 @@ Some common LAMMPS specific variables - compile some additional executables from the ``tools`` folder (default: ``off``) * - ``BUILD_DOC`` - include building the HTML format documentation for packaging/installing (default: ``off``) - * - ``CMAKE_TUNE_FLAGS`` - - common compiler flags, for optimization or instrumentation (default:) * - ``LAMMPS_MACHINE`` - when set to ``name`` the LAMMPS executable and library will be called ``lmp_name`` and ``liblammps_name.a`` * - ``FFT``