| import argparse |
| |
| import benchmark_core |
| import benchmark_utils |
| |
| import torch |
| |
| """Performance microbenchmarks's main binary. |
| |
| This is the main function for running performance microbenchmark tests. |
| It also registers existing benchmark tests via Python module imports. |
| """ |
| parser = argparse.ArgumentParser( |
| description="Run microbenchmarks.", |
| formatter_class=argparse.ArgumentDefaultsHelpFormatter, |
| ) |
| |
| |
| def parse_args(): |
| parser.add_argument( |
| "--tag-filter", |
| "--tag_filter", |
| help="tag_filter can be used to run the shapes which matches the tag. (all is used to run all the shapes)", |
| default="short", |
| ) |
| |
| # This option is used to filter test cases to run. |
| parser.add_argument( |
| "--operators", |
| help="Filter tests based on comma-delimited list of operators to test", |
| default=None, |
| ) |
| |
| parser.add_argument( |
| "--operator-range", |
| "--operator_range", |
| help="Filter tests based on operator_range(e.g. a-c or b,c-d)", |
| default=None, |
| ) |
| |
| parser.add_argument( |
| "--test-name", |
| "--test_name", |
| help="Run tests that have the provided test_name", |
| default=None, |
| ) |
| |
| parser.add_argument( |
| "--list-ops", |
| "--list_ops", |
| help="List operators without running them", |
| action="store_true", |
| ) |
| |
| parser.add_argument( |
| "--list-tests", |
| "--list_tests", |
| help="List all test cases without running them", |
| action="store_true", |
| ) |
| |
| parser.add_argument( |
| "--iterations", |
| help="Repeat each operator for the number of iterations", |
| type=int, |
| ) |
| |
| parser.add_argument( |
| "--num-runs", |
| "--num_runs", |
| help="Run each test for num_runs. Each run executes an operator for number of <--iterations>", |
| type=int, |
| default=1, |
| ) |
| |
| parser.add_argument( |
| "--min-time-per-test", |
| "--min_time_per_test", |
| help="Set the minimum time (unit: seconds) to run each test", |
| type=int, |
| default=0, |
| ) |
| |
| parser.add_argument( |
| "--warmup-iterations", |
| "--warmup_iterations", |
| help="Number of iterations to ignore before measuring performance", |
| default=100, |
| type=int, |
| ) |
| |
| parser.add_argument( |
| "--omp-num-threads", |
| "--omp_num_threads", |
| help="Number of OpenMP threads used in PyTorch runtime", |
| default=None, |
| type=int, |
| ) |
| |
| parser.add_argument( |
| "--mkl-num-threads", |
| "--mkl_num_threads", |
| help="Number of MKL threads used in PyTorch runtime", |
| default=None, |
| type=int, |
| ) |
| |
| parser.add_argument( |
| "--report-aibench", |
| "--report_aibench", |
| type=benchmark_utils.str2bool, |
| nargs="?", |
| const=True, |
| default=False, |
| help="Print result when running on AIBench", |
| ) |
| |
| parser.add_argument( |
| "--use-jit", |
| "--use_jit", |
| type=benchmark_utils.str2bool, |
| nargs="?", |
| const=True, |
| default=False, |
| help="Run operators with PyTorch JIT mode", |
| ) |
| |
| parser.add_argument( |
| "--forward-only", |
| "--forward_only", |
| type=benchmark_utils.str2bool, |
| nargs="?", |
| const=True, |
| default=False, |
| help="Only run the forward path of operators", |
| ) |
| |
| parser.add_argument( |
| "--device", |
| help="Run tests on the provided architecture (cpu, cuda)", |
| default="None", |
| ) |
| |
| args, _ = parser.parse_known_args() |
| |
| if args.omp_num_threads: |
| # benchmark_utils.set_omp_threads sets the env variable OMP_NUM_THREADS |
| # which doesn't have any impact as C2 init logic has already been called |
| # before setting the env var. |
| |
| # In general, OMP_NUM_THREADS (and other OMP env variables) needs to be set |
| # before the program is started. |
| # From Chapter 4 in OMP standard: https://www.openmp.org/wp-content/uploads/openmp-4.5.pdf |
| # "Modifications to the environment variables after the program has started, |
| # even if modified by the program itself, are ignored by the OpenMP implementation" |
| benchmark_utils.set_omp_threads(args.omp_num_threads) |
| torch.set_num_threads(args.omp_num_threads) |
| if args.mkl_num_threads: |
| benchmark_utils.set_mkl_threads(args.mkl_num_threads) |
| |
| return args |
| |
| |
| def main(): |
| args = parse_args() |
| benchmark_core.BenchmarkRunner(args).run() |
| |
| |
| if __name__ == "__main__": |
| main() |