COMPASS  5.4.4
End-to-end AO simulation tool using GPU acceleration
carma_obj.h File Reference
#include <carma_context.h>
#include <carma_streams.h>
#include <carma_utils.h>
#include <curand.h>
#include <curand_kernel.h>
#include <iostream>
#include <type_traits>
#include <typeinfo>
Include dependency graph for carma_obj.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  CarmaData< T_data >
 
class  CarmaObj< T_data >
 this class provides wrappers to the generic carma object More...
 

Macros

#define BLOCK_SZ   16
 

Typedefs

typedef CarmaObj< int > CarmaObjI
 
typedef CarmaObj< unsigned int > CarmaObjUI
 
typedef CarmaObj< uint16_t > CarmaObjUSI
 
typedef CarmaObj< float > CarmaObjS
 
typedef CarmaObj< double > CarmaObjD
 
typedef CarmaObj< float2 > CarmaObjS2
 
typedef CarmaObj< double2 > CarmaObjD2
 
typedef CarmaObj< cuFloatComplex > CarmaObjC
 
typedef CarmaObj< cuDoubleComplex > CarmaObjZ
 

Enumerations

enum  MemType {
  MT_DEVICE , MT_DARRAY , MT_HOST , MT_PAGELOCK ,
  MT_ZEROCPY , MT_PORTABLE , MT_WRICOMB , MT_GENEPIN
}
 

Functions

template<class T_data >
std::ostream & operator<< (std::ostream &os, CarmaObj< T_data > &obj)
 
template<class T_data >
void clip_array (T_data *d_data, T_data min, T_data max, int N, CarmaDevice *device, cudaStream_t stream)
 
template<class T_data >
void reduce (int size, int threads, int blocks, T_data *d_idata, T_data *d_odata)
 
template<class T_data >
T_data reduce (T_data *data, int N)
 
template<class T_data >
void init_reduceCubCU (T_data *&cub_data, size_t &cub_data_size, T_data *data, T_data *&o_data, int N)
 
template<class T_data >
void reduceCubCU (T_data *cub_data, size_t cub_data_size, T_data *data, T_data *o_data, int N, cudaStream_t stream=0)
 
template<class T_data >
int transposeCU (T_data *d_idata, T_data *d_odata, long N1, long N2)
 
template<class T_data >
int launch_generic1d (T_data *d_idata, T_data *d_odata, int N, CarmaDevice *device)
 
template<class T_data >
int launch_generic2d (T_data *d_odata, T_data *d_idata, int N1, int N2)
 
int carma_prng_init (int *seed, const int nb_threads, const int nb_blocks, curandState *state)
 
template<class T >
int carma_prng_cu (T *results, const int nb_threads, const int nb_blocks, curandState *state, char gtype, int n, float alpha, float beta)
 
template<class T >
int carma_curand_montagn (curandState *state, T *d_odata, int N, CarmaDevice *device)
 
template<class T_in , class T_out >
cufftType carma_select_plan ()
 
template<class T_in , class T_out >
void carma_initfft (const long *dims_data, cufftHandle *plan, cufftType type_plan)
 
template<class T_in , class T_out >
int CarmaFFT (T_in *input, T_out *output, int dir, cufftHandle plan)
 
template<class T_data >
int fillindex (T_data *d_odata, T_data *d_idata, int *indx, int N, CarmaDevice *device)
 
template<class T_data >
int fillvalues (T_data *d_odata, T_data *val, int N, CarmaDevice *device)
 
template<class T >
int getarray2d (T *d_odata, T *d_idata, int x0, int Ncol, int NC, int N, CarmaDevice *device)
 
template<class T >
int fillarray2d (T *d_odata, T *d_idata, int x0, int Ncol, int NC, int N, CarmaDevice *device)
 
template<class T >
int fillarray2d2 (T *d_odata, T *d_idata, int x0, int Ncol, int NC, int N, CarmaDevice *device)
 
template<class T >
int fill_sym_matrix (char src_uplo, T *d_data, int Ncol, int N, CarmaDevice *device)
 
template<class T >
int carma_plus (T *d_odata, T elpha, int N, CarmaDevice *device)
 
template<class T >
int carma_plusai (T *d_odata, T *i_data, int i, int sgn, int N, CarmaDevice *device)
 
template<class T >
int extract (T *d_smallimg, const T *d_fullimg, int fullimg_size, int center_pos, int extract_size, bool roll)
 Kernel to extract a part of the image centred on center_pos. More...
 

Macro Definition Documentation

◆ BLOCK_SZ

#define BLOCK_SZ   16

Definition at line 53 of file carma_obj.h.

Typedef Documentation

◆ CarmaObjC

typedef CarmaObj<cuFloatComplex> CarmaObjC

Definition at line 367 of file carma_obj.h.

◆ CarmaObjD

typedef CarmaObj<double> CarmaObjD

Definition at line 364 of file carma_obj.h.

◆ CarmaObjD2

typedef CarmaObj<double2> CarmaObjD2

Definition at line 366 of file carma_obj.h.

◆ CarmaObjI

typedef CarmaObj<int> CarmaObjI

Definition at line 360 of file carma_obj.h.

◆ CarmaObjS

typedef CarmaObj<float> CarmaObjS

Definition at line 363 of file carma_obj.h.

◆ CarmaObjS2

typedef CarmaObj<float2> CarmaObjS2

Definition at line 365 of file carma_obj.h.

◆ CarmaObjUI

typedef CarmaObj<unsigned int> CarmaObjUI

Definition at line 361 of file carma_obj.h.

◆ CarmaObjUSI

typedef CarmaObj<uint16_t> CarmaObjUSI

Definition at line 362 of file carma_obj.h.

◆ CarmaObjZ

typedef CarmaObj<cuDoubleComplex> CarmaObjZ

Definition at line 368 of file carma_obj.h.

Enumeration Type Documentation

◆ MemType

enum MemType
Enumerator
MT_DEVICE 
MT_DARRAY 
MT_HOST 
MT_PAGELOCK 
MT_ZEROCPY 
MT_PORTABLE 
MT_WRICOMB 
MT_GENEPIN 

Definition at line 55 of file carma_obj.h.

Function Documentation

◆ carma_curand_montagn()

template<class T >
int carma_curand_montagn ( curandState *  state,
T *  d_odata,
int  N,
CarmaDevice device 
)

◆ carma_initfft()

template<class T_in , class T_out >
void carma_initfft ( const long *  dims_data,
cufftHandle *  plan,
cufftType  type_plan 
)

◆ carma_plus()

template<class T >
int carma_plus ( T *  d_odata,
elpha,
int  N,
CarmaDevice device 
)

◆ carma_plusai()

template<class T >
int carma_plusai ( T *  d_odata,
T *  i_data,
int  i,
int  sgn,
int  N,
CarmaDevice device 
)

◆ carma_prng_cu()

template<class T >
int carma_prng_cu ( T *  results,
const int  nb_threads,
const int  nb_blocks,
curandState *  state,
char  gtype,
int  n,
float  alpha,
float  beta 
)

◆ carma_prng_init()

int carma_prng_init ( int *  seed,
const int  nb_threads,
const int  nb_blocks,
curandState *  state 
)

◆ carma_select_plan()

template<class T_in , class T_out >
cufftType carma_select_plan ( )

◆ CarmaFFT()

template<class T_in , class T_out >
int CarmaFFT ( T_in *  input,
T_out *  output,
int  dir,
cufftHandle  plan 
)

◆ clip_array()

template<class T_data >
void clip_array ( T_data *  d_data,
T_data  min,
T_data  max,
int  N,
CarmaDevice device,
cudaStream_t  stream 
)

◆ extract()

template<class T >
int extract ( T *  d_smallimg,
const T *  d_fullimg,
int  fullimg_size,
int  center_pos,
int  extract_size,
bool  roll 
)

Kernel to extract a part of the image centred on center_pos.

Template Parameters
Ttype of the image items
Parameters
d_smallimgextracted small image of size extract_size*extract_size
d_fullimgfull image of size fullimg_size*fullimg_size
fullimg_sizesize of the d_fullimg leading dimension
center_posposition of the center of d_smallimg in d_fullimg
extract_sizesize of the d_smallimg leading dimension
rollget pixels as if d_fullimg need to be roll

◆ fill_sym_matrix()

template<class T >
int fill_sym_matrix ( char  src_uplo,
T *  d_data,
int  Ncol,
int  N,
CarmaDevice device 
)

◆ fillarray2d()

template<class T >
int fillarray2d ( T *  d_odata,
T *  d_idata,
int  x0,
int  Ncol,
int  NC,
int  N,
CarmaDevice device 
)

◆ fillarray2d2()

template<class T >
int fillarray2d2 ( T *  d_odata,
T *  d_idata,
int  x0,
int  Ncol,
int  NC,
int  N,
CarmaDevice device 
)

◆ fillindex()

template<class T_data >
int fillindex ( T_data *  d_odata,
T_data *  d_idata,
int *  indx,
int  N,
CarmaDevice device 
)

◆ fillvalues()

template<class T_data >
int fillvalues ( T_data *  d_odata,
T_data *  val,
int  N,
CarmaDevice device 
)

◆ getarray2d()

template<class T >
int getarray2d ( T *  d_odata,
T *  d_idata,
int  x0,
int  Ncol,
int  NC,
int  N,
CarmaDevice device 
)

◆ init_reduceCubCU()

template<class T_data >
void init_reduceCubCU ( T_data *&  cub_data,
size_t &  cub_data_size,
T_data *  data,
T_data *&  o_data,
int  N 
)

◆ launch_generic1d()

template<class T_data >
int launch_generic1d ( T_data *  d_idata,
T_data *  d_odata,
int  N,
CarmaDevice device 
)

◆ launch_generic2d()

template<class T_data >
int launch_generic2d ( T_data *  d_odata,
T_data *  d_idata,
int  N1,
int  N2 
)

◆ operator<<()

template<class T_data >
std::ostream& operator<< ( std::ostream &  os,
CarmaObj< T_data > &  obj 
)

Definition at line 376 of file carma_obj.h.

Here is the call graph for this function:

◆ reduce() [1/2]

template<class T_data >
void reduce ( int  size,
int  threads,
int  blocks,
T_data *  d_idata,
T_data *  d_odata 
)

◆ reduce() [2/2]

template<class T_data >
T_data reduce ( T_data *  data,
int  N 
)

◆ reduceCubCU()

template<class T_data >
void reduceCubCU ( T_data *  cub_data,
size_t  cub_data_size,
T_data *  data,
T_data *  o_data,
int  N,
cudaStream_t  stream = 0 
)

◆ transposeCU()

template<class T_data >
int transposeCU ( T_data *  d_idata,
T_data *  d_odata,
long  N1,
long  N2 
)