ViennaCL - The Vienna Computing Library: viennacl::vector_iterator< SCALARTYPE, ALIGNMENT > Class Template Reference

ViennaCL - The Vienna Computing Library 1.7.1 Free open-source GPU-accelerated linear algebra and solver library. |

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Types | Public Member Functions | List of all members
viennacl::vector_iterator< SCALARTYPE, ALIGNMENT > Class Template Reference

A STL-type iterator for vector elements. Elements can be accessed and manipulated. VERY SLOW!! More...

`#include <forwards.h>`

Inheritance diagram for viennacl::vector_iterator< SCALARTYPE, ALIGNMENT >:

## Public Types
typedef base_type::handle_type | handle_type
typedef base_type::size_type | size_type
typedef base_type::difference_type | difference_type
Public Types inherited from viennacl::const_vector_iterator< NumericT, AlignmentV >
typedef scalar< NumericT > | value_type
typedef vcl_size_t | size_type
typedef vcl_ptrdiff_t | difference_type
typedef viennacl::backend::mem_handle | handle_type

## Public Member Functions
| vector_iterator (handle_type const &elements, size_type index, size_type start=0, size_type stride=1)
| vector_iterator (vector_base< NumericT > &vec, size_type index, size_type start=0, size_type stride=1)
| Constructor. More...
entry_proxy< NumericT > | operator* (void)
difference_type | operator- (self_type const &other) const
self_type | operator+ (difference_type diff) const
handle_type & | handle ()
handle_type const & | handle () const
Public Member Functions inherited from viennacl::const_vector_iterator< NumericT, AlignmentV >
| const_vector_iterator (vector_base< NumericT > const &vec, size_type index, size_type start=0, size_type stride=1)
| Constructor. More...
| const_vector_iterator (handle_type const &elements, size_type index, size_type start=0, size_type stride=1)
| Constructor for vector-like treatment of arbitrary buffers. More...
value_type | operator* (void) const
| Dereferences the iterator and returns the value of the element. For convenience only, performance is poor due to OpenCL overhead! More...
self_type | operator++ (void)
self_type | operator++ (int)
bool | operator== (self_type const &other) const
bool | operator!= (self_type const &other) const
difference_type | operator- (self_type const &other) const
self_type | operator+ (difference_type diff) const
size_type | offset () const
| Offset of the current element index with respect to the beginning of the buffer. More...
size_type | stride () const
| Index increment in the underlying buffer when incrementing the iterator to the next element. More...
handle_type const & | handle () const

## Additional Inherited Members
Protected Attributes inherited from viennacl::const_vector_iterator< NumericT, AlignmentV >
handle_type const & | elements_
| The index of the entry the iterator is currently pointing to. More...
size_type | index_
size_type | start_
size_type | stride_

## Detailed Description

### template<class SCALARTYPE, unsigned int ALIGNMENT>
class viennacl::vector_iterator< SCALARTYPE, ALIGNMENT >

A STL-type iterator for vector elements. Elements can be accessed and manipulated. VERY SLOW!!

Every dereference operation initiates a transfer from the GPU to the CPU. The overhead of such a transfer is around 50us, so 20.000 dereferences take one second. This is four orders of magnitude slower than similar dereferences on the CPU. However, increments and comparisons of iterators is as fast as for CPU types. If you need a fast iterator, copy the whole vector to the CPU first and iterate over the CPU object, e.g. std::vector<float> temp; copy(gpu_vector, temp); for (std::vector<float>::const_iterator iter = temp.begin(); iter != temp.end(); ++iter) { //do something } copy(temp, gpu_vector); Note that you may obtain inconsistent data if you manipulate entries of gpu_vector in the meanwhile.

Template Parameters

  NumericT | The underlying floating point type (either float or double)
  AlignmentV | Alignment of the underlying vector,

See Also
  vector

Definition at line 242 of file forwards.h.

## Member Typedef Documentation

template<class SCALARTYPE, unsigned int ALIGNMENT>

typedef base_type::difference_type viennacl::vector_iterator< SCALARTYPE, ALIGNMENT >::difference_type

Definition at line 212 of file vector.hpp.

template<class SCALARTYPE, unsigned int ALIGNMENT>

typedef base_type::handle_type viennacl::vector_iterator< SCALARTYPE, ALIGNMENT >::handle_type

Definition at line 210 of file vector.hpp.

template<class SCALARTYPE, unsigned int ALIGNMENT>

typedef base_type::size_type viennacl::vector_iterator< SCALARTYPE, ALIGNMENT >::size_type

Definition at line 211 of file vector.hpp.

## Constructor & Destructor Documentation

template<class SCALARTYPE, unsigned int ALIGNMENT>

viennacl::vector_iterator< SCALARTYPE, ALIGNMENT >::vector_iterator | ( | handle_type const & | elements,
|  | size_type | index,
|  | size_type | start = `0`,
|  | size_type | stride = `1`
| ) |  |
| inline

Definition at line 214 of file vector.hpp.

template<class SCALARTYPE, unsigned int ALIGNMENT>

viennacl::vector_iterator< SCALARTYPE, ALIGNMENT >::vector_iterator | ( | vector_base< NumericT > & | vec,
|  | size_type | index,
|  | size_type | start = `0`,
|  | size_type | stride = `1`
| ) |  |
| inline

Constructor.

Parameters

  vec | The vector over which to iterate
  index | The starting index of the iterator
  start | Offset from the beginning of the underlying vector (for ranges and slices)
  stride | Stride for slices

Definition at line 224 of file vector.hpp.

## Member Function Documentation

template<class SCALARTYPE, unsigned int ALIGNMENT>

handle_type& viennacl::vector_iterator< SCALARTYPE, ALIGNMENT >::handle | ( |  | ) |
| inline

Definition at line 238 of file vector.hpp.

template<class SCALARTYPE, unsigned int ALIGNMENT>

handle_type const& viennacl::vector_iterator< SCALARTYPE, ALIGNMENT >::handle | ( |  | ) | const
| inline

Definition at line 239 of file vector.hpp.

template<class SCALARTYPE, unsigned int ALIGNMENT>

entry_proxy<NumericT> viennacl::vector_iterator< SCALARTYPE, ALIGNMENT >::operator* | ( | void |  | ) |
| inline

Definition at line 230 of file vector.hpp.

template<class SCALARTYPE, unsigned int ALIGNMENT>

self_type viennacl::vector_iterator< SCALARTYPE, ALIGNMENT >::operator+ | ( | difference_type | diff | ) | const
| inline

Definition at line 236 of file vector.hpp.

template<class SCALARTYPE, unsigned int ALIGNMENT>

difference_type viennacl::vector_iterator< SCALARTYPE, ALIGNMENT >::operator- | ( | self_type const & | other | ) | const
| inline

Definition at line 235 of file vector.hpp.

The documentation for this class was generated from the following files:

- viennacl/forwards.h
- viennacl/vector.hpp