llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
27.7k stars 11.4k forks source link

Implement non-unit stride dense vectorization (difficult starter) #51660

Open aartbik opened 2 years ago

aartbik commented 2 years ago
Bugzilla Link 52318
Version unspecified
OS Linux
CC @joker-eph

Extended Description

Implement strided load/stores on dense arrays, so that vectorization does not need to be disabled when the access pattern is non-contiguous for the dense data structures.

Start by looking at denseUnitStrides() in https://github.com/llvm/llvm-project/blob/main/mlir/lib/Dialect/SparseTensor/Transforms/Sparsification.cpp

This will require tensor loads and stores that have become non-unit stride to compute the proper strides and use this during vectorization.

This is a non-trivial starter, and requires adding vector dialect support first (for the non-unit stride load and stores) and then very careful engineering within the sparse compiler codegen).

aartbik commented 2 years ago

assigned to @aartbik

llvmbot commented 1 year ago

Hi!

This issue may be a good introductory issue for people new to working on LLVM. If you would like to work on this issue, your first steps are:

1) Assign the issue to you. 2) Fix the issue locally. 3) Run the test suite locally. 3.1) Remember that the subdirectories under test/ create fine-grained testing targets, so you can e.g. use make check-clang-ast to only run Clang's AST tests. 4) Create a git commit 5) Run git clang-format HEAD~1 to format your changes. 6) Submit the patch to Phabricator. 6.1) Detailed instructions can be found here

For more instructions on how to submit a patch to LLVM, see our documentation.

If you have any further questions about this issue, don't hesitate to ask via a comment on this Github issue.

@llvm/issue-subscribers-good-first-issue