Unverified Commit 4abff7b4 authored by Axel Kohlmeyer's avatar Axel Kohlmeyer Committed by GitHub
Browse files

Merge pull request #1986 from akohlmey/correct-kokkos-docs

Update docs and CMake scripts for Kokkos 3.0+
parents d6624fe4 8b1c6cb2
Loading
Loading
Loading
Loading
+16 −13
Original line number Original line Diff line number Diff line
@@ -64,16 +64,17 @@ if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
  set(CMAKE_TUNE_DEFAULT "-ffast-math -march=native")
  set(CMAKE_TUNE_DEFAULT "-ffast-math -march=native")
endif()
endif()


# we require C++11
# we require C++11 without extensions
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)


# GNU compiler specific features for testing
# GNU compiler specific features for testing
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
  option(ENABLE_COVERAGE "Enable collecting code coverage data" OFF)
  option(ENABLE_COVERAGE "Enable collecting code coverage data" OFF)
  mark_as_advanced(ENABLE_COVERAGE)
  mark_as_advanced(ENABLE_COVERAGE)
  if(ENABLE_COVERAGE)
  if(ENABLE_COVERAGE)
    set (CMAK_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
  endif()
  endif()
endif()
endif()


@@ -239,16 +240,7 @@ if(OpenMP_FOUND)
  endif()
  endif()
endif()
endif()


# TODO: this is a temporary workaround until a better solution is found. AK 2019-05-30
# GNU GCC 9.x uses settings incompatible with our use of 'default(none)' in OpenMP pragmas
# where we assume older GCC semantics. For the time being, we disable OpenMP by default
# for GCC 9.x and beyond. People may manually turn it on, but need to run the script
# src/USER-OMP/hack_openmp_for_pgi_gcc9.sh on all sources to make it compatible with gcc 9.
if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.99.9))
  option(BUILD_OMP "Build with OpenMP support" OFF)
else()
option(BUILD_OMP "Build with OpenMP support" ${BUILD_OMP_DEFAULT})
option(BUILD_OMP "Build with OpenMP support" ${BUILD_OMP_DEFAULT})
endif()


if(BUILD_OMP)
if(BUILD_OMP)
  find_package(OpenMP REQUIRED)
  find_package(OpenMP REQUIRED)
@@ -256,6 +248,17 @@ if(BUILD_OMP)
  if(NOT HAVE_OMP_H_INCLUDE)
  if(NOT HAVE_OMP_H_INCLUDE)
    message(FATAL_ERROR "Cannot find the 'omp.h' header file required for full OpenMP support")
    message(FATAL_ERROR "Cannot find the 'omp.h' header file required for full OpenMP support")
  endif()
  endif()

  if (((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.99.9)) OR
      ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.99.9)) OR
      ((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 18.99.9))
      )
    # GCC 9.x and later plus Clang 10.x and later implement strict OpenMP 4.0 semantics for consts.
    # Intel 18.0 was tested to support both, so we switch to OpenMP 4+ from 19.x onward to be safe.
    target_compile_definitions(lammps PRIVATE -DLAMMPS_OMP_COMPAT=4)
  else()
    target_compile_definitions(lammps PRIVATE -DLAMMPS_OMP_COMPAT=3)
  endif()
  target_link_libraries(lammps PRIVATE OpenMP::OpenMP_CXX)
  target_link_libraries(lammps PRIVATE OpenMP::OpenMP_CXX)
endif()
endif()


@@ -761,7 +764,7 @@ if(PKG_KSPACE)
    message(STATUS "Using non-threaded FFTs")
    message(STATUS "Using non-threaded FFTs")
  endif()
  endif()
  if(PKG_KOKKOS)
  if(PKG_KOKKOS)
    if(KOKKOS_ENABLE_CUDA)
    if(Kokkos_ENABLE_CUDA)
      if (${FFT} STREQUAL "KISS")
      if (${FFT} STREQUAL "KISS")
        message(STATUS "Kokkos FFT: KISS")
        message(STATUS "Kokkos FFT: KISS")
      else()
      else()
+32 −28
Original line number Original line Diff line number Diff line
@@ -2,7 +2,8 @@ include(CMakeFindDependencyMacro)
if(@BUILD_MPI@)
if(@BUILD_MPI@)
  find_dependency(MPI REQUIRED CXX)
  find_dependency(MPI REQUIRED CXX)
endif()
endif()
if(@PKG_KSPACE@ AND @FFT@ STREQUAL "FFTW3")
if(@PKG_KSPACE@)
  if(@FFT@ STREQUAL "FFTW3")
    if(@FFTW@ STREQUAL "FFTW3" AND NOT TARGET FFTW3::FFTW3)
    if(@FFTW@ STREQUAL "FFTW3" AND NOT TARGET FFTW3::FFTW3)
      add_library(FFTW3::FFTW3 UNKNOWN IMPORTED)
      add_library(FFTW3::FFTW3 UNKNOWN IMPORTED)
      set_target_properties(FFTW3::FFTW3 PROPERTIES
      set_target_properties(FFTW3::FFTW3 PROPERTIES
@@ -18,6 +19,7 @@ if(@PKG_KSPACE@ AND @FFT@ STREQUAL "FFTW3")
        INTERFACE_INCLUDE_DIRECTORIES "@FFTW3F_INCLUDE_DIRS@")
        INTERFACE_INCLUDE_DIRECTORIES "@FFTW3F_INCLUDE_DIRS@")
    endif()
    endif()
  endif()
  endif()
endif()
if(NOT @BUILD_SHARED_LIBS@)
if(NOT @BUILD_SHARED_LIBS@)
  if(@WITH_JPEG@)
  if(@WITH_JPEG@)
    find_dependency(JPEG REQUIRED)
    find_dependency(JPEG REQUIRED)
@@ -36,7 +38,8 @@ if(NOT @BUILD_SHARED_LIBS@)
  if(@PKG_USER-SMD@ AND NOT @DOWNLOAD_EIGEN3@)
  if(@PKG_USER-SMD@ AND NOT @DOWNLOAD_EIGEN3@)
    find_dependency(Eigen3 NO_MODULE REQUIRED)
    find_dependency(Eigen3 NO_MODULE REQUIRED)
  endif()
  endif()
  if(@PKG_KSPACE@ AND @FFT@ STREQUAL "FFTW3" AND @FFT_FFTW_THREADS@)
  if(@PKG_KSPACE@)
    if(@FFT@ STREQUAL "FFTW3" AND @FFT_FFTW_THREADS@)
      if(@FFTW@ STREQUAL "FFTW3" AND NOT TARGET FFTW3::FFTW3_OMP)
      if(@FFTW@ STREQUAL "FFTW3" AND NOT TARGET FFTW3::FFTW3_OMP)
        add_library(FFTW3::FFTW3_OMP UNKNOWN IMPORTED)
        add_library(FFTW3::FFTW3_OMP UNKNOWN IMPORTED)
        set_target_properties(FFTW3::FFTW3_OMP PROPERTIES
        set_target_properties(FFTW3::FFTW3_OMP PROPERTIES
@@ -52,6 +55,7 @@ if(NOT @BUILD_SHARED_LIBS@)
          INTERFACE_INCLUDE_DIRECTORIES "@FFTW3F_OMP_INCLUDE_DIRS@")
          INTERFACE_INCLUDE_DIRECTORIES "@FFTW3F_OMP_INCLUDE_DIRS@")
      endif()
      endif()
    endif()
    endif()
  endif()
  if(@PKG_USER-SCAFACOS@ AND NOT @DOWNLOAD_SCAFACOS@)
  if(@PKG_USER-SCAFACOS@ AND NOT @DOWNLOAD_SCAFACOS@)
    find_dependency(PkgConfig REQUIRED)
    find_dependency(PkgConfig REQUIRED)
    pkg_check_modules(SCAFACOS REQUIRED IMPORTED_TARGET scafacos)
    pkg_check_modules(SCAFACOS REQUIRED IMPORTED_TARGET scafacos)
+3 −0
Original line number Original line Diff line number Diff line
@@ -51,6 +51,9 @@ if(DOWNLOAD_KIM)
    INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include/kim-api")
    INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include/kim-api")
  target_link_libraries(lammps PRIVATE LAMMPS::KIM)
  target_link_libraries(lammps PRIVATE LAMMPS::KIM)
  add_dependencies(LAMMPS::KIM kim_build)
  add_dependencies(LAMMPS::KIM kim_build)
  if(BUILD_LIB AND NOT BUILD_SHARED_LIBS)
    install(CODE "MESSAGE(FATAL_ERROR \"Installing liblammps with downloaded libraries is currently not supported.\")")
  endif()
else()
else()
  find_package(PkgConfig REQUIRED)
  find_package(PkgConfig REQUIRED)
  pkg_check_modules(KIM-API REQUIRED IMPORTED_TARGET libkim-api>=${KIM-API_MIN_VERSION})
  pkg_check_modules(KIM-API REQUIRED IMPORTED_TARGET libkim-api>=${KIM-API_MIN_VERSION})
+17 −1
Original line number Original line Diff line number Diff line
########################################################################
# consistency checks and Kokkos options/settings required by LAMMPS
if(Kokkos_ENABLE_CUDA)
  message(STATUS "KOKKOS: Enabling CUDA LAMBDA function support")
  set(Kokkos_ENABLE_CUDA_LAMBDA ON CACHE BOOL "" FORCE)
endif()
# Adding OpenMP compiler flags without the checks done for
# BUILD_OMP can result in compile failures. Enforce consistency.
if(Kokkos_ENABLE_OPENMP AND NOT BUILD_OMP)
  message(FATAL_ERROR "Must enable BUILD_OMP with Kokkos_ENABLE_OPENMP")
endif()
########################################################################

option(EXTERNAL_KOKKOS "Build against external kokkos library" OFF)
option(EXTERNAL_KOKKOS "Build against external kokkos library" OFF)
option(DOWNLOAD_KOKKOS "Download the KOKKOS library instead of using the bundled one" OFF)
option(DOWNLOAD_KOKKOS "Download the KOKKOS library instead of using the bundled one" OFF)
if(DOWNLOAD_KOKKOS)
if(DOWNLOAD_KOKKOS)
@@ -22,6 +35,9 @@ if(DOWNLOAD_KOKKOS)
    INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS})
    INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS})
  target_link_libraries(lammps PRIVATE LAMMPS::KOKKOS)
  target_link_libraries(lammps PRIVATE LAMMPS::KOKKOS)
  add_dependencies(LAMMPS::KOKKOS kokkos_build)
  add_dependencies(LAMMPS::KOKKOS kokkos_build)
  if(BUILD_LIB AND NOT BUILD_SHARED_LIBS)
    install(CODE "MESSAGE(FATAL_ERROR \"Installing liblammps with downloaded libraries is currently not supported.\")")
  endif()
elseif(EXTERNAL_KOKKOS)
elseif(EXTERNAL_KOKKOS)
  find_package(Kokkos 3)
  find_package(Kokkos 3)
  if(NOT Kokkos_FOUND)
  if(NOT Kokkos_FOUND)
@@ -64,7 +80,7 @@ if(PKG_KSPACE)
  list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/fft3d_kokkos.cpp
  list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/fft3d_kokkos.cpp
                                 ${KOKKOS_PKG_SOURCES_DIR}/gridcomm_kokkos.cpp
                                 ${KOKKOS_PKG_SOURCES_DIR}/gridcomm_kokkos.cpp
                                 ${KOKKOS_PKG_SOURCES_DIR}/remap_kokkos.cpp)
                                 ${KOKKOS_PKG_SOURCES_DIR}/remap_kokkos.cpp)
  if(KOKKOS_ENABLE_CUDA)
  if(Kokkos_ENABLE_CUDA)
    if(NOT ${FFT} STREQUAL "KISS")
    if(NOT ${FFT} STREQUAL "KISS")
      target_compile_definitions(lammps PRIVATE -DFFT_CUFFT)
      target_compile_definitions(lammps PRIVATE -DFFT_CUFFT)
      target_link_libraries(lammps PRIVATE cufft)
      target_link_libraries(lammps PRIVATE cufft)
+3 −0
Original line number Original line Diff line number Diff line
@@ -27,6 +27,9 @@ if(DOWNLOAD_LATTE)
    INTERFACE_LINK_LIBRARIES "${LAPACK_LIBRARIES}")
    INTERFACE_LINK_LIBRARIES "${LAPACK_LIBRARIES}")
  target_link_libraries(lammps PRIVATE LAMMPS::LATTE)
  target_link_libraries(lammps PRIVATE LAMMPS::LATTE)
  add_dependencies(LAMMPS::LATTE latte_build)
  add_dependencies(LAMMPS::LATTE latte_build)
  if(BUILD_LIB AND NOT BUILD_SHARED_LIBS)
    install(CODE "MESSAGE(FATAL_ERROR \"Installing liblammps with downloaded libraries is currently not supported.\")")
  endif()
else()
else()
  find_package(LATTE)
  find_package(LATTE)
  if(NOT LATTE_FOUND)
  if(NOT LATTE_FOUND)
Loading