Jump to content

SPIKE algorithm

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Kxx (talk | contribs) at 02:00, 23 March 2009 (Implmentations). 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.[1][2]

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. 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 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 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.

Implementations

Intel offers an implementation of the SPIKE algorithm under the name Intel Adaptive Spike-Based Solver.[3]

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.