1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// SPDX-FileCopyrightText: Copyright Contributors to the Kokkos project
#include <Kokkos_Macros.hpp>
#ifdef KOKKOS_ENABLE_EXPERIMENTAL_CXX20_MODULES
import kokkos.core;
#else
#include <Kokkos_Core.hpp>
#endif
#include <cstddef>
#include <type_traits>
namespace {
struct TestTeamPolicyCTAD {
template <typename... Ts>
static void maybe_unused(Ts&&...) {}
struct SomeExecutionSpace {
using execution_space = SomeExecutionSpace;
using size_type = size_t;
};
static_assert(Kokkos::is_execution_space_v<SomeExecutionSpace>);
struct ImplicitlyConvertibleToDefaultExecutionSpace {
[[maybe_unused]] operator Kokkos::DefaultExecutionSpace() const {
return Kokkos::DefaultExecutionSpace();
}
};
static_assert(!Kokkos::is_execution_space_v<
ImplicitlyConvertibleToDefaultExecutionSpace>);
[[maybe_unused]] static inline Kokkos::DefaultExecutionSpace des;
[[maybe_unused]] static inline ImplicitlyConvertibleToDefaultExecutionSpace
notEs;
[[maybe_unused]] static inline SomeExecutionSpace ses;
[[maybe_unused]] static inline int i;
// Workaround for nvc++ (CUDA-11.7-NVHPC) ignoring [[maybe_unused]] on
// ImplicitlyConvertibleToDefaultExecutionSpace::operator
// Kokkos::DefaultExecutionSpace() const
[[maybe_unused]] static inline Kokkos::DefaultExecutionSpace notEsToDes =
notEs;
// Workaround for HIP-ROCm-5.2 warning about was declared but never referenced
TestTeamPolicyCTAD() { maybe_unused(des, notEs, ses, i, notEsToDes); }
// Default construction deduces to TeamPolicy<>
static_assert(
std::is_same_v<Kokkos::TeamPolicy<>, decltype(Kokkos::TeamPolicy{})>);
// Execution space not provided deduces to TeamPolicy<>
static_assert(
std::is_same_v<Kokkos::TeamPolicy<>, decltype(Kokkos::TeamPolicy(i, i))>);
static_assert(std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(i, i, i))>);
static_assert(std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(i, Kokkos::AUTO))>);
static_assert(
std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(i, Kokkos::AUTO, i))>);
static_assert(std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(i, Kokkos::AUTO,
Kokkos::AUTO))>);
static_assert(
std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(i, i, Kokkos::AUTO))>);
// DefaultExecutionSpace deduces to TeamPolicy<>
static_assert(std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(des, i, i))>);
static_assert(std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(des, i, i, i))>);
static_assert(
std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(des, i, Kokkos::AUTO))>);
static_assert(
std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(des, i, Kokkos::AUTO, i))>);
static_assert(std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(des, i, Kokkos::AUTO,
Kokkos::AUTO))>);
static_assert(
std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(des, i, i, Kokkos::AUTO))>);
// Convertible to DefaultExecutionSpace deduces to TeamPolicy<>
static_assert(std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(notEs, i, i))>);
static_assert(std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(notEs, i, i, i))>);
static_assert(
std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(notEs, i, Kokkos::AUTO))>);
static_assert(
std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(notEs, i, Kokkos::AUTO, i))>);
static_assert(std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(
notEs, i, Kokkos::AUTO, Kokkos::AUTO))>);
static_assert(
std::is_same_v<Kokkos::TeamPolicy<>,
decltype(Kokkos::TeamPolicy(notEs, i, i, Kokkos::AUTO))>);
// SES != DefaultExecutionSpace deduces to TeamPolicy<SES>
static_assert(std::is_same_v<Kokkos::TeamPolicy<SomeExecutionSpace>,
decltype(Kokkos::TeamPolicy(ses, i, i))>);
static_assert(std::is_same_v<Kokkos::TeamPolicy<SomeExecutionSpace>,
decltype(Kokkos::TeamPolicy(ses, i, i, i))>);
static_assert(
std::is_same_v<Kokkos::TeamPolicy<SomeExecutionSpace>,
decltype(Kokkos::TeamPolicy(ses, i, Kokkos::AUTO))>);
static_assert(
std::is_same_v<Kokkos::TeamPolicy<SomeExecutionSpace>,
decltype(Kokkos::TeamPolicy(ses, i, Kokkos::AUTO, i))>);
static_assert(std::is_same_v<Kokkos::TeamPolicy<SomeExecutionSpace>,
decltype(Kokkos::TeamPolicy(ses, i, Kokkos::AUTO,
Kokkos::AUTO))>);
static_assert(
std::is_same_v<Kokkos::TeamPolicy<SomeExecutionSpace>,
decltype(Kokkos::TeamPolicy(ses, i, i, Kokkos::AUTO))>);
};
} // namespace
|