diff --git a/sycl/CMakeLists.txt b/sycl/CMakeLists.txt index 23bc873d63c03..23587ee250664 100644 --- a/sycl/CMakeLists.txt +++ b/sycl/CMakeLists.txt @@ -30,7 +30,7 @@ set(SYCL_MINOR_VERSION 7) set(SYCL_PATCH_VERSION 0) # Don't forget to re-enable sycl_symbols_windows.dump once we leave ABI-breaking # window! -set(SYCL_DEV_ABI_VERSION 17) +set(SYCL_DEV_ABI_VERSION 18) if (SYCL_ADD_DEV_VERSION_POSTFIX) set(SYCL_VERSION_POSTFIX "-${SYCL_DEV_ABI_VERSION}") endif() diff --git a/sycl/include/sycl/accessor.hpp b/sycl/include/sycl/accessor.hpp index 65b1afaebea4a..586796382bf31 100644 --- a/sycl/include/sycl/accessor.hpp +++ b/sycl/include/sycl/accessor.hpp @@ -496,13 +496,15 @@ using LocalAccessorImplPtr = std::shared_ptr; class __SYCL_EXPORT LocalAccessorBaseHost { public: - LocalAccessorBaseHost(sycl::range<3> Size, int Dims, int ElemSize); + LocalAccessorBaseHost(sycl::range<3> Size, int Dims, int ElemSize, + const property_list &PropertyList = {}); sycl::range<3> &getSize(); const sycl::range<3> &getSize() const; void *getPtr(); void *getPtr() const; int getNumOfDims(); int getElementSize(); + const property_list &getPropList() const; protected: template @@ -2366,8 +2368,8 @@ class __SYCL_SPECIAL_CLASS local_accessor_base : (void)propList; } #else - : LocalAccessorBaseHost(range<3>{1, 1, 1}, AdjustedDim, sizeof(DataT)) { - (void)propList; + : LocalAccessorBaseHost(range<3>{1, 1, 1}, AdjustedDim, sizeof(DataT), + propList) { detail::constructorNotification(nullptr, LocalAccessorBaseHost::impl.get(), access::target::local, AccessMode, CodeLoc); GDBMethodsAnchor(); @@ -2401,8 +2403,7 @@ class __SYCL_SPECIAL_CLASS local_accessor_base : } #else : LocalAccessorBaseHost(detail::convertToArrayOfN<3, 1>(AllocationSize), - AdjustedDim, sizeof(DataT)) { - (void)propList; + AdjustedDim, sizeof(DataT), propList) { detail::constructorNotification(nullptr, LocalAccessorBaseHost::impl.get(), access::target::local, AccessMode, CodeLoc); GDBMethodsAnchor(); @@ -2547,6 +2548,23 @@ class __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor } #endif + +public: + template bool has_property() const noexcept { +#ifndef __SYCL_DEVICE_ONLY__ + return this->getPropList().template has_property(); +#else + return false; +#endif + } + + template Property get_property() const { +#ifndef __SYCL_DEVICE_ONLY__ + return this->getPropList().template get_property(); +#else + return Property(); +#endif + } }; /// Image accessors. diff --git a/sycl/include/sycl/usm/usm_allocator.hpp b/sycl/include/sycl/usm/usm_allocator.hpp index 3f56b42e63fb0..233c92ab62f01 100644 --- a/sycl/include/sycl/usm/usm_allocator.hpp +++ b/sycl/include/sycl/usm/usm_allocator.hpp @@ -106,6 +106,14 @@ class usm_allocator { (One.MDevice == Two.MDevice)); } + template bool has_property() const noexcept { + return MPropList.has_property(); + } + + template Property get_property() const { + return MPropList.get_property(); + } + private: constexpr size_t getAlignment() const { return max(alignof(T), Alignment); } diff --git a/sycl/source/accessor.cpp b/sycl/source/accessor.cpp index 502eff15518c9..e9d6c6be901f3 100644 --- a/sycl/source/accessor.cpp +++ b/sycl/source/accessor.cpp @@ -52,10 +52,11 @@ void *AccessorBaseHost::getPtr() const { void *AccessorBaseHost::getMemoryObject() const { return impl->MSYCLMemObj; } -LocalAccessorBaseHost::LocalAccessorBaseHost(sycl::range<3> Size, int Dims, - int ElemSize) { +LocalAccessorBaseHost::LocalAccessorBaseHost( + sycl::range<3> Size, int Dims, int ElemSize, + const property_list &PropertyList) { impl = std::shared_ptr( - new LocalAccessorImplHost(Size, Dims, ElemSize)); + new LocalAccessorImplHost(Size, Dims, ElemSize, PropertyList)); } sycl::range<3> &LocalAccessorBaseHost::getSize() { return impl->MSize; } const sycl::range<3> &LocalAccessorBaseHost::getSize() const { @@ -76,6 +77,9 @@ void *LocalAccessorBaseHost::getPtr() const { return ptr; } +const property_list &LocalAccessorBaseHost::getPropList() const { + return impl->MPropertyList; +} int LocalAccessorBaseHost::getNumOfDims() { return impl->MDims; } int LocalAccessorBaseHost::getElementSize() { return impl->MElemSize; } diff --git a/sycl/source/detail/accessor_impl.hpp b/sycl/source/detail/accessor_impl.hpp index ea6e2616d0b2e..f58af65f826c8 100644 --- a/sycl/source/detail/accessor_impl.hpp +++ b/sycl/source/detail/accessor_impl.hpp @@ -101,14 +101,17 @@ class __SYCL_EXPORT LocalAccessorImplHost { public: // Allocate ElemSize more data to have sufficient padding to enforce // alignment. - LocalAccessorImplHost(sycl::range<3> Size, int Dims, int ElemSize) + LocalAccessorImplHost(sycl::range<3> Size, int Dims, int ElemSize, + const property_list &PropertyList) : MSize(Size), MDims(Dims), MElemSize(ElemSize), - MMem(Size[0] * Size[1] * Size[2] * ElemSize + ElemSize) {} + MMem(Size[0] * Size[1] * Size[2] * ElemSize + ElemSize), + MPropertyList(PropertyList) {} sycl::range<3> MSize; int MDims; int MElemSize; std::vector MMem; + property_list MPropertyList; }; using LocalAccessorImplPtr = std::shared_ptr; diff --git a/sycl/test/abi/sycl_symbols_linux.dump b/sycl/test/abi/sycl_symbols_linux.dump index ca6b049b964bf..eb5e391b40418 100644 --- a/sycl/test/abi/sycl_symbols_linux.dump +++ b/sycl/test/abi/sycl_symbols_linux.dump @@ -3843,8 +3843,8 @@ _ZN4sycl3_V16detail21LocalAccessorBaseHost12getNumOfDimsEv _ZN4sycl3_V16detail21LocalAccessorBaseHost14getElementSizeEv _ZN4sycl3_V16detail21LocalAccessorBaseHost6getPtrEv _ZN4sycl3_V16detail21LocalAccessorBaseHost7getSizeEv -_ZN4sycl3_V16detail21LocalAccessorBaseHostC1ENS0_5rangeILi3EEEii -_ZN4sycl3_V16detail21LocalAccessorBaseHostC2ENS0_5rangeILi3EEEii +_ZN4sycl3_V16detail21LocalAccessorBaseHostC1ENS0_5rangeILi3EEEiiRKNS0_13property_listE +_ZN4sycl3_V16detail21LocalAccessorBaseHostC2ENS0_5rangeILi3EEEiiRKNS0_13property_listE _ZN4sycl3_V16detail22addHostAccessorAndWaitEPNS1_16AccessorImplHostE _ZN4sycl3_V16detail22getImageNumberChannelsENS0_19image_channel_orderE _ZN4sycl3_V16detail22get_kernel_bundle_implERKNS0_7contextERKSt6vectorINS0_6deviceESaIS6_EENS0_12bundle_stateE @@ -4136,6 +4136,7 @@ _ZNK4sycl3_V16detail19kernel_bundle_plain33contains_specialization_constantsEv _ZNK4sycl3_V16detail19kernel_bundle_plain3endEv _ZNK4sycl3_V16detail19kernel_bundle_plain5beginEv _ZNK4sycl3_V16detail19kernel_bundle_plain5emptyEv +_ZNK4sycl3_V16detail21LocalAccessorBaseHost11getPropListEv _ZNK4sycl3_V16detail21LocalAccessorBaseHost6getPtrEv _ZNK4sycl3_V16detail21LocalAccessorBaseHost7getSizeEv _ZNK4sycl3_V16device11get_backendEv