.. meta:: :description: rocPRIM operations :keywords: rocPRIM, ROCm, API, documentation, operations ******************************************************************** Types of rocPRIM operations ******************************************************************** A rocPRIM operation is a computation over a sequence of elements. The elements of the sequence can be of any type and belong to any class. Template specialization optimizes the computations over data types. The :doc:`scope <./rocPRIM-scope>` of an operation determines whether an operation is running at the thread, warp, block, or grid level. The following tables provide a summary of the different types of operations and what they do. +------------------------+---------------------------+-----------------------------------------------+ | Type | Operation | Description | +========================+===========================+===============================================+ | Basic |Transform |Transform operations are device-level | | | |operations that apply a function to each | | | |element in the sequence. They're equivalent to | | | |the ``map`` functional operation. | | +---------------------------+-----------------------------------------------+ | |Select |Select operations are device-level operations | | | |that select the first ``N`` elements in the | | | |sequence that satisfy a condition set by a | | | |selection mask or a predicate function. | | +---------------------------+-----------------------------------------------+ | |Unique |Unique operations are device-level operations | | | |that return only the first element from a | | | |group of similar consecutive elements. | | +---------------------------+-----------------------------------------------+ | |Histogram |Histogram operations are device-level | | | |operations that return a statistical | | | |distribution of the sequence. | +------------------------+---------------------------+-----------------------------------------------+ |Aggregation |Reduce |Reduce operations can run at the thread, warp, | | | |block, grid, or device level. They're | | | |equivalent to the functional ``fold_left``. | | | |Reduce runs in a pairwise manner over the | | | |sequence in multiple iterations, reducing the | | | |sequence until only one result remains. | | +---------------------------+-----------------------------------------------+ | |Scan |Scan is a cumulative version of reduce that | | | |returns the sequence of intermediate values. | +------------------------+---------------------------+-----------------------------------------------+ |Difference |Adjacent difference |Adjacent difference operations are | | | |device-level and block-level operations that | | | |compute the difference between either the | | | |current element and the next one in the | | | |sequence, or between the current element and | | | |the previous one in the sequence. | | +---------------------------+-----------------------------------------------+ | |Discontinuity |Discontinuity operations are block-level | | | |operations that find items in a | | | |sequence that don't follow the sequence order. | +------------------------+---------------------------+-----------------------------------------------+ |Reordering |Sort |Sort operations are device-level, block-level, | | | |and warp-level operations that reorder a | | | |sequence based on item comparisons. | | +---------------------------+-----------------------------------------------+ | |Partial sort |Partial sort is a device-level operation that | | | |reorders a sequence by sorting it up to and | | | |including a given index. | | +---------------------------+-----------------------------------------------+ | |Nth element |Nth element is a device-level operation that | | | |inserts a value in its sorted position in the | | | |sequence. | | +---------------------------+-----------------------------------------------+ | |Exchange |The exchange operations are block-level and | | | |warp-level operations that transpose stripe | | | |arrangements to block arrangements and vice | | | |versa. | | +---------------------------+-----------------------------------------------+ | |Shuffle |Shuffle operations are block-level and | | | |warp-level operations that move items between | | | |warps or threads in order to share memory. | +------------------------+---------------------------+-----------------------------------------------+ |Partitioning |Partition |Partition operations are device-level | | | |operations that separate the sequence | | | |based on a selection predicate. The order of | | | |the items in the sequence that return ``true`` | | | |is retained. | +------------------------+---------------------------+-----------------------------------------------+ |Merging |Merge |Merge operations are device-level operations | | | |that merge two ordered sequence into one while | | | |preserving the order. | +------------------------+---------------------------+-----------------------------------------------+ |Data movement |Store |Store operations are block, warp, and thread | | | |level operations that store items in block or | | | |stripe arrangements in contiguous memory. | | +---------------------------+-----------------------------------------------+ | |Load |Load operations are block, warp, and thread | | | |level operations that load data stored | | | |in contiguous memory into a block arrangement. | | +---------------------------+-----------------------------------------------+ | |Memcpy |Memcopy operations are device-level operations | | | |that run multiple device-to-device memory copy | | | |operations as single batch operations. | +------------------------+---------------------------+-----------------------------------------------+ |Search |Find first of |Find first of is a device-level operation that | | | |searches the sequence for the first occurrence | | | |of any of the items in a given range of items. | | +---------------------------+-----------------------------------------------+ | |Find end |Find end is a device-level operation that | | | |finds the last occurrence of a series of items | | | |in the sequence. | | +---------------------------+-----------------------------------------------+ | |Adjacent find |Adjacent find is a device-level operation that | | | |searches for the first occurrence of two | | | |consecutive equal items. | | +---------------------------+-----------------------------------------------+ | |Search |Search is a device-level operation that | | | |searches the sequence for the first occurrence | | | |of a series of items. | | +---------------------------+-----------------------------------------------+ | |Search N |Search N is a device-level operation that | | | |searches the sequence for the first occurrence | | | |of a series of N items that are all equal to | | | |a given value. | | +---------------------------+-----------------------------------------------+ | |Binary search |Binary search is a device-level operation that | | | |does a binary search on a sorted range of | | | |inputs. | +------------------------+---------------------------+-----------------------------------------------+ |Miscellaneous |Run length encode |Run length encode operations are device-level | | | |operations that do device-wide encodings of | | | |runs of consecutive equal values. | | +---------------------------+-----------------------------------------------+ | |Run length decode |Run length decode operations are block-level | | | |operations that decode run length encoded | | | |arrays of items. | | +---------------------------+-----------------------------------------------+ | |Kernel config |Kernel config constructs are device-level | | | |constructs that set the grid and block | | | |dimensions as well as the algorithms to use for| | | |the store and load operations. | +------------------------+---------------------------+-----------------------------------------------+