11 namespace faiss {
namespace gpu {
13 template <
typename T,
int Dim,
bool InnerContig,
14 typename IndexT,
template <
typename U>
class PtrTraits>
17 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(),
18 state_(AllocState::NotOwner),
19 space_(MemorySpace::Device) {
22 template <
typename T,
int Dim,
bool InnerContig,
23 typename IndexT,
template <
typename U>
class PtrTraits>
27 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(),
28 state_(AllocState::NotOwner),
29 space_(MemorySpace::Device) {
33 template <
typename T,
int Dim,
bool InnerContig,
34 typename IndexT,
template <
typename U>
class PtrTraits>
39 if (this->state_ == AllocState::Owner) {
40 CUDA_VERIFY(cudaFree(this->data_));
46 this->state_ = t.state_; t.state_ = AllocState::NotOwner;
47 this->space_ = t.space_;
48 this->reservation_ = std::move(t.reservation_);
53 template <
typename T,
int Dim,
bool InnerContig,
54 typename IndexT,
template <
typename U>
class PtrTraits>
57 if (state_ == AllocState::Owner) {
58 FAISS_ASSERT(this->data_ || (this->getSizeInBytes() == 0));
59 CUDA_VERIFY(cudaFree(this->data_));
60 this->data_ =
nullptr;
67 template <
typename T,
int Dim,
bool InnerContig,
68 typename IndexT,
template <
typename U>
class PtrTraits>
71 const IndexT sizes[Dim],
73 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(nullptr, sizes),
74 state_(AllocState::Owner),
81 template <
typename T,
int Dim,
bool InnerContig,
82 typename IndexT,
template <
typename U>
class PtrTraits>
85 std::initializer_list<IndexT> sizes,
87 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(nullptr, sizes),
88 state_(AllocState::Owner),
96 template <
typename T,
int Dim,
bool InnerContig,
97 typename IndexT,
template <
typename U>
class PtrTraits>
101 const IndexT sizes[Dim],
104 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(nullptr, sizes),
105 state_(AllocState::Reservation),
111 this->
data_ = (T*) memory.get();
113 reservation_ = std::move(memory);
117 template <
typename T,
int Dim,
bool InnerContig,
118 typename IndexT,
template <
typename U>
class PtrTraits>
122 std::initializer_list<IndexT> sizes,
125 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(nullptr, sizes),
126 state_(AllocState::Reservation),
132 this->
data_ = (T*) memory.get();
134 reservation_ = std::move(memory);
137 template <
typename T,
int Dim,
bool InnerContig,
138 typename IndexT,
template <
typename U>
class PtrTraits>
142 const IndexT sizes[Dim],
144 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(data, sizes),
145 state_(AllocState::NotOwner),
149 template <
typename T,
int Dim,
bool InnerContig,
150 typename IndexT,
template <
typename U>
class PtrTraits>
154 std::initializer_list<IndexT> sizes,
156 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(data, sizes),
157 state_(AllocState::NotOwner),
161 template <
typename T,
int Dim,
bool InnerContig,
162 typename IndexT,
template <
typename U>
class PtrTraits>
166 const IndexT sizes[Dim],
167 const IndexT strides[Dim],
169 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(data, sizes, strides),
170 state_(AllocState::NotOwner),
174 template <
typename T,
int Dim,
bool InnerContig,
175 typename IndexT,
template <
typename U>
class PtrTraits>
181 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(nullptr, t.sizes(), t.strides()),
182 state_(AllocState::Owner),
190 template <
typename T,
int Dim,
bool InnerContig,
191 typename IndexT,
template <
typename U>
class PtrTraits>
198 Tensor<T, Dim, InnerContig, IndexT, PtrTraits>(nullptr, t.sizes(), t.strides()),
199 state_(AllocState::Reservation),
205 this->
data_ = (T*) memory.get();
207 reservation_ = std::move(memory);
212 template <
typename T,
int Dim,
bool InnerContig,
213 typename IndexT,
template <
typename U>
class PtrTraits>
216 cudaStream_t stream) {
219 FAISS_ASSERT(this->isContiguous());
221 CUDA_VERIFY(cudaMemsetAsync(
222 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