Hi all, 

I find programming in TVM to result in an extremely large number of non-scoped 
variables. The main problem is that the axes and tensors are not grouped, and 
simple mistakes result in extremely verbose low-level errors. 90% of my 
mistakes are just from not keeping tensors and axes grouped together. 

I'm curious what people think of an less low-level scheduling language. I 
generally write my code in this style, which is much less verbose, fixes double 
splitting, and prevents errors from mixing up which axis belongs to which 
tensor.

```python                                                                       
               
    ll, nn = s.axes(C)                                                          
                                               
    reduce_axis = s.reduce_axis(C)                                              
                                               
    ll = ll.split(TPB)                                                          
                                               
    nn = nn.split(TPB)                                                          
                                               
    mm = reduce_axis.split(TPB)                                                 
                                               
    s.reorder(C, (ll.outer, nn.outer, ll.inner, nn.inner, mm.outer, mm.inner))

    # Bind blocks and threads to C                                              
                                               
    ll.outer.bind(te.thread_axis("blockIdx.x"))                                 
                                               
    nn.outer.bind(te.thread_axis("blockIdx.y"))                                 
                                               
    ll.inner.bind(tx)                                                           
                                               
    nn.inner.bind(ty)                                                           
                                               
                                                                                
                                               
    # Set up Caching                                                            
                                               
    ll_A, mm_A = s.axes(AA)                                                     
                                               
    ll_A = ll_A.split(TPB)                                                      
                                                 
    mm_A = mm_A.split(TPB)                                                      
                                                 
    s.reorder(AA, (ll_A.outer, mm_A.outer, ll_A.inner, mm_A.inner))             
                                               
    mm.outer.compute_at(AA)                                                     
                                               
    ll_A.inner.bind(tx)                                                         
                                               
    mm_A.inner.bind(ty)
```

Do people have any other tricks? Ideally there would be a really nice way to 
group together spliting of two tensors in the same way (in this case ll_A 
mirrrors ll, why are they seperate?)





---
[Visit 
Topic](https://discuss.tvm.apache.org/t/thoughts-on-a-simpler-scheduling-language/9110/1)
 to respond.

You are receiving this because you enabled mailing list mode.

To unsubscribe from these emails, [click 
here](https://discuss.tvm.apache.org/email/unsubscribe/235a0b7fd9bbdb03428d737ba7c75bcbe13467ae222e99ea13e259cec7c9efa1).

Reply via email to