Skip to main content
`Ctrl`+`K`

# 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