DPC++ Runtime
Runtime libraries for oneAPI DPC++
accessor.cpp
Go to the documentation of this file.
1 //==------------ accessor.cpp - SYCL standard source file ------------------==//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include <detail/queue_impl.hpp>
10 #include <sycl/accessor.hpp>
11 
12 namespace sycl {
14 namespace detail {
15 device getDeviceFromHandler(handler &CommandGroupHandlerRef) {
16  return CommandGroupHandlerRef.MQueue->get_device();
17 }
18 
19 AccessorBaseHost::AccessorBaseHost(id<3> Offset, range<3> AccessRange,
20  range<3> MemoryRange,
21  access::mode AccessMode, void *SYCLMemObject,
22  int Dims, int ElemSize, int OffsetInBytes,
23  bool IsSubBuffer,
24  const property_list &PropertyList) {
25  impl = std::shared_ptr<AccessorImplHost>(
26  new AccessorImplHost(Offset, AccessRange, MemoryRange, AccessMode,
27  (detail::SYCLMemObjI *)SYCLMemObject, Dims, ElemSize,
28  false, OffsetInBytes, IsSubBuffer, PropertyList));
29 }
30 
31 AccessorBaseHost::AccessorBaseHost(id<3> Offset, range<3> AccessRange,
32  range<3> MemoryRange,
33  access::mode AccessMode, void *SYCLMemObject,
34  int Dims, int ElemSize, bool IsPlaceH,
35  int OffsetInBytes, bool IsSubBuffer,
36  const property_list &PropertyList) {
37  impl = std::shared_ptr<AccessorImplHost>(
38  new AccessorImplHost(Offset, AccessRange, MemoryRange, AccessMode,
39  (detail::SYCLMemObjI *)SYCLMemObject, Dims, ElemSize,
40  IsPlaceH, OffsetInBytes, IsSubBuffer, PropertyList));
41 }
42 
43 id<3> &AccessorBaseHost::getOffset() { return impl->MOffset; }
44 range<3> &AccessorBaseHost::getAccessRange() { return impl->MAccessRange; }
45 range<3> &AccessorBaseHost::getMemoryRange() { return impl->MMemoryRange; }
46 void *AccessorBaseHost::getPtr() { return impl->MData; }
47 
48 detail::AccHostDataT &AccessorBaseHost::getAccData() { return impl->MAccData; }
49 
50 const property_list &AccessorBaseHost::getPropList() const {
51  return impl->MPropertyList;
52 }
53 
54 unsigned int AccessorBaseHost::getElemSize() const { return impl->MElemSize; }
55 
56 const id<3> &AccessorBaseHost::getOffset() const { return impl->MOffset; }
57 const range<3> &AccessorBaseHost::getAccessRange() const {
58  return impl->MAccessRange;
59 }
60 const range<3> &AccessorBaseHost::getMemoryRange() const {
61  return impl->MMemoryRange;
62 }
63 void *AccessorBaseHost::getPtr() const {
64  return const_cast<void *>(impl->MData);
65 }
66 
67 void *AccessorBaseHost::getMemoryObject() const { return impl->MSYCLMemObj; }
68 
69 bool AccessorBaseHost::isPlaceholder() const { return impl->MIsPlaceH; }
70 
71 LocalAccessorBaseHost::LocalAccessorBaseHost(
72  sycl::range<3> Size, int Dims, int ElemSize,
73  const property_list &PropertyList) {
74  impl = std::shared_ptr<LocalAccessorImplHost>(
75  new LocalAccessorImplHost(Size, Dims, ElemSize, PropertyList));
76 }
77 sycl::range<3> &LocalAccessorBaseHost::getSize() { return impl->MSize; }
78 const sycl::range<3> &LocalAccessorBaseHost::getSize() const {
79  return impl->MSize;
80 }
81 void *LocalAccessorBaseHost::getPtr() {
82  // Const cast this in order to call the const getPtr.
83  return const_cast<const LocalAccessorBaseHost *>(this)->getPtr();
84 }
85 void *LocalAccessorBaseHost::getPtr() const {
86  char *ptr = impl->MMem.data();
87 
88  // Align the pointer to MElemSize.
89  size_t val = reinterpret_cast<size_t>(ptr);
90  if (val % impl->MElemSize != 0) {
91  ptr += impl->MElemSize - val % impl->MElemSize;
92  }
93 
94  return ptr;
95 }
96 const property_list &LocalAccessorBaseHost::getPropList() const {
97  return impl->MPropertyList;
98 }
99 
100 int LocalAccessorBaseHost::getNumOfDims() { return impl->MDims; }
101 int LocalAccessorBaseHost::getElementSize() { return impl->MElemSize; }
102 
103 } // namespace detail
104 } // __SYCL_INLINE_VER_NAMESPACE(_V1)
105 } // namespace sycl
sycl::_V1::property_list
Objects of the property_list class are containers for the SYCL properties.
Definition: property_list.hpp:24
sycl::_V1::detail::LocalAccessorImplHost
Definition: accessor_impl.hpp:131
sycl::_V1::access::mode
mode
Definition: access.hpp:30
sycl::_V1::detail::AccessorImplHost
Definition: accessor_impl.hpp:42
__SYCL_INLINE_VER_NAMESPACE
#define __SYCL_INLINE_VER_NAMESPACE(X)
Definition: defines_elementary.hpp:11
sycl::_V1::detail::LocalAccessorBaseHost
Definition: accessor.hpp:521
sycl
---— Error handling, matching OpenCL plugin semantics.
Definition: access.hpp:14
queue_impl.hpp
sycl::_V1::id< 3 >
sycl::_V1::range< 3 >
sycl::_V1::handler
Command group handler class.
Definition: handler.hpp:315
sycl::_V1::device
The SYCL device class encapsulates a single SYCL device on which kernels may be executed.
Definition: device.hpp:49
accessor.hpp
sycl::_V1::detail::AccHostDataT
Definition: accessor.hpp:231
sycl::_V1::detail::getDeviceFromHandler
device getDeviceFromHandler(handler &CommandGroupHandlerRef)
Definition: accessor.cpp:15
sycl::_V1::detail::SYCLMemObjI
Definition: sycl_mem_obj_i.hpp:28
sycl::_V1::AccessMode
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS AccessMode
Definition: accessor.hpp:2854