def METHOD_NAME(
        self,
        num_calling_threads=1,
        num_warmup_iters=10,
        num_iters=100,
        profiler_output_path=""):
    '''
    Args:
        num_warmup_iters (int): Warmup iters are used to make sure we run a module
            a few times before actually measuring things. This way we avoid cold
            caches and any other similar problems. This is the number of warmup
            iterations for each of the thread in separate
        num_iters (int): Number of iterations the benchmark should run with.
            This number is separate from the warmup iterations. Also the number is
            shared across all the threads. Once the num_iters iterations across all
            the threads is reached, we will stop execution. Though total number of
            iterations might be slightly larger. Which is reported as
            stats.num_iters where stats is the result of this function
        profiler_output_path (str): Location to save Autograd Profiler trace.
            If not empty, Autograd Profiler will be enabled for the main benchmark
            execution (but not the warmup phase). The full trace will be saved
            into the file path provided by this argument
    This function returns BenchmarkExecutionStats object which is defined via pybind11.
    It currently has two fields:
        - num_iters - number of actual iterations the benchmark have made
        - avg_latency_ms - average time it took to infer on one input example in milliseconds
    '''
    config = torch._C.BenchmarkConfig()
    config.num_calling_threads = num_calling_threads
    config.num_warmup_iters = num_warmup_iters
    config.num_iters = num_iters
    config.profiler_output_path = profiler_output_path
    c_stats = self._benchmark.METHOD_NAME(config)
    return ExecutionStats(c_stats, config)