DDASToys for NSCLDAQ  6.2-000
Public Member Functions | List of all members
ddastoys::analyticfit::CudaFitEngine1 Class Reference

CUDA-aware fit engine for analytic single pulse fits. More...

#include <jacobian_analytic.h>

Inheritance diagram for ddastoys::analyticfit::CudaFitEngine1:
Inheritance graph
[legend]
Collaboration diagram for ddastoys::analyticfit::CudaFitEngine1:
Collaboration graph
[legend]

Public Member Functions

 CudaFitEngine1 (std::vector< std::pair< uint16_t, uint16_t >> &data)
 Constructor. More...
 
 ~CudaFitEngine1 ()
 Destructor. More...
 
virtual void jacobian (const gsl_vector *p, gsl_matrix *J)
 Invoke the kernal to do the pointwise parallel Jacobian computation. More...
 
virtual void residuals (const gsl_vector *p, gsl_vector *r)
 Triggers a pointwise parallel residual kernel in the device and impedance matches that with GSL's requirements. More...
 
- Public Member Functions inherited from ddastoys::CFitEngine
 CFitEngine (std::vector< std::pair< uint16_t, uint16_t >> &data)
 Constructor. More...
 
virtual ~CFitEngine ()
 Destructor.
 

Additional Inherited Members

- Protected Attributes inherited from ddastoys::CFitEngine
std::vector< uint16_t > x
 Trace x coordinate vector.
 
std::vector< uint16_t > y
 Trace y coordinate vector.
 

Detailed Description

CUDA-aware fit engine for analytic single pulse fits.

The concept is that each GSL lmfitter can supply a pair of methods: One that computes a vector of residuals and one that computes a Jacobian matrix of partial derivatives. At the implementation level we have two types of fits we need done: Single pulse fits and double pulse fits (the engines with names ending in 1 or 2). For each fit type we have two fit engines: 1) Serial computation (the engines with names starting with Serial) 2) GPU accelerated (the engines with names starting with Cuda).

Finally a fit factory can generate the appropriate fit engine as desired by the actual fit.

Todo:
(ASC 10/30/23): Manages some device pointers. Not copyable, and most likely is not ever copied. But we can make it safe.

Constructor & Destructor Documentation

◆ CudaFitEngine1()

ddastoys::analyticfit::CudaFitEngine1::CudaFitEngine1 ( std::vector< std::pair< uint16_t, uint16_t >> &  data)

Constructor.

Allocate the device vectors/matrices. Push the trace x/y points into the GPU where they stay until we're destroyed.

◆ ~CudaFitEngine1()

ddastoys::analyticfit::CudaFitEngine1::~CudaFitEngine1 ( )

Destructor.

Just deallocate the GPU resources.

Member Function Documentation

◆ jacobian()

void ddastoys::analyticfit::CudaFitEngine1::jacobian ( const gsl_vector *  p,
gsl_matrix *  J 
)
virtual

Invoke the kernal to do the pointwise parallel Jacobian computation.

Parameters
pParameter vector.
JJacobian matrix.

We use a Y size of 32 and x size of npts+31/32. That is one warp wide.

Implements ddastoys::CFitEngine.

◆ residuals()

void ddastoys::analyticfit::CudaFitEngine1::residuals ( const gsl_vector *  p,
gsl_vector *  r 
)
virtual

Triggers a pointwise parallel residual kernel in the device and impedance matches that with GSL's requirements.

Parameters
pParameter vector.
rResidual vector.

Implements ddastoys::CFitEngine.


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