| # Copyright 2022 The IREE Authors | |
| # | |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. | |
| # See https://llvm.org/LICENSE.txt for license information. | |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| # All benchmarks' relative path against root build directory. | |
| from argparse import Namespace | |
| from dataclasses import dataclass | |
| from typing import Optional | |
| import pathlib | |
| BENCHMARK_RESULTS_REL_PATH = "benchmark-results" | |
| CAPTURES_REL_PATH = "captures" | |
| @dataclass | |
| class TraceCaptureConfig: | |
| """Represents the settings for capturing traces during benchamrking. | |
| traced_benchmark_tool_dir: the path to the tracing-enabled benchmark tool | |
| directory. | |
| trace_capture_tool: the path to the tool for collecting captured traces. | |
| capture_tarball: the path of capture tar archive. | |
| capture_tmp_dir: the temporary directory to store captured traces. | |
| """ | |
| traced_benchmark_tool_dir: pathlib.Path | |
| trace_capture_tool: pathlib.Path | |
| capture_tarball: pathlib.Path | |
| capture_tmp_dir: pathlib.Path | |
| @dataclass | |
| class BenchmarkConfig: | |
| """Represents the settings to run benchmarks. | |
| root_benchmark_dir: the root directory containing the built benchmark | |
| suites. | |
| benchmark_results_dir: the directory to store benchmark results files. | |
| git_commit_hash: the git commit hash. | |
| normal_benchmark_tool_dir: the path to the non-traced benchmark tool | |
| directory. | |
| trace_capture_config: the config for capturing traces. Set if and only if | |
| the traces need to be captured. | |
| driver_filter: filter benchmarks to those whose driver matches this regex | |
| (or all if this is None). | |
| model_name_filter: filter benchmarks to those whose model name matches this | |
| regex (or all if this is None). | |
| mode_filter: filter benchmarks to those whose benchmarking mode matches this | |
| regex (or all if this is None). | |
| keep_going: whether to proceed if an individual run fails. Exceptions will | |
| logged and returned. | |
| benchmark_min_time: min number of seconds to run the benchmark for, if | |
| specified. Otherwise, the benchmark will be repeated a fixed number of | |
| times. | |
| continue_from_previous: skip the benchmarks if their results are found in | |
| the benchmark_results_dir. | |
| """ | |
| root_benchmark_dir: pathlib.Path | |
| benchmark_results_dir: pathlib.Path | |
| git_commit_hash: str | |
| normal_benchmark_tool_dir: Optional[pathlib.Path] = None | |
| trace_capture_config: Optional[TraceCaptureConfig] = None | |
| driver_filter: Optional[str] = None | |
| model_name_filter: Optional[str] = None | |
| mode_filter: Optional[str] = None | |
| use_compatible_filter: bool = False | |
| keep_going: bool = False | |
| benchmark_min_time: float = 0 | |
| continue_from_previous: bool = False | |
| @staticmethod | |
| def build_from_args(args: Namespace, git_commit_hash: str): | |
| """Build config from command arguments. | |
| Args: | |
| args: the command arguments. | |
| git_commit_hash: the git commit hash of IREE. | |
| """ | |
| def real_path_or_none(path: Optional[pathlib.Path]) -> Optional[pathlib.Path]: | |
| return path.resolve() if path else None | |
| if not args.normal_benchmark_tool_dir and not args.traced_benchmark_tool_dir: | |
| raise ValueError( | |
| "At least one of --normal_benchmark_tool_dir or --traced_benchmark_tool_dir should be specified." | |
| ) | |
| if not ( | |
| (args.traced_benchmark_tool_dir is None) | |
| == (args.trace_capture_tool is None) | |
| == (args.capture_tarball is None) | |
| ): | |
| raise ValueError( | |
| "The following 3 flags should be simultaneously all specified or all unspecified: --traced_benchmark_tool_dir, --trace_capture_tool, --capture_tarball" | |
| ) | |
| per_commit_tmp_dir: pathlib.Path = (args.tmp_dir / git_commit_hash).resolve() | |
| if args.traced_benchmark_tool_dir is None: | |
| trace_capture_config = None | |
| else: | |
| trace_capture_config = TraceCaptureConfig( | |
| traced_benchmark_tool_dir=args.traced_benchmark_tool_dir.resolve(), | |
| trace_capture_tool=args.trace_capture_tool.resolve(), | |
| capture_tarball=args.capture_tarball.resolve(), | |
| capture_tmp_dir=per_commit_tmp_dir / CAPTURES_REL_PATH, | |
| ) | |
| return BenchmarkConfig( | |
| root_benchmark_dir=args.e2e_test_artifacts_dir, | |
| benchmark_results_dir=per_commit_tmp_dir / BENCHMARK_RESULTS_REL_PATH, | |
| git_commit_hash=git_commit_hash, | |
| normal_benchmark_tool_dir=real_path_or_none(args.normal_benchmark_tool_dir), | |
| trace_capture_config=trace_capture_config, | |
| driver_filter=args.driver_filter_regex, | |
| model_name_filter=args.model_name_regex, | |
| mode_filter=args.mode_regex, | |
| use_compatible_filter=args.compatible_only, | |
| keep_going=args.keep_going, | |
| benchmark_min_time=args.benchmark_min_time, | |
| continue_from_previous=args.continue_from_previous, | |
| ) |