xref: /petsc/src/mat/impls/aij/seq/seqviennacl/viennaclmatimpl.h (revision a1cb98fac0cdf0eb4d3e8a0c8b58f3fe8f800bc6)
1 #ifndef PETSC_VIENNACLMATIMPL_H
2 #define PETSC_VIENNACLMATIMPL_H
3 
4 #define PETSC_SKIP_IMMINTRIN_H_CUDAWORKAROUND 1
5 #include <../src/mat/impls/aij/seq/aij.h> /*I "petscmat.h" I*/
6 
7 /* Pulls in some ViennaCL includes as well as VIENNACL_WITH_OPENCL: */
8 #include <../src/vec/vec/impls/seq/seqviennacl/viennaclvecimpl.h>
9 
10 /* for everything else */
11 #include "viennacl/compressed_matrix.hpp"
12 #include "viennacl/compressed_compressed_matrix.hpp"
13 
14 typedef viennacl::compressed_matrix<PetscScalar>            ViennaCLAIJMatrix;
15 typedef viennacl::compressed_compressed_matrix<PetscScalar> ViennaCLCompressedAIJMatrix;
16 
17 struct Mat_SeqAIJViennaCL {
18   Mat_SeqAIJViennaCL() : tempvec(NULL), mat(NULL), compressed_mat(NULL) { }
19   ViennaCLVector              *tempvec;
20   ViennaCLAIJMatrix           *mat;            /* pointer to the matrix on the GPU */
21   ViennaCLCompressedAIJMatrix *compressed_mat; /* compressed CSR */
22 };
23 
24 PETSC_INTERN PetscErrorCode MatViennaCLCopyToGPU(Mat);
25 PETSC_INTERN PetscErrorCode MatViennaCLCopyFromGPU(Mat, ViennaCLAIJMatrix *);
26 #endif // PETSC_VIENNACLMATIMPL_H
27