Hi all,
I have been trying to understand the scheduling primitives in TVM. While I understand the basic ones like split, reorder, tile and fuse, I am having difficulties with the more complicated ones. I list a couple specific questions I have below.
-
Why does cache_write() also change the data layout? Is this a design decision (if so, why?), or something that is necessary for correctness (could you give me an example of this)?
-
What exactly does env_threads() do? I see that it is used for persistence with the scan operator, but I don’t exactly understand how it transforms the schedule to enable the persistence.
I have been trying these operators out on my own and looking the source code of the various lowering passes when I get errors. This is fairly time consuming. Does anyone have any suggestions regarding how I might go about exactly understand the specifications of each of the scheduling primitives?
Thanks!