In this exercise you will learn how to use functors
instead of lambda
functions as kernels.
Now that global memory access is coalesced and optimized using vec
, you can
further optimize by using a linear buffer. Given that the blur filter is
symmetrical, the same result can be achieved by applying the same linear filter
to rows and columns. Instead of using a lambda function for the kernel, a
functor, which can be reused, is preferable.
To implement this, you need to create a functor class that accepts an input accessor, an output accessor, an accessor containing the linear filter, and a parameter that specifies the direction in which the filter will be applied.
Keep in mind that in order to apply the linear filter twice, an intermediate buffer of the same size as the input buffer is required to hold the result of the first pass.
The kernel function must consider both the direction in which the filter needs to be applied and the necessity to store the intermediate image while preserving the halo. It's important to note that the halo is not required for the final image.
For DevCloud via JupiterLab follow these instructions.
For DPC++: instructions.
For AdaptiveCpp: instructions.