aboutsummaryrefslogtreecommitdiff
path: root/ethosu/vela/live_range.py
diff options
context:
space:
mode:
authorJohan Alfvén <johan.alfven@arm.com>2022-10-11 20:41:41 +0200
committerJohan Alfvén <johan.alfven@arm.com>2022-10-20 10:45:52 +0200
commitfba0a7dc43373a69f3c0792587d3d9b0cc010ccf (patch)
treebf1a497d8ca6c080988ab920110981df2f8badff /ethosu/vela/live_range.py
parent673683bb828cd552f1970922e3c61079607332b2 (diff)
downloadethos-u-vela-fba0a7dc43373a69f3c0792587d3d9b0cc010ccf.tar.gz
MLBEDSW-6931: Refactoring merge elementwise ops
Change code in cascade builder to instead use common functionality in live range. Signed-off-by: Johan Alfven <johan.alfven@arm.com> Change-Id: I7bbd7ea3d1e7e085813e9d93256a54e6bab2267b
Diffstat (limited to 'ethosu/vela/live_range.py')
-rw-r--r--ethosu/vela/live_range.py22
1 files changed, 19 insertions, 3 deletions
diff --git a/ethosu/vela/live_range.py b/ethosu/vela/live_range.py
index 9b6fe63d..fbb48ecd 100644
--- a/ethosu/vela/live_range.py
+++ b/ethosu/vela/live_range.py
@@ -154,18 +154,21 @@ class LiveRangeGraph:
def tensor_should_be_ignored(tens, target_mem_area, target_mem_type_set):
+ if target_mem_area is None or target_mem_type_set is None:
+ return False
if tens.mem_area != target_mem_area or tens.mem_type not in target_mem_type_set:
return True
return False
-def merge_elementwise_op_ranges(sg, sched_op, lr_graph, target_mem_area, target_mem_type_set):
+def _get_ifm_to_fuse(sched_op, target_mem_area=None, target_mem_type_set=None):
def _tensor_should_be_ignored(tens):
if tens.ifm_write_protected:
return True
return tensor_should_be_ignored(tens, target_mem_area, target_mem_type_set)
- # Tries to merge ifm/ofm live ranges of elementwise op
+ # Check if possible to merge ifm/ofm live ranges of elementwise op
+ ifm_tens = None
if sched_op.op_type.is_elementwise_op():
elem_op = sched_op.parent_op
if not _tensor_should_be_ignored(elem_op.ofm):
@@ -195,9 +198,22 @@ def merge_elementwise_op_ranges(sg, sched_op, lr_graph, target_mem_area, target_
# check output tensor only has one producer
and len(outp.tens.ops) == 1
):
- lr_graph.fuse_ranges(inp.tens, outp.tens)
+ ifm_tens = inp.tens
break
+ return ifm_tens
+
+
+def ofm_can_reuse_ifm(sched_op, target_mem_area=None, target_mem_type_set=None):
+ ifm = _get_ifm_to_fuse(sched_op, target_mem_area, target_mem_type_set)
+ return ifm is not None
+
+
+def merge_elementwise_op_ranges(sg, sched_op, lr_graph, target_mem_area, target_mem_type_set):
+ ifm = _get_ifm_to_fuse(sched_op, target_mem_area, target_mem_type_set)
+ if ifm:
+ lr_graph.fuse_ranges(ifm, sched_op.parent_op.ofm)
+
def extract_live_ranges_from_cascaded_passes(
sg,