aboutsummaryrefslogtreecommitdiff
path: root/ethosu/vela/graph_optimiser_util.py
diff options
context:
space:
mode:
authorPatrik Gustavsson <patrik.gustavsson@arm.com>2021-08-17 14:26:38 +0200
committerPatrik Gustavsson <patrik.gustavsson@arm.com>2021-09-03 13:33:01 +0200
commitc74682cfd27eb2c203ce4486e712916c45da9881 (patch)
tree82ff1cefd0ce06d6072f0b1231802e7afa803b1a /ethosu/vela/graph_optimiser_util.py
parent5e5a7847b8fc1eb261c7561f44585d2f6b524df3 (diff)
downloadethos-u-vela-c74682cfd27eb2c203ce4486e712916c45da9881.tar.gz
TOSA: Support for AVGPOOL, MAXPOOL and CONV2D
Added support for -AVGPOOL and CONV2D with TFLite correspondence -MAXPOOL -additional support for replacing RESCALE ops with avgpool. No support for breaking down tensors over the size supported by NPU. Signed-off-by: Patrik Gustavsson <patrik.gustavsson@arm.com> Change-Id: I1d2aa50ac30a26283b3e6f1fe88cba1544b7c189
Diffstat (limited to 'ethosu/vela/graph_optimiser_util.py')
-rw-r--r--ethosu/vela/graph_optimiser_util.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/ethosu/vela/graph_optimiser_util.py b/ethosu/vela/graph_optimiser_util.py
index 5e676f18..570c7244 100644
--- a/ethosu/vela/graph_optimiser_util.py
+++ b/ethosu/vela/graph_optimiser_util.py
@@ -15,6 +15,8 @@
# limitations under the License.
# Description:
# Common functions and definitions used during the graph optimization.
+from typing import Tuple
+
from .data_type import DataType
from .debug_database import DebugDatabase
from .errors import VelaError
@@ -132,6 +134,21 @@ def check_format_restrictions(tens, arch):
tens.needs_linear_format = False
+def calc_explicit_padding(input_size, stride, filter_size, pad_before, pad_after) -> Tuple[int, int]:
+ """
+ Based on explicit padding provided in a PAD operation, returns the corresponding hardware padding
+ that provides equivalent results.
+ """
+ total_padding = needed_total_padding(input_size, stride, filter_size)
+
+ # The bottom/right padding might need downward adjustment depending on stride/input size
+ total_minus_before = total_padding - pad_before
+ output_pad_after = pad_after
+ while output_pad_after > 0 and output_pad_after % stride != total_minus_before % stride:
+ output_pad_after -= 1
+ return pad_before, output_pad_after
+
+
def needed_total_padding(input_size, stride, filter_size):
out_size = (input_size + stride - 1) // stride
needed_input = (out_size - 1) * stride + filter_size