Generator

Adjacency list against CSR: identical work, different addresses

Rendered here at the parameters it defaults to, with every essay that calls it — which is the same list as the blast radius of changing it.
Adjacency list against CSR: identical work, different addressesBreadth-first search over the same graphs, laid out two ways. An adjacency list places each edge record where the allocator put it, so a scan is a pointer chase; a compressed-sparse-row array places every edge of a vertex contiguously, so a scan is a sweep. Both examine 12,288 edge slots at V = 2048. The modelled misses differ by a factor of 3.6, and the sequentiality of the two traces is 0.001 against 0.834.10³10³10⁴Vmodelled missesadjacency listCSR array96% miss27% miss64 lines × 8 elements, fully associative, LRU3.6× between two layouts of one graph

Adjacency list against CSR: identical work, different addresses

Breadth-first search over the same graphs, laid out two ways. An adjacency list places each edge record where the allocator put it, so a scan is a pointer chase; a compressed-sparse-row array places every edge of a vertex contiguously, so a scan is a sweep. Both examine 12,288 edge slots at V = 2048. The modelled misses differ by a factor of 3.6, and the sequentiality of the two traces is 0.001 against 0.834.

Drawn at 690 × 400, wide on the page. Everything above is what list-against-csr returns with no arguments; the caption is the generator's own, computed from the numbers in the drawing rather than written beside it.

1 essay calls list-against-csr. The drawing above is what it returns with no arguments at all; every call below passes it something, because a placement that passes nothing draws whichever member of the family the generator happens to default to rather than the one its essay argues about — which is what optcheck and figfill exist to catch.

Where it is called

Changing this generator changes every one of these figures.

The library, page 2 of 5 — where list-against-csr sits