Reorder linalg.conv indexing_maps loop order
authorAhmed S. Taei <ataei@google.com>
Wed, 16 Sep 2020 18:11:17 +0000 (18:11 +0000)
committerAhmed S. Taei <ataei@google.com>
Tue, 22 Sep 2020 04:53:57 +0000 (04:53 +0000)
commit9b47525824df9be5ae23c39e7ce0d220d12f85e5
tree1f864ab16d196ee5d561c6f1da98444caf783f6c
parent9c7b58080ebd7ad3a63b892b5ae7f92e41587327
Reorder linalg.conv indexing_maps loop order

Change the indexing map to iterate over the (b, x0, x1, z0, z1, q, k) instead of (b, x0, x1, k, q, z0, z1) to evaluate the convolution expression:
Y[b, x0, x1, k] = sum(W[z0, z1, q, k] * X[b, x0 + z0, x1 + z1, q], z0, z1, q)

This allows llvm auto vectorize to work and has better locality resulting significant performance improvments

Differential Revision: https://reviews.llvm.org/D87781
mlir/include/mlir/Dialect/Linalg/IR/LinalgStructuredOps.td
mlir/test/Dialect/Linalg/affine.mlir
mlir/test/Dialect/Linalg/loops.mlir
mlir/test/Dialect/Linalg/tile_conv.mlir