DOI: 10.1145/3715125 ISSN: 1544-3566

CesASMe and Staticdeps: static detection of memory-carried dependencies for code analyzers

Théophile Bastian, Hugo Pompougnac, Alban Dutilleul, Fabrice Rastello

A variety of code analyzers, such as

IACA
,
uiCA
,
llvm-mca
or
Ithemal
, strive to statically predict the throughput of a computation kernel. Each analyzer is based on its own simplified CPU model reasoning at the scale of a basic block. Facing this diversity, evaluating their strengths and weaknesses is important to guide both their usage and their enhancement.

We present

CesASMe
, a fully-tooled solution to evaluate code analyzers on C-level benchmarks composed of a benchmark derivation procedure that feeds an evaluation harness. We conclude that memory-carried data dependencies are a major source of imprecision for these tools. We tackle this issue with
staticdeps
, a static analyzer extracting memory-carried data dependencies, including across loop iterations, from an assembly basic block. We integrate its output to
uiCA
, a state-of-the-art code analyzer, to evaluate
staticdeps
’ impact on a code analyzer’s precision through
CesASMe
.

More from our Archive