1 #ifndef PRIV_H_GUARD
2 #define PRIV_H_GUARD
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 #include "csparse.h"
9 #include "glbopts.h"
10 #include "gpu.h"
11 #include "linalg.h"
12 #include "scs.h"
13 
14 struct SCS_LIN_SYS_WORK {
15   scs_int n, m; /* linear system dimensions */
16   /* reporting */
17   scs_int tot_cg_its;
18   /* ALL BELOW HOSTED ON THE GPU */
19   scs_float *p;      /* cg iterate, n  */
20   scs_float *r;      /* cg residual, n */
21   scs_float *Gp;     /* G * p, n */
22   scs_float *bg;     /* b, n */
23   scs_float *tmp_m;  /* m, used in mat_vec */
24   scs_float *z;      /* preconditioned */
25   scs_float *M;      /* preconditioner */
26   const ScsMatrix *A; /* does *not* own this memory */
27   const ScsMatrix *P; /* does *not* own this memory */
28   ScsGpuMatrix *Ag;  /* A matrix on GPU */
29   ScsGpuMatrix *Agt; /* A trans matrix on GPU */
30   ScsGpuMatrix *Pg;  /* P matrix on GPU */
31   /* CUDA */
32   cublasHandle_t cublas_handle;
33   cusparseHandle_t cusparse_handle;
34   /* CUSPARSE */
35   size_t buffer_size;
36   void *buffer;
37   cusparseDnVecDescr_t dn_vec_m;   /* Dense vector of length m */
38   cusparseDnVecDescr_t dn_vec_n;   /* Dense vector of length n */
39   cusparseDnVecDescr_t dn_vec_n_p; /* Dense vector of length n */
40 
41   /* rho terms */
42   scs_float rho_x;
43   scs_float *inv_rho_y_vec;     /* inverse rho_y_vec */
44   scs_float *inv_rho_y_vec_gpu; /* inverse rho_y_vec on GPU */
45 };
46 
47 #ifdef __cplusplus
48 }
49 #endif
50 #endif
51