Files
TheRock/rocm-libraries/projects/rocprim/docs/conceptual/rocPRIM-operations.rst
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

140 lines
13 KiB
ReStructuredText

.. 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. |
+------------------------+---------------------------+-----------------------------------------------+