51 using Base::verbosity;
58 std::vector<OpenclMatrix<Scalar>> d_Amatrices, d_Rmatrices;
59 std::vector<cl::Buffer> d_PcolIndices;
60 std::vector<cl::Buffer> d_invDiags;
61 std::vector<cl::Buffer> d_t, d_f, d_u;
62 std::unique_ptr<cl::Buffer> d_rs;
63 std::unique_ptr<cl::Buffer> d_weights;
64 std::unique_ptr<OpenclMatrix<Scalar>> d_mat;
65 std::unique_ptr<cl::Buffer> d_coarse_y, d_coarse_x;
66 std::once_flag opencl_buffers_allocated;
68 std::unique_ptr<openclBILU0<Scalar,block_size>> bilu0;
70 std::unique_ptr<openclSolverBackend<Scalar,1>> coarse_solver;
71 bool opencl_ilu_parallel;
74 void init_opencl_buffers();
80 void apply_amg(
const cl::Buffer& y, cl::Buffer& x);
82 void amg_cycle_gpu(
const int level, cl::Buffer &y, cl::Buffer &x);
85 openclCPR(
bool opencl_ilu_parallel,
int verbosity);
92 void setOpencl(std::shared_ptr<cl::Context>& context,
93 std::shared_ptr<cl::CommandQueue>& queue)
override;
97 void apply(
const cl::Buffer& y, cl::Buffer& x)
override;
98 void apply(Scalar&, Scalar&)
override {}