Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TE] Support mixing normal and cross-thread reduction #5193

Merged
merged 2 commits into from
Apr 4, 2020

Conversation

roastduck
Copy link
Contributor

Currently TVM only supports pure normal (i.e. sequential) reduction or pure cross-thread reduction. Since TVM has not supported nested reduction yet, one is even unable to schedule a mixed reduction manually. I modified the function that lowers cross-thread reduction, to support mixed reduction as well.

The approach is straight forward: First perform normal reduction into local variables in each threads first, and then invoke the original cross-thread reduction intrinsic. It works like this (pseudo-code):

// Divide the loop nest into two parts
normal_red = sequantial loops nest
common = other loops nest
    
// If normal_red is empty, fallback to original code

normal_init = generate init for the temp var
normal_update = generate sequential reduction on the temp var
body genereate cross-thread reduction // original code

// Merge loop nests and add some checks
body = SeqStmt(normal_init, MergeNest(normal_red, normal_update), body)
body = MergeNest(common, body)
return body

A test case is added as a Python unit test.

This is my first PR to TVM, and I am not sure whom to invite as a reviewer. Since this is compiling pass related, @tqchen can you review my code?

@tqchen
Copy link
Member

tqchen commented Mar 31, 2020

Thanks @roastduck for contributing. cc @vinx13 @merrymercy @Hzfengsy @wpan11nv please also help to take a look:)

@roastduck
Copy link
Contributor Author

All resolved. @wpan11nv

@wpan11nv
Copy link
Contributor

wpan11nv commented Apr 1, 2020

LGTM. Thanks.

@tqchen tqchen merged commit b41f4e5 into apache:master Apr 4, 2020
@tqchen
Copy link
Member

tqchen commented Apr 4, 2020

Thanks @roastduck @wpan11nv !

zhiics pushed a commit to comaniac/tvm that referenced this pull request Apr 7, 2020
* Support mixing normal and cross-thread reduction

* minor improvements
trevor-m pushed a commit to trevor-m/tvm that referenced this pull request Apr 16, 2020
* Support mixing normal and cross-thread reduction

* minor improvements
zhiics pushed a commit to neo-ai/tvm that referenced this pull request Apr 17, 2020
* Support mixing normal and cross-thread reduction

* minor improvements
dpankratz pushed a commit to dpankratz/incubator-tvm that referenced this pull request Apr 24, 2020
* Support mixing normal and cross-thread reduction

* minor improvements
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants