aboutsummaryrefslogtreecommitdiff
path: root/ethosu/vela/graph_optimiser_util.py
diff options
context:
space:
mode:
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