45 #ifndef KOKKOS_ROCM_HPP 46 #define KOKKOS_ROCM_HPP 48 #include <Kokkos_Core_fwd.hpp> 50 #if defined(KOKKOS_ENABLE_ROCM) 55 dim3(
int _x,
int _y,
int _z) : x(_x), y(_y), z(_z){};
58 #include <ROCm/hc_math_std.hpp> 64 #include <Kokkos_HostSpace.hpp> 65 #include <Kokkos_ROCmSpace.hpp> 66 #include <ROCm/Kokkos_ROCm_Exec.hpp> 67 #include <Kokkos_ScratchSpace.hpp> 70 #include <impl/Kokkos_Tags.hpp> 78 #if defined(__HCC_ACCELERATOR__) 80 using namespace ::Concurrency::precise_math;
105 typedef ROCm execution_space;
106 typedef ROCmSpace memory_space;
107 typedef Kokkos::Device<execution_space, memory_space> device_type;
109 typedef LayoutLeft array_layout;
110 typedef HostSpace::size_type size_type;
112 typedef ScratchMemorySpace<ROCm> scratch_memory_space;
118 ROCm(ROCm&&) =
default;
119 ROCm(
const ROCm&) =
default;
120 ROCm& operator=(ROCm&&) =
default;
121 ROCm& operator=(
const ROCm&) =
default;
128 KOKKOS_INLINE_FUNCTION
static int in_parallel() {
129 #if defined(__HCC_ACCELERATOR__) 143 static void impl_static_fence();
145 #ifdef KOKKOS_ENABLE_DEPRECATED_CODE 160 struct SelectDevice {
162 SelectDevice() : rocm_device_id(1) {}
163 explicit SelectDevice(
int id) : rocm_device_id(id + 1) {}
166 int rocm_device()
const {
return m_device; }
168 bool isAPU(
int device);
170 static void initialize(
const SelectDevice = SelectDevice());
172 static int is_initialized();
178 static int concurrency();
179 static const char* name();
191 struct MemorySpaceAccess<
Kokkos::Experimental::ROCmSpace,
192 Kokkos::Experimental::ROCm::scratch_memory_space> {
193 enum { assignable =
false };
194 enum { accessible =
true };
195 enum { deepcopy =
false };
199 struct VerifyExecutionCanAccessMemorySpace<
200 Kokkos::Experimental::ROCm::memory_space,
201 Kokkos::Experimental::ROCm::scratch_memory_space> {
202 enum { value =
true };
203 KOKKOS_INLINE_FUNCTION
static void verify(
void) {}
204 KOKKOS_INLINE_FUNCTION
static void verify(
const void*) {}
208 struct VerifyExecutionCanAccessMemorySpace<
209 Kokkos::HostSpace, Kokkos::Experimental::ROCm::scratch_memory_space> {
210 enum { value =
false };
211 inline static void verify(
void) {
212 Kokkos::Experimental::ROCmSpace::access_error();
214 inline static void verify(
const void* p) {
215 Kokkos::Experimental::ROCmSpace::access_error(p);
222 #define threadIdx_x (hc_get_workitem_id(0)) 223 #define threadIdx_y (hc_get_workitem_id(1)) 224 #define threadIdx_z (hc_get_workitem_id(2)) 226 #define blockIdx_x (hc_get_group_id(0)) 227 #define blockIdx_y (hc_get_group_id(1)) 228 #define blockIdx_z (hc_get_group_id(2)) 230 #define blockDim_x (hc_get_group_size(0)) 231 #define blockDim_y (hc_get_group_size(1)) 232 #define blockDim_z (hc_get_group_size(2)) 234 #define gridDim_x (hc_get_num_groups(0)) 235 #define gridDim_y (hc_get_num_groups(1)) 236 #define gridDim_z (hc_get_num_groups(2)) 238 #include <ROCm/Kokkos_ROCm_Parallel.hpp> 239 #include <ROCm/Kokkos_ROCm_Task.hpp>
void print_configuration(std::ostream &, const bool detail=false)
Print "Bill of Materials".
Declaration of various MemoryLayout options.
Declaration of parallel operators.
void finalize()
Finalize the spaces that were initialized via Kokkos::initialize.