Re: EXR texture memory overhead

Larry Gritz <[email protected]> Fri, 16 Sep 2016 11:55:20 -0700
Newsgroups gmane.comp.video.openexr.devel
Message-ID <[email protected]>
So it's holding two tiles, per thread, per open tiled input file!

2 x RGBA half 64^2 tiles -> 64k per thread per file
x 1000 files x 16 threads -> 1 GB, just for this source of overhead, not counting anything else like header data or other allocations

For 64k (two reasonably sized tiles), maybe it would be better to do a stack allocation just when the extra decode buffer is needed, so there would be no call to malloc/free and no retained memory. Switch back to a true malloc only for the rare case of huge tiles where it doesn't seem safe to do a stack allocation.\?


> On Sep 16, 2016, at 11:45 AM, Karl Rasche <[email protected]> wrote:
> 
> 
> 
> But it's not optimal for a use pattern like TextureSystem where the typical request is ONE tile, and the next tile it wants may not even be adjacent.
> 
> Whoops. What I pointed at look like its only the case if you read through Imf::InputFile.  If you use Imf::TiledInputFile (like in exrinput.cpp), I don't think you hit that buffering.
> 
> 
> 
> Wait, I'm not quite sure how threads play into this. Is this allocated framebuffer part of the ImageInptut itself? Do threads lock to use it? Or is this per thread, per file?
> 
> I think the per-thread part is around ImfTiledInputFile.cpp::267 <https://github.com/openexr/openexr/blob/develop/OpenEXR/IlmImf/ImfTiledInputFile.cpp#L267>. Each TileBuffer has an uncompressedData ptr which is what the compressor fills during decode. 
> 
> This *should* just be a tile per thread, but it does look like it's held over the lifetime of the ImfTiledInputFile. 
> 
> 

--
Larry Gritz
[email protected]

_______________________________________________
Openexr-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/openexr-devel