From 816ef41b81034762486548dedcc8ef5455b9e32d Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Mon, 3 Feb 2025 16:55:34 +0100 Subject: [PATCH] [oneDPL][rfc][ranges] proposal for implementation of the second part of range based API for oneDPL --- rfcs/proposed/ranges_api_m/README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 rfcs/proposed/ranges_api_m/README.md diff --git a/rfcs/proposed/ranges_api_m/README.md b/rfcs/proposed/ranges_api_m/README.md new file mode 100644 index 00000000000..9ae76842260 --- /dev/null +++ b/rfcs/proposed/ranges_api_m/README.md @@ -0,0 +1,28 @@ +# Support the second portion of the oneDPL Range APIs + +## Introduction +Based on statistics (observing C++ code within github.com) for the usage of popular algorithms, the following +range-based APIs are supposed to be implemented in oneDPL. +`fill`, `generate`, `move`, `replace`, `replace_if`, `remove`, `remove_if`, `mismatch`, `minmax_element`, `minmax`, +`min`, `max`, `find_first_of`, `find_end`, `is_sorted_until` + +## Motivations +The feature is proposed as the next step of range-based API support for oneDPL. + +### Key Requirements +- The range-based signatures for the mentioned API should correspond to the proposal for C++ parallel range algorithms, P3179. +(https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3179r4.html) +- The proposed implementation should support all oneDPL execution policies: `seq`, `unseq`, `par`, `par_unseq` and `a device policy`. + +### Implementation proposal +- The implementation is supposed to rely on existing range-based or iterator-based algorithm patterns, which are already +implemented in oneDPL. +- Several algorithms described in P3179 have slightly different semantics. To implement these, some existing algorithm patterns +might require modifications or new versions. + +### Test coverage + +- It should be called with both small and large data sizes and with all the policies mentioned above. +- Output data, return type, and value should be checked/compared with the reference result +computed by the corresponding serial std::ranges algorithm or by a custom implemented serial version +in case of different semantics.