I found out that sizes of tiled subviews for convolutions are bigger by 1 than they should. Let’s consider 1D convolution case without batches or channels. Furthermore let m
iterate over the output and n
over the kernel then input is accessed with m + n
. In tiling subview sizes for convolutions are computed by applying requested tile size together with kernel size to the above mentioned expression thus let’s say for tile size of 2
the subview size is 2 + size(n)
, which is bigger by one as it should since we move kernel only once. I submitted an ugly fix for that but was asked to initiate a discussion here in order to find the best possible solution. I would appreciate any ideas for improvement! Thanks.
Thanks @limo1996 for starting this thread. A bit more detail maybe. The affine maps for the output, filter and input in convolution (i.e linalg.conv
) AFAIK are
affine_map[(d0, d1, d2, d3, d4, d5, d6) -> (d0, d1, d2, d3)>]
affine_map[(d0, d1, d2, d3, d4, d5, d6) -> (d3, d4, d5, d6)>]
affine_map[(d0, d1, d2, d3, d4, d5, d6) -> (d0, d4, d2 + d5, d3 + d6)>]
The maps here are used for indexing, so the range of these are [0...,dim(..)-1]
. When applied to compute sizes the value substituted is dim(...)
, which works when the AffineExpr
is just an AffineDimExpr
. For AffineBinaryOpExpr
this becomes incorrect.
The correct solution here seems to be when computing the sizes, instead of just setting the value to dim(..)
, we need to set the value to dim(..)-1
and add a +1
the end to get the actual size. This would require some change to the size
computation here. Instead of applyMapToValues
need to use subViewSizes - 1
and then add 1
to get the final size.
@nicolasvasilache to verify.
Yup it’s just an issue of handling of closed and open intervals.
The range itself is half-open. Before composing, it needs to be turned into a closed interval (i.e. subtract 1 from the upper bound). After the composition, the result needs to be made half-open again (i.e. add 1 to the upper bound).
Ok perfect. Thanks @MaheshRavishankar and @nicolasvasilache . I will change my patch according to your suggestions!