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

#include <xmipp_gpu_utils.h>

Public Member Functions

 GpuMultidimArrayAtCpu ()
 
 GpuMultidimArrayAtCpu (int _Xdim, int _Ydim=1, int _Zdim=1, int _Ndim=1)
 
void resize (int _Xdim, int _Ydim=1, int _Zdim=1, int _Ndim=1)
 
void fillImage (int n, const MultidimArray< T > &from)
 
bool isEmpty ()
 
void copyToGpu (GpuMultidimArrayAtGpu< T > &gpuArray, myStreamHandle &myStream)
 
void copyFromGpu (GpuMultidimArrayAtGpu< T > &gpuArray, myStreamHandle myStream)
 
void copyToGpuMultiple (GpuMultidimArrayAtGpu< T > &gpuArray, int numCopy, myStreamHandle myStream)
 
void giveOneImage (GpuMultidimArrayAtCpu< T > out, int idx)
 
void setOneImage (GpuMultidimArrayAtCpu< T > in, int idx)
 
void clear ()
 
 ~GpuMultidimArrayAtCpu ()
 

Public Attributes

int Xdim
 
int Ydim
 
int Zdim
 
int Ndim
 
int yxdim
 
int zyxdim
 
int nzyxdim
 
T * data
 

Detailed Description

template<typename T>
class GpuMultidimArrayAtCpu< T >

Definition at line 36 of file xmipp_gpu_utils.h.

Constructor & Destructor Documentation

◆ GpuMultidimArrayAtCpu() [1/2]

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

◆ GpuMultidimArrayAtCpu() [2/2]

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

Definition at line 48 of file xmipp_gpu_utils.h.

49  {
51  data=NULL;
52  resize(_Xdim, _Ydim, _Zdim, _Ndim);
53  }
void resize(int _Xdim, int _Ydim=1, int _Zdim=1, int _Ndim=1)

◆ ~GpuMultidimArrayAtCpu()

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

Definition at line 129 of file xmipp_gpu_utils.h.

130  {
131  clear();
132  }

Member Function Documentation

◆ clear()

template<typename T >
template void GpuMultidimArrayAtCpu< T >::clear ( )

Definition at line 30 of file xmipp_gpu_utils.cpp.

31 {
32  if (data!=nullptr){;
33  cpuFree(data);
34  }
35  data=nullptr;
36 
37 }
void cpuFree(void *h_data)

◆ copyFromGpu()

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

Definition at line 99 of file xmipp_gpu_utils.h.

100  {
101  gpuCopyFromGPUToCPUStream(gpuArray.d_data, data, nzyxdim*sizeof(T), myStream);
102 
103  }
void gpuCopyFromGPUToCPUStream(void *d_data, void *data, size_t Nbytes, myStreamHandle &myStream)

◆ copyToGpu()

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

Definition at line 90 of file xmipp_gpu_utils.h.

91  {
92  if (gpuArray.isEmpty()){
93  gpuArray.resize(Xdim,Ydim,Zdim,Ndim);
94  }
95 
96  gpuCopyFromCPUToGPUStream(data, gpuArray.d_data, nzyxdim*sizeof(T), myStream);
97  }
void resize(const GpuMultidimArrayAtGpu< T1 > &array)
void gpuCopyFromCPUToGPUStream(void *data, void *d_data, size_t Nbytes, myStreamHandle &myStream)

◆ copyToGpuMultiple()

template<typename T>
void GpuMultidimArrayAtCpu< T >::copyToGpuMultiple ( GpuMultidimArrayAtGpu< T > &  gpuArray,
int  numCopy,
myStreamHandle  myStream 
)
inline

Definition at line 105 of file xmipp_gpu_utils.h.

106  {
107  if (gpuArray.isEmpty())
108  gpuArray.resize(Xdim,Ydim,Zdim,numCopy);
109 
110  int index = 0;
111  for(int i=0; i<numCopy; i++){
112  gpuCopyFromCPUToGPUStream(data, &gpuArray.d_data[index], nzyxdim*sizeof(T), myStream);
113  index=index+nzyxdim;
114  }
115  }
void resize(const GpuMultidimArrayAtGpu< T1 > &array)
#define i
viol index
void gpuCopyFromCPUToGPUStream(void *data, void *d_data, size_t Nbytes, myStreamHandle &myStream)

◆ fillImage()

template<typename T>
void GpuMultidimArrayAtCpu< T >::fillImage ( int  n,
const MultidimArray< T > &  from 
)
inline

Definition at line 79 of file xmipp_gpu_utils.h.

80  {
81  //TODO: preguntar esto, en el host puedo usar un memcpy??
82  memcpy(data+n*zyxdim, MULTIDIM_ARRAY(from), MULTIDIM_SIZE(from)*sizeof(T));
83  }
#define MULTIDIM_SIZE(v)
#define MULTIDIM_ARRAY(v)
int * n

◆ giveOneImage()

template<typename T>
void GpuMultidimArrayAtCpu< T >::giveOneImage ( GpuMultidimArrayAtCpu< T >  out,
int  idx 
)
inline

Definition at line 117 of file xmipp_gpu_utils.h.

117  {
118  if (out.isEmpty())
119  out.resize(Xdim,Ydim,Zdim,1);
120  memcpy(out.data, data[idx*zyxdim], zyxdim*sizeof(T));
121  }
void resize(int _Xdim, int _Ydim=1, int _Zdim=1, int _Ndim=1)

◆ isEmpty()

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

Definition at line 85 of file xmipp_gpu_utils.h.

86  {
87  return data==NULL;
88  }

◆ resize()

template<typename T>
void GpuMultidimArrayAtCpu< T >::resize ( int  _Xdim,
int  _Ydim = 1,
int  _Zdim = 1,
int  _Ndim = 1 
)
inline

Definition at line 55 of file xmipp_gpu_utils.h.

56  {
57  //FIXME what happens if x and y swaps?
58  if (_Xdim*_Ydim*_Zdim*_Ndim==nzyxdim){
59 
60  return;
61  }
62 
63  clear();
64 
65  Xdim=_Xdim;
66  Ydim=_Ydim;
67  Zdim=_Zdim;
68  Ndim=_Ndim;
69  yxdim=(size_t)_Ydim*_Xdim;
70  zyxdim=yxdim*_Zdim;
71  nzyxdim=zyxdim*_Ndim;
72  if (nzyxdim>0){
73  //data=new T[nzyxdim];
74  cpuMalloc((void**)&data, nzyxdim*sizeof(T));
75  }else
76  data=NULL;
77  }
void cpuMalloc(void **h_data, size_t Nbytes)

◆ setOneImage()

template<typename T>
void GpuMultidimArrayAtCpu< T >::setOneImage ( GpuMultidimArrayAtCpu< T >  in,
int  idx 
)
inline

Definition at line 123 of file xmipp_gpu_utils.h.

123  {
124  memcpy(data[idx*zyxdim], in.data, zyxdim*sizeof(T));
125  }

Member Data Documentation

◆ data

template<typename T>
T* GpuMultidimArrayAtCpu< T >::data

Definition at line 40 of file xmipp_gpu_utils.h.

◆ Ndim

template<typename T>
int GpuMultidimArrayAtCpu< T >::Ndim

Definition at line 39 of file xmipp_gpu_utils.h.

◆ nzyxdim

template<typename T>
int GpuMultidimArrayAtCpu< T >::nzyxdim

Definition at line 39 of file xmipp_gpu_utils.h.

◆ Xdim

template<typename T>
int GpuMultidimArrayAtCpu< T >::Xdim

Definition at line 39 of file xmipp_gpu_utils.h.

◆ Ydim

template<typename T>
int GpuMultidimArrayAtCpu< T >::Ydim

Definition at line 39 of file xmipp_gpu_utils.h.

◆ yxdim

template<typename T>
int GpuMultidimArrayAtCpu< T >::yxdim

Definition at line 39 of file xmipp_gpu_utils.h.

◆ Zdim

template<typename T>
int GpuMultidimArrayAtCpu< T >::Zdim

Definition at line 39 of file xmipp_gpu_utils.h.

◆ zyxdim

template<typename T>
int GpuMultidimArrayAtCpu< T >::zyxdim

Definition at line 39 of file xmipp_gpu_utils.h.


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