QUDA  0.9.0
Public Member Functions | Public Attributes | List of all members
quda::SolverParam Struct Reference

#include <invert_quda.h>

Inheritance diagram for quda::SolverParam:
Inheritance graph
[legend]

Public Member Functions

 SolverParam ()
 
 SolverParam (const QudaInvertParam &param)
 
 SolverParam (const SolverParam &param)
 
 ~SolverParam ()
 
void updateInvertParam (QudaInvertParam &param, int offset=-1)
 
void updateRhsIndex (QudaInvertParam &param)
 

Public Attributes

QudaInverterType inv_type
 
QudaInverterType inv_type_precondition
 
void * preconditioner
 
void * deflation_op
 
QudaResidualType residual_type
 
QudaUseInitGuess use_init_guess
 
QudaComputeNullVector compute_null_vector
 
double delta
 
bool use_sloppy_partial_accumulator
 
int solution_accumulator_pipeline
 
int max_res_increase
 
int max_res_increase_total
 
int heavy_quark_check
 
int pipeline
 
double tol
 
double tol_restart
 
double tol_hq
 
bool compute_true_res
 
double true_res
 
double true_res_hq
 
int maxiter
 
int iter
 
QudaPrecision precision
 
QudaPrecision precision_sloppy
 
QudaPrecision precision_precondition
 
QudaPreserveSource preserve_source
 
int overlap_precondition
 
int num_src
 
int num_offset
 
double offset [QUDA_MAX_MULTI_SHIFT]
 
double tol_offset [QUDA_MAX_MULTI_SHIFT]
 
double tol_hq_offset [QUDA_MAX_MULTI_SHIFT]
 
double true_res_offset [QUDA_MAX_MULTI_SHIFT]
 
double iter_res_offset [QUDA_MAX_MULTI_SHIFT]
 
double true_res_hq_offset [QUDA_MAX_MULTI_SHIFT]
 
int Nsteps
 
int Nkrylov
 
int precondition_cycle
 
double tol_precondition
 
int maxiter_precondition
 
double omega
 
QudaSchwarzType schwarz_type
 
double secs
 
double gflops
 
QudaPrecision precision_ritz
 
int nev
 
int m
 
int deflation_grid
 
int rhs_idx
 
int eigcg_max_restarts
 
int max_restart_num
 
double inc_tol
 
double eigenval_tol
 
QudaVerbosity verbosity_precondition
 
bool is_preconditioner
 verbosity to use for preconditioner More...
 
bool global_reduction
 whether the solver acting as a preconditioner for another solver More...
 
QudaExtLibType extlib_type
 whether to use a global or local (node) reduction for this solver More...
 

Detailed Description

SolverParam is the meta data used to define linear solvers.

Definition at line 15 of file invert_quda.h.

Constructor & Destructor Documentation

◆ SolverParam() [1/3]

quda::SolverParam::SolverParam ( )
inline

Default constructor

Definition at line 209 of file invert_quda.h.

◆ SolverParam() [2/3]

quda::SolverParam::SolverParam ( const QudaInvertParam param)
inline

Constructor that matches the initial values to that of the QudaInvertParam instance

Parameters
paramThe QudaInvertParam instance from which the values are copied

Definition at line 217 of file invert_quda.h.

References fused_exterior_ndeg_tm_dslash_cuda_gen::i, num_offset, offset, param, QUDA_GMRESDR_PROJ_INVERTER, QUDA_INC_EIGCG_INVERTER, rhs_idx, tol_hq_offset, and tol_offset.

◆ SolverParam() [3/3]

quda::SolverParam::SolverParam ( const SolverParam param)
inline

◆ ~SolverParam()

quda::SolverParam::~SolverParam ( )
inline

Definition at line 290 of file invert_quda.h.

Member Function Documentation

◆ updateInvertParam()

void quda::SolverParam::updateInvertParam ( QudaInvertParam param,
int  offset = -1 
)
inline

Update the QudaInvertParam with the data from this

Parameters
paramthe QudaInvertParam to be updated

Definition at line 296 of file invert_quda.h.

References gflops, fused_exterior_ndeg_tm_dslash_cuda_gen::i, iter, iter_res_offset, num_offset, offset, param, reduceDouble(), rhs_idx, secs, true_res, true_res_hq, true_res_hq_offset, and true_res_offset.

Referenced by invertMultiShiftQuda(), invertMultiSrcQuda(), invertQuda(), quda::multigrid_solver::multigrid_solver(), and updateMultigridQuda().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateRhsIndex()

void quda::SolverParam::updateRhsIndex ( QudaInvertParam param)
inline

Definition at line 318 of file invert_quda.h.

References param, and rhs_idx.

Member Data Documentation

◆ compute_null_vector

QudaComputeNullVector quda::SolverParam::compute_null_vector

◆ compute_true_res

bool quda::SolverParam::compute_true_res

◆ deflation_grid

int quda::SolverParam::deflation_grid

◆ deflation_op

void* quda::SolverParam::deflation_op

Deflation operator

Definition at line 36 of file invert_quda.h.

Referenced by quda::IncEigCG::initCGsolve(), and quda::IncEigCG::operator()().

◆ delta

double quda::SolverParam::delta

◆ eigcg_max_restarts

int quda::SolverParam::eigcg_max_restarts

Definition at line 192 of file invert_quda.h.

Referenced by quda::IncEigCG::operator()().

◆ eigenval_tol

double quda::SolverParam::eigenval_tol

Definition at line 195 of file invert_quda.h.

Referenced by quda::IncEigCG::operator()().

◆ extlib_type

QudaExtLibType quda::SolverParam::extlib_type

whether to use a global or local (node) reduction for this solver

Which external lib to use in the solver

Definition at line 204 of file invert_quda.h.

Referenced by quda::IncEigCG::RestartVT(), quda::GMResDR::RestartVZH(), and quda::GMResDR::UpdateSolution().

◆ gflops

double quda::SolverParam::gflops

◆ global_reduction

bool quda::SolverParam::global_reduction

whether the solver acting as a preconditioner for another solver

Definition at line 201 of file invert_quda.h.

Referenced by quda::MG::createSmoother(), quda::fillFGMResDRInnerSolveParam(), quda::fillInnerSolveParam(), quda::MG::MG(), quda::MR::operator()(), and quda::SD::operator()().

◆ heavy_quark_check

int quda::SolverParam::heavy_quark_check

Enable pipeline solver

Definition at line 82 of file invert_quda.h.

Referenced by quda::CG::operator()(), quda::BiCGstab::operator()(), and quda::BiCGstabL::operator()().

◆ inc_tol

double quda::SolverParam::inc_tol

Definition at line 194 of file invert_quda.h.

Referenced by quda::IncEigCG::initCGsolve(), and quda::IncEigCG::operator()().

◆ inv_type

QudaInverterType quda::SolverParam::inv_type

◆ inv_type_precondition

QudaInverterType quda::SolverParam::inv_type_precondition

◆ is_preconditioner

bool quda::SolverParam::is_preconditioner

◆ iter

int quda::SolverParam::iter

◆ iter_res_offset

double quda::SolverParam::iter_res_offset[QUDA_MAX_MULTI_SHIFT]

Iterated L2 residual norm achieved in multi shift solver for each offset

Definition at line 148 of file invert_quda.h.

Referenced by quda::MultiShiftCG::operator()(), and updateInvertParam().

◆ m

int quda::SolverParam::m

◆ max_res_increase

int quda::SolverParam::max_res_increase

This parameter determines how many total reliable update residual increases we tolerate before terminating the solver, i.e., how long do we want to keep trying to converge

Definition at line 74 of file invert_quda.h.

Referenced by quda::CG::operator()(), quda::PreconCG::operator()(), quda::GCR::operator()(), and quda::MultiShiftCG::operator()().

◆ max_res_increase_total

int quda::SolverParam::max_res_increase_total

After how many iterations shall the heavy quark residual be updated

Definition at line 79 of file invert_quda.h.

Referenced by quda::CG::operator()(), quda::PreconCG::operator()(), quda::GCR::operator()(), and quda::MultiShiftCG::operator()().

◆ max_restart_num

int quda::SolverParam::max_restart_num

Definition at line 193 of file invert_quda.h.

Referenced by quda::IncEigCG::initCGsolve().

◆ maxiter

int quda::SolverParam::maxiter

◆ maxiter_precondition

int quda::SolverParam::maxiter_precondition

Maximum number of iterations allowed in the inner solver

Definition at line 167 of file invert_quda.h.

Referenced by quda::fillEigCGInnerSolverParam(), quda::fillFGMResDRInnerSolveParam(), quda::fillInnerSolveParam(), quda::fillInnerSolverParam(), and quda::MG::generateNullVectors().

◆ nev

int quda::SolverParam::nev

◆ Nkrylov

int quda::SolverParam::Nkrylov

Maximum size of Krylov space used by solver

Definition at line 158 of file invert_quda.h.

Referenced by quda::MG::createSmoother(), quda::MG::generateNullVectors(), and quda::MG::MG().

◆ Nsteps

int quda::SolverParam::Nsteps

Number of steps in s-step algorithms

Definition at line 155 of file invert_quda.h.

◆ num_offset

int quda::SolverParam::num_offset

< Number of offsets in the multi-shift solver

Definition at line 133 of file invert_quda.h.

Referenced by quda::MultiShiftCG::operator()(), SolverParam(), and updateInvertParam().

◆ num_src

int quda::SolverParam::num_src

Definition at line 128 of file invert_quda.h.

Referenced by quda::Solver::solve(), and quda::CG::solve().

◆ offset

double quda::SolverParam::offset[QUDA_MAX_MULTI_SHIFT]

Offsets for multi-shift solver

Definition at line 136 of file invert_quda.h.

Referenced by quda::MultiShiftCG::operator()(), SolverParam(), and updateInvertParam().

◆ omega

double quda::SolverParam::omega

Relaxation parameter used in GCR-DD (default = 1.0)

Definition at line 170 of file invert_quda.h.

Referenced by quda::MGParam::MGParam(), and quda::MR::operator()().

◆ overlap_precondition

int quda::SolverParam::overlap_precondition

Number of sources in the multi-src solver

Definition at line 124 of file invert_quda.h.

Referenced by quda::XSD::XSD().

◆ pipeline

int quda::SolverParam::pipeline

◆ precision

QudaPrecision quda::SolverParam::precision

◆ precision_precondition

QudaPrecision quda::SolverParam::precision_precondition

◆ precision_ritz

QudaPrecision quda::SolverParam::precision_ritz

< The precision of the Ritz vectors

Definition at line 185 of file invert_quda.h.

Referenced by quda::IncEigCG::eigCGsolve(), and quda::IncEigCG::initCGsolve().

◆ precision_sloppy

QudaPrecision quda::SolverParam::precision_sloppy

◆ precondition_cycle

int quda::SolverParam::precondition_cycle

Number of preconditioner cycles to perform per iteration

Definition at line 161 of file invert_quda.h.

Referenced by quda::MG::generateNullVectors(), quda::GCR::operator()(), and quda::GCR::~GCR().

◆ preconditioner

void* quda::SolverParam::preconditioner

Preconditioner instance, e.g., multigrid

Definition at line 31 of file invert_quda.h.

Referenced by quda::Solver::create(), and quda::MG::MG().

◆ preserve_source

QudaPreserveSource quda::SolverParam::preserve_source

◆ residual_type

QudaResidualType quda::SolverParam::residual_type

Whether to use the L2 relative residual, L2 absolute residual or Fermilab heavy-quark residual, or combinations therein to determine convergence. To require that multiple stopping conditions are satisfied, use a bitwise OR as follows:

p.residual_type = (QudaResidualType) (QUDA_L2_RELATIVE_RESIDUAL | QUDA_HEAVY_QUARK_RESIDUAL);Whether to use an initial guess in the solver or not

Definition at line 47 of file invert_quda.h.

Referenced by quda::Solver::convergence(), quda::MultiShiftSolver::convergence(), quda::Solver::convergenceHQ(), quda::Solver::convergenceL2(), quda::IncEigCG::eigCGsolve(), quda::MG::generateNullVectors(), quda::CG::operator()(), quda::MPCG::operator()(), quda::PreconCG::operator()(), quda::BiCGstab::operator()(), quda::SimpleBiCGstab::operator()(), quda::MPBiCGstab::operator()(), quda::BiCGstabL::operator()(), quda::GCR::operator()(), quda::MultiShiftCG::operator()(), quda::GMResDR::operator()(), quda::Solver::PrintStats(), quda::Solver::PrintSummary(), and quda::CG::solve().

◆ rhs_idx

int quda::SolverParam::rhs_idx

◆ schwarz_type

QudaSchwarzType quda::SolverParam::schwarz_type

Whether to use additive or multiplicative Schwarz preconditioning The time taken by the solver

Definition at line 175 of file invert_quda.h.

Referenced by quda::GCR::operator()().

◆ secs

double quda::SolverParam::secs

◆ solution_accumulator_pipeline

int quda::SolverParam::solution_accumulator_pipeline

This parameter determines how many consective reliable update residual increases we tolerate before terminating the solver, i.e., how long do we want to keep trying to converge

Definition at line 69 of file invert_quda.h.

Referenced by quda::CG::operator()().

◆ tol

double quda::SolverParam::tol

◆ tol_hq

double quda::SolverParam::tol_hq

◆ tol_hq_offset

double quda::SolverParam::tol_hq_offset[QUDA_MAX_MULTI_SHIFT]

Solver tolerance for each shift when refinement is applied using the heavy-quark residual

Definition at line 142 of file invert_quda.h.

Referenced by SolverParam().

◆ tol_offset

double quda::SolverParam::tol_offset[QUDA_MAX_MULTI_SHIFT]

Solver tolerance for each offset

Definition at line 139 of file invert_quda.h.

Referenced by quda::MultiShiftCG::operator()(), and SolverParam().

◆ tol_precondition

double quda::SolverParam::tol_precondition

◆ tol_restart

double quda::SolverParam::tol_restart

Solver tolerance in the heavy quark residual norm

Definition at line 91 of file invert_quda.h.

Referenced by quda::fillInitCGSolverParam(), and quda::IncEigCG::initCGsolve().

◆ true_res

double quda::SolverParam::true_res

◆ true_res_hq

double quda::SolverParam::true_res_hq

◆ true_res_hq_offset

double quda::SolverParam::true_res_hq_offset[QUDA_MAX_MULTI_SHIFT]

Actual heavy quark residual norm achieved in solver for each offset

Definition at line 151 of file invert_quda.h.

Referenced by invertMultiShiftQuda(), quda::MultiShiftCG::operator()(), quda::Solver::solve(), quda::CG::solve(), and updateInvertParam().

◆ true_res_offset

double quda::SolverParam::true_res_offset[QUDA_MAX_MULTI_SHIFT]

Actual L2 residual norm achieved in solver for each offset

Definition at line 145 of file invert_quda.h.

Referenced by invertMultiShiftQuda(), quda::MultiShiftCG::operator()(), quda::Solver::solve(), quda::CG::solve(), and updateInvertParam().

◆ use_init_guess

QudaUseInitGuess quda::SolverParam::use_init_guess

◆ use_sloppy_partial_accumulator

bool quda::SolverParam::use_sloppy_partial_accumulator

This parameter determines how often we accumulate into the solution vector from the direction vectors in the solver. E.g., running with solution_accumulator_pipeline = 4, means we will update the solution vector every four iterations using the direction vectors from the prior four iterations. This increases performance of mixed-precision solvers since it means less high-precision vector round-trip memory travel, but requires more low-precision memory allocation.

Definition at line 59 of file invert_quda.h.

Referenced by quda::fillEigCGInnerSolverParam(), quda::fillInitCGSolverParam(), quda::CG::operator()(), quda::PreconCG::operator()(), quda::BiCGstab::operator()(), quda::BiCGstabL::operator()(), quda::MultiShiftCG::operator()(), and quda::CG::solve().

◆ verbosity_precondition

QudaVerbosity quda::SolverParam::verbosity_precondition

The documentation for this struct was generated from the following file: