From c0bb8993268863c63ececf8d076a450c6a4f4dd5 Mon Sep 17 00:00:00 2001 From: Patrik Gustavsson Date: Tue, 11 Aug 2020 16:45:35 +0200 Subject: MLBEDSW-2696 Fix Sram exceeded for Sram spilling Avoid concat op as predecessor in ifm streaming, when Sram spilling is to be applied. Signed-off-by: Patrik Gustavsson Change-Id: I2ba6283a7561a12d54a06552a15e122bb082b7a1 --- ethosu/vela/scheduler.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'ethosu/vela/scheduler.py') diff --git a/ethosu/vela/scheduler.py b/ethosu/vela/scheduler.py index 36bb3c27..cc9278fd 100644 --- a/ethosu/vela/scheduler.py +++ b/ethosu/vela/scheduler.py @@ -640,6 +640,16 @@ class DynamicProgrammingScheduler: res = self.filter_pareto_frontier(res, remove_equally_good_candidates=True) return res + def avoid_for_spilling(self, pred_candidate): + if self.arch.feature_map_storage_mem_area == self.arch.fast_storage_mem_area: + return False + + # For SRAM spilling, concat op is avoided as predecessor + for op in pred_candidate.ops: + if op.type == "ConcatSliceWrite": + return True + return False + def search_ifm_streaming_partial(self, ps, block_config): if ps.placement != PassPlacement.Npu: return ABORT_SEARCH @@ -664,8 +674,10 @@ class DynamicProgrammingScheduler: # and it only has one successor, namely us if pred_candidate.placement == PassPlacement.Npu: if pred_candidate.npu_block_type in self.ifm_stream_npu_blocks: - # and it is on the Npu and fusable - it's a candidate - pred_pass_list.append(pred_candidate) + # and it is on the Npu + if not self.avoid_for_spilling(pred_candidate): + # and fusable - it's a candidate + pred_pass_list.append(pred_candidate) if not pred_pass_list: return ABORT_SEARCH -- cgit v1.2.1