  This paper describes a new benchmark tool, Spatter, for assessing memory
system architectures in the context of a specific category of indexed accesses
known as gather and scatter. These types of operations are increasingly used to
express sparse and irregular data access patterns, and they have widespread
utility in many modern HPC applications including scientific simulations, data
mining and analysis computations, and graph processing. However, many
traditional benchmarking tools like STREAM, STRIDE, and GUPS focus on
characterizing only uniform stride or fully random accesses despite evidence
that modern applications use varied sets of more complex access patterns.
  Spatter is an open-source benchmark that provides a tunable and configurable
framework to benchmark a variety of indexed access patterns, including
variations of gather/scatter that are seen in HPC mini-apps evaluated in this
work. The design of Spatter includes tunable backends for OpenMP and CUDA, and
experiments show how it can be used to evaluate 1) uniform access patterns for
CPU and GPU, 2) prefetching regimes for gather/scatter, 3) compiler
implementations of vectorization for gather/scatter, and 4) trace-driven "proxy
patterns" that reflect the patterns found in multiple applications. The results
from Spatter experiments show that GPUs typically outperform CPUs for these
operations, and that Spatter can better represent the performance of some
cache-dependent mini-apps than traditional STREAM bandwidth measurements.
