jcf94 edited a comment on pull request #6142: URL: https://github.com/apache/incubator-tvm/pull/6142#issuecomment-664167975
Hi, all. This is an student intern of us, who is now helping us with the Ansor upstreaming. 😄 The follow_split & follow_fused_split are two steps extent to `te.Stage.Split`. Each of these will collect information from the former history and process the split. ## FollowSplit This is mainly used in stage fusion using compute at. For example we have stages: `Dense -> Relu`: We've already done some tiling on Relu, and we would like to compute the Dense at the Relu stage. FollowSplit step is used to keep the outer most few iterators of Dense the same as the Relu stage. Since in Ansor, the split factor of Relu stage may be left as a None placeholder to be filled by search policy, by this way we can easily write a schedule with some kind of dynamic dependence. ## FollowFusedSplit This is mainly used in GPU cooperative fetching. For example we have stages: `Input -> Dense`: ``` for i.0@j.0 = ... : Bind to blockIdx.x for i.1@j.1 = ... : Bind to threadIdx.x for i.2@j.2 = ... Input_shared = Input ... for k = ... Dense = ... ``` In Ansor's search policy, the outer stage has been tiled. The the threadIdx.x axis is binded to a iterator generated by split & fuse step. We use this step to compute out the final extent of the threadIdx.x binded iterator, to make sure that Input_shared stage can split out a iterator with same extent. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org