Skip to content

Spanner Research Questions

Patrick Lavin edited this page Jul 6, 2026 · 1 revision

The Spatter project was initially designed as a way to study the ability of CPUs and GPUs to perform irregular memory access by focusing on gather and scatter instructions. We pulled memory access patterns from applications of interest to create inputs for Spatter. However, the process we used to create the inputs threw out a bunch of information, and so it was hard to make a claim that the Spatter inputs derived from the traces were representative of the source applications. The best we came up with was showing that runs of Spatter were uncorrelated with STREAM; we knew they were measuring something different, but we couldn't claim that improving the performance of Spatter would improve the performance of the source apps.

With Spanner, our goal is to product a benchmark with memory behavior representative of applications of interest to Sandia and the NNSA. With Spanner, we plan to use neural nets of some sort to reproduce memory application behavior.

At a minimum, the project should investigate the following problems:

  1. What NN architectures are appropriate for representing memory traces?
  2. How large of a neural net or latent representation do we need to accurately represent memory traces from our applications?
  3. Is it feasible to embed the decoder of an LSTM into a benchmark, such that it does not interfere much with the measurement of the generated memory access stream? This will involve:
    1. Estimating the computational requirements of NNs
    2. Implementing an LSTM in a lightweight framework such as LiteRT and measuring the performance
    3. Possibly comparing the benchmark results to simulated results
  4. Co-design of the benchmark. Tweaking the size of the latent and measuring the impact on the accuracy of the generated traces and on the accuracy of the benchmark.
  5. A final study, comparing how the source applications correlate with Spatter results on various CPU platforms

Other questions I would like to investigate:

  1. Can phase detection enable us to shrink either the latent representation or the entire encoder/decoder?
  2. Can we parameterize the NNs so that we can use one latent to generate multiple traces?
  3. Can GraphRNNs allow us to embed dependency information into the benchmark?
  4. How do we do multi-rank and multi-threaded runs?

Clone this wiki locally