tqchen commented on PR #104:
URL: https://github.com/apache/tvm-rfcs/pull/104#issuecomment-1699173201

   it might be useful also bring some discussions to forums. here is a quick 
related sketch of GPU related models
   
   ```python
   for y in range(64):
     for x in range(64):
         C[y, x] = A[y, x] * (B[y] + 1)
   ```
   Say we are interested in the original program. In a normal GPU programming 
terminology, we will map the compute of x to "threads", there `tid` is the 
thread index. In GPU programming there is also different memory scopes (i am 
using cuda terminology here):
   - local: the variable is local to each thread
   - shared: the variable is "shared" across threads, concurrent writing 
different values to the same shared variable is somewhat undefined.
   - warp shuffle: sometimes we might need to exchange data(e.g. take sum) 
across the threads, and it is done through shuffle instructions(like 
warp.all_reduce).
   
   ```python
   for y in range(64):
     for x in range(64 // n):
       for tid in T.scalable_vectorized_as_threads(n):
         a0: local = A[y, tid + n * x]
         b0: shared = B[y]
         b1: shared =  b0 + 1
         c0: local = a0 * b0
         C[y, tid + n * 4 * i] = c0
   ````
   
   The above code is a rough sketch of what it might looks like. Now, it might 
also be possible to produce a similar more "vector-view" version using the 
following rule:
   - local <=> vector<vscale>
   - shared <=> normal register
   
   ```python
   # note vscale = n
   for y in range(64):
     for x in range(64 // n):
       with T.sve_scope(n):
         a0: vector<vscale> = A[y, tid + n * x]
         b0: scalar = B[y]
         b1: vector<vscale> =  b0 + 1
         c0: scalar = a0 * b0
         C[y, tid + n * 4 * i] = c0
   ```
   
   They are not that different. But one thing is true: we do need to be able to 
identify the vector dtype differently from the scalar dtype(or in the case of 
GPU programming local from shared). Being able to mark a dtype as 
ScalableVectorMark seems to serve that purpose.
   
   
   


-- 
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.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to