MLBEDSW-3424 Arch cache

Default arch instances are cached as they are expensive to create,
and they are created often when using the external APIs.

Change-Id: I16802fa767e6750da4227c6266d7c4453c047001
Signed-off-by: Louis Verhaard <louis.verhaard@arm.com>
diff --git a/ethosu/vela/architecture_features.py b/ethosu/vela/architecture_features.py
index 64005bf..f7dcc8c 100644
--- a/ethosu/vela/architecture_features.py
+++ b/ethosu/vela/architecture_features.py
@@ -802,16 +802,22 @@
         return result
 
 
+# Cache for default arch instances, as these are expensive to create
+default_arch_cache = dict()
+
+
 def create_default_arch(accelerator: Accelerator) -> ArchitectureFeatures:
     """Creates architecture features object using default settings"""
-    return ArchitectureFeatures(
-        vela_config_files=None,
-        accelerator_config=accelerator.value,
-        system_config=ArchitectureFeatures.DEFAULT_CONFIG,
-        memory_mode=ArchitectureFeatures.DEFAULT_CONFIG,
-        override_block_config=None,
-        block_config_limit=None,
-        max_blockdep=ArchitectureFeatures.MAX_BLOCKDEP,
-        weight_estimation_scaling=1.0,
-        verbose_config=False,
-    )
+    if accelerator not in default_arch_cache:
+        default_arch_cache[accelerator] = ArchitectureFeatures(
+            vela_config_files=None,
+            accelerator_config=accelerator.value,
+            system_config=ArchitectureFeatures.DEFAULT_CONFIG,
+            memory_mode=ArchitectureFeatures.DEFAULT_CONFIG,
+            override_block_config=None,
+            block_config_limit=None,
+            max_blockdep=ArchitectureFeatures.MAX_BLOCKDEP,
+            weight_estimation_scaling=1.0,
+            verbose_config=False,
+        )
+    return default_arch_cache[accelerator]