Jump to content

SPIKE algorithm

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Chowbok (talk | contribs) at 01:04, 27 July 2009 (References: clean up, Removed: ® (2),, removed Stub tag using AWB). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

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 Xj 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:

  1. LU-factorizing the diagonal blocks,
  2. computing the spikes,
  3. 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

  1. 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.
  2. 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.
  3. ^ "Intel Adaptive Spike-Based Solver - Intel Software Network". Retrieved 2009-03-23.