From 51974d916b8c342fbc376c862391a8e68daa7ff9 Mon Sep 17 00:00:00 2001 From: George Gekov Date: Tue, 7 Oct 2025 14:15:59 +0100 Subject: [PATCH] Arm backend: Shorten input names passed to the FVP Modify the backends/arm/test/runner_utils.py so that we pass relative paths to the FVP. This is to allow us get around the 256 char limit on the FVP and enables testing of the slice operator for 16x8. Solves internal ticket MLETORCH-1403. Change-Id: I832ce01270ee9846a75908d949dd6bdd54ec350a --- backends/arm/test/ops/test_slice.py | 14 ++++---------- backends/arm/test/ops/test_split.py | 18 ++---------------- backends/arm/test/runner_utils.py | 18 ++++++++++++++---- 3 files changed, 20 insertions(+), 30 deletions(-) diff --git a/backends/arm/test/ops/test_slice.py b/backends/arm/test/ops/test_slice.py index 43214ab42ac..c3de789689e 100644 --- a/backends/arm/test/ops/test_slice.py +++ b/backends/arm/test/ops/test_slice.py @@ -76,13 +76,7 @@ def test_slice_tensor_tosa_INT_nhwc(test_data: torch.Tensor): pipeline.run() -x_fails = { - "ones_slice_3": "MLETORCH-1402: Compiler limitation when passing more than 255 char as argument to FVP.", - "ones_slice_4": "MLETORCH-1402: Compiler limitation when passing more than 255 char as argument to FVP.", -} - - -@common.parametrize("test_data", test_data_suite, x_fails) +@common.parametrize("test_data", test_data_suite) @common.XfailIfNoCorstone300 def test_slice_tensor_u55_INT(test_data: torch.Tensor): pipeline = EthosU55PipelineINT[input_t1]( @@ -94,7 +88,7 @@ def test_slice_tensor_u55_INT(test_data: torch.Tensor): pipeline.run() -@common.parametrize("test_data", test_data_suite, x_fails) +@common.parametrize("test_data", test_data_suite) @common.XfailIfNoCorstone320 def test_slice_tensor_u85_INT(test_data: torch.Tensor): pipeline = EthosU85PipelineINT[input_t1]( @@ -175,7 +169,7 @@ def test_slice_tensor_16a8w_tosa_INT(test_data: torch.Tensor): pipeline.run() -@common.parametrize("test_data", test_data_suite, x_fails) +@common.parametrize("test_data", test_data_suite) @common.XfailIfNoCorstone300 def test_slice_tensor_16a8w_u55_INT16(test_data: torch.Tensor): """Test slice operation with 16A8W quantization on U55 (16-bit activations, 8-bit weights)""" @@ -199,7 +193,7 @@ def test_slice_tensor_16a8w_u55_INT16(test_data: torch.Tensor): pipeline.run() -@common.parametrize("test_data", test_data_suite, x_fails) +@common.parametrize("test_data", test_data_suite) @common.XfailIfNoCorstone320 def test_slice_tensor_16a8w_u85_INT16(test_data: torch.Tensor): """Test slice operation with 16A8W quantization on U85 (16-bit activations, 8-bit weights)""" diff --git a/backends/arm/test/ops/test_split.py b/backends/arm/test/ops/test_split.py index 6c4d87e9de2..afe83b04466 100644 --- a/backends/arm/test/ops/test_split.py +++ b/backends/arm/test/ops/test_split.py @@ -139,17 +139,7 @@ def test_split_with_sizes_tosa_INT(test_data: input_t1): pipeline.run() -x_fails = { - "split_3d_2_sizes_dim": "MLETORCH-1403: Split operator is running out of memory when reading input file", - "split_4d_2_sizes_dim_neg": "MLETORCH-1403: Split operator is running out of memory when reading input file", -} - - -@common.parametrize( - "test_data", - (Split.test_data | Split.test_data_list), - x_fails, -) +@common.parametrize("test_data", (Split.test_data | Split.test_data_list)) @common.XfailIfNoCorstone300 def test_split_with_sizes_u55_INT(test_data: input_t1): pipeline = EthosU55PipelineINT[input_t1]( @@ -161,11 +151,7 @@ def test_split_with_sizes_u55_INT(test_data: input_t1): pipeline.run() -@common.parametrize( - "test_data", - (Split.test_data | Split.test_data_list), - x_fails, -) +@common.parametrize("test_data", (Split.test_data | Split.test_data_list)) @common.XfailIfNoCorstone320 def test_split_with_sizes_u85_INT(test_data: input_t1): pipeline = EthosU85PipelineINT[input_t1]( diff --git a/backends/arm/test/runner_utils.py b/backends/arm/test/runner_utils.py index 69d9f838034..0d4920d0ec3 100644 --- a/backends/arm/test/runner_utils.py +++ b/backends/arm/test/runner_utils.py @@ -384,7 +384,6 @@ def run_corstone( to figure out the shape and dtype of the buffer that was output from the FVP. """ - exported_program = executorch_program_manager.exported_program() intermediate_path = Path(intermediate_path) intermediate_path.mkdir(exist_ok=True) @@ -400,11 +399,18 @@ def run_corstone( input_paths = save_inputs_to_file(exported_program, inputs, intermediate_path) output_base_name = "out" - out_path = os.path.join(intermediate_path, output_base_name) - cmd_line = f"executor_runner -m {pte_path} -o {out_path}" + cmd_line = "executor_runner -m program.pte -o out" for input_path in input_paths: - cmd_line += f" -i {input_path}" + relative_path = os.path.relpath( + Path(input_path).resolve(), start=intermediate_path + ) + cmd_line += f" -i {relative_path}" + + if len(cmd_line) > 256: + raise ValueError( + "The argument passed to the FVP should be less than 256 characters long, otherwise it gets truncated" + ) ethos_u_extra_args = "" if is_option_enabled("fast_fvp"): @@ -431,6 +437,8 @@ def run_corstone( "-C", "cpu0.semihosting-heap_limit=0", "-C", + f"cpu0.semihosting-cwd={intermediate_path}", + "-C", f"cpu0.semihosting-cmd_line='{cmd_line}'", "-a", str(elf_path), @@ -461,6 +469,8 @@ def run_corstone( "-C", "mps4_board.subsystem.cpu0.semihosting-heap_limit=0", "-C", + f"mps4_board.subsystem.cpu0.semihosting-cwd={intermediate_path}", + "-C", f"mps4_board.subsystem.ethosu.extra_args='{ethos_u_extra_args}'", "-C", f"mps4_board.subsystem.cpu0.semihosting-cmd_line='{cmd_line}'",