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