KSPCGUseSingleReduction#
Merge the two inner products needed in KSPCG into a single MPI_Allreduce() call.
Synopsis#
#include "petscksp.h"
PetscErrorCode KSPCGUseSingleReduction(KSP ksp, PetscBool flg)
Logically Collective
Input Parameters#
ksp - the iterative context
flg - turn on or off the single reduction
Options Database Key#
-ksp_cg_single_reduction (true|false) - Merge inner products into single
MPI_Allreduce()
Notes#
The algorithm used in this case is described as Method 1 in [DAzevedoER93]. V. Eijkhout credits the algorithm initially to Chronopoulos and Gear.
It requires two extra work vectors than the conventional implementation in PETSc.
An active trust-region radius, a preconditioned trust-region norm, a negative objective target, or convergence at negative curvature
is unsupported and raises an error during KSPSolve() when this variant is enabled.
This variant does not compute the objective returned by KSPCGGetObjFcn() or the solution norm returned by KSPCGGetTRSolutionNorm().
See also KSPPIPECG, KSPPIPECR, and KSPGROPPCG that use non-blocking reductions. Pipelined Krylov Methods,
References#
EF D’Azevedo, VL Eijkhout, and CH Romine. Conjugate gradient algorithms with reduced synchronization overhead on distributed memory multiprocessors. Computer Science Technical Report CS-93-185, University of Tennessee, Knoxville, 1993.
See Also#
KSP: Linear System Solvers, Pipelined Krylov Methods, KSP, KSPCG, KSPGMRES, KSPPIPECG, KSPPIPECR, KSPGROPPCG
Level#
intermediate
Location#
Implementations#
KSPCGUseSingleReduction_CG() in src/ksp/ksp/impls/cg/cg.c
Index of all KSP routines
Table of Contents for all manual pages
Index of all manual pages