MCPcopy Create free account
hub / github.com/apache/tvm / test_nested_diamond

Function test_nested_diamond

tests/python/relax/test_dataflow_pattern.py:725–805  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

723
724
725def test_nested_diamond():
726 @tvm.script.ir_module
727 class DiamondInDiamond:
728 @R.function
729 def main(x: R.Tensor((32, 32), "float32"), w: R.Tensor((32, 32), "float32")) -> R.Tensor:
730 with R.dataflow():
731 # matmul0 matmul1
732 # / \ / \
733 # sigmoid2 add4 sigmoid3
734 # \ / \ /
735 # add5 add6
736 # \ /
737 # add7
738 lv0 = R.call_dps_packed(
739 "extern_matmul", (x, w), R.Tensor((32, 32), dtype="float32")
740 )
741 lv1 = R.call_dps_packed(
742 "extern_matmul", (x, w), R.Tensor((32, 32), dtype="float32")
743 )
744 lv2 = R.call_dps_packed(
745 "extern_sigmoid", (lv0), R.Tensor((32, 32), dtype="float32")
746 )
747 lv3 = R.call_dps_packed(
748 "extern_sigmoid", (lv1), R.Tensor((32, 32), dtype="float32")
749 )
750 lv4 = R.call_dps_packed(
751 "extern_add", (lv0, lv1), R.Tensor((32, 32), dtype="float32")
752 )
753 lv5 = R.call_dps_packed(
754 "extern_add", (lv2, lv4), R.Tensor((32, 32), dtype="float32")
755 )
756 lv6 = R.call_dps_packed(
757 "extern_add", (lv3, lv4), R.Tensor((32, 32), dtype="float32")
758 )
759 lv7 = R.call_dps_packed(
760 "extern_add", (lv5, lv6), R.Tensor((32, 32), dtype="float32")
761 )
762 R.output(lv7)
763 return lv7
764
765 # match matmul0 diamond
766 with PatternContext() as ctx:
767 sigmoid2 = is_call_dps_packed("extern_sigmoid")
768 add4 = is_call_dps_packed("extern_add")
769 is_call_dps_packed("extern_matmul").fork_to(sigmoid2, add4)
770 add5 = is_call_dps_packed("extern_add")
771 sigmoid2 >> add5
772 add4 ^ add5
773 assert ctx.match_dfb(DiamondInDiamond["main"].body.blocks[0])
774
775 # counter case: mis-match matmul0 diamond
776 with PatternContext() as ctx:
777 sigmoid2 = is_call_dps_packed("extern_sigmoid")
778 add4 = is_call_dps_packed("extern_add")
779 is_call_dps_packed("extern_matmul").fork_to(sigmoid2, add4)
780 add5 = is_call_dps_packed("extern_add")
781 sigmoid2 >> add5
782 add4 >> add5 # not only-used-by relation

Callers

nothing calls this directly

Calls 4

PatternContextClass · 0.85
is_call_dps_packedFunction · 0.85
fork_toMethod · 0.80
match_dfbMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…