CUDPP 1.1
|
Template class containing compile-time parameters to the segmented scan functions. More...
Static Public Member Functions | |
static __device__ bool | isBackward () |
Returns true if this is a backward scan. | |
static __device__ bool | isExclusive () |
Returns true if this is an exclusive scan. | |
static __device__ bool | shiftFlags () |
static __device__ bool | isFullBlock () |
Returns true if this is a full scan -- all blocks process CTA_SIZE * SCAN_ELEMENTS_PER_THREAD elements. | |
static __device__ bool | writeSums () |
Returns true if this scan writes the sum of each block to the d_blockSums array (multi-block scans) | |
static __device__ bool | isSM12OrBetter () |
Returns true if we are sm12 or better hardware. | |
static __device__ T | op (const T &a, const T &b) |
The operator function used for segmented scan. | |
static __device__ T | identity () |
The identity value used by segmented scan. |
Template class containing compile-time parameters to the segmented scan functions.
SegmentedScanTraits is passed as a template parameter to all segmented scan functions. By using these compile-time functions we can enable generic code while maintaining the highest performance. This is crucial for the performance of low-level workhorse algorithms like segmented scan.
T | The datatype of the segmented scan |
oper | The CUDPPOperator to use for the segmented scan (add, max, etc.) |
unroll | True if scan inner loops should be unrolled |
sums | True if each block should write it's sum to the d_blockSums array (false for single-block scans) |
backward | True if this is a backward scan, False if this is a forward scan |
fullBlock | True if all blocks in this scan are full (CTA_SIZE * SCAN_ELEMENTS_PER_THREAD elements) |
exclusivity | True for exclusive scans, false for inclusive scans |
static __device__ bool SegmentedScanTraits< T, oper, backward, exclusivity, doShiftFlags, fullBlock, sums, sm12OrBetter >::shiftFlags | ( | ) | [inline, static] |
Returns true if this scan needs to shift flags to the left. This is only needed for the first level scan in a multi-block scan