The SPIKE algorithm is a hybrid parallel solver for banded linear systems developed by Eric Polizzi and Ahmed Sameh.
Description
The SPIKE algorithm deals with a linear system AX = F, where A is a banded
matrix of bandwidth much less than
, and F is an
matrix containing
right-hand sides. It is divided into a preprocessing stage and a postprocessing stage.
Preprocessing stage
In the preprocessing stage, the linear system AX = F is partitioned into a block tridiagonal form

Assume, for the time being, that the diagonal blocks Aj (j = 1,…,p with p ≥ 2) are nonsingular. Define a block diagonal matrix
- D = diag(A1,…,Ap),
then D is also nonsingular. Left-multiplying D−1 to both sides of the system gives

which is to be solved in the postprocessing stage. Left-multiplication by D−1 is equivalent to solving
systems of the form
- Aj[Vj Wj Gj] = [Bj Cj Fj]
(omitting W1 and C1 for
, and Vp and Bp for
), which can be carried out in parallel.
Due to the banded nature of A, only a few leftmost columns of each Vj and a few rightmost columns of each Wj can be nonzero. These columns are called the spikes.
Postprocessing stage
Without loss of generality, assume that each spike contains exactly
columns (
is much less than
) (pad the spike with columns of zeroes if necessary). Partition the spikes in all Vj and Wj into
and 
where V (t)
j , V (b)
j , W (t)
j and W (b)
j are of dimensions
. Partition similarly all Xj and Gj into
and 
Notice that the system produced by the preprocessing stage can be reduced to a block pentadiagonal system of much smaller size (recall that
is much less than
)

Once all X (t)
j and X (b)
j are found, all X′j can be recovered with perfect parallelism via

SPIKE as a polyalgorithm
Despite being logically divided into two stages, computationally, the SPIKE algorithm comprises three stages:
- factorizing the diagonal blocks,
- computing the spikes,
- solving the reduced system.
Each of these stages can be accomplished in several ways, allowing a multitude of variants. Two notable variants are the recursive SPIKE algorithm for non-diagonally-dominant cases and the truncated SPIKE algorithm for diagonally-dominant cases. Depending on the variants, a system can be solved either exactly or approximately. In the latter case, SPIKE is used as a preconditioner for iterative schemes like Krylov subspace methods and iterative refinement.
Recursive SPIKE algorithm
Preprocessing stage
The first step of the preprocessing stage is to factorize the diagonal blocks Aj. For numerical stability, one can use LAPACK's XGBTRF routines to LU factorize them with partial pivoting. Alternatively, one can also factorize them without partial pivoting but with a "diagonal boosting" strategy. The latter method tackles the issue of singular diagonal blocks.
In concrete terms, the diagonal boosting strategy is as follows. Let 0ε denote a configurable "machine zero". In each step of LU factorization, we require that the pivot satisfy the condition
- |pivot| > 0ε‖A‖1.
If the pivot does not satisfy the condition, it is then boosted by

where ε is a positive parameter depending on the machine's unit roundoff, and the factorization continues with the boosted pivot. This can be achieved by modified versions of ScaLAPACK's XDBTRF routines.
Postprocessing stage
The two-partition case
The multiple-parition case
Truncated SPIKE algorithm
Implementations
Intel offers an implementation of the SPIKE algorithm under the name Intel Adaptive Spike-Based Solver.[1]
References
- Attention: This template ({{cite doi}}) is deprecated. To cite the publication identified by doi:10.1016/j.parco.2005.07.005, please use {{cite journal}} (if it was published in a bona fide academic journal, otherwise {{cite report}} with
|doi=10.1016/j.parco.2005.07.005 instead.
- Attention: This template ({{cite doi}}) is deprecated. To cite the publication identified by doi:10.1016/j.compfluid.2005.07.005, please use {{cite journal}} (if it was published in a bona fide academic journal, otherwise {{cite report}} with
|doi=10.1016/j.compfluid.2005.07.005 instead.
- ^ "Intel Adaptive Spike-Based Solver - Intel Software Network". Retrieved 2009-03-23.