Xmipp  v3.23.11-Nereus
Public Member Functions | Public Attributes | List of all members
GpuMultidimArrayAtGpu< T > Class Template Reference

#include <cuda_xmipp_utils.h>

Collaboration diagram for GpuMultidimArrayAtGpu< T >:
Collaboration graph
[legend]

Public Member Functions

 GpuMultidimArrayAtGpu ()
 
 GpuMultidimArrayAtGpu (size_t _Xdim, size_t _Ydim=1, size_t _Zdim=1, size_t _Ndim=1)
 
 GpuMultidimArrayAtGpu (size_t _Xdim, size_t _Ydim, size_t _Zdim, size_t _Ndim, T *deviceData)
 
template<typename T1 >
void resize (const GpuMultidimArrayAtGpu< T1 > &array)
 
void resize (size_t _Xdim, size_t _Ydim=1, size_t _Zdim=1, size_t _Ndim=1)
 
bool isEmpty ()
 
void clear ()
 
 ~GpuMultidimArrayAtGpu ()
 
void copyToGpu (T *data)
 
void copyToCpu (T *data)
 
void copyToGpuStream (T *data, myStreamHandle &myStream)
 
void fillImageToGpu (T *data, size_t n=0)
 
void fillImageToGpuStream (T *data, myStreamHandle &myStream, int n=0)
 
void copyGpuToGpu (GpuMultidimArrayAtGpu< T > &gpuArray)
 
void copyGpuToGpuStream (GpuMultidimArrayAtGpu< T > &gpuArray, myStreamHandle &myStream)
 
void calculateGridSize (const XmippDim3 &blockSize, XmippDim3 &gridSize) const
 
void calculateGridSizeVectorized (const XmippDim3 &blockSize, XmippDim3 &gridSize) const
 
template<typename T1 >
void fft (GpuMultidimArrayAtGpu< T1 > &fourierTransform, mycufftHandle &myhandle)
 
template<typename T1 >
void ifft (GpuMultidimArrayAtGpu< T1 > &realSpace, mycufftHandle &myhandle)
 
void fftStream (GpuMultidimArrayAtGpu< std::complex< float >> &fourierTransform, mycufftHandle &myhandle, myStreamHandle &myStream, bool useCallback, GpuMultidimArrayAtGpu< std::complex< float >> &dataRef)
 
template<typename T1 >
void ifftStream (GpuMultidimArrayAtGpu< T1 > &realSpace, mycufftHandle &myhandle, myStreamHandle &myStream, bool useCallback, GpuMultidimArrayAtGpu< std::complex< float > > &dataExp)
 
void calculateMax (float *max_values, float *posX, float *posY, int fixPadding)
 

Public Attributes

size_t Xdim
 
size_t Ydim
 
size_t Zdim
 
size_t Ndim
 
size_t yxdim
 
size_t zyxdim
 
size_t nzyxdim
 
T * d_data
 

Detailed Description

template<typename T>
class GpuMultidimArrayAtGpu< T >

Definition at line 181 of file cuda_xmipp_utils.h.

Constructor & Destructor Documentation

◆ GpuMultidimArrayAtGpu() [1/3]

template<typename T>
GpuMultidimArrayAtGpu< T >::GpuMultidimArrayAtGpu ( )
inline

◆ GpuMultidimArrayAtGpu() [2/3]

template<typename T>
GpuMultidimArrayAtGpu< T >::GpuMultidimArrayAtGpu ( size_t  _Xdim,
size_t  _Ydim = 1,
size_t  _Zdim = 1,
size_t  _Ndim = 1 
)
inline

Definition at line 193 of file cuda_xmipp_utils.h.

194  {
196  d_data=nullptr;
197  resize(_Xdim, _Ydim, _Zdim, _Ndim);
198  }
void resize(const GpuMultidimArrayAtGpu< T1 > &array)

◆ GpuMultidimArrayAtGpu() [3/3]

template<typename T>
GpuMultidimArrayAtGpu< T >::GpuMultidimArrayAtGpu ( size_t  _Xdim,
size_t  _Ydim,
size_t  _Zdim,
size_t  _Ndim,
T *  deviceData 
)
inline

Definition at line 200 of file cuda_xmipp_utils.h.

201  {
202  setDims(_Xdim, _Ydim, _Zdim, _Ndim);
203  d_data = deviceData;
204  }

◆ ~GpuMultidimArrayAtGpu()

template<typename T>
GpuMultidimArrayAtGpu< T >::~GpuMultidimArrayAtGpu ( )
inline

Definition at line 230 of file cuda_xmipp_utils.h.

231  {
232  clear();
233  }

Member Function Documentation

◆ calculateGridSize()

template<typename T>
void GpuMultidimArrayAtGpu< T >::calculateGridSize ( const XmippDim3 blockSize,
XmippDim3 gridSize 
) const
inline

Definition at line 276 of file cuda_xmipp_utils.h.

277  {
278  gridSize.x=gridFromBlock(Xdim,blockSize.x);
279  gridSize.y=gridFromBlock(Ydim,blockSize.y);
280  gridSize.z=gridFromBlock(Zdim,blockSize.z);
281  }
int gridFromBlock(int tasks, int Nthreads)

◆ calculateGridSizeVectorized()

template<typename T>
void GpuMultidimArrayAtGpu< T >::calculateGridSizeVectorized ( const XmippDim3 blockSize,
XmippDim3 gridSize 
) const
inline

Definition at line 283 of file cuda_xmipp_utils.h.

284  {
285  gridSize.x=gridFromBlock(nzyxdim,blockSize.x);
286  gridSize.y=1;
287  gridSize.z=1;
288  }
int gridFromBlock(int tasks, int Nthreads)

◆ calculateMax()

template<typename T>
void GpuMultidimArrayAtGpu< T >::calculateMax ( float *  max_values,
float *  posX,
float *  posY,
int  fixPadding 
)

◆ clear()

template<typename T>
void GpuMultidimArrayAtGpu< T >::clear ( )
inline

Definition at line 220 of file cuda_xmipp_utils.h.

221  {
222  if (d_data!=nullptr){
223  gpuFree((void*) d_data);
224 
225  }
227  d_data=nullptr;
228  }
void gpuFree(void *d_data)

◆ copyGpuToGpu()

template<typename T>
void GpuMultidimArrayAtGpu< T >::copyGpuToGpu ( GpuMultidimArrayAtGpu< T > &  gpuArray)
inline

Definition at line 260 of file cuda_xmipp_utils.h.

261  {
262  if (gpuArray.isEmpty())
263  gpuArray.resize(Xdim,Ydim,Zdim,Ndim);
264 
265  gpuCopyFromGPUToGPU(d_data, gpuArray.d_data, nzyxdim*sizeof(T));
266  }
void resize(const GpuMultidimArrayAtGpu< T1 > &array)
void gpuCopyFromGPUToGPU(void *d_dataFrom, void *d_dataTo, size_t Nbytes)

◆ copyGpuToGpuStream()

template<typename T>
void GpuMultidimArrayAtGpu< T >::copyGpuToGpuStream ( GpuMultidimArrayAtGpu< T > &  gpuArray,
myStreamHandle myStream 
)
inline

Definition at line 268 of file cuda_xmipp_utils.h.

269  {
270  if (gpuArray.isEmpty())
271  gpuArray.resize(Xdim,Ydim,Zdim,Ndim);
272 
273  gpuCopyFromGPUToGPUStream(d_data, gpuArray.d_data, nzyxdim*sizeof(T), myStream);
274  }
void resize(const GpuMultidimArrayAtGpu< T1 > &array)
void gpuCopyFromGPUToGPUStream(void *d_dataFrom, void *d_dataTo, size_t Nbytes, myStreamHandle &myStream)

◆ copyToCpu()

template<typename T>
void GpuMultidimArrayAtGpu< T >::copyToCpu ( T *  data)
inline

Definition at line 240 of file cuda_xmipp_utils.h.

241  {
242  gpuCopyFromGPUToCPU((void *)d_data, (void *)data, nzyxdim*sizeof(T));
243  }
void gpuCopyFromGPUToCPU(void *d_data, void *data, size_t Nbytes)

◆ copyToGpu()

template<typename T>
void GpuMultidimArrayAtGpu< T >::copyToGpu ( T *  data)
inline

Definition at line 235 of file cuda_xmipp_utils.h.

236  {
237  gpuCopyFromCPUToGPU((void *)data, (void *)d_data, nzyxdim*sizeof(T));
238  }
void gpuCopyFromCPUToGPU(void *data, void *d_data, size_t Nbytes)

◆ copyToGpuStream()

template<typename T>
void GpuMultidimArrayAtGpu< T >::copyToGpuStream ( T *  data,
myStreamHandle myStream 
)
inline

Definition at line 245 of file cuda_xmipp_utils.h.

246  {
247  gpuCopyFromCPUToGPUStream((void *)data, (void *)d_data, nzyxdim*sizeof(T), myStream);
248  }
void gpuCopyFromCPUToGPUStream(void *data, void *d_data, size_t Nbytes, myStreamHandle &myStream)

◆ fft()

template<typename T>
template<typename T1 >
void GpuMultidimArrayAtGpu< T >::fft ( GpuMultidimArrayAtGpu< T1 > &  fourierTransform,
mycufftHandle myhandle 
)

◆ fftStream()

template<typename T>
void GpuMultidimArrayAtGpu< T >::fftStream ( GpuMultidimArrayAtGpu< std::complex< float >> &  fourierTransform,
mycufftHandle myhandle,
myStreamHandle myStream,
bool  useCallback,
GpuMultidimArrayAtGpu< std::complex< float >> &  dataRef 
)

◆ fillImageToGpu()

template<typename T>
void GpuMultidimArrayAtGpu< T >::fillImageToGpu ( T *  data,
size_t  n = 0 
)
inline

Definition at line 250 of file cuda_xmipp_utils.h.

251  {
252  gpuCopyFromCPUToGPU((void *)data, (void *)&d_data[n*zyxdim], zyxdim*sizeof(T));
253  }
void gpuCopyFromCPUToGPU(void *data, void *d_data, size_t Nbytes)
int * n

◆ fillImageToGpuStream()

template<typename T>
void GpuMultidimArrayAtGpu< T >::fillImageToGpuStream ( T *  data,
myStreamHandle myStream,
int  n = 0 
)
inline

Definition at line 255 of file cuda_xmipp_utils.h.

256  {
257  gpuCopyFromCPUToGPUStream((void *)data, (void *)&d_data[n*zyxdim], zyxdim*sizeof(T), myStream);
258  }
void gpuCopyFromCPUToGPUStream(void *data, void *d_data, size_t Nbytes, myStreamHandle &myStream)
int * n

◆ ifft()

template<typename T>
template<typename T1 >
void GpuMultidimArrayAtGpu< T >::ifft ( GpuMultidimArrayAtGpu< T1 > &  realSpace,
mycufftHandle myhandle 
)

◆ ifftStream()

template<typename T>
template<typename T1 >
void GpuMultidimArrayAtGpu< T >::ifftStream ( GpuMultidimArrayAtGpu< T1 > &  realSpace,
mycufftHandle myhandle,
myStreamHandle myStream,
bool  useCallback,
GpuMultidimArrayAtGpu< std::complex< float > > &  dataExp 
)

◆ isEmpty()

template<typename T>
bool GpuMultidimArrayAtGpu< T >::isEmpty ( )
inline

Definition at line 215 of file cuda_xmipp_utils.h.

216  {
217  return d_data==nullptr;
218  }

◆ resize() [1/2]

template<typename T>
template<typename T1 >
void GpuMultidimArrayAtGpu< T >::resize ( const GpuMultidimArrayAtGpu< T1 > &  array)
inline

Definition at line 207 of file cuda_xmipp_utils.h.

208  {
209 
210  resize(array.Xdim, array.Ydim, array.Zdim, array.Ndim);
211  }
void resize(const GpuMultidimArrayAtGpu< T1 > &array)

◆ resize() [2/2]

template<typename T >
void GpuMultidimArrayAtGpu< T >::resize ( size_t  _Xdim,
size_t  _Ydim = 1,
size_t  _Zdim = 1,
size_t  _Ndim = 1 
)

Definition at line 44 of file cuda_xmipp_utils.cpp.

45 {
46  if (_Xdim*_Ydim*_Zdim*_Ndim==nzyxdim){
47 
48  return;
49  }
50 
51  clear();
52 
53  setDims(_Xdim, _Ydim, _Zdim, _Ndim);
54  gpuErrchk(cudaMalloc(&d_data,nzyxdim*sizeof(T)));
55 }
#define gpuErrchk(code)
Definition: cuda_asserts.h:31

Member Data Documentation

◆ d_data

template<typename T>
T* GpuMultidimArrayAtGpu< T >::d_data

Definition at line 185 of file cuda_xmipp_utils.h.

◆ Ndim

template<typename T>
size_t GpuMultidimArrayAtGpu< T >::Ndim

Definition at line 184 of file cuda_xmipp_utils.h.

◆ nzyxdim

template<typename T>
size_t GpuMultidimArrayAtGpu< T >::nzyxdim

Definition at line 184 of file cuda_xmipp_utils.h.

◆ Xdim

template<typename T>
size_t GpuMultidimArrayAtGpu< T >::Xdim

Definition at line 184 of file cuda_xmipp_utils.h.

◆ Ydim

template<typename T>
size_t GpuMultidimArrayAtGpu< T >::Ydim

Definition at line 184 of file cuda_xmipp_utils.h.

◆ yxdim

template<typename T>
size_t GpuMultidimArrayAtGpu< T >::yxdim

Definition at line 184 of file cuda_xmipp_utils.h.

◆ Zdim

template<typename T>
size_t GpuMultidimArrayAtGpu< T >::Zdim

Definition at line 184 of file cuda_xmipp_utils.h.

◆ zyxdim

template<typename T>
size_t GpuMultidimArrayAtGpu< T >::zyxdim

Definition at line 184 of file cuda_xmipp_utils.h.


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