{{#invoke:Hatnote|hatnote}}

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 have hardware support for gather-scatter operations, providing instructions such as Load Vector Indexed for gather and Store Vector Indexed for scatter.

## Definition

Denoting by ${\displaystyle idx}$ the list of indices of sparse vector ${\displaystyle x}$, the sparse gather of dense ${\displaystyle y}$ into ${\displaystyle x}$ denoted ${\displaystyle x\leftarrow y|_{x}}$, assigns ${\displaystyle x(i)=y(idx(i))}$.[1]

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

## Examples

Gather:

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

Scatter:

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