Comment by voidmain

Comment by voidmain 16 hours ago

3 replies

The paper defines this structure

    struct Strip {
        x: u16,
        y: u16,
        alpha_idx_fill_gap: u32,
    }
which looks like it is 64 bits (8 bytes) in size,

and then says

> Since a single strip has a memory footprint of 64 bytes and a single alpha value is stored as u8, the necessary storage amounts to around 259 ∗ 64 + 7296 ≈ 24KB

am I missing something, or is it actually 259*8 + 7296 ≈ 9KB?

Vallaaaris 9 hours ago

Hi, author here, you are right it seems like I mixed up bytes and bits here. Embarassing mistake, thanks for catching this!

Benjamin_Dobell 13 hours ago

Admittedly I won't have time to go through the code. However, a quick look at the thesis, there's a section on multi-threading.

Whilst it's still very possible this was a simple mistake, an alternate explanation could be that each strip is allocated to a unique cache line. On modern x86_64 systems, a cache line is 64 bytes. If the renderer is attempting to mitigate false sharing, then it may be allocating each strip in its own cache line, instead of contiguously in memory.

shoo 14 hours ago

i think you are correct, memory use of the implementation is overestimated in that paragraph, as you suggest it is lower. from a quick skim read, the benchmarks section focuses on comparing running time against other libraries, there isn't a comparison of storage.