Skip to content

Commit

Permalink
Desul atomics configure library based what the user enabled
Browse files Browse the repository at this point in the history
  • Loading branch information
dalg24 committed Jan 13, 2023
1 parent aad8792 commit 51aa904
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 21 deletions.
19 changes: 19 additions & 0 deletions core/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,22 @@ KOKKOS_INCLUDE_DIRECTORIES(
${KOKKOS_TOP_BUILD_DIR}
)
IF (Kokkos_ENABLE_IMPL_DESUL_ATOMICS AND NOT desul_FOUND)
IF(KOKKOS_ENABLE_CUDA)
SET(DESUL_ATOMICS_ENABLE_CUDA ON)
ENDIF()
IF(KOKKOS_ENABLE_HIP)
SET(DESUL_ATOMICS_ENABLE_HIP ON)
ENDIF()
IF(KOKKOS_ENABLE_SYCL)
SET(DESUL_ATOMICS_ENABLE_SYCL ON)
ENDIF()
IF(KOKKOS_ENABLE_OPENMPTARGET)
SET(DESUL_ATOMICS_ENABLE_OPENMP ON) # not a typo Kokkos OpenMPTarget -> Desul OpenMP
ENDIF()
CONFIGURE_FILE(
${CMAKE_CURRENT_SOURCE_DIR}/../../tpls/desul/Config.hpp.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/desul/atomics/Config.hpp
)
KOKKOS_INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR}/../../tpls/desul/include
)
Expand Down Expand Up @@ -78,15 +94,18 @@ IF (Kokkos_ENABLE_IMPL_DESUL_ATOMICS AND NOT desul_FOUND)
APPEND_GLOB(KOKKOS_CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../../tpls/desul/include/desul/*/*.hpp)
APPEND_GLOB(KOKKOS_CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../../tpls/desul/include/desul/*/*/*.hpp)
APPEND_GLOB(KOKKOS_CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../../tpls/desul/include/*/*/*.inc*)
APPEND_GLOB(KOKKOS_CORE_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/desul/*.hpp)

INSTALL (DIRECTORY
"${CMAKE_CURRENT_SOURCE_DIR}/../../tpls/desul/include/desul"
"${CMAKE_CURRENT_BINARY_DIR}/desul"
DESTINATION ${KOKKOS_HEADER_DIR}
FILES_MATCHING
PATTERN "*.inc"
PATTERN "*.inc_*"
PATTERN "*.hpp"
)

MESSAGE(STATUS "Using internal desul_atomics copy")
ELSE()
MESSAGE(STATUS "Using external desul_atomics install found at:")
Expand Down
4 changes: 0 additions & 4 deletions core/src/Kokkos_Atomics_Desul_Config.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,6 @@ static_assert(false,

#include <Kokkos_Macros.hpp>

#ifdef KOKKOS_ENABLE_OPENMPTARGET
#define DESUL_HAVE_OPENMP_ATOMICS
#endif

#if defined(KOKKOS_ARCH_KEPLER) || defined(KOKKOS_ARCH_MAXWELL)
#define DESUL_CUDA_ARCH_IS_PRE_PASCAL
#endif
Expand Down
17 changes: 17 additions & 0 deletions tpls/desul/Config.hpp.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/*
Copyright (c) 2019, Lawrence Livermore National Security, LLC
and DESUL project contributors. See the COPYRIGHT file for details.
Source: https://github.com/desul/desul

SPDX-License-Identifier: (BSD-3-Clause)
*/

#ifndef DESUL_ATOMICS_CONFIG_HPP_
#define DESUL_ATOMICS_CONFIG_HPP_

#cmakedefine DESUL_ATOMICS_ENABLE_CUDA
#cmakedefine DESUL_ATOMICS_ENABLE_HIP
#cmakedefine DESUL_ATOMICS_ENABLE_SYCL
#cmakedefine DESUL_ATOMICS_ENABLE_OPENMP

#endif
42 changes: 25 additions & 17 deletions tpls/desul/include/desul/atomics/Macros.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,32 +9,39 @@ SPDX-License-Identifier: (BSD-3-Clause)
#ifndef DESUL_ATOMICS_MACROS_HPP_
#define DESUL_ATOMICS_MACROS_HPP_

#include <desul/atomics/Config.hpp>

// Macros

// ONLY use GNUC atomics if not explicitly say to use OpenMP atomics
#if !defined(DESUL_HAVE_OPENMP_ATOMICS) && defined(__GNUC__)
#define DESUL_HAVE_GCC_ATOMICS
#if defined(DESUL_ATOMICS_ENABLE_CUDA) && defined(__CUDACC__)
#define DESUL_HAVE_CUDA_ATOMICS
#endif

// Equivalent to above for MSVC atomics
#if !defined(DESUL_HAVE_OPENMP_ATOMICS) && defined(_MSC_VER)
#define DESUL_HAVE_MSVC_ATOMICS
#if defined(DESUL_ATOMICS_ENABLE_HIP) && defined(__HIPCC__)
#define DESUL_HAVE_HIP_ATOMICS
#endif

#ifdef __CUDACC__
#define DESUL_HAVE_CUDA_ATOMICS
#if defined(DESUL_ATOMICS_ENABLE_SYCL) && defined(SYCL_LANGUAGE_VERSION)
#define DESUL_HAVE_SYCL_ATOMICS
#endif

#ifdef __HIPCC__
#define DESUL_HAVE_HIP_ATOMICS
#if defined(DESUL_ATOMICS_ENABLE_OPENMP)
#define DESUL_HAVE_OPENMP_ATOMICS
#endif

#ifdef SYCL_LANGUAGE_VERSION
#define DESUL_HAVE_SYCL_ATOMICS
// ONLY use GNUC atomics if not explicitly say to use OpenMP atomics
#if !defined(DESUL_HAVE_OPENMP_ATOMICS) && defined(__GNUC__)
#define DESUL_HAVE_GCC_ATOMICS
#endif

// Equivalent to above for MSVC atomics
#if !defined(DESUL_HAVE_OPENMP_ATOMICS) && defined(_MSC_VER)
#define DESUL_HAVE_MSVC_ATOMICS
#endif

#if defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) || \
defined(__SYCL_DEVICE_ONLY__)
#if (defined(DESUL_ATOMICS_ENABLE_CUDA) && defined(__CUDA_ARCH__)) || \
(defined(DESUL_ATOMICS_ENABLE_HIP) && defined(__HIP_DEVICE_COMPILE__)) || \
(defined(DESUL_ATOMICS_ENABLE_SYCL) && defined(__SYCL_DEVICE_ONLY__))
#define DESUL_HAVE_GPU_LIKE_PROGRESS
#endif

Expand Down Expand Up @@ -62,7 +69,7 @@ SPDX-License-Identifier: (BSD-3-Clause)
#define DESUL_IMPL_ESC_(...) DESUL_IMPL_VAN_##__VA_ARGS__
#define DESUL_IMPL_VAN_DESUL_IMPL_ISH

#if defined(__CUDACC__) && defined(__NVCOMPILER)
#if (defined(DESUL_ATOMICS_ENABLE_CUDA) && defined(__CUDACC__)) && defined(__NVCOMPILER)
#include <nv/target>
#define DESUL_IF_ON_DEVICE(CODE) NV_IF_TARGET(NV_IS_DEVICE, CODE)
#define DESUL_IF_ON_HOST(CODE) NV_IF_TARGET(NV_IS_HOST, CODE)
Expand Down Expand Up @@ -99,8 +106,9 @@ static constexpr bool desul_impl_omp_on_host() { return false; }
#endif

#if !defined(DESUL_IF_ON_HOST) && !defined(DESUL_IF_ON_DEVICE)
#if defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) || \
defined(__SYCL_DEVICE_ONLY__)
#if (defined(DESUL_ATOMICS_ENABLE_CUDA) && defined(__CUDA_ARCH__)) || \
(defined(DESUL_ATOMICS_ENABLE_HIP) && defined(__HIP_DEVICE_COMPILE__)) || \
(defined(DESUL_ATOMICS_ENABLE_SYCL) && defined(__SYCL_DEVICE_ONLY__))
#define DESUL_IF_ON_DEVICE(CODE) \
{ DESUL_IMPL_STRIP_PARENS(CODE) }
#define DESUL_IF_ON_HOST(CODE) \
Expand Down

0 comments on commit 51aa904

Please sign in to comment.