llvm-project
1af1cc21 - [mlir][OpenMP] Translation support for taskloop construct (#174386)

Commit
14 days ago
[mlir][OpenMP] Translation support for taskloop construct (#174386) This PR replaces #166903 This implements translation for taskloop, along with DSA clauses. Other clauses will follow immediately after this is merged. This patch was collaborative work by myself, @kaviya2510, and @Stylie777. I’ve left the commits unsquashed to make authorship clear. My only changes to other author’s commits are to rebase and run clang-format. The taskloop implementation in the runtime works roughly like this: if the number of loop iterations to perform are more than some threshold, the current task is duplicated and both resulting tasks gets half of the loop range. This continues recursively until each task has a small enough loop range to run itself in a single thread. This leads to two implementation complexities: - The runtime needs to be able to update the loop bounds used when executing the loop inside of the task. This has been implemented by forcing them to always have a fixed location inside of the structure produced when outlining the task. - When a task is duplicated, all data stored for the task’s (first)private variables needs to also be duplicated and appropriate constructors run. This is handled by a task duplication function invoked by the runtime. With regards to testing, most existing tests in the gfortran and fujitsu test suites require the reduction clause (not part of OpenMP 4.5). I wrote some tests of my own and was satisfied that it seems to be working. Co-authored-by: Kaviya Rajendiran <kaviyara2000@gmail.com> Co-authored-by: Jack Styles <jack.styles@arm.com> --------- Co-authored-by: Kaviya Rajendiran <kaviyara2000@gmail.com> Co-authored-by: Jack Styles <jack.styles@arm.com>
Author
Parents
Loading