Update Kokkos library in LAMMPS to v3.6.0
This commit is contained in:
@ -60,3 +60,5 @@ ELSEIF(@Kokkos_ENABLE_CUDA@ AND NOT "separable_compilation" IN_LIST Kokkos_FIND_
|
||||
# be mindful of the environment, pollution is bad
|
||||
UNSET(IS_NVCC)
|
||||
ENDIF()
|
||||
|
||||
set(Kokkos_COMPILE_LANGUAGE @KOKKOS_COMPILE_LANGUAGE@)
|
||||
|
||||
@ -13,6 +13,10 @@ ENDFOREACH()
|
||||
IF(NOT Kokkos_FIND_QUIETLY)
|
||||
MESSAGE(STATUS "Enabled Kokkos devices: ${Kokkos_DEVICES}")
|
||||
ENDIF()
|
||||
IF(Kokkos_ENABLE_THREADS AND NOT DEPRECATED_CODE_3 IN_LIST Kokkos_OPTIONS) # for backward compatibility
|
||||
SET(Kokkos_ENABLE_PTHREAD ON)
|
||||
LIST(APPEND Kokkos_DEVICES PTHREAD)
|
||||
ENDIF()
|
||||
|
||||
IF (Kokkos_ENABLE_CUDA)
|
||||
# If we are building CUDA, we have tricked CMake because we declare a CXX project
|
||||
|
||||
@ -43,6 +43,7 @@
|
||||
#cmakedefine KOKKOS_ENABLE_CUDA_LDG_INTRINSIC
|
||||
#cmakedefine KOKKOS_ENABLE_IMPL_CUDA_MALLOC_ASYNC
|
||||
#cmakedefine KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE
|
||||
#cmakedefine KOKKOS_ENABLE_HIP_MULTIPLE_KERNEL_INSTANTIATIONS
|
||||
#cmakedefine KOKKOS_ENABLE_HPX_ASYNC_DISPATCH
|
||||
#cmakedefine KOKKOS_ENABLE_DEBUG
|
||||
#cmakedefine KOKKOS_ENABLE_DEBUG_DUALVIEW_MODIFY_CHECK
|
||||
@ -112,5 +113,8 @@
|
||||
#cmakedefine KOKKOS_ARCH_AMD_ZEN
|
||||
#cmakedefine KOKKOS_ARCH_AMD_ZEN2
|
||||
#cmakedefine KOKKOS_ARCH_AMD_ZEN3
|
||||
|
||||
#cmakedefine KOKKOS_IMPL_DISABLE_SYCL_DEVICE_PRINTF
|
||||
#cmakedefine KOKKOS_ARCH_VEGA
|
||||
#cmakedefine KOKKOS_ARCH_VEGA900
|
||||
#cmakedefine KOKKOS_ARCH_VEGA906
|
||||
#cmakedefine KOKKOS_ARCH_VEGA908
|
||||
#cmakedefine KOKKOS_ARCH_VEGA90A
|
||||
|
||||
@ -29,7 +29,7 @@ ELSE()
|
||||
ENDIF()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
IF(KOKKOS_CXX_HOST_COMPILER_ID STREQUAL PGI)
|
||||
IF(KOKKOS_CXX_HOST_COMPILER_ID STREQUAL NVHPC)
|
||||
SET(KOKKOS_CUDA_ERROR "Using NVHPC as host compiler requires at least CMake 3.20.1")
|
||||
ELSE()
|
||||
SET(KOKKOS_CUDA_ERROR DEFAULT_MSG)
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
|
||||
FIND_PACKAGE(HPX REQUIRED)
|
||||
FIND_PACKAGE(HPX REQUIRED 1.7.0)
|
||||
#as of right now, HPX doesn't export correctly
|
||||
#so let's convert it to an interface target
|
||||
KOKKOS_CREATE_IMPORTED_TPL(HPX INTERFACE
|
||||
|
||||
@ -1,20 +0,0 @@
|
||||
|
||||
TRY_COMPILE(KOKKOS_HAS_PTHREAD_ARG
|
||||
${KOKKOS_TOP_BUILD_DIR}/tpl_tests
|
||||
${KOKKOS_SOURCE_DIR}/cmake/compile_tests/pthread.cpp
|
||||
LINK_LIBRARIES -pthread
|
||||
COMPILE_DEFINITIONS -pthread
|
||||
)
|
||||
# The test no longer requires C++11
|
||||
# if we did needed C++ standard support, then we should add option
|
||||
# ${CMAKE_CXX${KOKKOS_CXX_STANDARD}_STANDARD_COMPILE_OPTION}
|
||||
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(TPLPTHREAD DEFAULT_MSG KOKKOS_HAS_PTHREAD_ARG)
|
||||
#Only create the TPL if we succeed
|
||||
IF (KOKKOS_HAS_PTHREAD_ARG)
|
||||
KOKKOS_CREATE_IMPORTED_TPL(PTHREAD
|
||||
INTERFACE #this is not a real library with a real location
|
||||
COMPILE_OPTIONS -pthread
|
||||
LINK_OPTIONS -pthread)
|
||||
ENDIF()
|
||||
15
lib/kokkos/cmake/Modules/FindTPLTHREADS.cmake
Normal file
15
lib/kokkos/cmake/Modules/FindTPLTHREADS.cmake
Normal file
@ -0,0 +1,15 @@
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
INCLUDE("${CMAKE_SOURCE_DIR}/cmake/tpls/FindTPLPthread.cmake")
|
||||
|
||||
IF (TARGET Threads::Threads)
|
||||
SET(FOUND_THREADS TRUE)
|
||||
ELSE()
|
||||
SET(FOUND_THREADS FALSE)
|
||||
ENDIF()
|
||||
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(TPLTHREADS DEFAULT_MSG FOUND_THREADS)
|
||||
#Only create the TPL if we succeed
|
||||
IF (FOUND_THREADS)
|
||||
KOKKOS_CREATE_IMPORTED_TPL(THREADS INTERFACE LINK_OPTIONS
|
||||
${TPL_Pthread_LIBRARIES})
|
||||
ENDIF()
|
||||
@ -43,6 +43,7 @@
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <cuda_runtime_api.h>
|
||||
|
||||
int main() {
|
||||
cudaDeviceProp device_properties;
|
||||
|
||||
@ -67,7 +67,7 @@ KOKKOS_ARCH_OPTION(ZEN3 HOST "AMD Zen3 architecture")
|
||||
KOKKOS_ARCH_OPTION(VEGA900 GPU "AMD GPU MI25 GFX900")
|
||||
KOKKOS_ARCH_OPTION(VEGA906 GPU "AMD GPU MI50/MI60 GFX906")
|
||||
KOKKOS_ARCH_OPTION(VEGA908 GPU "AMD GPU MI100 GFX908")
|
||||
KOKKOS_ARCH_OPTION(VEGA90A GPU "" )
|
||||
KOKKOS_ARCH_OPTION(VEGA90A GPU "AMD GPU MI200 GFX90A")
|
||||
KOKKOS_ARCH_OPTION(INTEL_GEN GPU "Intel GPUs Gen9+")
|
||||
KOKKOS_ARCH_OPTION(INTEL_DG1 GPU "Intel Iris XeMAX GPU")
|
||||
KOKKOS_ARCH_OPTION(INTEL_GEN9 GPU "Intel GPU Gen9")
|
||||
@ -92,8 +92,15 @@ IF(KOKKOS_ENABLE_COMPILER_WARNINGS)
|
||||
LIST(REMOVE_ITEM COMMON_WARNINGS "-Wsign-compare")
|
||||
ENDIF()
|
||||
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang)
|
||||
LIST(APPEND COMMON_WARNINGS "-Wimplicit-fallthrough")
|
||||
ENDIF()
|
||||
|
||||
SET(GNU_WARNINGS "-Wempty-body" "-Wclobbered" "-Wignored-qualifiers"
|
||||
${COMMON_WARNINGS})
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL GNU AND KOKKOS_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 7)
|
||||
LIST(APPEND GNU_WARNINGS "-Wimplicit-fallthrough")
|
||||
ENDIF()
|
||||
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
COMPILER_ID CMAKE_CXX_COMPILER_ID
|
||||
@ -211,7 +218,7 @@ IF (KOKKOS_ARCH_A64FX)
|
||||
NVHPC NO-VALUE-SPECIFIED
|
||||
DEFAULT -march=armv8.2-a+sve
|
||||
Clang -march=armv8.2-a+sve -msve-vector-bits=512
|
||||
GCC -march=armv8.2-a+sve -msve-vector-bits=512
|
||||
GNU -march=armv8.2-a+sve -msve-vector-bits=512
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
@ -388,7 +395,7 @@ ENDIF()
|
||||
IF (KOKKOS_ENABLE_HIP)
|
||||
IF (KOKKOS_ENABLE_HIP_RELOCATABLE_DEVICE_CODE)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
DEFAULT -fgpu-rdc
|
||||
DEFAULT -fgpu-rdc -DDESUL_HIP_RDC
|
||||
)
|
||||
ELSE()
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
@ -399,7 +406,7 @@ ENDIF()
|
||||
|
||||
IF (KOKKOS_ENABLE_SYCL)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
DEFAULT -fsycl -fno-sycl-id-queries-fit-in-int
|
||||
DEFAULT -fsycl -fno-sycl-id-queries-fit-in-int -fsycl-dead-args-optimization
|
||||
)
|
||||
COMPILER_SPECIFIC_OPTIONS(
|
||||
DEFAULT -fsycl-unnamed-lambda
|
||||
@ -419,9 +426,14 @@ FUNCTION(CHECK_CUDA_ARCH ARCH FLAG)
|
||||
UNSET(KOKKOS_ARCH_${ARCH} PARENT_SCOPE)
|
||||
ELSE()
|
||||
SET(KOKKOS_CUDA_ARCH_FLAG ${FLAG} PARENT_SCOPE)
|
||||
GLOBAL_APPEND(KOKKOS_CUDA_OPTIONS "${CUDA_ARCH_FLAG}=${FLAG}")
|
||||
IF(KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE OR KOKKOS_CXX_COMPILER_ID STREQUAL NVIDIA)
|
||||
GLOBAL_APPEND(KOKKOS_LINK_OPTIONS "${CUDA_ARCH_FLAG}=${FLAG}")
|
||||
IF(KOKKOS_ENABLE_COMPILE_AS_CMAKE_LANGUAGE)
|
||||
string(REPLACE "sm_" "" CMAKE_ARCH ${FLAG})
|
||||
SET(CMAKE_CUDA_ARCHITECTURES ${CMAKE_ARCH} PARENT_SCOPE)
|
||||
ELSE()
|
||||
GLOBAL_APPEND(KOKKOS_CUDA_OPTIONS "${CUDA_ARCH_FLAG}=${FLAG}")
|
||||
IF(KOKKOS_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE OR KOKKOS_CXX_COMPILER_ID STREQUAL NVIDIA)
|
||||
GLOBAL_APPEND(KOKKOS_LINK_OPTIONS "${CUDA_ARCH_FLAG}=${FLAG}")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
@ -473,8 +485,8 @@ ENDFUNCTION()
|
||||
#to the corresponding flag name if ON
|
||||
CHECK_AMDGPU_ARCH(VEGA900 gfx900) # Radeon Instinct MI25
|
||||
CHECK_AMDGPU_ARCH(VEGA906 gfx906) # Radeon Instinct MI50 and MI60
|
||||
CHECK_AMDGPU_ARCH(VEGA908 gfx908)
|
||||
CHECK_AMDGPU_ARCH(VEGA90A gfx90a)
|
||||
CHECK_AMDGPU_ARCH(VEGA908 gfx908) # Radeon Instinct MI100
|
||||
CHECK_AMDGPU_ARCH(VEGA90A gfx90a) # Radeon Instinct MI200
|
||||
|
||||
IF(KOKKOS_ENABLE_HIP AND NOT AMDGPU_ARCH_ALREADY_SPECIFIED)
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL HIPCC)
|
||||
@ -545,36 +557,34 @@ IF (KOKKOS_ENABLE_SYCL)
|
||||
IF(CUDA_ARCH_ALREADY_SPECIFIED)
|
||||
IF(KOKKOS_ENABLE_UNSUPPORTED_ARCHS)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
DEFAULT -fsycl-targets=nvptx64-nvidia-cuda-sycldevice
|
||||
DEFAULT -fsycl-targets=nvptx64-nvidia-cuda -Xsycl-target-backend "${CUDA_ARCH_FLAG}=${KOKKOS_CUDA_ARCH_FLAG}"
|
||||
)
|
||||
# FIXME_SYCL The CUDA backend doesn't support printf yet.
|
||||
GLOBAL_SET(KOKKOS_IMPL_DISABLE_SYCL_DEVICE_PRINTF ON)
|
||||
ELSE()
|
||||
MESSAGE(SEND_ERROR "Setting a CUDA architecture for SYCL is only allowed with Kokkos_ENABLE_UNSUPPORTED_ARCHS=ON!")
|
||||
ENDIF()
|
||||
ELSEIF(KOKKOS_ARCH_INTEL_GEN)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
DEFAULT -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device gen9-"
|
||||
DEFAULT -fsycl-targets=spir64_gen -Xsycl-target-backend "-device gen9-"
|
||||
)
|
||||
ELSEIF(KOKKOS_ARCH_INTEL_GEN9)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
DEFAULT -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device gen9"
|
||||
DEFAULT -fsycl-targets=spir64_gen -Xsycl-target-backend "-device gen9"
|
||||
)
|
||||
ELSEIF(KOKKOS_ARCH_INTEL_GEN11)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
DEFAULT -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device gen11"
|
||||
DEFAULT -fsycl-targets=spir64_gen -Xsycl-target-backend "-device gen11"
|
||||
)
|
||||
ELSEIF(KOKKOS_ARCH_INTEL_GEN12LP)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
DEFAULT -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device gen12lp"
|
||||
DEFAULT -fsycl-targets=spir64_gen -Xsycl-target-backend "-device gen12lp"
|
||||
)
|
||||
ELSEIF(KOKKOS_ARCH_INTEL_DG1)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
DEFAULT -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device dg1"
|
||||
DEFAULT -fsycl-targets=spir64_gen -Xsycl-target-backend "-device dg1"
|
||||
)
|
||||
ELSEIF(KOKKOS_ARCH_INTEL_XEHP)
|
||||
COMPILER_SPECIFIC_FLAGS(
|
||||
DEFAULT -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -Xsycl-target-backend "-device xehp"
|
||||
DEFAULT -fsycl-targets=spir64_gen -Xsycl-target-backend "-device xehp"
|
||||
)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
@ -644,30 +654,33 @@ IF(KOKKOS_ENABLE_CUDA AND NOT CUDA_ARCH_ALREADY_SPECIFIED)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF (KOKKOS_ENABLE_CUDA)
|
||||
#Regardless of version, make sure we define the general architecture name
|
||||
IF (KOKKOS_ARCH_KEPLER30 OR KOKKOS_ARCH_KEPLER32 OR KOKKOS_ARCH_KEPLER35 OR KOKKOS_ARCH_KEPLER37)
|
||||
SET(KOKKOS_ARCH_KEPLER ON)
|
||||
ENDIF()
|
||||
#Regardless of version, make sure we define the general architecture name
|
||||
IF (KOKKOS_ARCH_KEPLER30 OR KOKKOS_ARCH_KEPLER32 OR KOKKOS_ARCH_KEPLER35 OR KOKKOS_ARCH_KEPLER37)
|
||||
SET(KOKKOS_ARCH_KEPLER ON)
|
||||
ENDIF()
|
||||
|
||||
#Regardless of version, make sure we define the general architecture name
|
||||
IF (KOKKOS_ARCH_MAXWELL50 OR KOKKOS_ARCH_MAXWELL52 OR KOKKOS_ARCH_MAXWELL53)
|
||||
SET(KOKKOS_ARCH_MAXWELL ON)
|
||||
ENDIF()
|
||||
#Regardless of version, make sure we define the general architecture name
|
||||
IF (KOKKOS_ARCH_MAXWELL50 OR KOKKOS_ARCH_MAXWELL52 OR KOKKOS_ARCH_MAXWELL53)
|
||||
SET(KOKKOS_ARCH_MAXWELL ON)
|
||||
ENDIF()
|
||||
|
||||
#Regardless of version, make sure we define the general architecture name
|
||||
IF (KOKKOS_ARCH_PASCAL60 OR KOKKOS_ARCH_PASCAL61)
|
||||
SET(KOKKOS_ARCH_PASCAL ON)
|
||||
ENDIF()
|
||||
#Regardless of version, make sure we define the general architecture name
|
||||
IF (KOKKOS_ARCH_PASCAL60 OR KOKKOS_ARCH_PASCAL61)
|
||||
SET(KOKKOS_ARCH_PASCAL ON)
|
||||
ENDIF()
|
||||
|
||||
#Regardless of version, make sure we define the general architecture name
|
||||
IF (KOKKOS_ARCH_VOLTA70 OR KOKKOS_ARCH_VOLTA72)
|
||||
SET(KOKKOS_ARCH_VOLTA ON)
|
||||
ENDIF()
|
||||
#Regardless of version, make sure we define the general architecture name
|
||||
IF (KOKKOS_ARCH_VOLTA70 OR KOKKOS_ARCH_VOLTA72)
|
||||
SET(KOKKOS_ARCH_VOLTA ON)
|
||||
ENDIF()
|
||||
|
||||
IF (KOKKOS_ARCH_AMPERE80 OR KOKKOS_ARCH_AMPERE86)
|
||||
SET(KOKKOS_ARCH_AMPERE ON)
|
||||
ENDIF()
|
||||
IF (KOKKOS_ARCH_AMPERE80 OR KOKKOS_ARCH_AMPERE86)
|
||||
SET(KOKKOS_ARCH_AMPERE ON)
|
||||
ENDIF()
|
||||
|
||||
#Regardless of version, make sure we define the general architecture name
|
||||
IF (KOKKOS_ARCH_VEGA900 OR KOKKOS_ARCH_VEGA906 OR KOKKOS_ARCH_VEGA908 OR KOKKOS_ARCH_VEGA90A)
|
||||
SET(KOKKOS_ARCH_VEGA ON)
|
||||
ENDIF()
|
||||
|
||||
#CMake verbose is kind of pointless
|
||||
@ -701,9 +714,6 @@ IF(NOT _DEVICE_PARALLEL)
|
||||
SET(_DEFAULT_DEVICE_MEMSPACE "NoTypeDefined")
|
||||
ENDIF()
|
||||
MESSAGE(STATUS " Device Parallel: ${_DEVICE_PARALLEL}")
|
||||
IF(KOKKOS_ENABLE_PTHREAD)
|
||||
SET(KOKKOS_ENABLE_THREADS ON)
|
||||
ENDIF()
|
||||
|
||||
FOREACH (_BACKEND OpenMP Threads HPX)
|
||||
STRING(TOUPPER ${_BACKEND} UC_BACKEND)
|
||||
|
||||
@ -20,31 +20,36 @@ MACRO(kokkos_internal_have_compiler_nvcc)
|
||||
ENDMACRO()
|
||||
|
||||
IF(Kokkos_ENABLE_CUDA)
|
||||
# find kokkos_launch_compiler
|
||||
FIND_PROGRAM(Kokkos_COMPILE_LAUNCHER
|
||||
NAMES kokkos_launch_compiler
|
||||
HINTS ${PROJECT_SOURCE_DIR}
|
||||
PATHS ${PROJECT_SOURCE_DIR}
|
||||
PATH_SUFFIXES bin)
|
||||
# kokkos_enable_options is not yet called so use lower case here
|
||||
IF(Kokkos_ENABLE_COMPILE_AS_CMAKE_LANGUAGE)
|
||||
kokkos_internal_have_compiler_nvcc(${CMAKE_CUDA_COMPILER})
|
||||
ELSE()
|
||||
# find kokkos_launch_compiler
|
||||
FIND_PROGRAM(Kokkos_COMPILE_LAUNCHER
|
||||
NAMES kokkos_launch_compiler
|
||||
HINTS ${PROJECT_SOURCE_DIR}
|
||||
PATHS ${PROJECT_SOURCE_DIR}
|
||||
PATH_SUFFIXES bin)
|
||||
|
||||
FIND_PROGRAM(Kokkos_NVCC_WRAPPER
|
||||
NAMES nvcc_wrapper
|
||||
HINTS ${PROJECT_SOURCE_DIR}
|
||||
PATHS ${PROJECT_SOURCE_DIR}
|
||||
PATH_SUFFIXES bin)
|
||||
FIND_PROGRAM(Kokkos_NVCC_WRAPPER
|
||||
NAMES nvcc_wrapper
|
||||
HINTS ${PROJECT_SOURCE_DIR}
|
||||
PATHS ${PROJECT_SOURCE_DIR}
|
||||
PATH_SUFFIXES bin)
|
||||
|
||||
# check if compiler was set to nvcc_wrapper
|
||||
kokkos_internal_have_compiler_nvcc(${CMAKE_CXX_COMPILER})
|
||||
# if launcher was found and nvcc_wrapper was not specified as
|
||||
# compiler, set to use launcher. Will ensure CMAKE_CXX_COMPILER
|
||||
# is replaced by nvcc_wrapper
|
||||
IF(Kokkos_COMPILE_LAUNCHER AND NOT INTERNAL_HAVE_COMPILER_NVCC AND NOT KOKKOS_CXX_COMPILER_ID STREQUAL Clang)
|
||||
# the first argument to launcher is always the C++ compiler defined by cmake
|
||||
# if the second argument matches the C++ compiler, it forwards the rest of the
|
||||
# args to nvcc_wrapper
|
||||
kokkos_internal_have_compiler_nvcc(
|
||||
${Kokkos_COMPILE_LAUNCHER} ${Kokkos_NVCC_WRAPPER} ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER} -DKOKKOS_DEPENDENCE)
|
||||
SET(INTERNAL_USE_COMPILER_LAUNCHER true)
|
||||
# check if compiler was set to nvcc_wrapper
|
||||
kokkos_internal_have_compiler_nvcc(${CMAKE_CXX_COMPILER})
|
||||
# if launcher was found and nvcc_wrapper was not specified as
|
||||
# compiler, set to use launcher. Will ensure CMAKE_CXX_COMPILER
|
||||
# is replaced by nvcc_wrapper
|
||||
IF(Kokkos_COMPILE_LAUNCHER AND NOT INTERNAL_HAVE_COMPILER_NVCC AND NOT KOKKOS_CXX_COMPILER_ID STREQUAL Clang)
|
||||
# the first argument to launcher is always the C++ compiler defined by cmake
|
||||
# if the second argument matches the C++ compiler, it forwards the rest of the
|
||||
# args to nvcc_wrapper
|
||||
kokkos_internal_have_compiler_nvcc(
|
||||
${Kokkos_COMPILE_LAUNCHER} ${Kokkos_NVCC_WRAPPER} ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER} -DKOKKOS_DEPENDENCE)
|
||||
SET(INTERNAL_USE_COMPILER_LAUNCHER true)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
@ -102,6 +107,11 @@ IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang)
|
||||
IF (INTERNAL_HAVE_INTEL_COMPILER) #not actually Clang
|
||||
SET(KOKKOS_CLANG_IS_INTEL TRUE)
|
||||
SET(KOKKOS_CXX_COMPILER_ID IntelLLVM CACHE STRING INTERNAL FORCE)
|
||||
EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} --version
|
||||
OUTPUT_VARIABLE INTERNAL_CXX_COMPILER_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
STRING(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+"
|
||||
KOKKOS_CXX_COMPILER_VERSION ${INTERNAL_CXX_COMPILER_VERSION})
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
@ -133,12 +143,14 @@ ENDIF()
|
||||
|
||||
# Enforce the minimum compilers supported by Kokkos.
|
||||
SET(KOKKOS_MESSAGE_TEXT "Compiler not supported by Kokkos. Required compiler versions:")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n Clang 4.0.0 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n GCC 5.3.0 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n Intel 17.0.0 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n NVCC 9.2.88 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n HIPCC 4.2.0 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n PGI 17.4 or higher\n")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n Clang 4.0.0 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n GCC 5.3.0 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n Intel 17.0.0 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n IntelLLVM 2022.0.0 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n NVCC 9.2.88 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n HIPCC 4.5.0 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\n PGI 17.4 or higher")
|
||||
SET(KOKKOS_MESSAGE_TEXT "${KOKKOS_MESSAGE_TEXT}\nCompiler: ${KOKKOS_CXX_COMPILER_ID} ${KOKKOS_CXX_COMPILER_VERSION}\n")
|
||||
|
||||
IF(KOKKOS_CXX_COMPILER_ID STREQUAL Clang)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 4.0.0)
|
||||
@ -152,13 +164,18 @@ ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL Intel)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 17.0.0)
|
||||
MESSAGE(FATAL_ERROR "${KOKKOS_MESSAGE_TEXT}")
|
||||
ENDIF()
|
||||
ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL IntelLLVM AND Kokkos_ENABLE_SYCL)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 2022.0.0)
|
||||
MESSAGE(FATAL_ERROR "${KOKKOS_MESSAGE_TEXT}")
|
||||
ENDIF()
|
||||
ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL NVIDIA)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 9.2.88)
|
||||
MESSAGE(FATAL_ERROR "${KOKKOS_MESSAGE_TEXT}")
|
||||
ENDIF()
|
||||
SET(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Kokkos turns off CXX extensions" FORCE)
|
||||
ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL HIPCC)
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 4.2.0)
|
||||
# Note that ROCm 4.5 reports as version 4.4
|
||||
IF(KOKKOS_CXX_COMPILER_VERSION VERSION_LESS 4.4.0)
|
||||
MESSAGE(FATAL_ERROR "${KOKKOS_MESSAGE_TEXT}")
|
||||
ENDIF()
|
||||
ELSEIF(KOKKOS_CXX_COMPILER_ID STREQUAL PGI)
|
||||
|
||||
@ -19,10 +19,13 @@ KOKKOS_CFG_DEPENDS(DEVICES NONE)
|
||||
KOKKOS_DEPRECATED_LIST(DEVICES ENABLE)
|
||||
|
||||
|
||||
KOKKOS_DEVICE_OPTION(PTHREAD OFF HOST "Whether to build Pthread backend")
|
||||
IF (KOKKOS_ENABLE_PTHREAD)
|
||||
#patch the naming here
|
||||
KOKKOS_DEVICE_OPTION(THREADS OFF HOST "Whether to build C++ threads backend")
|
||||
IF(Kokkos_ENABLE_PTHREAD) # for backward compatibility
|
||||
SET(Kokkos_ENABLE_THREADS ON CACHE BOOL "Whether to build C++ threads backend" FORCE)
|
||||
SET(KOKKOS_ENABLE_THREADS ON)
|
||||
LIST(APPEND KOKKOS_ENABLED_DEVICES THREADS)
|
||||
SET(KOKKOS_HAS_HOST ON)
|
||||
MESSAGE(DEPRECATION "The Kokkos_ENABLE_PTHREAD option is deprecated. Use Kokkos_ENABLE_THREADS instead!")
|
||||
ENDIF()
|
||||
|
||||
# detect clang++ / cl / clang-cl clashes
|
||||
@ -119,9 +122,6 @@ KOKKOS_DEVICE_OPTION(CUDA ${CUDA_DEFAULT} DEVICE "Whether to build CUDA backend"
|
||||
|
||||
IF (KOKKOS_ENABLE_CUDA)
|
||||
GLOBAL_SET(KOKKOS_DONT_ALLOW_EXTENSIONS "CUDA enabled")
|
||||
IF(WIN32 AND NOT KOKKOS_CXX_COMPILER_ID STREQUAL Clang)
|
||||
GLOBAL_APPEND(KOKKOS_COMPILE_OPTIONS -x cu)
|
||||
ENDIF()
|
||||
## Cuda has extra setup requirements, turn on Kokkos_Setup_Cuda.hpp in macros
|
||||
LIST(APPEND DEVICE_SETUP_LIST Cuda)
|
||||
ENDIF()
|
||||
|
||||
@ -56,6 +56,8 @@ KOKKOS_ENABLE_OPTION(PROFILING_LOAD_PRINT OFF "Whether to print information abou
|
||||
KOKKOS_ENABLE_OPTION(TUNING OFF "Whether to create bindings for tuning tools")
|
||||
KOKKOS_ENABLE_OPTION(AGGRESSIVE_VECTORIZATION OFF "Whether to aggressively vectorize loops")
|
||||
KOKKOS_ENABLE_OPTION(LAUNCH_COMPILER ON "Whether to potentially use the launch compiler")
|
||||
KOKKOS_ENABLE_OPTION(COMPILE_AS_CMAKE_LANGUAGE OFF "Whether to use native cmake language support")
|
||||
KOKKOS_ENABLE_OPTION(HIP_MULTIPLE_KERNEL_INSTANTIATIONS OFF "Whether multiple kernels are instantiated at compile time - improve performance but increase compile time")
|
||||
|
||||
# This option will go away eventually, but allows fallback to old implementation when needed.
|
||||
KOKKOS_ENABLE_OPTION(IMPL_DESUL_ATOMICS ON "Whether to use desul based atomics - option only during beta")
|
||||
|
||||
@ -60,12 +60,7 @@ SET(HPX_DEFAULT OFF)
|
||||
ENDIF()
|
||||
KOKKOS_TPL_OPTION(HPX ${HPX_DEFAULT})
|
||||
|
||||
IF(Trilinos_ENABLE_Kokkos AND TPL_ENABLE_PTHREAD)
|
||||
SET(PTHREAD_DEFAULT ON)
|
||||
ELSE()
|
||||
SET(PTHREAD_DEFAULT OFF)
|
||||
ENDIF()
|
||||
KOKKOS_TPL_OPTION(PTHREAD ${PTHREAD_DEFAULT} TRIBITS Pthread)
|
||||
KOKKOS_TPL_OPTION(THREADS ${Kokkos_ENABLE_THREADS} TRIBITS Pthread)
|
||||
|
||||
IF(Trilinos_ENABLE_Kokkos AND TPL_ENABLE_quadmath)
|
||||
SET(LIBQUADMATH_DEFAULT ON)
|
||||
@ -76,13 +71,17 @@ KOKKOS_TPL_OPTION(LIBQUADMATH ${LIBQUADMATH_DEFAULT} TRIBITS quadmath)
|
||||
|
||||
#Make sure we use our local FindKokkosCuda.cmake
|
||||
KOKKOS_IMPORT_TPL(HPX INTERFACE)
|
||||
KOKKOS_IMPORT_TPL(CUDA INTERFACE)
|
||||
IF (NOT KOKKOS_ENABLE_COMPILE_AS_CMAKE_LANGUAGE)
|
||||
KOKKOS_IMPORT_TPL(CUDA INTERFACE)
|
||||
ENDIF()
|
||||
KOKKOS_IMPORT_TPL(HWLOC)
|
||||
KOKKOS_IMPORT_TPL(LIBNUMA)
|
||||
KOKKOS_IMPORT_TPL(LIBRT)
|
||||
KOKKOS_IMPORT_TPL(LIBDL)
|
||||
KOKKOS_IMPORT_TPL(MEMKIND)
|
||||
KOKKOS_IMPORT_TPL(PTHREAD INTERFACE)
|
||||
IF (NOT WIN32)
|
||||
KOKKOS_IMPORT_TPL(THREADS INTERFACE)
|
||||
ENDIF()
|
||||
KOKKOS_IMPORT_TPL(ROCM INTERFACE)
|
||||
KOKKOS_IMPORT_TPL(LIBQUADMATH)
|
||||
|
||||
|
||||
@ -6,6 +6,12 @@ INCLUDE(GNUInstallDirs)
|
||||
|
||||
MESSAGE(STATUS "The project name is: ${PROJECT_NAME}")
|
||||
|
||||
IF(GTest_FOUND)
|
||||
SET(KOKKOS_GTEST_LIB GTest::gtest)
|
||||
ELSE() # fallback to internal gtest
|
||||
SET(KOKKOS_GTEST_LIB kokkos_gtest)
|
||||
ENDIF()
|
||||
|
||||
FUNCTION(VERIFY_EMPTY CONTEXT)
|
||||
if(${ARGN})
|
||||
MESSAGE(FATAL_ERROR "Kokkos does not support all of Tribits. Unhandled arguments in ${CONTEXT}:\n${ARGN}")
|
||||
@ -128,6 +134,8 @@ FUNCTION(KOKKOS_ADD_EXECUTABLE ROOT_NAME)
|
||||
"SOURCES;TESTONLYLIBS"
|
||||
${ARGN})
|
||||
|
||||
SET_SOURCE_FILES_PROPERTIES(${PARSE_SOURCES} PROPERTIES LANGUAGE ${KOKKOS_COMPILE_LANGUAGE})
|
||||
|
||||
SET(EXE_NAME ${PACKAGE_NAME}_${ROOT_NAME})
|
||||
ADD_EXECUTABLE(${EXE_NAME} ${PARSE_SOURCES})
|
||||
IF (PARSE_TESTONLYLIBS)
|
||||
@ -155,7 +163,7 @@ FUNCTION(KOKKOS_ADD_EXECUTABLE_AND_TEST ROOT_NAME)
|
||||
TRIBITS_ADD_EXECUTABLE_AND_TEST(
|
||||
${ROOT_NAME}
|
||||
SOURCES ${PARSE_SOURCES}
|
||||
TESTONLYLIBS kokkos_gtest
|
||||
TESTONLYLIBS ${KOKKOS_GTEST_LIB}
|
||||
NUM_MPI_PROCS 1
|
||||
COMM serial mpi
|
||||
ARGS ${PARSE_ARGS}
|
||||
@ -247,7 +255,7 @@ MACRO(KOKKOS_ADD_TEST_EXECUTABLE ROOT_NAME)
|
||||
KOKKOS_ADD_EXECUTABLE(${ROOT_NAME}
|
||||
SOURCES ${PARSE_SOURCES}
|
||||
${PARSE_UNPARSED_ARGUMENTS}
|
||||
TESTONLYLIBS kokkos_gtest
|
||||
TESTONLYLIBS ${KOKKOS_GTEST_LIB}
|
||||
)
|
||||
SET(EXE_NAME ${PACKAGE_NAME}_${ROOT_NAME})
|
||||
ENDMACRO()
|
||||
@ -353,7 +361,7 @@ FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME)
|
||||
""
|
||||
${ARGN})
|
||||
|
||||
IF(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.18")
|
||||
IF((NOT KOKKOS_ENABLE_COMPILE_AS_CMAKE_LANGUAGE) AND (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.18"))
|
||||
#I can use link options
|
||||
#check for CXX linkage using the simple 3.18 way
|
||||
TARGET_LINK_OPTIONS(
|
||||
@ -370,12 +378,12 @@ FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME)
|
||||
|
||||
TARGET_COMPILE_OPTIONS(
|
||||
${LIBRARY_NAME} PUBLIC
|
||||
$<$<COMPILE_LANGUAGE:CXX>:${KOKKOS_COMPILE_OPTIONS}>
|
||||
$<$<COMPILE_LANGUAGE:${KOKKOS_COMPILE_LANGUAGE}>:${KOKKOS_COMPILE_OPTIONS}>
|
||||
)
|
||||
|
||||
TARGET_COMPILE_DEFINITIONS(
|
||||
${LIBRARY_NAME} PUBLIC
|
||||
$<$<COMPILE_LANGUAGE:CXX>:${KOKKOS_COMPILE_DEFINITIONS}>
|
||||
$<$<COMPILE_LANGUAGE:${KOKKOS_COMPILE_LANGUAGE}>:${KOKKOS_COMPILE_DEFINITIONS}>
|
||||
)
|
||||
|
||||
TARGET_LINK_LIBRARIES(
|
||||
@ -385,7 +393,7 @@ FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME)
|
||||
IF (KOKKOS_ENABLE_CUDA)
|
||||
TARGET_COMPILE_OPTIONS(
|
||||
${LIBRARY_NAME}
|
||||
PUBLIC $<$<COMPILE_LANGUAGE:CXX>:${KOKKOS_CUDA_OPTIONS}>
|
||||
PUBLIC $<$<COMPILE_LANGUAGE:${KOKKOS_COMPILE_LANGUAGE}>:${KOKKOS_CUDA_OPTIONS}>
|
||||
)
|
||||
SET(NODEDUP_CUDAFE_OPTIONS)
|
||||
FOREACH(OPT ${KOKKOS_CUDAFE_OPTIONS})
|
||||
@ -393,14 +401,14 @@ FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME)
|
||||
ENDFOREACH()
|
||||
TARGET_COMPILE_OPTIONS(
|
||||
${LIBRARY_NAME}
|
||||
PUBLIC $<$<COMPILE_LANGUAGE:CXX>:${NODEDUP_CUDAFE_OPTIONS}>
|
||||
PUBLIC $<$<COMPILE_LANGUAGE:${KOKKOS_COMPILE_LANGUAGE}>:${NODEDUP_CUDAFE_OPTIONS}>
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
IF (KOKKOS_ENABLE_HIP)
|
||||
TARGET_COMPILE_OPTIONS(
|
||||
${LIBRARY_NAME}
|
||||
PUBLIC $<$<COMPILE_LANGUAGE:CXX>:${KOKKOS_AMDGPU_OPTIONS}>
|
||||
PUBLIC $<$<COMPILE_LANGUAGE:${KOKKOS_COMPILE_LANGUAGE}>:${KOKKOS_AMDGPU_OPTIONS}>
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
@ -418,7 +426,7 @@ FUNCTION(KOKKOS_SET_LIBRARY_PROPERTIES LIBRARY_NAME)
|
||||
ENDFOREACH()
|
||||
TARGET_COMPILE_OPTIONS(
|
||||
${LIBRARY_NAME}
|
||||
PUBLIC $<$<COMPILE_LANGUAGE:CXX>:${NODEDUP_XCOMPILER_OPTIONS}>
|
||||
PUBLIC $<$<COMPILE_LANGUAGE:${KOKKOS_COMPILE_LANGUAGE}>:${NODEDUP_XCOMPILER_OPTIONS}>
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
@ -447,6 +455,9 @@ FUNCTION(KOKKOS_INTERNAL_ADD_LIBRARY LIBRARY_NAME)
|
||||
IF(PARSE_SOURCES)
|
||||
LIST(REMOVE_DUPLICATES PARSE_SOURCES)
|
||||
ENDIF()
|
||||
FOREACH(source ${PARSE_SOURCES})
|
||||
set_source_files_properties(${source} PROPERTIES LANGUAGE ${KOKKOS_COMPILE_LANGUAGE})
|
||||
ENDFOREACH()
|
||||
|
||||
IF(PARSE_STATIC)
|
||||
SET(LINK_TYPE STATIC)
|
||||
|
||||
Reference in New Issue
Block a user