26 #include <type_traits>
29 inline namespace _V1 {
48 using EnableIfOutputPointerT = std::enable_if_t<
49 std::is_pointer<T>::value>;
52 using EnableIfOutputIteratorT = std::enable_if_t<
53 !std::is_pointer<T>::value>;
57 std::unique_ptr<SYCLMemObjAllocator> Allocator)
66 std::unique_ptr<SYCLMemObjAllocator> Allocator)
70 const size_t SizeInBytes,
event AvailableEvent,
71 std::unique_ptr<SYCLMemObjAllocator> Allocator);
75 std::unique_ptr<SYCLMemObjAllocator> Allocator)
77 (size_t)0, AvailableEvent,
78 std::move(Allocator)) {}
81 bool OwnNativeHandle,
event AvailableEvent,
82 std::unique_ptr<SYCLMemObjAllocator> Allocator);
85 bool OwnNativeHandle,
event AvailableEvent,
86 std::unique_ptr<SYCLMemObjAllocator> Allocator,
87 ur_image_format_t Format,
range<3> Range3WithOnes,
96 size_t get_count()
const {
return size(); }
98 size_t AllocatorValueSize =
MAllocator->getValueSize();
99 return (
getSizeInBytes() + AllocatorValueSize - 1) / AllocatorValueSize;
150 const std::function<
void(
const std::function<
void(
void *
const Ptr)> &)>
155 FinalDataFunc(UpdateFunc);
172 return has_property<property::buffer::use_host_ptr>() ||
173 has_property<property::image::use_host_ptr>();
178 (
reinterpret_cast<std::uintptr_t
>(HostPtr) % RequiredAlign) == 0;
189 set_final_data([HostPtr](
const std::function<
void(
void *
const Ptr)> &F) {
220 const size_t RequiredAlign,
bool IsConstPtr) {
248 const size_t RequiredAlign,
bool IsConstPtr) {
253 "Buffer constructor from a pair of iterator values does "
254 "not support use_host_ptr property.");
268 ur_native_handle_t MemObject);
273 void *HostPtr, ur_event_handle_t &InteropEvent)
override {
275 (void)InitFromUserData;
313 if (CurrentVal == 0) {
316 if (
MGraphUseCount.compare_exchange_strong(CurrentVal, CurrentVal - 1) ==
331 bool &HostPtrReadOnly);
The context class represents a SYCL context on which kernel functions may be executed.
const std::unique_ptr< SYCLMemObjAllocator > & get_allocator_internal() const
ContextImplPtr getInteropContext() const override
const PluginPtr & getPlugin() const
__SYCL2020_DEPRECATED("get_count() is deprecated, please use size() instead") size_t get_count() const
void detachMemoryObject(const std::shared_ptr< SYCLMemObjT > &Self) const
void * allocateHostMem() override
void determineHostPtr(bool InitFromUserData, void *&HostPtr, bool &HostPtrReadOnly)
virtual ~SYCLMemObjT()=default
bool has_property() const noexcept
void markNoLongerBeingUsedInGraph()
Decrement an internal counter for how many graphs are currently using this memory object.
ContextImplPtr MInteropContext
size_t getSizeInBytes() const noexcept override
void handleHostData(const std::shared_ptr< void > &HostPtr, const size_t RequiredAlign, bool IsConstPtr)
void releaseHostMem(void *Ptr) override
SYCLMemObjT(const property_list &Props, std::unique_ptr< SYCLMemObjAllocator > Allocator)
bool needsWriteBack() const
Returns true if this memory object requires a write_back on destruction.
std::shared_ptr< const void > MSharedPtrStorage
const property_list & getPropList() const
ur_mem_handle_t MInteropMemObject
MemObjType getType() const override
std::atomic< size_t > MGraphUseCount
bool hasUserDataPtr() const override
void releaseMem(ContextImplPtr Context, void *MemAllocation) override
void addOrReplaceAccessorProperties(const property_list &PropertyList)
EventImplPtr MInteropEvent
void handleWriteAccessorCreation()
void * getUserPtr() const
size_t size() const noexcept
void setAlign(size_t RequiredAlign)
SYCLMemObjT(cl_mem MemObject, const context &SyclContext, event AvailableEvent, std::unique_ptr< SYCLMemObjAllocator > Allocator)
void markBeingUsedInGraph()
Increment an internal counter for how many graphs are currently using this memory object.
bool canReadHostPtr(void *HostPtr, const size_t RequiredAlign)
SYCLMemObjT(const size_t SizeInBytes, const property_list &Props, std::unique_ptr< SYCLMemObjAllocator > Allocator)
std::function< void(void)> MUploadDataFunctor
void set_final_data(const std::function< void(const std::function< void(void *const Ptr)> &)> &FinalDataFunc)
bool isHostPointerReadOnly() const override
void set_final_data(std::nullptr_t)
void handleHostData(const void *HostPtr, const size_t RequiredAlign)
void deleteAccessorProperty(const PropWithDataKind &Kind)
void set_write_back(bool NeedWriteBack)
std::unique_ptr< SYCLMemObjAllocator > MAllocator
std::function< void(void)> MCreateShadowCopy
bool isInterop() const override
static size_t getBufSizeForContext(const ContextImplPtr &Context, ur_native_handle_t MemObject)
void * allocateMem(ContextImplPtr Context, bool InitFromUserData, void *HostPtr, ur_event_handle_t &InteropEvent) override
bool usesPinnedHostMemory() const override
void set_final_data_from_storage()
bool isUsedInGraph() const
Returns true if any graphs are currently using this memory object.
void handleHostData(void *HostPtr, const size_t RequiredAlign)
void handleHostData(const std::function< void(void *)> &CopyFromInput, const size_t RequiredAlign, bool IsConstPtr)
bool canReuseHostPtr(void *HostPtr, const size_t RequiredAlign)
propertyT get_property() const
An event object can be used to synchronize memory transfers, enqueues of kernels and signaling barrie...
Objects of the property_list class are containers for the SYCL properties.
bool has_property() const noexcept
void delete_accessor_property(const sycl::detail::PropWithDataKind &Kind)
PropT get_property() const
void add_or_replace_accessor_properties(const property_list &PropertyList)
To cast(std::vector< cl_event > value)
std::shared_ptr< sycl::detail::context_impl > ContextImplPtr
std::shared_ptr< event_impl > EventImplPtr
std::shared_ptr< plugin > PluginPtr
class __SYCL_EBO __SYCL_SPECIAL_CLASS Dimensions
std::error_code make_error_code(sycl::errc E) noexcept
Constructs an error code using e and sycl_category()
_Abi const simd< _Tp, _Abi > & noexcept
C++ utilities for Unified Runtime integration.