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