xref: /petsc/src/mat/impls/aij/mpi/mpicusparse/mpicusparsematimpl.h (revision 030f984af8d8bb4c203755d35bded3c05b3d83ce)
1 #if !defined(__MPICUSPARSEMATIMPL)
2 #define __MPICUSPARSEMATIMPL
3 
4 #include <cusparse_v2.h>
5 #include <petsc/private/cudavecimpl.h>
6 
7 typedef struct {
8   /* The following are used by GPU capabilities to store matrix storage formats on the device */
9   MatCUSPARSEStorageFormat   diagGPUMatFormat;
10   MatCUSPARSEStorageFormat   offdiagGPUMatFormat;
11   cudaStream_t               stream;
12   cusparseHandle_t           handle;
13   PetscSplitCSRDataStructure deviceMat;
14   PetscInt                   coo_nd,coo_no; /* number of nonzero entries in coo for the diag/offdiag part */
15   THRUSTINTARRAY             *coo_p; /* the permutation array that partitions the coo array into diag/offdiag parts */
16   THRUSTARRAY                *coo_pw; /* the work array that stores the partitioned coo scalar values */
17 } Mat_MPIAIJCUSPARSE;
18 
19 PETSC_INTERN PetscErrorCode MatCUSPARSESetStream(Mat, const cudaStream_t stream);
20 PETSC_INTERN PetscErrorCode MatCUSPARSESetHandle(Mat, const cusparseHandle_t handle);
21 PETSC_INTERN PetscErrorCode MatCUSPARSEClearHandle(Mat);
22 
23 #endif
24