| # Copyright 2023 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 | |
| import argparse, os | |
| from library import * | |
| from manifest import * | |
| from launchers import * | |
| from concurrent.futures import ThreadPoolExecutor | |
| from options import parse_compile_arguments | |
| ############################################################################### | |
| # Compile main : The main entry point for the compile tool. | |
| # This tool compiles IREE-compiled MLIR operations for a given backend device, | |
| ############################################################################### | |
| if __name__ == "__main__": | |
| ############################################################################### | |
| # Parse command line arguments | |
| ############################################################################### | |
| parser = argparse.ArgumentParser( | |
| description="IREE Python compile tool for launching iree-compile for verification and " | |
| "profiling. Issues iree-compile for a given backend device and iree-compile " | |
| "flags. Uses ThreadPoolExecutor to launch multiple iree-compile processes " | |
| "in parallel." | |
| ) | |
| args = parse_compile_arguments(parser) | |
| ############################################################################### | |
| # Manifests metadata for a group of accompanying operations and configurations. | |
| manifest = Manifest(args) | |
| manifest.load() | |
| # Try and use all CPUs to launch iree-compile in parallel. | |
| cpu_count = os.cpu_count() | |
| if args.num_cpu > 0: | |
| cpu_count = min(cpu_count, args.num_cpu) | |
| # For all the operations in the manifest, issue iree-compile for verification | |
| # and profiling in parallel using ThreadPoolExecutor and cpu_count threads. | |
| cmds = [] | |
| with ThreadPoolExecutor(max_workers=cpu_count) as executor: | |
| # For all the operations in the manifest compile, verify, and profile. | |
| for _, dispatch_collection_list in manifest.dispatch_collection_map.items(): | |
| for dispatch_collection in dispatch_collection_list: | |
| # Create an instance of operation_launcher. | |
| operation = dispatch_collection.operation | |
| operation_launcher = IreeToolsLauncher(args, operation) | |
| for configuration in dispatch_collection.configuration_list: | |
| for compile_mode in [ | |
| CompilationMode.Profile, | |
| CompilationMode.Verify, | |
| ]: | |
| cmds.append( | |
| executor.submit( | |
| operation_launcher.iree_compile, compile_mode | |
| ) | |
| ) | |
| # Wait for all the commands to complete. | |
| results = [cmd.result() for cmd in cmds] |