comaniac commented on a change in pull request #9207:
URL: https://github.com/apache/tvm/pull/9207#discussion_r723643217



##########
File path: python/tvm/relay/op/strategy/generic.py
##########
@@ -715,8 +715,14 @@ def dilation2d_strategy(attrs, inputs, out_type, target):
     return strategy
 
 
+def maybe_copy_tensor_b(tensor_a, tensor_b):
+    if tensor_a == tensor_b:
+        return te.compute(tensor_a.shape, lambda *ind: tensor_a[ind], 
tag="tensor_b_copy")
+    return tensor_b
+
+
 # matmul
-def wrap_compute_matmul(topi_compute, need_auto_scheduler_layout=False):
+def wrap_compute_matmul(topi_compute, need_auto_scheduler_layout=False, 
need_tensor_b_copy=True):

Review comment:
       `need_tensor_b_copy` seems a bit confusing. If tensor a and tensor b are 
identical, then we could say either copy tensor a or copy tensor b. Maybe 
`copy_input_if_the_same` or `copy_input_if_identical`, or 
`copy_identical_input`?

##########
File path: python/tvm/relay/op/strategy/generic.py
##########
@@ -715,8 +715,14 @@ def dilation2d_strategy(attrs, inputs, out_type, target):
     return strategy
 
 
+def maybe_copy_tensor_b(tensor_a, tensor_b):

Review comment:
       I'm wondering if we could have a better name (with docstring) for this 
utility. Something like `copy_if_identical`?

##########
File path: python/tvm/topi/cuda/batch_matmul.py
##########
@@ -93,6 +93,8 @@ def schedule_batch_matmul(cfg, outs):
     def _schedule(cfg, op):
         C = op.output(0)
         A, B = s[C].op.input_tensors
+        if B.op.tag == "tensor_b_copy":
+            s[B].compute_inline()

Review comment:
       Could we use like `B.op.input_tensors[0] == A` to judge whether it is a 
copy instead of leveraging the tag? IMHO, it's safe to assume that B is a copy 
of A if we can reach to A from B in batch_matmul/dense compute.

##########
File path: python/tvm/relay/op/strategy/generic.py
##########
@@ -715,8 +715,14 @@ def dilation2d_strategy(attrs, inputs, out_type, target):
     return strategy
 
 
+def maybe_copy_tensor_b(tensor_a, tensor_b):
+    if tensor_a == tensor_b:
+        return te.compute(tensor_a.shape, lambda *ind: tensor_a[ind], 
tag="tensor_b_copy")
+    return tensor_b
+
+
 # matmul
-def wrap_compute_matmul(topi_compute, need_auto_scheduler_layout=False):
+def wrap_compute_matmul(topi_compute, need_auto_scheduler_layout=False, 
need_tensor_b_copy=True):

Review comment:
       Yeah I understand this semantic (btw, IIUC, external libs won't use the 
TE compute anyways, so does it matter to copy it in the TE compute even for the 
external libs?)
   
   My comment here is mainly for the naming (if I misunderstood something and 
we still need this flag for external libs). What I meant was whether we should 
use a more general naming for this flag.




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