diff --git a/include/oneapi/dpl/experimental/kt/internal/esimd_radix_sort_utils.h b/include/oneapi/dpl/experimental/kt/internal/esimd_radix_sort_utils.h index b2a291822c4..7333fd6ac9d 100644 --- a/include/oneapi/dpl/experimental/kt/internal/esimd_radix_sort_utils.h +++ b/include/oneapi/dpl/experimental/kt/internal/esimd_radix_sort_utils.h @@ -219,9 +219,9 @@ __rng_data(const _Rng& __rng) // sycl::accessor::operator[] are supported only with -fsycl-esimd-force-stateless-mem. // Otherwise, all memory accesses through an accessor are done via explicit APIs // TODO: rely on begin() once -fsycl-esimd-force-stateless-mem has been enabled by default -template +template auto -__rng_data(const oneapi::dpl::__ranges::all_view<_T, _M>& __view) +__rng_data(const oneapi::dpl::__ranges::all_view<_T, _M, _NoInit>& __view) { return __view.accessor(); } diff --git a/include/oneapi/dpl/internal/async_impl/async_impl_hetero.h b/include/oneapi/dpl/internal/async_impl/async_impl_hetero.h index da8f4679ed1..3b6d1a3bf04 100644 --- a/include/oneapi/dpl/internal/async_impl/async_impl_hetero.h +++ b/include/oneapi/dpl/internal/async_impl/async_impl_hetero.h @@ -169,9 +169,7 @@ __pattern_fill_async(__hetero_tag<_BackendTag> __tag, _ExecutionPolicy&& __exec, _ForwardIterator __last, const _T& __value) { return __pattern_walk1_async<__par_backend_hetero::access_mode::write, /*_IsNoInitRequested=*/true>( - __tag, ::std::forward<_ExecutionPolicy>(__exec), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::write>(__first), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::write>(__last), + __tag, std::forward<_ExecutionPolicy>(__exec), __first, __last, oneapi::dpl::__internal::__brick_fill<__hetero_tag<_BackendTag>, _T>{__value}); } diff --git a/include/oneapi/dpl/pstl/hetero/algorithm_impl_hetero.h b/include/oneapi/dpl/pstl/hetero/algorithm_impl_hetero.h index 1422749848a..fbb72a56f61 100644 --- a/include/oneapi/dpl/pstl/hetero/algorithm_impl_hetero.h +++ b/include/oneapi/dpl/pstl/hetero/algorithm_impl_hetero.h @@ -302,9 +302,7 @@ __pattern_fill(__hetero_tag<_BackendTag> __tag, _ExecutionPolicy&& __exec, _Forw _ForwardIterator __last, const _T& __value) { __pattern_hetero_walk1<__par_backend_hetero::access_mode::write, /*_IsNoInitRequested=*/true>( - __tag, std::forward<_ExecutionPolicy>(__exec), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::write>(__first), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::write>(__last), + __tag, std::forward<_ExecutionPolicy>(__exec), __first, __last, __brick_fill<__hetero_tag<_BackendTag>, _T>{__value}); return __last; } @@ -340,10 +338,7 @@ __pattern_generate(__hetero_tag<_BackendTag> __tag, _ExecutionPolicy&& __exec, _ _ForwardIterator __last, _Generator __g) { __pattern_hetero_walk1<__par_backend_hetero::access_mode::write, /*_IsNoInitRequested=*/true>( - __tag, std::forward<_ExecutionPolicy>(__exec), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::write>(__first), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::write>(__last), - generate_functor<_Generator>{__g}); + __tag, std::forward<_ExecutionPolicy>(__exec), __first, __last, generate_functor<_Generator>{__g}); return __last; } @@ -919,9 +914,7 @@ __pattern_partition_copy(__hetero_tag<_BackendTag>, _ExecutionPolicy&& __exec, _ auto __keep1 = oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::read>(); auto __buf1 = __keep1(__first, __last); - auto __zipped_res = __par_backend_hetero::zip( - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::write>(__result1), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::write>(__result2)); + auto __zipped_res = __par_backend_hetero::zip(__result1, __result2); auto __keep2 = oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::write, /*_IsNoInitRequested=*/true>(); @@ -1222,12 +1215,7 @@ __pattern_inplace_merge(__hetero_tag<_BackendTag> __tag, _ExecutionPolicy&& __ex auto __copy_first = __buf.get(); auto __copy_last = __copy_first + __n; - __pattern_merge( - __tag, __exec, __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::read>(__first), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::read>(__middle), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::read>(__middle), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::read>(__last), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::write>(__copy_first), __comp); + __pattern_merge(__tag, __exec, __first, __middle, __middle, __last, __copy_first, __comp); //TODO: optimize copy back depending on Iterator, i.e. set_final_data for host iterator/pointer @@ -1468,11 +1456,8 @@ __pattern_partial_sort(__hetero_tag<_BackendTag>, _ExecutionPolicy&& __exec, _It if (__last - __first < 2) return; - __par_backend_hetero::__parallel_partial_sort( - _BackendTag{}, ::std::forward<_ExecutionPolicy>(__exec), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::read_write>(__first), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::read_write>(__mid), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::read_write>(__last), __comp) + __par_backend_hetero::__parallel_partial_sort(_BackendTag{}, std::forward<_ExecutionPolicy>(__exec), __first, __mid, + __last, __comp) .__checked_deferrable_wait(); } @@ -1569,10 +1554,8 @@ __pattern_partial_sort_copy(__hetero_tag<_BackendTag> __tag, _ExecutionPolicy&& // the patterns: __pattern_hetero_walk2, __parallel_partial_sort and __pattern_hetero_walk2. __par_backend_hetero::__parallel_partial_sort( - _BackendTag{}, __par_backend_hetero::make_wrapped_policy<__partial_sort_2>(__exec), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::read_write>(__buf_first), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::read_write>(__buf_mid), - __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::read_write>(__buf_last), __comp); + _BackendTag{}, __par_backend_hetero::make_wrapped_policy<__partial_sort_2>(__exec), __buf_first, __buf_mid, + __buf_last, __comp); return __pattern_hetero_walk2<__par_backend_hetero::__deferrable_mode, __par_backend_hetero::access_mode::write, /*_IsOutNoInitRequested=*/true>( diff --git a/include/oneapi/dpl/pstl/hetero/dpcpp/parallel_backend_sycl.h b/include/oneapi/dpl/pstl/hetero/dpcpp/parallel_backend_sycl.h index f1da2184988..aca43ba4211 100644 --- a/include/oneapi/dpl/pstl/hetero/dpcpp/parallel_backend_sycl.h +++ b/include/oneapi/dpl/pstl/hetero/dpcpp/parallel_backend_sycl.h @@ -66,136 +66,6 @@ namespace dpl namespace __par_backend_hetero { -//----------------------------------------------------------------------------- -//- iter_mode_resolver -//----------------------------------------------------------------------------- - -// iter_mode_resolver resolves the situations when -// the access mode provided by a user differs (inMode) from -// the access mode required by an algorithm (outMode). -// In general case iter_mode_resolver accepts the only situations -// when inMode == outMode, -// whereas the template specializations describe cases with specific -// inMode and outMode and the preferred access mode between the two. -template -struct iter_mode_resolver -{ - static_assert(inMode == outMode, "Access mode provided by user conflicts with the one required by the algorithm"); - static constexpr access_mode value = inMode; -}; - -template <> -struct iter_mode_resolver -{ - static constexpr access_mode value = access_mode::read; -}; - -template <> -struct iter_mode_resolver -{ - static constexpr access_mode value = access_mode::write; -}; - -template <> -struct iter_mode_resolver -{ - //TODO: warn user that the access mode is changed - static constexpr access_mode value = access_mode::read; -}; - -template <> -struct iter_mode_resolver -{ - //TODO: warn user that the access mode is changed - static constexpr access_mode value = access_mode::write; -}; - -template <> -struct iter_mode_resolver -{ - static constexpr access_mode value = access_mode::discard_write; -}; - -template <> -struct iter_mode_resolver -{ - //TODO: warn user that the access mode is changed - static constexpr access_mode value = access_mode::write; -}; - -template <> -struct iter_mode_resolver -{ - static constexpr access_mode value = access_mode::discard_read_write; -}; - -//----------------------------------------------------------------------------- -//- iter_mode -//----------------------------------------------------------------------------- - -// create iterator with different access mode -template -struct iter_mode -{ - // for common heterogeneous iterator - template