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)
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)
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)
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)