aboutsummaryrefslogtreecommitdiff
path: root/tests/test_backend_vela_compiler.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_backend_vela_compiler.py')
-rw-r--r--tests/test_backend_vela_compiler.py163
1 files changed, 163 insertions, 0 deletions
diff --git a/tests/test_backend_vela_compiler.py b/tests/test_backend_vela_compiler.py
new file mode 100644
index 0000000..40268ae
--- /dev/null
+++ b/tests/test_backend_vela_compiler.py
@@ -0,0 +1,163 @@
+# SPDX-FileCopyrightText: Copyright 2022, Arm Limited and/or its affiliates.
+# SPDX-License-Identifier: Apache-2.0
+"""Tests for module vela/compiler."""
+from pathlib import Path
+
+from ethosu.vela.compiler_driver import TensorAllocator
+from ethosu.vela.scheduler import OptimizationStrategy
+
+from mlia.backend.vela.compiler import optimize_model
+from mlia.backend.vela.compiler import OptimizedModel
+from mlia.backend.vela.compiler import VelaCompiler
+from mlia.backend.vela.compiler import VelaCompilerOptions
+from mlia.devices.ethosu.config import EthosUConfiguration
+
+
+def test_default_vela_compiler() -> None:
+ """Test default Vela compiler instance."""
+ default_compiler_options = VelaCompilerOptions(accelerator_config="ethos-u55-256")
+ default_compiler = VelaCompiler(default_compiler_options)
+
+ assert default_compiler.config_files is None
+ assert default_compiler.system_config == "internal-default"
+ assert default_compiler.memory_mode == "internal-default"
+ assert default_compiler.accelerator_config == "ethos-u55-256"
+ assert default_compiler.max_block_dependency == 3
+ assert default_compiler.arena_cache_size is None
+ assert default_compiler.tensor_allocator == TensorAllocator.HillClimb
+ assert default_compiler.cpu_tensor_alignment == 16
+ assert default_compiler.optimization_strategy == OptimizationStrategy.Performance
+ assert default_compiler.output_dir is None
+
+ assert default_compiler.get_config() == {
+ "accelerator_config": "ethos-u55-256",
+ "system_config": "internal-default",
+ "core_clock": 500000000.0,
+ "axi0_port": "Sram",
+ "axi1_port": "OffChipFlash",
+ "memory_mode": "internal-default",
+ "const_mem_area": "Axi1",
+ "arena_mem_area": "Axi0",
+ "cache_mem_area": "Axi0",
+ "arena_cache_size": 4294967296,
+ "permanent_storage_mem_area": "OffChipFlash",
+ "feature_map_storage_mem_area": "Sram",
+ "fast_storage_mem_area": "Sram",
+ "memory_area": {
+ "Sram": {
+ "clock_scales": 1.0,
+ "burst_length": 32,
+ "read_latency": 32,
+ "write_latency": 32,
+ },
+ "Dram": {
+ "clock_scales": 1.0,
+ "burst_length": 1,
+ "read_latency": 0,
+ "write_latency": 0,
+ },
+ "OnChipFlash": {
+ "clock_scales": 1.0,
+ "burst_length": 1,
+ "read_latency": 0,
+ "write_latency": 0,
+ },
+ "OffChipFlash": {
+ "clock_scales": 0.125,
+ "burst_length": 128,
+ "read_latency": 64,
+ "write_latency": 64,
+ },
+ },
+ }
+
+
+def test_vela_compiler_with_parameters(test_resources_path: Path) -> None:
+ """Test creation of Vela compiler instance with non-default params."""
+ vela_ini_path = str(test_resources_path / "vela/sample_vela.ini")
+
+ compiler_options = VelaCompilerOptions(
+ config_files=vela_ini_path,
+ system_config="Ethos_U65_High_End",
+ memory_mode="Shared_Sram",
+ accelerator_config="ethos-u65-256",
+ max_block_dependency=1,
+ arena_cache_size=10,
+ tensor_allocator="Greedy",
+ cpu_tensor_alignment=4,
+ optimization_strategy="Size",
+ output_dir="output",
+ )
+ compiler = VelaCompiler(compiler_options)
+
+ assert compiler.config_files == vela_ini_path
+ assert compiler.system_config == "Ethos_U65_High_End"
+ assert compiler.memory_mode == "Shared_Sram"
+ assert compiler.accelerator_config == "ethos-u65-256"
+ assert compiler.max_block_dependency == 1
+ assert compiler.arena_cache_size == 10
+ assert compiler.tensor_allocator == TensorAllocator.Greedy
+ assert compiler.cpu_tensor_alignment == 4
+ assert compiler.optimization_strategy == OptimizationStrategy.Size
+ assert compiler.output_dir == "output"
+
+ assert compiler.get_config() == {
+ "accelerator_config": "ethos-u65-256",
+ "system_config": "Ethos_U65_High_End",
+ "core_clock": 1000000000.0,
+ "axi0_port": "Sram",
+ "axi1_port": "Dram",
+ "memory_mode": "Shared_Sram",
+ "const_mem_area": "Axi1",
+ "arena_mem_area": "Axi0",
+ "cache_mem_area": "Axi0",
+ "arena_cache_size": 10,
+ "permanent_storage_mem_area": "Dram",
+ "feature_map_storage_mem_area": "Sram",
+ "fast_storage_mem_area": "Sram",
+ "memory_area": {
+ "Sram": {
+ "clock_scales": 1.0,
+ "burst_length": 32,
+ "read_latency": 32,
+ "write_latency": 32,
+ },
+ "Dram": {
+ "clock_scales": 0.234375,
+ "burst_length": 128,
+ "read_latency": 500,
+ "write_latency": 250,
+ },
+ "OnChipFlash": {
+ "clock_scales": 1.0,
+ "burst_length": 1,
+ "read_latency": 0,
+ "write_latency": 0,
+ },
+ "OffChipFlash": {
+ "clock_scales": 1.0,
+ "burst_length": 1,
+ "read_latency": 0,
+ "write_latency": 0,
+ },
+ },
+ }
+
+
+def test_compile_model(test_tflite_model: Path) -> None:
+ """Test model optimization."""
+ compiler = VelaCompiler(EthosUConfiguration("ethos-u55-256").compiler_options)
+
+ optimized_model = compiler.compile_model(test_tflite_model)
+ assert isinstance(optimized_model, OptimizedModel)
+
+
+def test_optimize_model(tmp_path: Path, test_tflite_model: Path) -> None:
+ """Test model optimization and saving into file."""
+ tmp_file = tmp_path / "temp.tflite"
+
+ device = EthosUConfiguration("ethos-u55-256")
+ optimize_model(test_tflite_model, device.compiler_options, tmp_file.absolute())
+
+ assert tmp_file.is_file()
+ assert tmp_file.stat().st_size > 0