The SPIKE algorithm is a hybrid parallel solver for narrow-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 (
) 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 narrow-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:
- LU-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. In particular, the former uses LU factorization without pivoting but a diagonal boosting strategy to handle the cases where the block diagonal matrix D is singular; it can also serve as the preconditioner for iterative schemes like Krylov subspace methods and iterative refinement.
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.