Article: Functional image processing in D
Vladimir Panteleev
vladimir at thecybershadow.net
Sun Mar 23 01:22:31 PDT 2014
On Saturday, 22 March 2014 at 11:25:05 UTC, Phil wrote:
> This is very cool. What are the performance implications of
> treating colour images as arrays of tuples rather than a flat
> array? For example, if I wanted to iterate through every
> channel of every pixel in an RGB image or modify the R channel
> of every pixel, could I generally expect the compiler to
> optimise the extra overhead away? Also, do you have any ideas
> on how you could vectorise code like this while still providing
> a nice API?
One might say that this approach has the innate benefit that the
loop (to iterate over each channel) will be unrolled explicitly :)
However, if you need to perform operations on individual
channels, it would probably be worthwhile to unpack a
multi-channel image into several images with just one channel.
I'm not familiar enough with vector instruction sets of current
CPUs to answer this confidently. E.g. if there exists an integer
vector multiply-and-add operation, then that could be used for
fast software alpha blending. That operation's restrictions would
dictate the optimal memory layout of the image. E.g. if the
operation requires that the bytes to multiply and add are
contiguous in memory, then it follows that the image should be
represented with each channel as a separate sub-image.
More information about the Digitalmars-d-announce
mailing list