QTrk
Public Member Functions | Protected Attributes | List of all members
pinned_array< T, flags > Class Template Reference

#include <gpu_utils.h>

Public Member Functions

 pinned_array ()
 
 ~pinned_array ()
 
 pinned_array (size_t n)
 
template<typename TOther , int f>
 pinned_array (const pinned_array< TOther, f > &src)
 
template<typename TOther , int F>
pinned_arrayoperator= (const pinned_array< TOther, F > &src)
 
template<typename Iterator >
 pinned_array (Iterator first, Iterator end)
 
template<typename T >
 pinned_array (const device_vec< T > &src)
 
int size () const
 
T * begin ()
 
T * end ()
 
const T * begin () const
 
const T * end () const
 
T * data ()
 
void free ()
 
void init (int n)
 
T & operator[] (int i)
 
const T & operator[] (int i) const
 
size_t memsize ()
 

Protected Attributes

T * d
 
size_t n
 

Detailed Description

template<typename T, int flags = 0>
class pinned_array< T, flags >

Definition at line 185 of file gpu_utils.h.

Constructor & Destructor Documentation

§ pinned_array() [1/5]

template<typename T, int flags = 0>
pinned_array< T, flags >::pinned_array ( )
inline

Definition at line 188 of file gpu_utils.h.

188  {
189  d=0; n=0;
190  }
size_t n
Definition: gpu_utils.h:245

§ ~pinned_array()

template<typename T, int flags = 0>
pinned_array< T, flags >::~pinned_array ( )
inline

Definition at line 191 of file gpu_utils.h.

191  {
192  free();
193  }
void free()
Definition: gpu_utils.h:228

§ pinned_array() [2/5]

template<typename T, int flags = 0>
pinned_array< T, flags >::pinned_array ( size_t  n)
inline

Definition at line 194 of file gpu_utils.h.

194  {
195  d=0; init(n);
196  }
void init(int n)
Definition: gpu_utils.h:232
size_t n
Definition: gpu_utils.h:245

§ pinned_array() [3/5]

template<typename T, int flags = 0>
template<typename TOther , int f>
pinned_array< T, flags >::pinned_array ( const pinned_array< TOther, f > &  src)
inline

Definition at line 198 of file gpu_utils.h.

198  {
199  d=0;init(src.n);
200  for(int k=0;k<src.n;k++)
201  d[k]=src[k];
202  }
void init(int n)
Definition: gpu_utils.h:232
size_t n
Definition: gpu_utils.h:245

§ pinned_array() [4/5]

template<typename T, int flags = 0>
template<typename Iterator >
pinned_array< T, flags >::pinned_array ( Iterator  first,
Iterator  end 
)
inline

Definition at line 211 of file gpu_utils.h.

211  {
212  d=0; init(end-first);
213  for (int k = 0; first != end; ++first) {
214  d[k++] = *first;
215  }
216  }
void init(int n)
Definition: gpu_utils.h:232

§ pinned_array() [5/5]

template<typename T, int flags = 0>
template<typename T >
pinned_array< T, flags >::pinned_array ( const device_vec< T > &  src)
inline

Definition at line 218 of file gpu_utils.h.

218  {
219  d=0; init(src.size()); src.copyToHost(d,false);
220  }
void copyToHost(T *dst, bool async, cudaStream_t s=0)
Definition: gpu_utils.h:126
size_t size
Definition: gpu_utils.h:155
void init(int n)
Definition: gpu_utils.h:232

Member Function Documentation

§ begin() [1/2]

template<typename T, int flags = 0>
T* pinned_array< T, flags >::begin ( )
inline

Definition at line 223 of file gpu_utils.h.

223 { return d; }

§ begin() [2/2]

template<typename T, int flags = 0>
const T* pinned_array< T, flags >::begin ( ) const
inline

Definition at line 225 of file gpu_utils.h.

225 { return d; }

§ data()

template<typename T, int flags = 0>
T* pinned_array< T, flags >::data ( )
inline

Definition at line 227 of file gpu_utils.h.

227 { return d; }

§ end() [1/2]

template<typename T, int flags = 0>
T* pinned_array< T, flags >::end ( )
inline

Definition at line 224 of file gpu_utils.h.

224 { return d+n; }
size_t n
Definition: gpu_utils.h:245

§ end() [2/2]

template<typename T, int flags = 0>
const T* pinned_array< T, flags >::end ( ) const
inline

Definition at line 226 of file gpu_utils.h.

226 { return d+n; }
size_t n
Definition: gpu_utils.h:245

§ free()

template<typename T, int flags = 0>
void pinned_array< T, flags >::free ( )
inline

Definition at line 228 of file gpu_utils.h.

228  {
229  cudaFreeHost(d);
230  d=0;n=0;
231  }
size_t n
Definition: gpu_utils.h:245

§ init()

template<typename T, int flags = 0>
void pinned_array< T, flags >::init ( int  n)
inline

Definition at line 232 of file gpu_utils.h.

232  {
233  if (d) free();
234  this->n = n;
235  if (cudaMallocHost(&d, sizeof(T)*n, flags) != cudaSuccess) {
236  throw std::bad_alloc(SPrintf("%s init %d elements failed", typeid(*this).name(), n).c_str());
237  }
238  }
void free()
Definition: gpu_utils.h:228
size_t n
Definition: gpu_utils.h:245
std::string SPrintf(const char *fmt,...)
Definition: utils.cpp:132

§ memsize()

template<typename T, int flags = 0>
size_t pinned_array< T, flags >::memsize ( )
inline

Definition at line 241 of file gpu_utils.h.

241 { return n*sizeof(T); }
size_t n
Definition: gpu_utils.h:245

§ operator=()

template<typename T, int flags = 0>
template<typename TOther , int F>
pinned_array& pinned_array< T, flags >::operator= ( const pinned_array< TOther, F > &  src)
inline

Definition at line 204 of file gpu_utils.h.

204  {
205  if (src.n != n) init(src.n);
206  for(int k=0;k<src.n;k++)
207  d[k]=src[k];
208  return *this;
209  }
void init(int n)
Definition: gpu_utils.h:232
size_t n
Definition: gpu_utils.h:245

§ operator[]() [1/2]

template<typename T, int flags = 0>
T& pinned_array< T, flags >::operator[] ( int  i)
inline

Definition at line 239 of file gpu_utils.h.

239 { return d[i]; }

§ operator[]() [2/2]

template<typename T, int flags = 0>
const T& pinned_array< T, flags >::operator[] ( int  i) const
inline

Definition at line 240 of file gpu_utils.h.

240 { return d[i];}

§ size()

template<typename T, int flags = 0>
int pinned_array< T, flags >::size ( ) const
inline

Definition at line 222 of file gpu_utils.h.

222 { return n; }
size_t n
Definition: gpu_utils.h:245

Member Data Documentation

§ d

template<typename T, int flags = 0>
T* pinned_array< T, flags >::d
protected

Definition at line 244 of file gpu_utils.h.

§ n

template<typename T, int flags = 0>
size_t pinned_array< T, flags >::n
protected

Definition at line 245 of file gpu_utils.h.


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