  Even though iterative solvers like the Conjugate Gradients method (CG) have
been studied for over fifty years, fault tolerance for such solvers has seen
much attention in recent years. For iterative solvers, two major reliable
strategies of recovery exist: checkpoint-restart for backward recovery, or some
type of redundancy technique for forward recovery. Important redundancy
techniques like ABFT techniques for sparse matrix-vector products (SpMxV) have
recently been proposed, which increase the resilience of CG methods. These
techniques offer limited recovery options, and introduce a tolerable overhead.
In this work, we study a more powerful resilience concept, which is redundant
multithreading. It offers more generic and stronger recovery guarantees,
including any soft faults in CG iterations (among others covering ABFT SpMxV),
but also requires more resources. We carefully study this redundancy/efficiency
conflict. We propose a fault tolerant CG method, called TwinCG, which
introduces minimal wallclock time overhead, and significant advantages in
detection and correction strategies. Our method uses Dual Modular Redundancy
instead of the more expensive Triple Modular Redundancy; still, it retains the
TMR advantages of fault correction. We describe, implement, and benchmark our
iterative solver, and compare it in terms of efficiency and fault tolerance
capabilities to state-of-the-art techniques. We find that before
parallelization, TwinCG introduces around 5-6% runtime overhead compared to
standard CG, and after parallelization efficiently uses BLAS. In the presence
of faults, it reliably performs forward recovery for a range of problems,
outperforming SpMxV ABFT solutions.
