CUV  0.9.201304091348
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
cuv::tensor< V, M, L > Class Template Reference

represents an n-dimensional array on GPU or CPU. More...

#include <tensor.hpp>

Inheritance diagram for cuv::tensor< V, M, L >:
Inheritance graph
[legend]
Collaboration diagram for cuv::tensor< V, M, L >:
Collaboration graph
[legend]

Public Types

typedef memory< V, M > memory_type
 type of stored memory
typedef memory_type::reference_type reference_type
 values returned by operator() and []
typedef
memory_type::const_reference_type 
const_reference_type
 values returned by operator()
typedef
memory_type::memory_space_type 
memory_space_type
 dev/host
typedef memory_type::value_type value_type
 type of stored values
typedef memory_type::size_type size_type
 type shapes
typedef memory_type::index_type index_type
 type strides
typedef memory_type::pointer_type pointer_type
 type of data pointers
typedef
memory_type::const_pointer_type 
const_pointer_type
 type of const data pointers
typedef L memory_layout_type
 column/row major
typedef tensor_info< M, L > info_type
 type of shape info struct
typedef tensor_view< V, M, L > view_type
 type of views on this tensor

Public Member Functions

template<std::size_t D>
size_type index_of (const extent_gen< D > &eg) const
 determine linear index in memory of an index array
template<class T >
tensor copy (T tag=linear_memory_tag()) const
 copy memory using given allocator tag (linear/pitched)
tensor copy () const
 copy memory using linear memory
template<int D, int E>
tensor_view< V, M, L > operator[] (const index_gen< D, E > &idx) const
 create a subtensor of the current tensor.
template<std::size_t D>
void reshape (const extent_gen< D > &eg)
 reshape the tensor (in place)
void reshape (const std::vector< size_type > &shape)
 reshape the tensor (in place)
void reshape (size_type r, size_type c)
 convenience wrapper for reshape(extents[r][c])
void resize (const std::vector< size_type > &shape)
 resize the tensor (deallocates memory if product changes, otherwise equivalent to reshape)
template<std::size_t D>
void resize (const extent_gen< D > &eg)
 resize the tensor (deallocates memory if product changes, otherwise equivalent to reshape)
void dealloc ()
 force deallocation of memory if possible
Accessors
index_type ndim () const
 return the number of dimensions
size_type shape (const index_type &i) const
 return the size of the i-th dimension
index_type stride (const index_type &i) const
 return the stride of the i-th dimension
pointer_type ptr ()
const_pointer_type ptr () const
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
void set_ptr_offset (long int i)
 set the pointer offset (used in deserialization)
boost::shared_ptr< memory_type > & mem ()
const boost::shared_ptr
< memory_type > & 
mem () const
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
size_type size () const
size_type memsize () const
 determine size in bytes
std::vector< size_typeshape () const
 return the shape of the tensor (as a vector for backward compatibility)
std::vector< size_typeeffective_shape () const
 return the effective shape of the tensor (as a vector for backward compatibility)
const info_typeinfo () const
info_typeinfo ()
bool is_c_contiguous () const
 true iff there are no "holes" in memory
bool is_2dcopyable () const
 true iff it can be copied as a 2d array (only one dimension is pitched)
accessing stored values
reference_type operator[] (index_type idx)
 scalar referecne access: "flat" access as if memory was linear.
const_reference_type operator[] (index_type idx) const
reference_type operator() (index_type i0)
 get a reference to the datum at an index
const_reference_type operator() (index_type i0) const
const_reference_type operator() (index_type i0, index_type i1) const
reference_type operator() (index_type i0, index_type i1)
const_reference_type operator() (index_type i0, index_type i1, index_type i2) const
reference_type operator() (index_type i0, index_type i1, index_type i2)
const_reference_type operator() (index_type i0, index_type i1, index_type i2, index_type i3) const
reference_type operator() (index_type i0, index_type i1, index_type i2, index_type i3)
const_reference_type operator() (index_type i0, index_type i1, index_type i2, index_type i3, index_type i4) const
reference_type operator() (index_type i0, index_type i1, index_type i2, index_type i3, index_type i4)
constructors
 tensor ()
 default constructor (does nothing)
 tensor (const tensor &o)
 construct tensor from tensor of exact same type
template<class OM >
 tensor (const tensor< value_type, OM, L > &o)
 construct tensor from tensor of other memory space in (dense) /linear/ memory.
 tensor (const tensor &o, pitched_memory_tag)
 construct tensor from tensor of same memory space in /pitched/ memory.
template<class OM >
 tensor (const tensor< value_type, OM, L > &o, pitched_memory_tag)
 construct tensor from tensor of other memory space in /pitched/ memory.
 tensor (const tensor &o, linear_memory_tag)
 construct tensor from tensor of same memory space in (dense) /linear/ memory.
template<class OM >
 tensor (const tensor< value_type, OM, L > &o, linear_memory_tag)
 construct tensor from tensor of other memory space in (dense) /linear/ memory.
template<class OL >
 tensor (const tensor< value_type, M, OL > &o)
 construct tensor from other memory layout
 tensor (const size_type i)
 construct one-dimensional tensor
 tensor (const size_type i, const int j)
 construct two-dimensional tensor
template<std::size_t D>
 tensor (const extent_gen< D > &eg)
 construct tensor from a shape
 tensor (const std::vector< size_type > &eg)
 construct tensor from a shape
 tensor (const std::vector< size_type > &eg, pitched_memory_tag)
 construct tensor from a shape
template<std::size_t D>
 tensor (const extent_gen< D > &eg, pitched_memory_tag)
 construct tensor from a shape (pitched)
template<std::size_t D>
 tensor (const extent_gen< D > &eg, value_type *ptr)
 construct tensor from a shape and a pointer (does not copy memory)
 tensor (const std::vector< size_type > &shape, value_type *ptr)
template<int D, int E>
 tensor (const index_gen< D, E > &idx, value_type *ptr)
 construct tensor from a shape and a pointer (does not copy memory)
assigning other values to a tensor object
template<class _M , class _L >
tensorassign (const tensor< V, _M, _L > &o)
 explicitly assign by copying memory
tensoroperator= (const tensor &o)
 assign from tensor of same type
template<class _V >
boost::enable_if_c
< boost::is_convertible< _V,
value_type >::value, tensor & >
::type 
operator= (const _V &scalar)
 assign from value (sets all elements equal to one scalar)
template<class OM >
tensoroperator= (const tensor< value_type, OM, L > &o)
 assign from tensor of different memory space type.
template<class OL >
tensoroperator= (const tensor< value_type, M, OL > &o)
 assign from tensor of different memory layout type.

Protected Member Functions

size_type index_of (int D, index_type *arr) const
 determine linear index in memory of an index array
void allocate (tensor &t, linear_memory_tag)
 allocate linear memory (c-contiguous version)
void allocate (tensor &t, pitched_memory_tag)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. pitched version.

Protected Attributes

info_type m_info
 information about shape, strides
boost::shared_ptr< memory_typem_memory
 points to (possibly shared) memory
V * m_ptr
 points to start of actually referenced memory (within m_memory)

Friends

class tensor_view
 tensor views are our friends

Detailed Description

template<class V, class M, class L = row_major>
class cuv::tensor< V, M, L >

represents an n-dimensional array on GPU or CPU.

Definition at line 871 of file tensor.hpp.

Constructor & Destructor Documentation

template<class V, class M, class L = row_major>
cuv::tensor< V, M, L >::tensor ( const tensor< V, M, L > &  o)
inline

construct tensor from tensor of exact same type

time O(1)

Definition at line 1216 of file tensor.hpp.

template<class V, class M, class L = row_major>
template<class OM >
cuv::tensor< V, M, L >::tensor ( const tensor< value_type, OM, L > &  o)
inline

construct tensor from tensor of other memory space in (dense) /linear/ memory.

Note: this /copies/ the memory!

Definition at line 1226 of file tensor.hpp.

template<class V, class M, class L = row_major>
cuv::tensor< V, M, L >::tensor ( const tensor< V, M, L > &  o,
pitched_memory_tag   
)
inlineexplicit

construct tensor from tensor of same memory space in /pitched/ memory.

Note: this /copies/ the memory!

Definition at line 1238 of file tensor.hpp.

template<class V, class M, class L = row_major>
template<class OM >
cuv::tensor< V, M, L >::tensor ( const tensor< value_type, OM, L > &  o,
pitched_memory_tag   
)
inlineexplicit

construct tensor from tensor of other memory space in /pitched/ memory.

Note: this /copies/ the memory!

Definition at line 1251 of file tensor.hpp.

template<class V, class M, class L = row_major>
cuv::tensor< V, M, L >::tensor ( const tensor< V, M, L > &  o,
linear_memory_tag   
)
inlineexplicit

construct tensor from tensor of same memory space in (dense) /linear/ memory.

Note: this /copies/ the memory!

Definition at line 1263 of file tensor.hpp.

template<class V, class M, class L = row_major>
template<class OM >
cuv::tensor< V, M, L >::tensor ( const tensor< value_type, OM, L > &  o,
linear_memory_tag   
)
inlineexplicit

construct tensor from tensor of other memory space in (dense) /linear/ memory.

Note: this /copies/ the memory!

Definition at line 1275 of file tensor.hpp.

template<class V, class M, class L = row_major>
template<class OL >
cuv::tensor< V, M, L >::tensor ( const tensor< value_type, M, OL > &  o)
inlineexplicit

construct tensor from other memory layout

this does not copy memory, but reverses dimensions and strides (and therefore only takes O(1) time)

Definition at line 1289 of file tensor.hpp.

template<class V, class M, class L = row_major>
cuv::tensor< V, M, L >::tensor ( const std::vector< size_type > &  eg)
inlineexplicit

construct tensor from a shape

Deprecated:

Definition at line 1341 of file tensor.hpp.

template<class V, class M, class L = row_major>
cuv::tensor< V, M, L >::tensor ( const std::vector< size_type > &  eg,
pitched_memory_tag   
)
inlineexplicit

construct tensor from a shape

Deprecated:

Definition at line 1355 of file tensor.hpp.

template<class V, class M, class L = row_major>
template<std::size_t D>
cuv::tensor< V, M, L >::tensor ( const extent_gen< D > &  eg,
value_type ptr 
)
inlineexplicit

construct tensor from a shape and a pointer (does not copy memory)

Warning
You have to ensure that the memory lives as long as this object.

Definition at line 1387 of file tensor.hpp.

template<class V, class M, class L = row_major>
template<int D, int E>
cuv::tensor< V, M, L >::tensor ( const index_gen< D, E > &  idx,
value_type ptr 
)
inlineexplicit

construct tensor from a shape and a pointer (does not copy memory)

Warning
You have to ensure that the memory lives as long as this object.
Deprecated:

Definition at line 1431 of file tensor.hpp.

Member Function Documentation

template<class V, class M, class L = row_major>
void cuv::tensor< V, M, L >::allocate ( tensor< V, M, L > &  t,
linear_memory_tag   
)
inlineprotected

allocate linear memory (c-contiguous version)

Parameters
ttensor to allocate

Definition at line 928 of file tensor.hpp.

template<class V, class M, class L = row_major>
std::vector<size_type> cuv::tensor< V, M, L >::effective_shape ( ) const
inline

return the effective shape of the tensor (as a vector for backward compatibility)

the effective shape removes all degenerate dimensions (i.e. shape(i)==1).

Definition at line 1044 of file tensor.hpp.

template<class V, class M, class L = row_major>
size_type cuv::tensor< V, M, L >::index_of ( int  D,
index_type arr 
) const
inlineprotected

determine linear index in memory of an index array

this function takes strides etc. into account, so that indices are interpreted as relative to the (strided) subtensor we're referring to.

Parameters
Dsize of index array
arrindex array
Returns
linear index in memory of index array

Definition at line 914 of file tensor.hpp.

template<class V, class M, class L = row_major>
template<std::size_t D>
size_type cuv::tensor< V, M, L >::index_of ( const extent_gen< D > &  eg) const
inline

determine linear index in memory of an index array

this function takes strides etc. into account, so that indices are interpreted as relative to the (strided) subtensor we're referring to.

Template Parameters
Dsize of index array
Parameters
egposition in array
Returns
linear index in memory of index array

Definition at line 965 of file tensor.hpp.

template<class V, class M, class L = row_major>
const info_type& cuv::tensor< V, M, L >::info ( ) const
inline
Returns
the tensor info struct (const)

Definition at line 1058 of file tensor.hpp.

template<class V, class M, class L = row_major>
info_type& cuv::tensor< V, M, L >::info ( )
inline
Returns
the tensor info struct

Definition at line 1061 of file tensor.hpp.

template<class V, class M, class L = row_major>
boost::shared_ptr<memory_type>& cuv::tensor< V, M, L >::mem ( )
inline
  • Returns
    pointer to allocated memory

Definition at line 1004 of file tensor.hpp.

template<class V, class M, class L = row_major>
const boost::shared_ptr<memory_type>& cuv::tensor< V, M, L >::mem ( ) const
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Returns
the const pointer to the allocated memory

Definition at line 1009 of file tensor.hpp.

template<class V, class M, class L = row_major>
size_type cuv::tensor< V, M, L >::memsize ( ) const
inline

determine size in bytes

assumes that the memory is c_contiguous!

Returns
the size in bytes

Definition at line 1025 of file tensor.hpp.

template<class V, class M, class L = row_major>
reference_type cuv::tensor< V, M, L >::operator() ( index_type  i0)
inline

get a reference to the datum at an index

Parameters
i0index for a 1-dimensional tensor
Returns
reference to datum at i0

Definition at line 1126 of file tensor.hpp.

template<class V, class M, class L = row_major>
const_reference_type cuv::tensor< V, M, L >::operator() ( index_type  i0) const
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 1138 of file tensor.hpp.

template<class V, class M, class L = row_major>
const_reference_type cuv::tensor< V, M, L >::operator() ( index_type  i0,
index_type  i1 
) const
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 1141 of file tensor.hpp.

template<class V, class M, class L = row_major>
reference_type cuv::tensor< V, M, L >::operator() ( index_type  i0,
index_type  i1 
)
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 1143 of file tensor.hpp.

template<class V, class M, class L = row_major>
const_reference_type cuv::tensor< V, M, L >::operator() ( index_type  i0,
index_type  i1,
index_type  i2 
) const
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 1154 of file tensor.hpp.

template<class V, class M, class L = row_major>
reference_type cuv::tensor< V, M, L >::operator() ( index_type  i0,
index_type  i1,
index_type  i2 
)
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 1156 of file tensor.hpp.

template<class V, class M, class L = row_major>
const_reference_type cuv::tensor< V, M, L >::operator() ( index_type  i0,
index_type  i1,
index_type  i2,
index_type  i3 
) const
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 1168 of file tensor.hpp.

template<class V, class M, class L = row_major>
reference_type cuv::tensor< V, M, L >::operator() ( index_type  i0,
index_type  i1,
index_type  i2,
index_type  i3 
)
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 1170 of file tensor.hpp.

template<class V, class M, class L = row_major>
const_reference_type cuv::tensor< V, M, L >::operator() ( index_type  i0,
index_type  i1,
index_type  i2,
index_type  i3,
index_type  i4 
) const
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 1183 of file tensor.hpp.

template<class V, class M, class L = row_major>
reference_type cuv::tensor< V, M, L >::operator() ( index_type  i0,
index_type  i1,
index_type  i2,
index_type  i3,
index_type  i4 
)
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 1185 of file tensor.hpp.

template<class V, class M, class L = row_major>
tensor& cuv::tensor< V, M, L >::operator= ( const tensor< V, M, L > &  o)
inline

assign from tensor of same type

always an O(1) operation.

Reimplemented in cuv::tensor_view< V, M, L >.

Definition at line 1474 of file tensor.hpp.

template<class V, class M, class L = row_major>
template<class OM >
tensor& cuv::tensor< V, M, L >::operator= ( const tensor< value_type, OM, L > &  o)
inline

assign from tensor of different memory space type.

If shapes do not match, it defaults to linear memory.

this copies memory (obviously) but tries to avoid reallocation

Definition at line 1504 of file tensor.hpp.

template<class V, class M, class L = row_major>
template<class OL >
tensor& cuv::tensor< V, M, L >::operator= ( const tensor< value_type, M, OL > &  o)
inline

assign from tensor of different memory layout type.

this does not copy memory, but reverses strides and shapes.

Definition at line 1520 of file tensor.hpp.

template<class V, class M, class L = row_major>
const_reference_type cuv::tensor< V, M, L >::operator[] ( index_type  idx) const
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 1117 of file tensor.hpp.

template<class V, class M, class L = row_major>
template<int D, int E>
tensor_view<V,M,L> cuv::tensor< V, M, L >::operator[] ( const index_gen< D, E > &  idx) const
inline

create a subtensor of the current tensor.

this works in O(1).

Example:

tensor<float,host_memory_space> v(extents[5][10]);
// these are equivalent:
v[indices[index_range(2,3)][index_range(0,10)]];
v[indices[index_range(2,3)][index_range()]];
v[indices[index_range(2,3)]];
v[indices[index_range(2,3)][index_range() < index(10)]];
v[indices[index_range(2,3)][index(0) < index_range() < index(10)]];
// In the previous example, all parameters to indices above are *ranges*.
// This causes the number of dimensions to stay the same in the view and the tensor.
// You can also provide a 'degenerate' range, which removes the respective dimension.
// These yields a 1D-tensor corresponding to the 2nd slice in the 1st dimension:
v[indices[1][index_range()]];
v[indices[1]];

Definition at line 1581 of file tensor.hpp.

template<class V, class M, class L = row_major>
pointer_type cuv::tensor< V, M, L >::ptr ( )
inline
Returns
the pointer to the referenced memory

Definition at line 992 of file tensor.hpp.

template<class V, class M, class L = row_major>
const_pointer_type cuv::tensor< V, M, L >::ptr ( ) const
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Returns
the const pointer to the referenced memory

Definition at line 998 of file tensor.hpp.

template<class V, class M, class L = row_major>
template<std::size_t D>
void cuv::tensor< V, M, L >::reshape ( const extent_gen< D > &  eg)
inline

reshape the tensor (in place)

works only for c_contiguous memory!

Parameters
egnew shape

Definition at line 1632 of file tensor.hpp.

template<class V, class M, class L = row_major>
void cuv::tensor< V, M, L >::reshape ( const std::vector< size_type > &  shape)
inline

reshape the tensor (in place)

works only for c_contiguous memory!

Parameters
shapenew shape

Definition at line 1645 of file tensor.hpp.

template<class V, class M, class L = row_major>
void cuv::tensor< V, M, L >::reshape ( size_type  r,
size_type  c 
)
inline

convenience wrapper for reshape(extents[r][c])

Parameters
rleading index of new shape
cfollowing index of new shape

Definition at line 1671 of file tensor.hpp.

template<class V, class M, class L = row_major>
void cuv::tensor< V, M, L >::resize ( const std::vector< size_type > &  shape)
inline

resize the tensor (deallocates memory if product changes, otherwise equivalent to reshape)

Parameters
shapenew shape

Definition at line 1680 of file tensor.hpp.

template<class V, class M, class L = row_major>
template<std::size_t D>
void cuv::tensor< V, M, L >::resize ( const extent_gen< D > &  eg)
inline

resize the tensor (deallocates memory if product changes, otherwise equivalent to reshape)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Parameters
egnew shape

Definition at line 1699 of file tensor.hpp.

template<class V, class M, class L = row_major>
size_type cuv::tensor< V, M, L >::shape ( const index_type i) const
inline

return the size of the i-th dimension

Parameters
ithe index of the queried dimension

Definition at line 984 of file tensor.hpp.

template<class V, class M, class L = row_major>
size_type cuv::tensor< V, M, L >::size ( ) const
inline
Returns
the number of stored elements

Definition at line 1014 of file tensor.hpp.

template<class V, class M, class L = row_major>
index_type cuv::tensor< V, M, L >::stride ( const index_type i) const
inline

return the stride of the i-th dimension

Parameters
ithe index of the queried dimension

Definition at line 989 of file tensor.hpp.


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