MLBEDSW-4978: Cascading of operators requiring full IFM/OFM
Bug fix in cascade builder: tensors produced with operators requiring full OFM
or consumed by operators requiring full IFM could be added as intermediate buffers
to a cascade.
Signed-off-by: Louis Verhaard <louis.verhaard@arm.com>
Change-Id: Id84e9e1940bf85ab4cbc42a03e65f64da16a094c
diff --git a/ethosu/vela/cascade_builder.py b/ethosu/vela/cascade_builder.py
index e4fa67e..0b50eaa 100644
--- a/ethosu/vela/cascade_builder.py
+++ b/ethosu/vela/cascade_builder.py
@@ -174,6 +174,8 @@
or current_op not in ref_cost
or not self._is_cascadable(current_op, ref_cost[current_op])
or producer.ofm.shape != current_op.ifm.shape
+ or current_op.requires_full_ifm
+ or producer.requires_full_ofm
):
# Current op has already been processed or cannot be cascaded
break
diff --git a/ethosu/vela/tensor.py b/ethosu/vela/tensor.py
index 677757c..8304a65 100644
--- a/ethosu/vela/tensor.py
+++ b/ethosu/vela/tensor.py
@@ -478,6 +478,7 @@
if shape_len > 4:
return
+ assert not (self.needs_linear_format and fmt == TensorFormat.NHCWB16)
self.storage_rounding_quantum = arch.storage_rounding_quantums[self.format]
self.storage_rounding_quantum = tuple(self.storage_rounding_quantum[-shape_len:])
self.brick_size = arch.brick_sizes[self.format]