aboutsummaryrefslogtreecommitdiff
path: root/ethosu/vela/tosa_graph_optimiser.py
diff options
context:
space:
mode:
authorPatrik Gustavsson <patrik.gustavsson@arm.com>2021-09-14 14:56:48 +0200
committerPatrik Gustavsson <patrik.gustavsson@arm.com>2021-09-15 13:21:16 +0200
commitf436ada9caea87ec2dd686a92e41a15c1dcdeb1d (patch)
tree5d3c136de06e0ee54833d2a379eb48cfd12ccd75 /ethosu/vela/tosa_graph_optimiser.py
parent0957e3ef4b94f17efb67429c88bab8ba650f78e8 (diff)
downloadethos-u-vela-f436ada9caea87ec2dd686a92e41a15c1dcdeb1d.tar.gz
TOSA: Support for TABLE operator (int8)
Added support to map TABLE operator to LUT. Limitations: -Only supported for int8 -TABLE input must be constant This also adds the support for TFLite legalisation of Tanh/Sigmoid (int8/uint8). Signed-off-by: Patrik Gustavsson <patrik.gustavsson@arm.com> Change-Id: I1a95f61fb02fdd42c4a690494418cc0765c8b275
Diffstat (limited to 'ethosu/vela/tosa_graph_optimiser.py')
-rw-r--r--ethosu/vela/tosa_graph_optimiser.py22
1 files changed, 18 insertions, 4 deletions
diff --git a/ethosu/vela/tosa_graph_optimiser.py b/ethosu/vela/tosa_graph_optimiser.py
index a298ddbb..1ef04449 100644
--- a/ethosu/vela/tosa_graph_optimiser.py
+++ b/ethosu/vela/tosa_graph_optimiser.py
@@ -24,6 +24,7 @@ from .debug_database import DebugDatabase
from .graph_optimiser_util import bypass_memory_only_ops
from .graph_optimiser_util import calc_explicit_padding
from .graph_optimiser_util import convert_depthwise_to_conv
+from .graph_optimiser_util import convert_to_lut
from .graph_optimiser_util import move_splitsliceread_to_consumer
from .graph_optimiser_util import needed_total_padding
from .graph_optimiser_util import set_ifm_ofm_op_shapes
@@ -490,13 +491,26 @@ def convert_pad(op, arch, nng):
return add_op
+def convert_table_to_lut(op, arch, nng):
+ # Converts table op to a no-op + LUT
+ if op.type is not Op.Table:
+ return op
+
+ table = op.inputs[1]
+ op.inputs.remove(table)
+ op.set_ifm_ofm_shapes()
+
+ return convert_to_lut(op, table.values, "table")
+
+
def fixup_quantization(op, arch, nng):
if op.ifm and op.ifm.quantization.zero_point is None:
op.ifm.quantization.zero_point = 0
if op.ifm2 and op.ifm2.quantization.zero_point is None:
- op.ifm.quantization.zero_point = 0
- if op.ofm and op.ofm.quantization.zero_point is None:
- op.ofm.quantization.zero_point = 0
+ op.ifm2.quantization.zero_point = 0
+ if not op.forced_output_quantization:
+ if op.ofm and op.ofm.quantization and op.ofm.quantization.zero_point is None:
+ op.ofm.quantization.zero_point = 0
return op
@@ -547,7 +561,7 @@ def tosa_optimise_graph(nng, arch):
)
# Rewite Operators step
- op_rewrite_list = [set_tensor_equivalence, rewrite_rescale, convert_depthwise_to_conv]
+ op_rewrite_list = [set_tensor_equivalence, rewrite_rescale, convert_depthwise_to_conv, convert_table_to_lut]
for idx, sg in enumerate(nng.subgraphs):
nng.subgraphs[idx] = rewrite_graph.rewrite_graph_pre_order(