masahi commented on a change in pull request #9207:
URL: https://github.com/apache/tvm/pull/9207#discussion_r723650378
##########
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:
Yeah I didn't put much thought into the name, I like your suggestion.
I'll also add a comment explaining why this is necessary.
##########
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:
This is flag is introduced solely for external libs like cublas, which
doesn't need copying if two args are the same. I explicitly set
`need_tensor_b_copy=False` for cublas strategy only, otherwise we do the copy
by default.
##########
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:
Thanks, that seems to work. I'll make this change. I also prefer your
approach since relying on implicit agreement on the tag name is opaque and not
robust.
##########
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:
Interesting, if we don't have to worry about external libs, I'd choose a
different for sure. Actually, we probably don't need this flag at all, since we
can always copy anyway.
##########
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:
Interesting, if we don't have to worry about external libs, I'd choose a
different for sure. Actually, we probably don't need this flag at all, since we
can always (and must) copy anyway if two args are the same.
--
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]