xref: /petsc/src/mat/impls/aij/seq/seqcusparse/cusparsematimpl.h (revision 3e1910f1ab6113d8365e15c6b8c907ccce7ce4ea)
1 #if !defined(__CUSPARSEMATIMPL)
2 #define __CUSPARSEMATIMPL
3 
4 #include <../src/vec/vec/impls/seq/seqcusp/cuspvecimpl.h>
5 
6 #include <cusparse_v2.h>
7 
8 /* New Way */
9 #include "tx_sparse_interface.h"
10 
11 #include <algorithm>
12 #include <vector>
13 #include <thrust/sort.h>
14 #include <thrust/fill.h>
15 
16 /* Single instance of the cusparse handle for the class. */
17 cusparseHandle_t MAT_cusparseHandle=0;
18 
19 MatCUSPARSEStorageFormat cusparseMatSolveStorageFormat=MAT_CUSPARSE_CSR;
20 
21 struct Mat_SeqAIJCUSPARSETriFactors {
22   GPU_Matrix_Ifc           *loTriFactorPtr; /* pointer for lower triangular (factored matrix) on GPU */
23   GPU_Matrix_Ifc           *upTriFactorPtr; /* pointer for upper triangular (factored matrix) on GPU */
24   CUSPARRAY                *tempvec;
25   MatCUSPARSEStorageFormat format;   /* the storage format for the matrix on the device */
26   PetscBool hasTranspose; /* boolean describing whether a transpose has been built or not */
27 };
28 
29 struct Mat_SeqAIJCUSPARSE {
30   GPU_Matrix_Ifc           *mat; /* pointer to the matrix on the GPU */
31   CUSPARRAY                *tempvec; /*pointer to a workvector to which we can copy the relevant indices of a vector we want to multiply */
32   PetscInt                 nonzerorow; /* number of nonzero rows ... used in the flop calculations */
33   MatCUSPARSEStorageFormat format;   /* the storage format for the matrix on the device */
34   PetscBool hasTranspose; /* boolean describing whether a transpose has been built or not */
35 };
36 
37 PETSC_INTERN PetscErrorCode MatCUSPARSECopyToGPU(Mat);
38 /* PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_cusparse(Mat,MatFactorType,Mat*); */
39 /* PETSC_INTERN PetscErrorCode MatFactorGetSolverPackage_seqaij_cusparse(Mat,const MatSolverPackage *); */
40 /* PETSC_INTERN PetscErrorCode MatCUSPARSECopyFromGPU(Mat, CUSPMATRIX *); */
41 #endif
42