cub::CacheModifiedOutputIterator

Defined in cub/iterator/cache_modified_output_iterator.cuh

template<CacheStoreModifier MODIFIER, typename ValueType, typename OffsetT = ptrdiff_t>
class CacheModifiedOutputIterator

A random-access output wrapper for storing array values using a PTX cache-modifier.

Overview

  • CacheModifiedOutputIterator is a random-access output iterator that wraps a native device pointer of type ValueType*. ValueType references are made by writing ValueType values through stores modified by MODIFIER.

  • Can be used to store any data type to memory using PTX cache store modifiers (e.g., “STORE_WB”, “STORE_CG”, “STORE_CS”, “STORE_WT”, etc.).

  • Can be constructed, manipulated, and exchanged within and between host and device functions, but can only be dereferenced within device functions.

  • Compatible with Thrust API v1.7 or newer.

Snippet

The code snippet below illustrates the use of CacheModifiedOutputIterator to dereference a device array of doubles using the “wt” PTX load modifier (i.e., write-through to system memory).

#include <cub/cub.cuh>   // or equivalently <cub/iterator/cache_modified_output_iterator.cuh>

// Declare, allocate, and initialize a device array
double *d_out;              // e.g., [, , , , , , ]

// Create an iterator wrapper
cub::CacheModifiedOutputIterator<cub::STORE_WT, double> itr(d_out);

// Within device code:
itr[0]  = 8.0;
itr[1]  = 66.0;
itr[55] = 24.0;

Usage Considerations

  • Can only be dereferenced within device code

Template Parameters
  • CacheStoreModifier – The cub::CacheStoreModifier to use when accessing data

  • ValueType – The value type of this iterator

  • OffsetT – The difference type of this iterator (Default: ptrdiff_t)

Public Types

using self_type = CacheModifiedOutputIterator

My own type.

using difference_type = OffsetT

Type to express the result of subtracting one iterator from another.

using value_type = void

The type of the element the iterator can point to.

using pointer = void

The type of a pointer to an element the iterator can point to.

using reference = Reference

The type of a reference to an element the iterator can point to.

using iterator_category = typename THRUST_NS_QUALIFIER::detail::iterator_facade_category<THRUST_NS_QUALIFIER::device_system_tag, THRUST_NS_QUALIFIER::random_access_traversal_tag, value_type, reference>::type

The iterator category.

Public Functions

template<typename QualifiedValueType>
inline CacheModifiedOutputIterator(QualifiedValueType *ptr)
Parameters

ptr – Native pointer to wrap

inline self_type operator++(int)

Postfix increment.

inline self_type operator++()

Prefix increment.

inline reference operator*() const

Indirection.

template<typename Distance>
inline self_type operator+(Distance n) const

Addition.

template<typename Distance>
inline self_type &operator+=(Distance n)

Addition assignment.

template<typename Distance>
inline self_type operator-(Distance n) const

Subtraction.

template<typename Distance>
inline self_type &operator-=(Distance n)

Subtraction assignment.

inline difference_type operator-(self_type other) const

Distance.

template<typename Distance>
inline reference operator[](Distance n) const

Array subscript.

inline bool operator==(const self_type &rhs)

Equal to.

inline bool operator!=(const self_type &rhs)

Not equal to.

Friends

inline friend std::ostream &operator<<(std::ostream &os, const self_type &itr)

ostream operator