diff options
author | Louis Verhaard <louis.verhaard@arm.com> | 2020-09-01 10:39:04 +0200 |
---|---|---|
committer | Louis Verhaard <louis.verhaard@arm.com> | 2020-09-08 09:02:49 +0200 |
commit | 98a3499ec73b26880c633caf9a43bfe80f9ec1ed (patch) | |
tree | 2a098625e57dcd75e7aafd1ee340f971c62ffed7 /ethosu/vela/graph_optimiser.py | |
parent | 515c956c9cc6d45493e45d57b822e30a7317d1ed (diff) | |
download | ethos-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.py | 11 |
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 |