aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFredrik Svedberg <fredrik.svedberg@arm.com>2024-01-25 19:52:16 +0100
committerFredrik Svedberg <fredrik.svedberg@arm.com>2024-01-26 13:18:16 +0000
commitcbec599c97b8620580ed5f80ea253770df872fa1 (patch)
tree69b5c6f8362e8bb5687d4ce755b3fe64f4ccbb12
parent1c8f92d0bf0bfe032ada2a0d8cb234c486b96548 (diff)
downloadethos-u-vela-cbec599c97b8620580ed5f80ea253770df872fa1.tar.gz
MLBEDSW-8575 Tests fails on conv networks
Fixed a problem where the compiler incorrectly called the mlw_codec to create an empty weight stream for the second weight core. Also added code to the mlw_codec to detect this as an value error rather than a memory error. Change-Id: I463846cecb1178f8fbf04dc3e39bd6965cb8ddfc Signed-off-by: Fredrik Svedberg <fredrik.svedberg@arm.com>
-rw-r--r--ethosu/mlw_codec/mlw_codecmodule.c31
-rw-r--r--ethosu/vela/weight_compressor.py4
2 files changed, 33 insertions, 2 deletions
diff --git a/ethosu/mlw_codec/mlw_codecmodule.c b/ethosu/mlw_codec/mlw_codecmodule.c
index 1f172ee..5d37302 100644
--- a/ethosu/mlw_codec/mlw_codecmodule.c
+++ b/ethosu/mlw_codec/mlw_codecmodule.c
@@ -91,6 +91,7 @@ method_reorder_encode (PyObject *self, PyObject *args)
if ((int)PyArray_NDIM(input_ndarray_object) < 4)
{
PyErr_SetString(PyExc_ValueError, "Invalid input shape");
+ Py_DECREF(input_ndarray_object);
return NULL;
}
@@ -99,6 +100,34 @@ method_reorder_encode (PyObject *self, PyObject *args)
int kernel_width = (int)PyArray_DIM(input_ndarray_object, 2);
int ifm_depth = (int)PyArray_DIM(input_ndarray_object, 3);
+ if (ofm_depth < 1)
+ {
+ PyErr_SetString(PyExc_ValueError, "Invalid output depth");
+ Py_DECREF(input_ndarray_object);
+ return NULL;
+ }
+
+ if (ifm_depth < 1)
+ {
+ PyErr_SetString(PyExc_ValueError, "Invalid input depth");
+ Py_DECREF(input_ndarray_object);
+ return NULL;
+ }
+
+ if (kernel_height < 1)
+ {
+ PyErr_SetString(PyExc_ValueError, "Invalid kernel height");
+ Py_DECREF(input_ndarray_object);
+ return NULL;
+ }
+
+ if (kernel_width < 1)
+ {
+ PyErr_SetString(PyExc_ValueError, "Invalid kernel width");
+ Py_DECREF(input_ndarray_object);
+ return NULL;
+ }
+
int16_t* brick_weights = (int16_t*)PyArray_DATA(input_ndarray_object);
int brick_strides[4];
for (int i = 0; i < 4; i++)
@@ -107,6 +136,7 @@ method_reorder_encode (PyObject *self, PyObject *args)
if (stride % sizeof(int16_t))
{
PyErr_SetString(PyExc_ValueError, "Invalid stride");
+ Py_DECREF(input_ndarray_object);
return NULL;
}
brick_strides[i] = stride / sizeof(int16_t);
@@ -114,6 +144,7 @@ method_reorder_encode (PyObject *self, PyObject *args)
if ((unsigned)PyArray_ITEMSIZE(input_ndarray_object) != sizeof(int16_t))
{
PyErr_SetString(PyExc_ValueError, "Invalid input type");
+ Py_DECREF(input_ndarray_object);
return NULL;
}
uint8_t* output_buffer = NULL;
diff --git a/ethosu/vela/weight_compressor.py b/ethosu/vela/weight_compressor.py
index 50ae26c..a580fb6 100644
--- a/ethosu/vela/weight_compressor.py
+++ b/ethosu/vela/weight_compressor.py
@@ -1,4 +1,4 @@
-# SPDX-FileCopyrightText: Copyright 2020-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
+# SPDX-FileCopyrightText: Copyright 2020-2024 Arm Limited and/or its affiliates <open-source-office@arm.com>
#
# SPDX-License-Identifier: Apache-2.0
#
@@ -420,7 +420,7 @@ def encode_weight_and_scale_tensor(
# For each core, deinterleave weights/scales from the larger volume
# and generate separate compressed streams.
- for core in range(0, min(arch.ncores, full_ofm_depth)):
+ for core in range(0, min(arch.ncores, depth_length)):
core_block_depth = int((ofm_block_depth + arch.ncores - 1 - core) // arch.ncores)