From 83a96a5b08678abe207db1269d5429743e1e6fac Mon Sep 17 00:00:00 2001 From: Alexey Kukanov Date: Tue, 14 Oct 2025 18:20:38 +0200 Subject: [PATCH 1/3] Extend and improve the wording about parallel algorithms --- source/elements/oneDPL/source/parallel_api.rst | 4 ---- .../oneDPL/source/parallel_api/algorithms.rst | 14 +++++++++++++- .../source/parallel_api/parallel_range_api.rst | 9 ++++----- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/source/elements/oneDPL/source/parallel_api.rst b/source/elements/oneDPL/source/parallel_api.rst index 320ffe6eed..2c49a1f01f 100644 --- a/source/elements/oneDPL/source/parallel_api.rst +++ b/source/elements/oneDPL/source/parallel_api.rst @@ -14,9 +14,6 @@ All those algorithms work with *C++ Standard aligned execution policies* and wit oneDPL also provides *parallel range algorithms*: variations of C++20 range-based algorithms that take a oneDPL execution policy. -For all parallel algorithms (including ones with ranges) oneDPL implements list-initialization, where applicable, -as described in `P2248R8`_ proposal that is accepted for C++26. - Additionally, oneDPL provides wrapper functions for `SYCL`_ buffers, special iterators, and a set of non-standard parallel algorithms. @@ -31,4 +28,3 @@ a set of non-standard parallel algorithms. .. _`C++ Standard`: https://isocpp.org/std/the-standard .. _`SYCL`: https://registry.khronos.org/SYCL/specs/sycl-2020/html/sycl-2020.html -.. _`P2248R8`: https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2248r8.html diff --git a/source/elements/oneDPL/source/parallel_api/algorithms.rst b/source/elements/oneDPL/source/parallel_api/algorithms.rst index 6879f18352..c9bfc8f7dc 100644 --- a/source/elements/oneDPL/source/parallel_api/algorithms.rst +++ b/source/elements/oneDPL/source/parallel_api/algorithms.rst @@ -6,8 +6,20 @@ Parallel Algorithms ------------------- -The parallel algorithms are defined in the ```` header, +oneDPL parallel algorithms are defined in the ```` header, in ``namespace oneapi::dpl``. +These include functions analogous to the algorithms with execution policies defined +in the `C++ Standard`_, 5th and 6th editions (C++17/20), as well as several additional algorithms. + +The parallel algorithms execute according to a oneDPL execution policy supplied as the first argument. + +Where applicable, oneDPL supports list initialization of value parameters of the algorithms, +as in the working draft of the next C++ standard edition (C++26). + +Additional Algorithms ++++++++++++++++++++++ + +In addition to the standard aligned parallel algorithms, oneDPL provides the following algorithm functions. .. code:: cpp diff --git a/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst b/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst index 20251dcadd..2692ba9b1b 100644 --- a/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst +++ b/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst @@ -8,6 +8,8 @@ Parallel Range Algorithms oneDPL provides variations of algorithms that work with ranges defined in the `C++ Standard`_, 6th edition (C++20) and newer. These algorithms execute according to a oneDPL execution policy supplied as the first argument, similarly to other oneDPL algorithms. +[*Note*: These algorithms mostly match the semantics of the parallel range algorithms in the working draft +of the next C++ standard edition (C++26). -- *end note*] The oneDPL parallel range algorithms rely on the functionality of C++20 and are not available in the code compiled for earlier editions of the C++ standard. @@ -19,7 +21,7 @@ predefined function objects which static function call operators have the requir The following differences to the standard serial C++ range algorithms apply: -- List initialization of value parameters is enabled, as in the working draft of the next C++ standard edition (C++26). +- List initialization of value parameters is enabled, as in the C++26 working draft. - Parallel range algorithms cannot be used in constant expressions. - The oneDPL execution policy parameter is added. - Output data sequences are defined as ranges, not iterators. @@ -40,9 +42,6 @@ The following differences to the standard serial C++ range algorithms apply: `P3709R2 `_. - ``destroy`` is not marked with ``noexcept``. -[*Note*: These oneDPL algorithms mostly match the semantics of the parallel range algorithms in the C++26 working draft. --- *end note*] - Auxiliary Definitions +++++++++++++++++++++ @@ -58,7 +57,7 @@ of parallel range algorithms. // C++20 analogue of nothrow-random-access-range in the C++26 working draft; exposition only // Semantic requirements are listed further below template - concept nothrow-random-access-range = + concept /*nothrow-random-access-range*/ = std::ranges::random_access_range && std::is_lvalue_reference_v>> && std::same_as>>, From 92ca9f89f524209e4c1b3f6a7032a86178ab2707 Mon Sep 17 00:00:00 2001 From: Alexey Kukanov Date: Wed, 15 Oct 2025 09:16:26 +0200 Subject: [PATCH 2/3] Address the review feedback --- .../oneDPL/source/parallel_api/algorithms.rst | 14 +++++++++----- .../source/parallel_api/parallel_range_api.rst | 3 ++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/source/elements/oneDPL/source/parallel_api/algorithms.rst b/source/elements/oneDPL/source/parallel_api/algorithms.rst index c9bfc8f7dc..9f5ebcd903 100644 --- a/source/elements/oneDPL/source/parallel_api/algorithms.rst +++ b/source/elements/oneDPL/source/parallel_api/algorithms.rst @@ -6,10 +6,13 @@ Parallel Algorithms ------------------- -oneDPL parallel algorithms are defined in the ```` header, -in ``namespace oneapi::dpl``. -These include functions analogous to the algorithms with execution policies defined -in the `C++ Standard`_, 5th and 6th editions (C++17/20), as well as several additional algorithms. +oneDPL parallel algorithms are function templates analogous to the algorithms with execution policies defined +in the `C++ Standard`_, 5th and 6th editions (C++17/20), as well as additional non-standard function templates. + +oneDPL parallel algorithms reside in ``namespace oneapi::dpl``. +Standard-aligned algorithms are defined in the ````, ````, +and ```` header files, aligned with how the `C++ Standard`_ places the respective functions +into the standard header files. The parallel algorithms execute according to a oneDPL execution policy supplied as the first argument. @@ -19,7 +22,8 @@ as in the working draft of the next C++ standard edition (C++26). Additional Algorithms +++++++++++++++++++++ -In addition to the standard aligned parallel algorithms, oneDPL provides the following algorithm functions. +In addition to the standard-aligned parallel algorithms, oneDPL provides the following algorithm functions, +defined in the ```` header. .. code:: cpp diff --git a/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst b/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst index 2692ba9b1b..3a20d4d411 100644 --- a/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst +++ b/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst @@ -52,7 +52,8 @@ of parallel range algorithms. // C++20 analogue of std::projected_value_t; exposition only template - using /*projected-value-type*/ = std::remove_cvref_t&>>; + using /*projected-value-type*/ = + std::remove_cvref_t&>>; // C++20 analogue of nothrow-random-access-range in the C++26 working draft; exposition only // Semantic requirements are listed further below From 6ca898f7b44a24419468d63125e2d1e2005c63c6 Mon Sep 17 00:00:00 2001 From: Alexey Kukanov Date: Thu, 16 Oct 2025 15:23:15 +0200 Subject: [PATCH 3/3] Indicate the primary header for each non-standard parallel algorithm --- .../oneDPL/source/parallel_api/algorithms.rst | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/source/elements/oneDPL/source/parallel_api/algorithms.rst b/source/elements/oneDPL/source/parallel_api/algorithms.rst index 9f5ebcd903..d1b76c9b52 100644 --- a/source/elements/oneDPL/source/parallel_api/algorithms.rst +++ b/source/elements/oneDPL/source/parallel_api/algorithms.rst @@ -22,11 +22,14 @@ as in the working draft of the next C++ standard edition (C++26). Additional Algorithms +++++++++++++++++++++ -In addition to the standard-aligned parallel algorithms, oneDPL provides the following algorithm functions, -defined in the ```` header. +In addition to the standard-aligned parallel algorithms, oneDPL provides the following algorithm functions. + +For compatibility with the previous versions of the specification, besides their indicated header files +all these algorithms are defined in ````. [*Note*: This may be deprecated in the future. -- *end note*] .. code:: cpp + // Defined in template::value_type, @@ -58,6 +61,7 @@ provided to combine the elements of the value subsequences. .. code:: cpp + // Defined in template template template::value_type>> @@ -137,6 +143,7 @@ elements ``e`` in ``[start, end)`` and a given search value ``v`` in ``[value_fi .. code:: cpp + // Defined in template::value_type>> @@ -159,6 +166,7 @@ The elements of ``[start, end)`` must be partitioned with respect to the compara .. code:: cpp + // Defined in template::value_type>> @@ -181,6 +189,7 @@ The elements of ``[start, end)`` must be partitioned with respect to the compara .. code:: cpp + // Defined in template OutputIt @@ -212,6 +221,7 @@ satisfy a given predicate, and stores the result to the output. Depending on the .. code:: cpp + // Defined in template::value_type>> void @@ -239,6 +249,7 @@ as defined by the `C++ Standard`_. .. code:: cpp + // Defined in template::value_type>> void @@ -266,6 +277,7 @@ as defined by the `C++ Standard`_. .. code:: cpp + // Defined in template OutputIt