12 namespace faiss {
namespace gpu {
14 template <
typename T,
int Dim,
bool InnerContig,
15 typename IndexT,
template <
typename U>
class PtrTraits>
18 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(),
19 state_(AllocState::NotOwner),
20 space_(MemorySpace::Device) {
23 template <
typename T,
int Dim,
bool InnerContig,
24 typename IndexT,
template <
typename U>
class PtrTraits>
28 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(),
29 state_(AllocState::NotOwner),
30 space_(MemorySpace::Device) {
34 template <
typename T,
int Dim,
bool InnerContig,
35 typename IndexT,
template <
typename U>
class PtrTraits>
40 if (this->state_ == AllocState::Owner) {
41 CUDA_VERIFY(cudaFree(this->data_));
47 this->state_ = t.state_; t.state_ = AllocState::NotOwner;
48 this->space_ = t.space_;
49 this->reservation_ = std::move(t.reservation_);
54 template <
typename T,
int Dim,
bool InnerContig,
55 typename IndexT,
template <
typename U>
class PtrTraits>
58 if (state_ == AllocState::Owner) {
59 FAISS_ASSERT(this->data_ || (this->getSizeInBytes() == 0));
60 CUDA_VERIFY(cudaFree(this->data_));
61 this->data_ =
nullptr;
68 template <
typename T,
int Dim,
bool InnerContig,
69 typename IndexT,
template <
typename U>
class PtrTraits>
72 const IndexT sizes[Dim],
74 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(nullptr, sizes),
75 state_(AllocState::Owner),
82 template <
typename T,
int Dim,
bool InnerContig,
83 typename IndexT,
template <
typename U>
class PtrTraits>
86 std::initializer_list<IndexT> sizes,
88 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(nullptr, sizes),
89 state_(AllocState::Owner),
97 template <
typename T,
int Dim,
bool InnerContig,
98 typename IndexT,
template <
typename U>
class PtrTraits>
102 const IndexT sizes[Dim],
105 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(nullptr, sizes),
106 state_(AllocState::Reservation),
112 this->
data_ = (T*) memory.get();
114 reservation_ = std::move(memory);
118 template <
typename T,
int Dim,
bool InnerContig,
119 typename IndexT,
template <
typename U>
class PtrTraits>
123 std::initializer_list<IndexT> sizes,
126 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(nullptr, sizes),
127 state_(AllocState::Reservation),
133 this->
data_ = (T*) memory.get();
135 reservation_ = std::move(memory);
138 template <
typename T,
int Dim,
bool InnerContig,
139 typename IndexT,
template <
typename U>
class PtrTraits>
143 const IndexT sizes[Dim],
145 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(data, sizes),
146 state_(AllocState::NotOwner),
150 template <
typename T,
int Dim,
bool InnerContig,
151 typename IndexT,
template <
typename U>
class PtrTraits>
155 std::initializer_list<IndexT> sizes,
157 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(data, sizes),
158 state_(AllocState::NotOwner),
162 template <
typename T,
int Dim,
bool InnerContig,
163 typename IndexT,
template <
typename U>
class PtrTraits>
167 const IndexT sizes[Dim],
168 const IndexT strides[Dim],
170 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(data, sizes, strides),
171 state_(AllocState::NotOwner),
175 template <
typename T,
int Dim,
bool InnerContig,
176 typename IndexT,
template <
typename U>
class PtrTraits>
182 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(nullptr, t.sizes(), t.strides()),
183 state_(AllocState::Owner),
191 template <
typename T,
int Dim,
bool InnerContig,
192 typename IndexT,
template <
typename U>
class PtrTraits>
199 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(nullptr, t.sizes(), t.strides()),
200 state_(AllocState::Reservation),
206 this->
data_ = (T*) memory.get();
208 reservation_ = std::move(memory);
213 template <
typename T,
int Dim,
bool InnerContig,
214 typename IndexT,
template <
typename U>
class PtrTraits>
217 cudaStream_t stream) {
220 FAISS_ASSERT(this->isContiguous());
222 CUDA_VERIFY(cudaMemsetAsync(
223 this->data_, 0, this->getSizeInBytes(), stream));
__host__ ~DeviceTensor()
Destructor.
__host__ DeviceTensor< T, Dim, InnerContig, IndexT, PtrTraits > & zero(cudaStream_t stream)
Call to zero out memory.
DataPtrType data_
Raw pointer to where the tensor data begins.
virtual DeviceMemoryReservation getMemory(cudaStream_t stream, size_t size)=0
__host__ void copyFrom(Tensor< T, Dim, InnerContig, IndexT, PtrTraits > &t, cudaStream_t stream)
Copies a tensor into ourselves; sizes must match.
__host__ __device__ Tensor< T, Dim, InnerContig, IndexT, PtrTraits > & operator=(Tensor< T, Dim, InnerContig, IndexT, PtrTraits > &t)
Assignment.
__host__ DeviceTensor()
Default constructor.
__host__ DeviceTensor< T, Dim, InnerContig, IndexT, PtrTraits > & operator=(DeviceTensor< T, Dim, InnerContig, IndexT, PtrTraits > &&t)
Move assignment.
Manages temporary memory allocations on a GPU device.
__host__ __device__ size_t getSizeInBytes() const