1: #ifndef PETSC_MPICUSPARSEMATIMPL_H 2: #define PETSC_MPICUSPARSEMATIMPL_H 4: #include <cusparse_v2.h> 5: #include <petsc/private/cudavecimpl.h> 7: struct Mat_MPIAIJCUSPARSE { 8: /* The following are used by GPU capabilities to store matrix storage formats on the device */ 9: MatCUSPARSEStorageFormat diagGPUMatFormat; 10: MatCUSPARSEStorageFormat offdiagGPUMatFormat; 11: PetscSplitCSRDataStructure deviceMat; 12: PetscInt coo_nd, coo_no; /* number of nonzero entries in coo for the diag/offdiag part */ 13: THRUSTINTARRAY *coo_p; /* the permutation array that partitions the coo array into diag/offdiag parts */ 14: THRUSTARRAY *coo_pw; /* the work array that stores the partitioned coo scalar values */ 16: /* Extended COO stuff */ 17: PetscCount *Ajmap1_d, *Aperm1_d; /* Local entries to diag */ 18: PetscCount *Bjmap1_d, *Bperm1_d; /* Local entries to offdiag */ 19: PetscCount *Aimap2_d, *Ajmap2_d, *Aperm2_d; /* Remote entries to diag */ 20: PetscCount *Bimap2_d, *Bjmap2_d, *Bperm2_d; /* Remote entries to offdiag */ 21: PetscCount *Cperm1_d; /* Permutation to fill send buffer. 'C' for communication */ 22: PetscScalar *sendbuf_d, *recvbuf_d; /* Buffers for remote values in MatSetValuesCOO() */ 23: PetscBool use_extended_coo; 25: Mat_MPIAIJCUSPARSE() 26: { 27: diagGPUMatFormat = MAT_CUSPARSE_CSR; 28: offdiagGPUMatFormat = MAT_CUSPARSE_CSR; 29: coo_p = NULL; 30: coo_pw = NULL; 31: deviceMat = NULL; 32: use_extended_coo = PETSC_FALSE; 33: } 34: }; 35: #endif // PETSC_MPICUSPARSEMATIMPL_H