Misplaced Pages

Gather/scatter (vector addressing)

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.

This is an old revision of this page, as edited by Primefac (talk | contribs) at 00:14, 17 February 2017 (Reverted edits by Fmadd (talk) to last version by Ralph Corderoy). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Revision as of 00:14, 17 February 2017 by Primefac (talk | contribs) (Reverted edits by Fmadd (talk) to last version by Ralph Corderoy)(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff) This article is about the vector addressing type. For the I/O method, see Vectored I/O.

Gather-scatter is a type of memory addressing that often arises when addressing vectors in sparse linear algebra operations. It is the vector-equivalent of register indirect addressing, with gather involving indexed reads and scatter indexed writes. Vector processors (and some SIMD units in CPUs) have hardware support for gather-scatter operations, providing instructions such as Load Vector Indexed for gather and Store Vector Indexed for scatter.

Definitions

Gather

A sparsely-populated vector y {\displaystyle y} holding N {\displaystyle N} non-empty elements can be represented by two densely-populated vectors of length N {\displaystyle N} ; x {\displaystyle x} containing the non-empty elements of y {\displaystyle y} , and i d x {\displaystyle idx} giving the index in y {\displaystyle y} where x {\displaystyle x} 's element is located. The gather of y {\displaystyle y} into x {\displaystyle x} , denoted x y | x {\displaystyle x\leftarrow y|_{x}} , assigns x ( i ) = y ( i d x ( i ) ) {\displaystyle x(i)=y(idx(i))} with i d x {\displaystyle idx} having already been calculated. A C implementation is

for (i=0; i<N; ++i)
  x = y];

Scatter

The sparse scatter, denoted y | x x {\displaystyle y|_{x}\leftarrow x} is the reverse operation. It copies the values of x {\displaystyle x} into the corresponding locations in the sparsely-populated vector y {\displaystyle y} , i.e. y ( i d x ( i ) ) = x ( i ) {\displaystyle y(idx(i))=x(i)} .

for (i=0; i<N; ++i)
  y] = x;

See also

References

  1. BLAS Technical Forum standard, Chapter 3: Sparse BLAS.
Category: