llvm/mlir/utils/mbr/mbr/stats.py

"""This file contains functions related to interpreting measurement results
of benchmarks.
"""
import configparser
import numpy as np
import os


def has_enough_measurements(measurements):
    """Takes a list/numpy array of measurements and determines whether we have
    enough measurements to make a confident judgement of the performance. The
    criteria for determining whether we have enough measurements is as follows.
    1. Whether enough time, defaulting to 1 second, has passed.
    2. Whether we have a max number of measurements, defaulting to a billion.

    If 1. is true, 2. doesn't need to be true.
    """
    config = configparser.ConfigParser()
    config.read(os.path.join(os.path.dirname(os.path.realpath(__file__)), "config.cfg"))
    if "stats" in config:
        stats_dict = {
            "max_number_of_measurements": int(
                float(config["stats"]["max_number_of_measurements"])
            ),
            "max_time_for_a_benchmark_ns": int(
                float(config["stats"]["max_time_for_a_benchmark_ns"])
            ),
        }
    else:
        stats_dict = {
            "max_number_of_measurements": 1e9,
            "max_time_for_a_benchmark_ns": 1e9,
        }
    return (
        np.sum(measurements) >= stats_dict["max_time_for_a_benchmark_ns"]
        or np.size(measurements) >= stats_dict["max_number_of_measurements"]
    )