Beispiel #1
0
def main():
    parser = argparse.ArgumentParser(
        description="Report the weight of a microbenchmark"
    )

    parser.add_argument("functions_txt")
    parser.add_argument("performance_csv")
    parser.add_argument("cluster_json")
    parser.add_argument("function_name")
    parser.add_argument("invocation", type=int)

    args = parser.parse_args()

    cluster_info = ClusteringInformation.from_file(args.cluster_json)
    invocations = load_invocations_from_file(args.performance_csv)

    weight = None

    with open(args.functions_txt) as file:
        lines = file.readlines()[1:]

        for line in lines:
            _, name, _, _, weight, _, _ = line.split("\t")

            weight = float(weight[:-1]) / 100

            if name == args.function_name:
                break

    function = Function(cluster_info, invocations, weight)
    print(function.get_weight_of_invocation(args.invocation))
def summary(args):
    cluster = ClusteringInformation.from_file(args.cluster_file)

    print("Cluster information parsed.")
    print("Epsilon parameter: ", cluster.get_epsilon())
    print("Invocation count: %d (in %d sets)" %
          (cluster.get_invocation_count(), cluster.get_invocation_set_count()))
    print("Cluster count: ", cluster.get_cluster_count())
    print("Noise invocations: %d (in %d sets)" %
          (cluster.get_noise_invocation_count(),
           cluster.get_noise_invocation_set_count()))
def invocation(args):
    cluster_info = ClusteringInformation.from_file(args.cluster_file)

    result = cluster_info.get_cluster_id_for_invocation(args.invocation_id)
    if result == None:
        print("Invocation %d doesn't exist" % args.invocation_id)
    elif result == -1:
        print("Invocatoin %d is a noise point" % args.invocation_id)
    else:
        print("Invocation %d belongs to cluster %d" %
              (args.invocation_id, result))
def representative(args):
    cluster_info = ClusteringInformation.from_file(args.cluster_file)

    if args.noise:
        for invocation in cluster_info.get_random_noise_invocations():
            print(invocation)
    elif args.cluster != None:
        print(cluster_info.get_random_invocation_in_cluster(args.cluster))
    else:
        for index in range(cluster_info.get_cluster_count()):
            print(cluster_info.get_random_invocation_in_cluster(index))

        for invocation in cluster_info.get_random_noise_invocations():
            print(invocation)
Beispiel #5
0
def load_function_data(results_path, benchmark):
    with open(os.path.join(results_path, "functions.txt")) as file:
        lines = file.readlines()[1:]

        for line in lines:
            _, name, _, _, weight, _, _ = line.split("\t")

            weight = float(weight[:-1]) / 100

            cluster_info = ClusteringInformation.from_file(
                os.path.join(results_path, name + "_cluster.json"))
            invocations = load_invocations_from_file(
                os.path.join(results_path, name, "benchmark.csv"))

            function = Function(cluster_info, invocations, weight)

            benchmark.add_function(name, function)
Beispiel #6
0
def representative(args):
    cluster_info = ClusteringInformation.from_file(args.cluster_file)

    if args.noise:
        try:
            for invocation in cluster_info.get_noise_invocations(
                    ignore=args.ignore):
                print(invocation)
        except TypeError:
            return
    elif args.cluster != None:
        print(
            cluster_info.get_invocation_in_cluster(args.cluster,
                                                   ignore=args.ignore))
    else:
        for index in range(cluster_info.get_cluster_count()):
            print(
                cluster_info.get_invocation_in_cluster(index,
                                                       ignore=args.ignore))
        for invocation in cluster_info.get_noise_invocations(
                ignore=args.ignore):
            print(invocation)
Beispiel #7
0
def summary(args):
    cluster = ClusteringInformation.from_file(args.cluster_file)
    chop_print("Cluster information parsed.")

    if args.cluster is None:
        print("Epsilon parameter: %s" % cluster.get_epsilon())
        print("Invocation count: %d (in %d sets)" % (
            cluster.get_invocation_count(),
            cluster.get_invocation_set_count(),
        ))
        print("Cluster count: %d" % cluster.get_cluster_count())
        print("Noise invocations: %d (in %d sets)" % (
            cluster.get_noise_invocation_count(),
            cluster.get_noise_invocation_set_count(),
        ))

        print("Instruction coverage: %.2f %%" %
              cluster.get_instruction_coverage())
        print("Invocation coverage: %.2f %%" %
              cluster.get_invocation_coverage())
        return

    if not (0 <= args.cluster < cluster.get_cluster_count()):
        chop_print("ERROR: Wrong cluster. Valid cluster range [0,%d)" %
                   cluster.get_cluster_count())
        exit(1)

    print("Cluster id: %d" % args.cluster)
    print("Invocation count: %d " %
          cluster.get_invocation_count(cluster=args.cluster))
    print("Instruction coverage: %.2f %%" %
          cluster.get_instruction_coverage(cluster=args.cluster))
    print("Invocation coverage: %.2f %%" %
          cluster.get_invocation_coverage(cluster=args.cluster))
    print("Instructions: %d" %
          cluster.get_extra_cluster_metric(args.cluster, "instructions"))
    print("Cycles: %d" %
          cluster.get_extra_cluster_metric(args.cluster, "cycles"))
    print("IPC: %.2f " % cluster.get_extra_cluster_metric(args.cluster, "ipc"))
def noise(args):
    cluster_info = ClusteringInformation.from_file(args.cluster_file)