Hello all, I am solving large sparse symmetric systems. As a result I have been using the CG solver. However the only preconditioner that seems to work robustly across different matrices is the row_scaling preconditioner. I have tried jacobi_precond and chow_patel_icc_precond with the CG solver and while they work for some symmetric problems, they either fail to converge or give NaNs for other symmetric problems. The same problem converges just fine without the preconditioners or when using the row_scaling preconditioner.
Are there additional special settings beyond what is provided in the documentation needed to successfully use these preconditioners? Are there other limitations of these preconditioners? My matrices regularly contain non-zero entries O(10^6). I have verified they are symmetric. I am using an NVIDIA GeForce GTX 1080 Ti GPU and ViennaCL 1.7.1. Exemplary code is: vector<map<unsigned int, double>> AA; /* Sparse matrix. */ vector<double> b; /* Right hand side vector. */ // Assemble AA and b here // ... // Get context ctx here (NVIDIA GeForce GTX 1080 Ti GPU) // ... // Copy data to GPU viennacl::compressed_matrix<double> A0(ctx); viennacl::copy(AA, A0); viennacl::vector<double> b0(b.size(), ctx); viennacl::copy(b, b0); // Instantiate solver viennacl::linalg::cg_tag my_cg_tag0(1e-5, 2000000); viennacl::linalg::cg_solver<viennacl::vector<double>> my_cg_solver0(my_cg_tag0); // Setup preconditioner viennacl::linalg::chow_patel_tag chow_patel_ilu_config; chow_patel_ilu_config.sweeps(3); chow_patel_ilu_config.jacobi_iters(2); viennacl::linalg::chow_patel_icc_precond<viennacl::compressed_matrix<double>> preconditioner(A0, chow_patel_ilu_config); // Solve system auto v0 = my_cg_solver0(A0, b0, preconditioner); Many thanks in advance, Rick
_______________________________________________ ViennaCL-support mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/viennacl-support
