Our tensor type. More...
Public Types | |
enum | { NumDim = Dim } |
enum | { IsContig = Contig } |
typedef T | DataType |
typedef IndexT | IndexType |
typedef PtrTraits< T >::PtrType | DataPtrType |
typedef Tensor< T, Dim, Contig, IndexT, PtrTraits > | TensorType |
Public Member Functions | |
__host__ __device__ | Tensor () |
Default constructor. | |
__host__ __device__ | Tensor (Tensor< T, Dim, Contig, IndexT, PtrTraits > &t)=default |
Copy constructor. | |
__host__ __device__ | Tensor (Tensor< T, Dim, Contig, IndexT, PtrTraits > &&t)=default |
Move constructor. | |
__host__ __device__ Tensor< T, Dim, Contig, IndexT, PtrTraits > & | operator= (Tensor< T, Dim, Contig, IndexT, PtrTraits > &t)=default |
Assignment. | |
__host__ __device__ Tensor< T, Dim, Contig, IndexT, PtrTraits > & | operator= (Tensor< T, Dim, Contig, IndexT, PtrTraits > &&t) |
Move assignment. | |
__host__ __device__ | Tensor (DataPtrType data, const IndexT sizes[Dim]) |
Constructor that calculates strides with no padding. | |
__host__ __device__ | Tensor (DataPtrType data, std::initializer_list< IndexT > sizes) |
__host__ __device__ | Tensor (DataPtrType data, const IndexT sizes[Dim], const IndexT strides[Dim]) |
__host__ void | copyFrom (Tensor< T, Dim, Contig, IndexT, PtrTraits > &t, cudaStream_t stream) |
Copies a tensor into ourselves; sizes must match. | |
__host__ void | copyTo (Tensor< T, Dim, Contig, IndexT, PtrTraits > &t, cudaStream_t stream) |
Copies ourselves into a tensor; sizes must match. | |
template<int OtherDim> | |
__host__ __device__ bool | isSame (const Tensor< T, OtherDim, Contig, IndexT, PtrTraits > &rhs) const |
template<typename U > | |
__host__ __device__ Tensor< U, Dim, Contig, IndexT, PtrTraits > | cast () |
template<typename U > | |
__host__ __device__ const Tensor< U, Dim, Contig, IndexT, PtrTraits > | cast () const |
Const version of cast | |
template<typename U > | |
__host__ __device__ Tensor< U, Dim, Contig, IndexT, PtrTraits > | castResize () |
template<typename U > | |
__host__ __device__ const Tensor< U, Dim, Contig, IndexT, PtrTraits > | castResize () const |
Const version of castResize | |
template<typename U > | |
__host__ __device__ bool | canCastResize () const |
Returns true if we can castResize() this tensor to the new type. | |
template<typename NewIndexT > | |
__host__ Tensor< T, Dim, Contig, NewIndexT, PtrTraits > | castIndexType () const |
template<typename NewIndexT > | |
__host__ bool | canCastIndexType () const |
__host__ __device__ DataPtrType | data () |
Returns a raw pointer to the start of our data. | |
__host__ __device__ DataPtrType | end () |
__host__ __device__ const DataPtrType | data () const |
Returns a raw pointer to the start of our data (const). | |
__host__ __device__ DataPtrType | end () const |
template<typename U > | |
__host__ __device__ PtrTraits < U >::PtrType | dataAs () |
Cast to a different datatype. | |
template<typename U > | |
__host__ __device__ const PtrTraits< const U >::PtrType | dataAs () const |
Cast to a different datatype. | |
__host__ __device__ detail::SubTensor< TensorType, Dim-1, PtrTraits > | operator[] (IndexT) |
Returns a read/write view of a portion of our tensor. | |
__host__ __device__ const detail::SubTensor< TensorType, Dim-1, PtrTraits > | operator[] (IndexT) const |
Returns a read/write view of a portion of our tensor (const). | |
__host__ __device__ IndexT | getSize (int i) const |
__host__ __device__ IndexT | getStride (int i) const |
__host__ __device__ IndexT | numElements () const |
__host__ __device__ size_t | getSizeInBytes () const |
__host__ __device__ const IndexT * | sizes () const |
Returns the size array. | |
__host__ __device__ const IndexT * | strides () const |
Returns the stride array. | |
__host__ __device__ bool | isContiguous () const |
__host__ __device__ bool | isConsistentlySized (int i) const |
__host__ __device__ bool | isConsistentlySized () const |
__host__ __device__ bool | isContiguousDim (int i) const |
Returns true if the given dimension index has no padding. | |
__host__ __device__ Tensor< T, Dim, Contig, IndexT, PtrTraits > | transpose (int dim1, int dim2) const |
template<int NewDim> | |
__host__ __device__ Tensor< T, NewDim, Contig, IndexT, PtrTraits > | upcastOuter () |
template<int NewDim> | |
__host__ __device__ Tensor< T, NewDim, Contig, IndexT, PtrTraits > | upcastInner () |
template<int NewDim> | |
__host__ __device__ Tensor< T, NewDim, Contig, IndexT, PtrTraits > | downcastOuter () |
template<int NewDim> | |
__host__ __device__ Tensor< T, NewDim, Contig, IndexT, PtrTraits > | downcastInner () |
template<int SubDim> | |
__host__ __device__ Tensor< T, SubDim, Contig, IndexT, PtrTraits > | view (DataPtrType at) |
template<int SubDim> | |
__host__ __device__ Tensor< T, SubDim, Contig, IndexT, PtrTraits > | view () |
__host__ __device__ Tensor< T, Dim, Contig, IndexT, PtrTraits > | narrowOutermost (IndexT start, IndexT size) |
__host__ __device__ Tensor< T, Dim, false, IndexT, PtrTraits > | narrow (int dim, IndexT start, IndexT size) |
template<int NewDim> | |
__host__ __device__ Tensor< T, NewDim, Contig, IndexT, PtrTraits > | view (std::initializer_list< IndexT > sizes) |
Protected Attributes | |
DataPtrType | data_ |
Raw pointer to where the tensor data begins. | |
IndexT | stride_ [Dim] |
Array of strides (in sizeof(T) terms) per each dimension. | |
IndexT | size_ [Dim] |
Size per each dimension. | |
Our tensor type.
Templated multi-dimensional array that supports strided access of elements. Main access is through operator[]
; e.g., tensor[x][y][z]
.
T
is the contained type (e.g., float
)Dim
is the tensor rankContig
is true, then the tensor is assumed to beIndexT
is the integer type used for size/stride arrays, and forint
, but for large tensors, long
PtrTraits
are traits applied to our data pointer (T*). By default,Definition at line 30 of file Tensor.cuh.
__host__ __device__ faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::Tensor | ( | DataPtrType | data, |
const IndexT | sizes[Dim], | ||
const IndexT | strides[Dim] | ||
) |
Constructor that takes arbitrary size/stride arrays. Errors if you attempt to pass non-contiguous strides to a contiguous tensor.
Definition at line 87 of file Tensor-inl.cuh.
__host__ bool faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::canCastIndexType | ( | ) | const |
Returns true if we can castIndexType() this tensor to the new index type
Definition at line 306 of file Tensor-inl.cuh.
__host__ __device__ Tensor< U, Dim, Contig, IndexT, PtrTraits > faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::cast | ( | ) |
Cast to a tensor of a different type of the same size and stride. U and our type T must be of the same size
Definition at line 203 of file Tensor-inl.cuh.
__host__ Tensor< T, Dim, Contig, NewIndexT, PtrTraits > faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::castIndexType | ( | ) | const |
Attempts to cast this tensor to a tensor of a different IndexT. Fails if size or stride entries are not representable in the new IndexT.
Definition at line 286 of file Tensor-inl.cuh.
__host__ __device__ Tensor< U, Dim, Contig, IndexT, PtrTraits > faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::castResize | ( | ) |
Cast to a tensor of a different type which is potentially a different size than our type T. Tensor must be aligned and the innermost dimension must be a size that is a multiple of sizeof(U) / sizeof(T), and the stride of the innermost dimension must be contiguous. The stride of all outer dimensions must be a multiple of sizeof(U) / sizeof(T) as well.
Definition at line 225 of file Tensor-inl.cuh.
__host__ __device__ Tensor< T, NewDim, Contig, IndexT, PtrTraits > faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::downcastInner | ( | ) |
Downcast a tensor of dimension D
to some tensor of dimension D' < D by collapsing the leading dimensions. asserts if there is padding on the leading dimensions.
Definition at line 535 of file Tensor-inl.cuh.
__host__ __device__ Tensor< T, NewDim, Contig, IndexT, PtrTraits > faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::downcastOuter | ( | ) |
Downcast a tensor of dimension D
to some tensor of dimension D' < D by collapsing the leading dimensions. asserts if there is padding on the leading dimensions.
Definition at line 490 of file Tensor-inl.cuh.
|
inline |
Returns a raw pointer to the end of our data, assuming continuity
Definition at line 179 of file Tensor.cuh.
|
inline |
Returns a raw pointer to the end of our data, assuming continuity (const)
Definition at line 191 of file Tensor.cuh.
|
inline |
Returns the size of a given dimension, [0, Dim - 1]
. No bounds checking.
Definition at line 221 of file Tensor.cuh.
|
inline |
If we are contiguous, returns the total size in bytes of our data
Definition at line 237 of file Tensor.cuh.
|
inline |
Returns the stride of a given dimension, [0, Dim - 1]
. No bounds checking.
Definition at line 227 of file Tensor.cuh.
__host__ __device__ bool faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::isConsistentlySized | ( | int | i | ) | const |
Returns whether a given dimension has only increasing stride from the previous dimension. A tensor that was permuted by exchanging size and stride only will fail this check. If i == 0
just check size > 0
. Returns false
if stride
is <= 0
.
Definition at line 369 of file Tensor-inl.cuh.
__host__ __device__ bool faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::isContiguous | ( | ) | const |
Returns true if there is no padding within the tensor and no re-ordering of the dimensions.
Definition at line 350 of file Tensor-inl.cuh.
__host__ __device__ bool faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::isSame | ( | const Tensor< T, OtherDim, Contig, IndexT, PtrTraits > & | rhs | ) | const |
Returns true if the two tensors are of the same dimensionality, size and stride.
Definition at line 178 of file Tensor-inl.cuh.
__host__ __device__ Tensor< T, Dim, false, IndexT, PtrTraits > faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::narrow | ( | int | dim, |
IndexT | start, | ||
IndexT | size | ||
) |
Returns a tensor of the same dimension that is a view of the original tensor with the specified dimension restricted to the elements in the range [start, start + size). Can occur in an arbitrary dimension, and is possibly non-contiguous
Definition at line 629 of file Tensor-inl.cuh.
__host__ __device__ Tensor< T, Dim, Contig, IndexT, PtrTraits > faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::narrowOutermost | ( | IndexT | start, |
IndexT | size | ||
) |
Returns a tensor of the same dimension that is a view of the original tensor with the specified dimension restricted to the elements in the range [start, start + size)
Definition at line 605 of file Tensor-inl.cuh.
__host__ __device__ IndexT faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::numElements | ( | ) | const |
Returns the total number of elements contained within our data (product of getSize(i)
)
Definition at line 337 of file Tensor-inl.cuh.
__host__ __device__ Tensor< T, Dim, Contig, IndexT, PtrTraits > faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::transpose | ( | int | dim1, |
int | dim2 | ||
) | const |
Returns a tensor of the same dimension after transposing the two dimensions given. Does not actually move elements; transposition is made by permuting the size/stride arrays. If the dimensions are not valid, asserts.
Definition at line 405 of file Tensor-inl.cuh.
__host__ __device__ Tensor< T, NewDim, Contig, IndexT, PtrTraits > faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::upcastInner | ( | ) |
Upcast a tensor of dimension D
to some tensor of dimension D' > D by padding the lowest/most varying dimensions by 1 e.g., upcasting a 2-d tensor [2][3]
to a 4-d tensor [2][3][1][1]
Definition at line 463 of file Tensor-inl.cuh.
__host__ __device__ Tensor< T, NewDim, Contig, IndexT, PtrTraits > faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::upcastOuter | ( | ) |
Upcast a tensor of dimension D
to some tensor of dimension D' > D by padding the leading dimensions by 1 e.g., upcasting a 2-d tensor [2][3]
to a 4-d tensor [1][1][2][3]
Definition at line 434 of file Tensor-inl.cuh.
__host__ __device__ Tensor< T, SubDim, Contig, IndexT, PtrTraits > faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::view | ( | DataPtrType | at | ) |
Returns a tensor that is a view of the SubDim
-dimensional slice of this tensor, starting at at
.
Definition at line 578 of file Tensor-inl.cuh.
__host__ __device__ Tensor< T, SubDim, Contig, IndexT, PtrTraits > faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::view | ( | ) |
Returns a tensor that is a view of the SubDim
-dimensional slice of this tensor, starting where our data begins
Definition at line 598 of file Tensor-inl.cuh.
__host__ __device__ Tensor< T, NewDim, Contig, IndexT, PtrTraits > faiss::gpu::Tensor< T, Dim, Contig, IndexT, PtrTraits >::view | ( | std::initializer_list< IndexT > | sizes | ) |
Returns a view of the given tensor expressed as a tensor of a different number of dimensions. Only works if we are contiguous.
Definition at line 656 of file Tensor-inl.cuh.