diff options
author | erik.andersson@arm.com <erik.andersson@arm.com> | 2021-02-03 10:20:16 +0100 |
---|---|---|
committer | patrik.gustavsson <patrik.gustavsson@arm.com> | 2021-02-12 13:31:12 +0000 |
commit | ad45f792e699fe6abdc381f62690801aa50bd412 (patch) | |
tree | 853364402520981cc87516e72530ef30b89e9554 /ethosu/vela/vela.py | |
parent | 42b94edb8bcd71057ebeac2fa255d44dbf56a0f3 (diff) | |
download | ethos-u-vela-ad45f792e699fe6abdc381f62690801aa50bd412.tar.gz |
MLBEDSW-3509: Updated the debug database to support multiple custom operators.
Previously the debug database lost some operators in the debug database outputs when multiple custom operators were generated by Vela.
Also, the file offsets for command streams were always 0, even for a single custom operator. This patch should rectify these problems.
Signed-off-by: erik.andersson@arm.com <erik.andersson@arm.com>
Change-Id: Ieb072440d4f1806d4833a676683b4f42f431f3df
Diffstat (limited to 'ethosu/vela/vela.py')
-rw-r--r-- | ethosu/vela/vela.py | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/ethosu/vela/vela.py b/ethosu/vela/vela.py index bfc76ec9..c4510b18 100644 --- a/ethosu/vela/vela.py +++ b/ethosu/vela/vela.py @@ -1,4 +1,4 @@ -# Copyright (C) 2020 Arm Limited or its affiliates. All rights reserved. +# Copyright (C) 2020-2021 Arm Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # @@ -23,6 +23,8 @@ import os import sys import time +import flatbuffers + from . import architecture_features from . import compiler_driver from . import model_reader @@ -39,6 +41,7 @@ from .scheduler import ParetoMetric from .supported_operators import SupportedOperators from .tensor import MemArea from .tensor import Tensor +from .tflite.Model import Model from .tflite_mapping import builtin_operator_map from .tflite_mapping import builtin_type_name from ethosu.vela.architecture_features import ArchitectureFeatures @@ -80,6 +83,11 @@ def process(input_name, enable_debug_db, arch, model_reader_options, compiler_op tflite_writer.write_tflite(nng, output_filename) if enable_debug_db: + file_offsets = calculate_operator_file_offsets(output_filename) + for idx, offset in enumerate(sorted(file_offsets)): + sg = find_subgraph_with_command_stream_order(nng, idx) + if sg is not None: + DebugDatabase.set_stream_offset(sg, offset) debug_filename = output_basename + "_debug.xml" DebugDatabase.write(debug_filename, input_name, output_filename) @@ -90,6 +98,33 @@ def process(input_name, enable_debug_db, arch, model_reader_options, compiler_op return nng +def find_subgraph_with_command_stream_order(nng, idx): + for sg in nng.subgraphs: + if sg.generated_stream_id == idx: + return sg + return None + + +def calculate_operator_file_offsets(name: str): + # Read the vela optimized tflite file + with open(name, "rb") as f: + buf = bytearray(f.read()) + # Calculate the file offsets for each custom operator + file_offsets = [] + model = Model.GetRootAsModel(buf, 0) + for idx in range(model.SubgraphsLength()): # However only one subgraph is supported as of now + sg = model.Subgraphs(idx) + for idx in range(sg.OperatorsLength()): + operator = sg.Operators(idx) + if model.OperatorCodes(operator.OpcodeIndex()).CustomCode() is not None: + tensor_idx = operator.Inputs(0) + tensor = sg.Tensors(tensor_idx) + buffer = model.Buffers(tensor.Buffer()) + offset = flatbuffers.number_types.UOffsetTFlags.py_type(buffer._tab.Offset(4)) + file_offsets.append(buffer._tab.Vector(offset)) + return file_offsets + + def print_subgraph_io_summary(nng): """Print a summary of all the input and output tensor sizes for all subgraphs. Also displays the total tensor size and the memory used area for sram. |