openexr-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Openexr-devel] zip decompression and multithreading


From: Peter Hillman
Subject: Re: [Openexr-devel] zip decompression and multithreading
Date: Tue, 5 Jun 2018 10:12:46 +1200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0

Hi Uwe,

Are you perhaps reading the image a scanline at a time, for example by calling readPixels(y) ? If so, try pulling in the entire image in one go - i.e. use readPixels(minY,maxY) and see if that changes the threading behaviour. EXR only multithreads efficiently when you request enough scanlines in a single call for it to spread the work across all threads.

If you simultaneously read multiple EXR files but only a single scanline from each, you may still only get one thread decompressing. Some updates are on their way to make that possible by setting the globalThreadCount to 1 in that case, but I suspect you'd still get better performance by reading entire images one at a time.

Peter



On 05/06/18 04:22, Uwe wrote:
*Originates outside of Weta Digital



Hello everyone,

I am using openexr-2.2.1 on Linux and OSX.

I'm developing an application which loads a sequence of zip-compressed
EXR-files
and converts them into some kind of archive. I would like to load and
dispatch
images multithreaded. I'm testing my application on a 12-core machine
running linux,
so, watching performance by means of 'top' (the shell command) should
ideally give a performance of nearly 1200%, but I get only 150%. If I
analyze this
with gdb, I see that in fact I have 12 threads (the ones I created myself
outside openexr), but 11 of them are waiting at some mutex within
openexr, while the 12th
is busy decompressing somewhere inside zlib. What I would like to have
is 12 threads
decompressing...

One solution seems to be to compile openexr with option
--enable-threading=false,
so that openexr uses a single thread for everything, but my applications
runs 12 threads reading exr-files.
If I do this, I nearly get the full performance, something around 1050%
for 12 cores,
but this might slow down other decompression modes.

My question is:
1. Is there some reason for openexr to use only one thread for
decompressing
with zip? As far as I know zlib is thread-safe, so I'm puzzled...
2. Or is there a way to enforce multithreading during zip-decompression?

Best regards
Uwe Sassenberg


_______________________________________________
Openexr-devel mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/openexr-devel




reply via email to

[Prev in Thread] Current Thread [Next in Thread]