1 #ifndef DASH__MEMORY__MEMORY_SPACE_BASE_H__INCLUDED 2 #define DASH__MEMORY__MEMORY_SPACE_BASE_H__INCLUDED 9 #include <cpp17/polymorphic_allocator.h> 12 #include <dash/Meta.h> 13 #include <dash/Types.h> 16 #include <dash/memory/internal/MemorySpaceRegistry.h> 22 template <
typename ElementType,
class MemorySpace>
138 template <
typename _D>
139 using is_local_memory_space = std::
140 integral_constant<bool, std::is_same<_D, memory_domain_local>::value>;
142 template <
typename _D>
143 using is_global_memory_space = std::
144 integral_constant<bool, std::is_same<_D, memory_domain_global>::value>;
147 using memspace_traits_is_global =
148 is_global_memory_space<typename _Ms::memory_space_domain_category>;
151 using memspace_traits_is_local =
152 is_local_memory_space<typename _Ms::memory_space_domain_category>;
154 DASH__META__DEFINE_TRAIT__HAS_TYPE(void_pointer)
155 DASH__META__DEFINE_TRAIT__HAS_TYPE(const_void_pointer)
156 DASH__META__DEFINE_TRAIT__HAS_TYPE(memory_space_layout_tag)
158 template <class _Ms, bool = has_type_void_pointer<_Ms>::value>
160 typedef typename _Ms::void_pointer type;
165 typedef typename std::conditional<
166 memspace_traits_is_global<_Ms>::value,
171 template <class _Ms, bool = has_type_const_void_pointer<_Ms>::value>
173 typedef typename _Ms::const_void_pointer type;
178 typedef typename std::conditional<
179 memspace_traits_is_global<_Ms>::value,
181 const void*>::type type;
184 template <class _Ms, bool = has_type_memory_space_layout_tag<_Ms>::value>
186 typedef typename _Ms::memory_space_layout_tag type;
196 template <
class MemSpace>
206 typename MemSpace::memory_space_type_category;
212 typename MemSpace::memory_space_domain_category;
218 typename details::memspace_traits_layout_tag<MemSpace>::type;
223 using is_global =
typename details::memspace_traits_is_global<MemSpace>;
230 using is_local =
typename details::memspace_traits_is_local<MemSpace>;
233 typename details::memspace_traits_void_pointer_type<MemSpace>::type;
235 using const_void_pointer =
244 template <
class MemoryType>
252 using memory_space_type_category = MemoryType;
266 using memory_space_type_category = MemoryType;
282 template <
class MemoryDomain,
class... Args>
286 template <
class... Args>
291 template <
class... Args>
297 #endif // DASH__MEMORY__MEMORY_SPACE_H__INCLUDED typename details::memspace_traits_is_global< MemSpace > is_global
Whether the memory space type is specified for global address space.
typename details::memspace_traits_is_local< MemSpace > is_local
Whether the memory space type is specified for local address space.
This class is a simple memory pool which holds allocates elements of size ValueType.
typename MemSpace::memory_space_domain_category memory_space_domain_category
The underlying memory domain (local, global, etc.)
MemSpace memory_space_type
The Memory Space Type.
The MemorySpace concept follows the STL std::pmr::memory_resource.
Pointer in global memory space with random access arithmetics.
typename MemSpace::memory_space_type_category memory_space_type_category
The underlying memory type (Host, CUDA, HBW, etc.)
typename details::memspace_traits_layout_tag< MemSpace >::type memory_space_layout_tag
May be contiguous or noncontiguous.