aboutsummaryrefslogtreecommitdiff
path: root/ethosu/vela/graph_optimiser.py
diff options
context:
space:
mode:
authorLouis Verhaard <louis.verhaard@arm.com>2020-09-01 10:39:04 +0200
committerLouis Verhaard <louis.verhaard@arm.com>2020-09-08 09:02:49 +0200
commit98a3499ec73b26880c633caf9a43bfe80f9ec1ed (patch)
tree2a098625e57dcd75e7aafd1ee340f971c62ffed7 /ethosu/vela/graph_optimiser.py
parent515c956c9cc6d45493e45d57b822e30a7317d1ed (diff)
downloadethos-u-vela-98a3499ec73b26880c633caf9a43bfe80f9ec1ed.tar.gz
MLBEDSW-2935: LUT fusing with preceding operator
Allows fusing of LUT with a preceding operator regardless of input/output scale. Change-Id: Ia378adbb3fe61d71299feb085f7313377e0efa39 Signed-off-by: Louis Verhaard <louis.verhaard@arm.com>
Diffstat (limited to 'ethosu/vela/graph_optimiser.py')
-rw-r--r--ethosu/vela/graph_optimiser.py11
1 files changed, 2 insertions, 9 deletions
diff --git a/ethosu/vela/graph_optimiser.py b/ethosu/vela/graph_optimiser.py
index a89f8e63..b9110b8b 100644
--- a/ethosu/vela/graph_optimiser.py
+++ b/ethosu/vela/graph_optimiser.py
@@ -823,28 +823,21 @@ def fuse_activation_function_with_prev(op, arch):
and len(ifm.ops) == 1
and len(prev_op.outputs[0].consumers()) == 1
and prev_op.attrs.get("fused_activation_function", None) is None
- and ifm.is_scaling_equal(ofm)
)
if op.activation_lut is not None and arch.shram_reserved_unused_banks == 0:
# TODO: if SHRAM LUT space is shared with SHRAM ACC (32, 64 MAC),
# LUT currently only works correctly for elementwise ops
fuse = False
- if fuse and op.activation_lut is not None:
- # Check if LUT can be used with prev_op
- prev_ifm, prev_ifm2, _, _ = prev_op.get_ifm_ifm2_weights_ofm()
- fuse = prev_ifm is not None and prev_ifm.quantization is not None and prev_ifm.is_scaling_equal(ifm)
- if prev_ifm2 is not None:
- fuse = fuse and prev_ifm2.quantization is not None and prev_ifm2.is_scaling_equal(ifm)
if not fuse:
return op
# Move the fused activation function + corresponding info to prev_op
- for attr in ("fused_activation_function", "alpha", "forced_output_quantization"):
+ for attr in ("fused_activation_function", "forced_output_quantization"):
if attr in op.attrs:
prev_op.attrs[attr] = op.attrs[attr]
if op.activation_lut is not None:
prev_op.set_activation_lut(op.activation_lut)
# Bypass op
- prev_op.set_output_tensor(op.outputs[0])
+ prev_op.set_output_tensor(ofm)
return op