KSPPIPECG2#

Pipelined conjugate gradient method with a single non-blocking reduction per two iterations [TV20]. Pipelined Krylov Methods

Notes#

This method has only a single non-blocking reduction per two iterations, compared to 2 blocking for standard KSPCG. The non-blocking reduction is overlapped by two matrix-vector products and two preconditioner applications.

The solver has a two-step inner iteration, each of which computes the solution and updates the residual norm. Hence the values from KSPGetResidualHistory() and KSPGetIterationNumber() will differ.

MPI configuration may be necessary for reductions to make asynchronous progress, which is important for performance of pipelined methods. See What steps are necessary to make the pipelined solvers execute efficiently?

Developer Note#

The implementation code contains a good amount of hand-tuned fusion of multiple inner products and similar computations on multiple vectors

Contributed by#

Manasi Tiwari, Computational and Data Sciences, Indian Institute of Science, Bangalore

References#

TV20

Manasi Tiwari and Sathish Vadhiyar. Pipelined preconditioned conjugate gradient methods for distributed memory systems. In 2020 IEEE 27th International Conference on High Performance Computing, Data, and Analytics (HiPC), 151–160. IEEE, 2020.

See Also#

KSP: Linear System Solvers, What steps are necessary to make the pipelined solvers execute efficiently?, Pipelined Krylov Methods, KSPCreate(), KSPSetType(), KSPCG, KSPPIPECG, KSPGROPPCG

Level#

intermediate

Location#

src/ksp/ksp/impls/cg/pipecg2/pipecg2.c


Index of all KSP routines
Table of Contents for all manual pages
Index of all manual pages