  Stencil computations represent a very common class of nested loops in
scientific and engineering applications. Exploiting vector units in modern CPUs
is crucial to achieving peak performance. Previous vectorization approaches
often consider the data space, in particular the innermost unit-strided loop.
It leads to the well-known data alignment conflict problem that vector loads
are overlapped due to the data sharing between continuous stencil computations.
This paper proposes a novel temporal vectorization scheme for stencils. It
vectorizes the stencil computation in the iteration space and assembles points
with different time coordinates in one vector. The temporal vectorization leads
to a small fixed number of vector reorganizations that is irrelevant to the
vector length, stencil order, and dimension. Furthermore, it is also applicable
to Gauss-Seidel stencils, whose vectorization is not well-studied. The
effectiveness of the temporal vectorization is demonstrated by various Jacobi
and Gauss-Seidel stencils.
