> Klaus> Some things were very easy, if there are no spatial dependencies, > Klaus> then you just split the image in vertical slices and have each > Klaus> thread process each slice, very easy and scales very well. > > Obviously. Most photo manipulations can be written as transformation > matrices and could in principle be split into a separate thread per > pixel.
Only the final color transform is a simple matrix. As I wrote, they are split vertically - thread synchronization is expensive, so a per-pixel thread is > Klaus> The sharpen/denoiser required a job/workqueue to be efficient. > > Why's that? Isn't that basically just the same thing as above except > with a bit of (read-only) overlap? No it isn't - it a very advanced algorithm, that denoises and sharpens in FFT (frequency domain) space. It is not completely unlike the wavelet denoiser in dcraw, but it is much better at preserving detalis in the denoiser and preventing oversharpining. The processing is done in blocks of 128x128 pixels, so it was obvious to create a job queue for handling these blocks. I have a writeup planned, where I will write how it differs from ordinary sharpen/denoisers. > Klaus> Basic render (color correct), demosaic, denoise/sharpen, lensfun > Klaus> (the processing done outside of liblensfun), resample (image > Klaus> resize), rotate. > > What other filters could we expect to be parallelised in future? There are currently are no (slow) filters that are not multithreaded. > Klaus> Furthermore the RawSpeed loader is multithreaded when possible > Klaus> (DNG images). > > Why can't they all be multi-threaded? As I wrote above, Lossless JPEG is impossible to multithread. I have done some tests where I split the decoder up in two parallel stages, but the memory overhead and synchronization made it quite a bit slower. > Thanks for the status update. It's quite interesting. No problem. :) > Martin Regards, Klaus Post http://www.klauspost.com _______________________________________________ Rawstudio-dev mailing list [email protected] http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-dev
