From f31f26edff936b77bb7dd35ac4d5ec9647281253 Mon Sep 17 00:00:00 2001 From: KornevNikita Date: Wed, 31 Aug 2022 04:36:48 -0700 Subject: [PATCH 1/5] [SYCL][ABI-BREAK] Implement accessor begin/end SYCL2020 introduces various accessor begin/end member functions that allow user to iterate through the underlying buffer. --- sycl/include/sycl/accessor.hpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/sycl/include/sycl/accessor.hpp b/sycl/include/sycl/accessor.hpp index 6d9fd6a36ad9c..36c79c6480c2d 100644 --- a/sycl/include/sycl/accessor.hpp +++ b/sycl/include/sycl/accessor.hpp @@ -966,9 +966,14 @@ class __SYCL_SPECIAL_CLASS accessor : friend class sycl::ext::intel::esimd::detail::AccessorPrivateProxy; public: - using value_type = DataT; - using reference = DataT &; + using value_type = typename std::conditional::type; + using reference = value_type &; using const_reference = const DataT &; + using iterator = value_type *; + using const_iterator = const DataT *; + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; // The list of accessor constructors with their arguments // -------+---------+-------+----+-----+-------------- @@ -1833,6 +1838,22 @@ class __SYCL_SPECIAL_CLASS accessor : bool operator==(const accessor &Rhs) const { return impl == Rhs.impl; } bool operator!=(const accessor &Rhs) const { return !(*this == Rhs); } + iterator begin() const noexcept { return &operator[](id()); } + iterator end() const noexcept { return begin() + size(); } + + const_iterator cbegin() const noexcept { return const_iterator(begin()); } + const_iterator cend() const noexcept { return const_iterator(end()); } + + reverse_iterator rbegin() const noexcept { return reverse_iterator(end()); } + reverse_iterator rend() const noexcept { return reverse_iterator(begin()); } + + const_reverse_iterator crbegin() const noexcept { + return const_reverse_iterator(end()); + } + const_reverse_iterator crend() const noexcept { + return const_reverse_iterator(begin()); + } + private: #ifdef __SYCL_DEVICE_ONLY__ size_t getTotalOffset() const { From 9441e5c9ba5337a5e73eda7ef0d4043014d4b947 Mon Sep 17 00:00:00 2001 From: KornevNikita Date: Fri, 9 Sep 2022 05:34:35 -0700 Subject: [PATCH 2/5] Implement local_accessor iterator funcs --- sycl/include/sycl/accessor.hpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/sycl/include/sycl/accessor.hpp b/sycl/include/sycl/accessor.hpp index 71d5ea27dd068..28982b39d56e9 100644 --- a/sycl/include/sycl/accessor.hpp +++ b/sycl/include/sycl/accessor.hpp @@ -2347,6 +2347,12 @@ class __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor // Use base classes constructors using local_acc::local_acc; + using value_type = DataT; + using iterator = value_type *; + using const_iterator = const DataT *; + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; + #ifdef __SYCL_DEVICE_ONLY__ // __init needs to be defined within the class not through inheritance. @@ -2366,6 +2372,23 @@ class __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor } #endif + +public: + iterator begin() const noexcept { return &this->operator[](id()); } + iterator end() const noexcept { return begin() + this->size(); } + + const_iterator cbegin() const noexcept { return const_iterator(begin()); } + const_iterator cend() const noexcept { return const_iterator(end()); } + + reverse_iterator rbegin() const noexcept { return reverse_iterator(end()); } + reverse_iterator rend() const noexcept { return reverse_iterator(begin()); } + + const_reverse_iterator crbegin() const noexcept { + return const_reverse_iterator(end()); + } + const_reverse_iterator crend() const noexcept { + return const_reverse_iterator(begin()); + } }; /// Image accessors. From 2cf0f22c2b427c4035aa7deb47679168463a80ff Mon Sep 17 00:00:00 2001 From: KornevNikita Date: Fri, 9 Sep 2022 08:07:35 -0700 Subject: [PATCH 3/5] Fix clang-format --- sycl/include/sycl/accessor.hpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sycl/include/sycl/accessor.hpp b/sycl/include/sycl/accessor.hpp index 28982b39d56e9..a3bf12a582855 100644 --- a/sycl/include/sycl/accessor.hpp +++ b/sycl/include/sycl/accessor.hpp @@ -2374,7 +2374,9 @@ class __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor #endif public: - iterator begin() const noexcept { return &this->operator[](id()); } + iterator begin() const noexcept { + return &this->operator[](id()); + } iterator end() const noexcept { return begin() + this->size(); } const_iterator cbegin() const noexcept { return const_iterator(begin()); } From 5f4315c74f1eb533d0dea2e5a3a1e04198ffaa59 Mon Sep 17 00:00:00 2001 From: KornevNikita Date: Mon, 19 Sep 2022 08:06:48 -0700 Subject: [PATCH 4/5] Remove accessor changes --- sycl/include/sycl/accessor.hpp | 27 +++------------------------ 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/sycl/include/sycl/accessor.hpp b/sycl/include/sycl/accessor.hpp index a3bf12a582855..af7c62b6adf37 100644 --- a/sycl/include/sycl/accessor.hpp +++ b/sycl/include/sycl/accessor.hpp @@ -968,14 +968,9 @@ class __SYCL_SPECIAL_CLASS __SYCL_TYPE(accessor) accessor : friend class sycl::ext::intel::esimd::detail::AccessorPrivateProxy; public: - using value_type = typename std::conditional::type; - using reference = value_type &; + using value_type = DataT; + using reference = DataT &; using const_reference = const DataT &; - using iterator = value_type *; - using const_iterator = const DataT *; - using reverse_iterator = std::reverse_iterator; - using const_reverse_iterator = std::reverse_iterator; // The list of accessor constructors with their arguments // -------+---------+-------+----+-----+-------------- @@ -1840,22 +1835,6 @@ class __SYCL_SPECIAL_CLASS __SYCL_TYPE(accessor) accessor : bool operator==(const accessor &Rhs) const { return impl == Rhs.impl; } bool operator!=(const accessor &Rhs) const { return !(*this == Rhs); } - iterator begin() const noexcept { return &operator[](id()); } - iterator end() const noexcept { return begin() + size(); } - - const_iterator cbegin() const noexcept { return const_iterator(begin()); } - const_iterator cend() const noexcept { return const_iterator(end()); } - - reverse_iterator rbegin() const noexcept { return reverse_iterator(end()); } - reverse_iterator rend() const noexcept { return reverse_iterator(begin()); } - - const_reverse_iterator crbegin() const noexcept { - return const_reverse_iterator(end()); - } - const_reverse_iterator crend() const noexcept { - return const_reverse_iterator(begin()); - } - private: #ifdef __SYCL_DEVICE_ONLY__ size_t getTotalOffset() const { @@ -2349,7 +2328,7 @@ class __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor using value_type = DataT; using iterator = value_type *; - using const_iterator = const DataT *; + using const_iterator = const value_type *; using reverse_iterator = std::reverse_iterator; using const_reverse_iterator = std::reverse_iterator; From af5dd114ff47cf4e42cee57fe3d825e2d1ac84d2 Mon Sep 17 00:00:00 2001 From: KornevNikita Date: Mon, 19 Sep 2022 08:23:11 -0700 Subject: [PATCH 5/5] Typo --- sycl/include/sycl/accessor.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/sycl/include/sycl/accessor.hpp b/sycl/include/sycl/accessor.hpp index c43bad306cfa1..9e05e48f20080 100644 --- a/sycl/include/sycl/accessor.hpp +++ b/sycl/include/sycl/accessor.hpp @@ -2572,6 +2572,7 @@ class __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor } const_reverse_iterator crend() const noexcept { return const_reverse_iterator(begin()); + } template bool has_property() const noexcept { #ifndef __SYCL_DEVICE_ONLY__