Saturday, December 6, 2014

Resources usage during image processing

I have already written in several places that PhotoFlow only uses a small amount of resources during processing. Today I decided to give you a nice example of that: the screenshot below shows a 100 megapixels image (10k x 10k pixels) with a curves adjustment and a gaussian blur filter applied to it, being processed in 32-bits floating point precision and saved to disk. As you can see, the processing saturates the two available cores on my machine, while the memory usage remains as low as about 3% of the available 4GB of RAM.

This is actually a benefit of using VIPS as the underlying processing engine. VIPS splits the image in small chunks that are processed in as many concurrent threads as the number of cores on your machine. At any moment, only the active chunks are loaded into memory, thus avoiding the need of very large memory buffers. Thanks to that, PhotoFlow is able to load and process images of arbitrary size, even much larger than then available physical memory. The image data is stored in temporary disk buffers, therefore you need a sufficient amount of free disk space to process very large images. But apart from that, there is theoretically no limitation.

No comments:

Post a Comment