CUV
0.9.201304091348
|
represents an n-dimensional array on GPU or CPU. More...
#include <tensor.hpp>
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_type > | shape () const |
return the shape of the tensor (as a vector for backward compatibility) | |
std::vector< size_type > | effective_shape () const |
return the effective shape of the tensor (as a vector for backward compatibility) | |
const info_type & | info () const |
info_type & | info () |
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 > | |
tensor & | assign (const tensor< V, _M, _L > &o) |
explicitly assign by copying memory | |
tensor & | operator= (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 > | |
tensor & | operator= (const tensor< value_type, OM, L > &o) |
assign from tensor of different memory space type. | |
template<class OL > | |
tensor & | operator= (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_type > | m_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 |
represents an n-dimensional array on GPU or CPU.
Definition at line 871 of file tensor.hpp.
|
inline |
construct tensor from tensor of exact same type
time O(1)
Definition at line 1216 of file tensor.hpp.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
inlineexplicit |
|
inlineexplicit |
|
inlineexplicit |
construct tensor from a shape and a pointer (does not copy memory)
Definition at line 1387 of file tensor.hpp.
|
inlineexplicit |
construct tensor from a shape and a pointer (does not copy memory)
Definition at line 1431 of file tensor.hpp.
|
inlineprotected |
allocate linear memory (c-contiguous version)
t | tensor to allocate |
Definition at line 928 of file tensor.hpp.
|
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.
|
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.
D | size of index array |
arr | index array |
Definition at line 914 of file tensor.hpp.
|
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.
D | size of index array |
eg | position in array |
Definition at line 965 of file tensor.hpp.
|
inline |
Definition at line 1058 of file tensor.hpp.
|
inline |
Definition at line 1061 of file tensor.hpp.
|
inline |
Definition at line 1004 of file tensor.hpp.
|
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 1009 of file tensor.hpp.
|
inline |
determine size in bytes
assumes that the memory is c_contiguous!
Definition at line 1025 of file tensor.hpp.
|
inline |
get a reference to the datum at an index
i0 | index for a 1-dimensional tensor |
Definition at line 1126 of file tensor.hpp.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
inline |
create a subtensor of the current tensor.
this works in O(1).
Example:
Definition at line 1581 of file tensor.hpp.
|
inline |
Definition at line 992 of file tensor.hpp.
|
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 998 of file tensor.hpp.
|
inline |
reshape the tensor (in place)
works only for c_contiguous memory!
eg | new shape |
Definition at line 1632 of file tensor.hpp.
|
inline |
reshape the tensor (in place)
works only for c_contiguous memory!
shape | new shape |
Definition at line 1645 of file tensor.hpp.
|
inline |
convenience wrapper for reshape(extents[r][c])
r | leading index of new shape |
c | following index of new shape |
Definition at line 1671 of file tensor.hpp.
|
inline |
resize the tensor (deallocates memory if product changes, otherwise equivalent to reshape)
shape | new shape |
Definition at line 1680 of file tensor.hpp.
|
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.
eg | new shape |
Definition at line 1699 of file tensor.hpp.
|
inline |
return the size of the i-th dimension
i | the index of the queried dimension |
Definition at line 984 of file tensor.hpp.
|
inline |
Definition at line 1014 of file tensor.hpp.
|
inline |
return the stride of the i-th dimension
i | the index of the queried dimension |
Definition at line 989 of file tensor.hpp.