Partition#
partition#
-
template<class Config = default_config, class InputIterator, class OutputIterator, class SelectedCountOutputIterator, class UnaryPredicate>
inline hipError_t rocprim::partition(void *temporary_storage, size_t &storage_size, InputIterator input, OutputIterator output, SelectedCountOutputIterator selected_count_output, const size_t size, UnaryPredicate predicate, const hipStream_t stream = 0, const bool debug_synchronous = false)# Parallel select primitive for device level using selection predicate.
Performs a device-wide partition using selection predicate. Partition copies the values from
input
tooutput
in such a way that all values for which thepredicate
returnstrue
precede the elements for which it returnsfalse
.- Overview
Returns the required size of
temporary_storage
instorage_size
iftemporary_storage
in a null pointer.Ranges specified by
input
,flags
andoutput
must have at leastsize
elements.Range specified by
selected_count_output
must have at least 1 element.Relative order is preserved for the elements for which the
predicate
returnstrue
. Other elements are copied in reverse order.
- Example
In this example a device-level partition operation is performed on an array of integer values, even values are copied before odd values.
#include <rocprim/rocprim.hpp> auto predicate = [] __device__ (int a) -> bool { return (a%2) == 0; }; // Prepare input and output (declare pointers, allocate device memory etc.) size_t input_size; // e.g., 8 int * input; // e.g., [1, 2, 3, 4, 5, 6, 7, 8] int * output; // empty array of 8 elements size_t * output_count; // empty array of 1 element size_t temporary_storage_size_bytes; void * temporary_storage_ptr = nullptr; // Get required size of the temporary storage rocprim::partition( temporary_storage_ptr, temporary_storage_size_bytes, input, output, output_count, input_size, predicate ); // allocate temporary storage hipMalloc(&temporary_storage_ptr, temporary_storage_size_bytes); // perform partition rocprim::partition( temporary_storage_ptr, temporary_storage_size_bytes, input, output, output_count, input_size, predicate ); // output: [2, 4, 6, 8, 7, 5, 3, 1] // output_count: 4
- Template Parameters:
Config – - [optional] configuration of the primitive. It can be
select_config
or a custom class with the same members.InputIterator – - random-access iterator type of the input range. It can be a simple pointer type.
OutputIterator – - random-access iterator type of the output range. It can be a simple pointer type.
SelectedCountOutputIterator – - random-access iterator type of the selected_count_output value. It can be a simple pointer type.
UnaryPredicate – - type of a unary selection predicate.
- Parameters:
temporary_storage – [in] - pointer to a device-accessible temporary storage. When a null pointer is passed, the required allocation size (in bytes) is written to
storage_size
and function returns without performing the select operation.storage_size – [inout] - reference to a size (in bytes) of
temporary_storage
.input – [in] - iterator to the first element in the range to select values from.
output – [out] - iterator to the first element in the output range.
selected_count_output – [out] - iterator to the total number of selected values (length of
output
).size – [in] - number of element in the input range.
predicate – [in] - unary function object which returns /p true if the element should be ordered before other elements. The signature of the function should be equivalent to the following:
bool f(const T &a);
. The signature does not need to haveconst &
, but function object must not modify the object passed to it.stream – [in] - [optional] HIP stream object. The default is
0
(default stream).debug_synchronous – [in] - [optional] If true, synchronization after every kernel launch is forced in order to check for errors. The default value is
false
.
partition_three_way#
Warning
doxygenfunction: Cannot find function “rocprim::partition_three_way” in doxygen xml output for project “rocPRIM Documentation” from directory: /home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-rocprim/checkouts/docs-5.0.2/docs/.doxygen/docBin/xml