1*da0073e9SAndroid Build Coastguard Worker""" 2*da0073e9SAndroid Build Coastguard WorkerThis file will take the csv outputs from server.py, calculate the mean and 3*da0073e9SAndroid Build Coastguard Workervariance of the warmup_latency, average_latency, throughput and gpu_util 4*da0073e9SAndroid Build Coastguard Workerand write these to the corresponding `results/output_{batch_size}_{compile}.md` 5*da0073e9SAndroid Build Coastguard Workerfile, appending to the file if it exists or creatng a new one otherwise. 6*da0073e9SAndroid Build Coastguard Worker""" 7*da0073e9SAndroid Build Coastguard Worker 8*da0073e9SAndroid Build Coastguard Workerimport argparse 9*da0073e9SAndroid Build Coastguard Workerimport os 10*da0073e9SAndroid Build Coastguard Worker 11*da0073e9SAndroid Build Coastguard Workerimport pandas as pd 12*da0073e9SAndroid Build Coastguard Worker 13*da0073e9SAndroid Build Coastguard Worker 14*da0073e9SAndroid Build Coastguard Workerif __name__ == "__main__": 15*da0073e9SAndroid Build Coastguard Worker parser = argparse.ArgumentParser(description="Parse output files") 16*da0073e9SAndroid Build Coastguard Worker parser.add_argument("--csv", type=str, help="Path to csv file") 17*da0073e9SAndroid Build Coastguard Worker parser.add_argument("--name", type=str, help="Name of experiment") 18*da0073e9SAndroid Build Coastguard Worker args = parser.parse_args() 19*da0073e9SAndroid Build Coastguard Worker 20*da0073e9SAndroid Build Coastguard Worker input_csv = "./results/" + args.csv 21*da0073e9SAndroid Build Coastguard Worker df = pd.read_csv(input_csv) 22*da0073e9SAndroid Build Coastguard Worker 23*da0073e9SAndroid Build Coastguard Worker batch_size = int(os.path.basename(args.csv).split("_")[1]) 24*da0073e9SAndroid Build Coastguard Worker compile = os.path.basename(args.csv).split("_")[-1].split(".")[0] 25*da0073e9SAndroid Build Coastguard Worker 26*da0073e9SAndroid Build Coastguard Worker # Calculate mean and standard deviation for a subset of metrics 27*da0073e9SAndroid Build Coastguard Worker metrics = ["warmup_latency", "average_latency", "throughput", "gpu_util"] 28*da0073e9SAndroid Build Coastguard Worker means = {} 29*da0073e9SAndroid Build Coastguard Worker stds = {} 30*da0073e9SAndroid Build Coastguard Worker 31*da0073e9SAndroid Build Coastguard Worker for metric in metrics: 32*da0073e9SAndroid Build Coastguard Worker means[metric] = df[metric].mean() 33*da0073e9SAndroid Build Coastguard Worker stds[metric] = df[metric].std() 34*da0073e9SAndroid Build Coastguard Worker 35*da0073e9SAndroid Build Coastguard Worker output_md = f"results/output_{batch_size}_{compile}.md" 36*da0073e9SAndroid Build Coastguard Worker write_header = os.path.isfile(output_md) is False 37*da0073e9SAndroid Build Coastguard Worker 38*da0073e9SAndroid Build Coastguard Worker with open(output_md, "a+") as f: 39*da0073e9SAndroid Build Coastguard Worker if write_header: 40*da0073e9SAndroid Build Coastguard Worker f.write(f"## Batch Size {batch_size} Compile {compile}\n\n") 41*da0073e9SAndroid Build Coastguard Worker f.write( 42*da0073e9SAndroid Build Coastguard Worker "| Experiment | Warmup_latency (s) | Average_latency (s) | Throughput (samples/sec) | GPU Utilization (%) |\n" 43*da0073e9SAndroid Build Coastguard Worker ) 44*da0073e9SAndroid Build Coastguard Worker f.write( 45*da0073e9SAndroid Build Coastguard Worker "| ---------- | ------------------ | ------------------- | ------------------------ | ------------------- |\n" 46*da0073e9SAndroid Build Coastguard Worker ) 47*da0073e9SAndroid Build Coastguard Worker 48*da0073e9SAndroid Build Coastguard Worker line = f"| {args.name} |" 49*da0073e9SAndroid Build Coastguard Worker for metric in metrics: 50*da0073e9SAndroid Build Coastguard Worker line += f" {means[metric]:.3f} +/- {stds[metric]:.3f} |" 51*da0073e9SAndroid Build Coastguard Worker f.write(line + "\n") 52