VTK-m
2.2
|
Manage keys for a vtkm::worklet::WorkletReduceByKey
.
More...
#include <Keys.h>
Public Types | |
using | KeyType = T |
using | KeyArrayHandleType = vtkm::cont::ArrayHandle< KeyType > |
using | ExecLookup = vtkm::exec::internal::ReduceByKeyLookup< typename KeyArrayHandleType::ReadPortalType, typename vtkm::cont::ArrayHandle< vtkm::Id >::ReadPortalType, typename vtkm::cont::ArrayHandle< vtkm::IdComponent >::ReadPortalType > |
Public Member Functions | |
Keys () | |
template<typename KeyStorage > | |
Keys (const vtkm::cont::ArrayHandle< KeyType, KeyStorage > &keys, vtkm::cont::DeviceAdapterId device=vtkm::cont::DeviceAdapterTagAny()) | |
Construct a Keys class from an array of keys. More... | |
template<typename KeyArrayType > | |
void | BuildArrays (const KeyArrayType &keys, KeysSortType sort, vtkm::cont::DeviceAdapterId device=vtkm::cont::DeviceAdapterTagAny()) |
Build the internal arrays without modifying the input. More... | |
template<typename KeyArrayType > | |
void | BuildArraysInPlace (KeyArrayType &keys, KeysSortType sort, vtkm::cont::DeviceAdapterId device=vtkm::cont::DeviceAdapterTagAny()) |
Build the internal arrays and also sort the input keys. More... | |
KeyArrayHandleType | GetUniqueKeys () const |
Returns an array of unique keys. More... | |
vtkm::Id | GetInputRange () const |
Returns the input range of a keys object when used as an input domain. More... | |
vtkm::cont::ArrayHandle< vtkm::Id > | GetSortedValuesMap () const |
Returns the array that maps each input value to an array of sorted keys. More... | |
vtkm::cont::ArrayHandle< vtkm::Id > | GetOffsets () const |
Returns an offsets array to group keys. More... | |
vtkm::Id | GetNumberOfValues () const |
Returns the number of input keys and values used to build this structure. More... | |
ExecLookup | PrepareForInput (vtkm::cont::DeviceAdapterId device, vtkm::cont::Token &token) const |
bool | operator== (const vtkm::worklet::Keys< KeyType > &other) const |
bool | operator!= (const vtkm::worklet::Keys< KeyType > &other) const |
Manage keys for a vtkm::worklet::WorkletReduceByKey
.
The vtkm::worklet::WorkletReduceByKey
worklet takes an array of keys for its input domain, finds all identical keys, and runs a worklet that produces a single value for every key given all matching values. This class is used as the associated input for the keys input domain.
Keys
is templated on the key array handle type and accepts an instance of this array handle as its constructor. It builds the internal structures needed to use the keys.
The same Keys
structure can be used for multiple different invokes of different or the same worklets. When used in this way, the processing done in the Keys
structure is reused for all the invokes. This is more efficient than creating a different Keys
structure for each invoke.
using vtkm::worklet::Keys< T >::ExecLookup = vtkm::exec::internal::ReduceByKeyLookup< typename KeyArrayHandleType::ReadPortalType, typename vtkm::cont::ArrayHandle<vtkm::Id>::ReadPortalType, typename vtkm::cont::ArrayHandle<vtkm::IdComponent>::ReadPortalType> |
using vtkm::worklet::Keys< T >::KeyArrayHandleType = vtkm::cont::ArrayHandle<KeyType> |
using vtkm::worklet::Keys< T >::KeyType = T |
|
default |
|
inline |
Construct a Keys
class from an array of keys.
Given an array of keys, construct a Keys
class that will manage using these keys to perform reduce-by-key operations.
The input keys object is not modified and the result is not stable sorted. This is the equivalent of calling BuildArrays(keys, KeysSortType::Unstable, device)
.
template VTKM_WORKLET_TEMPLATE_EXPORT VTKM_CONT void vtkm::worklet::Keys< T >::BuildArrays | ( | const KeyArrayType & | keys, |
KeysSortType | sort, | ||
vtkm::cont::DeviceAdapterId | device = vtkm::cont::DeviceAdapterTagAny() |
||
) |
Build the internal arrays without modifying the input.
This is more efficient for stable sorted arrays, but requires an extra copy of the keys for unstable sorting.
void vtkm::worklet::Keys< T >::BuildArraysInPlace | ( | KeyArrayType & | keys, |
KeysSortType | sort, | ||
vtkm::cont::DeviceAdapterId | device = vtkm::cont::DeviceAdapterTagAny() |
||
) |
Build the internal arrays and also sort the input keys.
This is more efficient for unstable sorting, but requires an extra copy for stable sorting.
vtkm::Id vtkm::worklet::Keys< T >::GetInputRange | ( | ) | const |
Returns the input range of a keys object when used as an input domain.
This will be equal to the number of unique keys.
vtkm::Id vtkm::worklet::Keys< T >::GetNumberOfValues | ( | ) | const |
Returns the number of input keys and values used to build this structure.
This is also the size of input arrays to a vtkm::worklet::WorkletReduceByKey
.
vtkm::cont::ArrayHandle<vtkm::Id> vtkm::worklet::Keys< T >::GetOffsets | ( | ) | const |
Returns an offsets array to group keys.
Given an array of sorted keys (or more frequently values permuted to the sorting of the keys), this array of indices can be used as offsets for a vtkm::cont::ArrayHandleGroupVecVariable
. This is an internal array that is seldom of use to code outside the vtkm::worklet::WorkletReduceByKey
implementation.
vtkm::cont::ArrayHandle<vtkm::Id> vtkm::worklet::Keys< T >::GetSortedValuesMap | ( | ) | const |
Returns the array that maps each input value to an array of sorted keys.
This array is used internally as the indices to a vtkm::cont::ArrayHandlePermutation
to order input values with the grouped keys so that they can then be grouped. This is an internal array that is seldom of use to code outside the vtkm::worklet::WorkletReduceByKey
implementation.
|
inline |
Returns an array of unique keys.
The order of keys in this array describes the order that result values will be placed in a vtkm::worklet::WorkletReduceByKey
.
|
inline |
|
inline |
|
inline |