imate
C++/CUDA Reference
Loading...
Searching...
No Matches
cuCSRAffineMatrixFunction< DataType > Class Template Reference

Container for CSR affine matrix functions of one parameter. More...

#include <cu_csr_affine_matrix_function.h>

Inheritance diagram for cuCSRAffineMatrixFunction< DataType >:
Collaboration diagram for cuCSRAffineMatrixFunction< DataType >:

Public Member Functions

 cuCSRAffineMatrixFunction (const DataType *A_data_, const LongIndexType *A_indices_, const LongIndexType *A_index_pointer_, const LongIndexType num_rows_, const LongIndexType num_columns_, const FlagType A_is_symmetric_, const int num_gpu_devices_)
 Default constructor.
 
 cuCSRAffineMatrixFunction (const DataType *A_data_, const LongIndexType *A_indices_, const LongIndexType *A_index_pointer_, const LongIndexType num_rows_, const LongIndexType num_columns_, const FlagType A_is_symmetric_, const DataType *B_data_, const LongIndexType *B_indices_, const LongIndexType *B_index_pointer_, const FlagType B_is_symmetric_, const int num_gpu_devices_)
 Constructor.
 
virtual ~cuCSRAffineMatrixFunction ()
 Destructor.
 
virtual void set_symmetry (const FlagType symmetric)
 Specify whether the matrices are symmetic or non-symmetric.
 
virtual void dot (const DataType *vector, DataType *product)
 Matrix vector product.
 
virtual void transpose_dot (const DataType *vector, DataType *product)
 Matrix vector product written in place.
 
- Public Member Functions inherited from cuAffineMatrixFunction< DataType >
 cuAffineMatrixFunction ()
 Constructor.
 
virtual ~cuAffineMatrixFunction ()
 Virtual destructor.
 
void set_parameters (DataType *t)
 
DataType get_eigenvalue (const DataType *known_parameters, const DataType known_eigenvalue, const DataType *inquiry_parameters) const
 This function defines an analytic relationship between a given set of parameters and the corresponding eigenvalue of the operator. Namely, given a set of parameters and a known eigenvalue of the operator for that specific set of parameters, this function obtains the eigenvalue of the operator for an other given set of parameters.
 
- Public Member Functions inherited from cuLinearOperator< DataType >
 cuLinearOperator ()
 Default constructor.
 
 cuLinearOperator (const int num_gpu_devices_)
 Constructor with setting num_rows and num_columns.
 
virtual ~cuLinearOperator ()
 Destructor.
 
cublasHandle_t get_cublas_handle () const
 This function returns a reference to the cublasHandle_t object. The object will be created, if it is not created already.
 
void set_parameters (DataType *parameters_)
 Sets the scalar parameter this->parameters. Parameter is initialized to NULL. However, before calling dot or transpose_dot functions, the parameters must be set.
 
- Public Member Functions inherited from cLinearOperatorBase
 cLinearOperatorBase ()
 Default constructor.
 
 cLinearOperatorBase (const LongIndexType num_rows_, const LongIndexType num_columns_)
 Constructor with setting num_rows and num_columns.
 
virtual ~cLinearOperatorBase ()
 Destructor.
 
LongIndexType get_num_rows () const
 Returns the number of rows of the matrix.
 
LongIndexType get_num_columns () const
 Returns the number of columns of the matrix.
 
IndexType get_num_parameters () const
 Returns the number of parameters of the linear operator.
 
FlagType is_eigenvalue_relation_known () const
 Returns a flag that determines whether a relation between the parameters of the operator and its eigenvalue(s) is known.
 

Protected Attributes

cuCSRMatrix< DataType > A
 
cuCSRMatrix< DataType > B
 
- Protected Attributes inherited from cuAffineMatrixFunction< DataType >
bool B_is_identity
 
- Protected Attributes inherited from cuLinearOperator< DataType >
int num_gpu_devices
 
bool copied_host_to_device
 
cublasHandle_t * cublas_handle
 
cusparseHandle_t * cusparse_handle
 
DataType * parameters
 
- Protected Attributes inherited from cLinearOperatorBase
const LongIndexType num_rows
 
const LongIndexType num_columns
 
FlagType eigenvalue_relation_known
 
IndexType num_parameters
 

Additional Inherited Members

- Protected Member Functions inherited from cuAffineMatrixFunction< DataType >
void _add_scaled_vector (const DataType *input_vector, const LongIndexType vector_size, const DataType scale, DataType *output_vector) const
 Performs the operation \( \boldsymbol{c} = \boldsymbol{c} + \alpha \boldsymbol{b} \), where \( \boldsymbol{b} \) is an input vector scaled by \( \alpha \) and \( \boldsymbol{c} \) it the output vector.
 
- Protected Member Functions inherited from cuLinearOperator< DataType >
int query_gpu_devices () const
 Before any numerical computation, this method chechs if any gpu device is available on the machine, or notifies the user if nothing was found.
 
void initialize_cublas_handle ()
 Creates a cublasHandle_t object, if not created already.
 
void initialize_cusparse_handle ()
 Creates a cusparseHandle_t object, if not created already.
 

Detailed Description

template<typename DataType>
class cuCSRAffineMatrixFunction< DataType >

Container for CSR affine matrix functions of one parameter.

The cuCSRAffineMatrixFunction contains two-dimensional compressed sparse row matrices A and B. This operoator can perofrom matrix-vector product and transposed matrix-vector product.

See also
cuAffineMatrixFunction, cuDenseMatrixFunction, cuCSCMatrixFunction, cuCSRMatrix, cCSRAffineMatrixFunction

Definition at line 45 of file cu_csr_affine_matrix_function.h.

Constructor & Destructor Documentation

◆ cuCSRAffineMatrixFunction() [1/2]

template<typename DataType >
cuCSRAffineMatrixFunction< DataType >::cuCSRAffineMatrixFunction ( const DataType *  A_data_,
const LongIndexType A_indices_,
const LongIndexType A_index_pointer_,
const LongIndexType  num_rows_,
const LongIndexType  num_columns_,
const FlagType  A_is_symmetric_,
const int  num_gpu_devices_ 
)

Default constructor.

Matrix B is assumed to be the identity matrix.

Parameters
[in]A_data_1D array of the data content of sparse matrix. The size of the array is the nnz of the matrix.
[in]A_indices_1D array indicating the column of each element in A_data_ . The size of this array is the nnz of the matrix.
[in]A_index_pointer_1D array pointing to the start of new rows in A_indices_ . The size of this array is num_rows+1 . The first element of this array is 0 and the last element of this array is the nnz of the matrix.
[in]num_rows_Number of rows of A
[in]num_columns_Number of columns of A
[in]A_is_symmetric_Boolean. If A is symmetric, set this value to 1, otherwise 0.
[in]num_gpu_devices_Number of GPU devices to be utilized for parallel processing.

Definition at line 54 of file cu_csr_affine_matrix_function.cu.

61 :
62
63 // Base class constructor
64 cLinearOperatorBase(num_rows_, num_columns_),
65 cuLinearOperator<DataType>(num_gpu_devices_),
66
67 // Initializer list
68 A(A_data_, A_indices_, A_index_pointer_, num_rows_, num_columns_,
69 A_is_symmetric_, num_gpu_devices_)
70{
71 // This constructor is called assuming B is identity
72 this->B_is_identity = true;
73
74 // When B is identity, the eigenvalues of A+tB are known for any t
76
77 // Set gpu device
79}
cLinearOperatorBase()
Default constructor.
Base class for linear operators. This class serves as interface for all derived classes.
void initialize_cusparse_handle()
Creates a cusparseHandle_t object, if not created already.

References cuAffineMatrixFunction< DataType >::B_is_identity, cLinearOperatorBase::eigenvalue_relation_known, and cuLinearOperator< DataType >::initialize_cusparse_handle().

Here is the call graph for this function:

◆ cuCSRAffineMatrixFunction() [2/2]

template<typename DataType >
cuCSRAffineMatrixFunction< DataType >::cuCSRAffineMatrixFunction ( const DataType *  A_data_,
const LongIndexType A_indices_,
const LongIndexType A_index_pointer_,
const LongIndexType  num_rows_,
const LongIndexType  num_columns_,
const FlagType  A_is_symmetric_,
const DataType *  B_data_,
const LongIndexType B_indices_,
const LongIndexType B_index_pointer_,
const FlagType  B_is_symmetric_,
const int  num_gpu_devices_ 
)

Constructor.

Parameters
[in]A_data_1D array of the data content of sparse matrix. The size of the array is the nnz of the matrix.
[in]A_indices_1D array indicating the column of each element in A_data_ . The size of this array is the nnz of the matrix.
[in]A_index_pointer_1D array pointing to the start of new rows in A_indices_ . The size of this array is num_rows+1 . The first element of this array is 0 and the last element of this array is the nnz of the matrix.
[in]num_rows_Number of rows of A and B
[in]num_columns_Number of columns of A and B
[in]A_is_symmetric_Boolean. If A is symmetric, set this value to 1, otherwise 0.
[in]B_data_1D array of the data content of sparse matrix. The size of the array is the nnz of the matrix.
[in]B_indices_1D array indicating the column of each element in B_data_ . The size of this array is the nnz of the matrix.
[in]B_index_pointer_1D array pointing to the start of new rows in B_indices_ . The size of this array is num_rows+1 . The first element of this array is 0 and the last element of this array is the nnz of the matrix.
[in]B_is_symmetric_Boolean. If B is symmetric, set this value to 1, otherwise 0.
[in]num_gpu_devices_Number of GPU devices to be utilized for parallel processing.

Definition at line 124 of file cu_csr_affine_matrix_function.cu.

135 :
136
137 // Base class constructor
138 cLinearOperatorBase(num_rows_, num_columns_),
139 cuLinearOperator<DataType>(num_gpu_devices_),
140
141 // Initializer list
142 A(A_data_, A_indices_, A_index_pointer_, num_rows_, num_columns_,
143 A_is_symmetric_, num_gpu_devices_),
144 B(B_data_, B_indices_, B_index_pointer_, num_rows_, num_columns_,
145 B_is_symmetric_, num_gpu_devices_)
146{
147 // Matrix B is assumed to be non-zero. Check if it is identity or generic
148 if (this->B.is_identity_matrix())
149 {
150 this->B_is_identity = true;
152 }
153
154 // Set gpu device
156}

References cuCSRAffineMatrixFunction< DataType >::B, cuAffineMatrixFunction< DataType >::B_is_identity, cLinearOperatorBase::eigenvalue_relation_known, and cuLinearOperator< DataType >::initialize_cusparse_handle().

Here is the call graph for this function:

◆ ~cuCSRAffineMatrixFunction()

template<typename DataType >
cuCSRAffineMatrixFunction< DataType >::~cuCSRAffineMatrixFunction ( )
virtual

Destructor.

Definition at line 167 of file cu_csr_affine_matrix_function.cu.

168{
169}

Member Function Documentation

◆ dot()

template<typename DataType >
void cuCSRAffineMatrixFunction< DataType >::dot ( const DataType *  vector,
DataType *  product 
)
virtual

Matrix vector product.

Performs the matrix vector product \( \boldsymbol{y} = (\mathbf{A} + t \mathbf{B}) \boldsymbol{x} \).

Parameters
[in]vectorA one-dimensional input vector \( \boldsymbol{x} \) with size the of the number of columns of the matrix \( \mathbf{A} \). This array should be on GPU device.
[out]productA one-dimensional output vector \( \boldsymbol{y} \) with the size of the number of rows of \( \mathbf{A} \). This vector will be overwritten. This array should be on GPU device.
See also
cuCSRAffineMatrixFunction::transpose_dot

Implements cuLinearOperator< DataType >.

Definition at line 226 of file cu_csr_affine_matrix_function.cu.

229{
230 // Matrix A times vector
231 this->A.dot(vector, product);
232 LongIndexType min_vector_size;
233
234 // Matrix B times vector to be added to the product
235 if (this->B_is_identity)
236 {
237 // Check parameter is set
238 ASSERT((this->parameters != NULL), "Parameter is not set.");
239
240 // Find minimum of the number of rows and columns
241 min_vector_size = \
242 (this->num_rows < this->num_columns) ? \
243 this->num_rows : this->num_columns;
244
245 // Adding input vector to product
246 this->_add_scaled_vector(vector, min_vector_size,
247 this->parameters[0], product);
248 }
249 else
250 {
251 // Check parameter is set
252 ASSERT((this->parameters != NULL), "Parameter is not set.");
253
254 // Adding parameter times B times input vector to the product
255 this->B.dot_plus(vector, this->parameters[0], product);
256 }
257}
const LongIndexType num_rows
const LongIndexType num_columns
void _add_scaled_vector(const DataType *input_vector, const LongIndexType vector_size, const DataType scale, DataType *output_vector) const
Performs the operation , where is an input vector scaled by and it the output vector.
#define ASSERT(condition, message)
Definition debugging.h:20
int LongIndexType
Definition types.h:60

References ASSERT.

◆ set_symmetry()

template<typename DataType >
void cuCSRAffineMatrixFunction< DataType >::set_symmetry ( const FlagType  symmetric)
virtual

Specify whether the matrices are symmetic or non-symmetric.

This function overwrites the symmetry status that has been set by the constructor. Note that the symmetry status of both matrices \( \mathbf{A} \) and \( \mathbf{B} \) in the linear operator \( \mathbf{A} + t \mathbf{B} \) will be set together.

Parameters
[in]symmetricBoolean. If set to 1, the matrix is assumed to be symmetric. Otherwiese non-symmetric.

Implements cuAffineMatrixFunction< DataType >.

Definition at line 189 of file cu_csr_affine_matrix_function.cu.

191{
192 if (symmetric == 1)
193 {
194 this->A.set_symmetry(1);
195 this->B.set_symmetry(1);
196 }
197 else
198 {
199 this->A.set_symmetry(0);
200 this->B.set_symmetry(0);
201 }
202}

◆ transpose_dot()

template<typename DataType >
void cuCSRAffineMatrixFunction< DataType >::transpose_dot ( const DataType *  vector,
DataType *  product 
)
virtual

Matrix vector product written in place.

Performs the matrix vector product \( \boldsymbol{y} = (\mathbf{A} + t \mathbf{B})^{\intercal} \boldsymbol{x} \).

Parameters
[in]vectorA one-dimensional input vector \( \boldsymbol{x} \) with size the of the number of columns of the matrix \( \mathbf{A} \). This array should be on GPU device.
[out]productA one-dimensional output vector \( \boldsymbol{y} \) with the size of the number of rows of \( \mathbf{A} \). This array should be on GPU device.
See also
cuCSRAffineMatrixFunction::dot

Implements cuLinearOperator< DataType >.

Definition at line 281 of file cu_csr_affine_matrix_function.cu.

284{
285 // Matrix A times vector
286 this->A.transpose_dot(vector, product);
287 LongIndexType min_vector_size;
288
289 // Matrix B times vector to be added to the product
290 if (this->B_is_identity)
291 {
292 // Check parameter is set
293 ASSERT((this->parameters != NULL), "Parameter is not set.");
294
295 // Find minimum of the number of rows and columns
296 min_vector_size = \
297 (this->num_rows < this->num_columns) ? \
298 this->num_rows : this->num_columns;
299
300 // Adding input vector to product
301 this->_add_scaled_vector(vector, min_vector_size,
302 this->parameters[0], product);
303 }
304 else
305 {
306 // Check parameter is set
307 ASSERT((this->parameters != NULL), "Parameter is not set.");
308
309 // Adding "parameter * B * input vector" to the product
310 this->B.transpose_dot_plus(vector, this->parameters[0], product);
311 }
312}

References ASSERT.

Member Data Documentation

◆ A

template<typename DataType >
cuCSRMatrix<DataType> cuCSRAffineMatrixFunction< DataType >::A
protected

Definition at line 87 of file cu_csr_affine_matrix_function.h.

◆ B

template<typename DataType >
cuCSRMatrix<DataType> cuCSRAffineMatrixFunction< DataType >::B
protected

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