Download workloads/micro/run_micro_perf.py from lrh12580/UvmPinAsync: direct link, hf CLI and curl.
- Browser
- Download file 5.08 kB
-
https://huggingface.co/lrh12580/UvmPinAsync/resolve/main/workloads/micro/run_micro_perf.py
- Command line
-
hf download hf://lrh12580/UvmPinAsync/workloads/micro/run_micro_perf.py
-
curl -L -o run_micro_perf.py https://huggingface.co/lrh12580/UvmPinAsync/resolve/main/workloads/micro/run_micro_perf.py
5.08 kB
| import os | |
| import argparse | |
| import sys | |
| import subprocess | |
| import psutil | |
| import os | |
| import collections | |
| import csv | |
| import numpy as np | |
| import pandas as pd | |
| import matplotlib | |
| from matplotlib import pyplot as plt | |
| import matplotlib.ticker as mticker | |
| import xlsxwriter | |
| import seaborn as sns | |
| from matplotlib.ticker import FormatStrFormatter | |
| from matplotlib.legend_handler import HandlerTuple | |
| from subprocess import Popen, PIPE | |
| from scipy.stats import gmean | |
| prefix = 'run_' | |
| parameter_super_list = ['super'] | |
| config_super_list = ['standard', 'async', 'uvm', 'uvm_prefetch', 'uvm_prefetch_async'] | |
| workload_super_list = ['gemm'] | |
| def dict_to_list(input_dict): | |
| return_list = [] | |
| for elemement in input_dict: | |
| return_list.append(elemement) | |
| return return_list | |
| def addOptions(parser): | |
| parser.add_argument("-i", "--iterations", type=int, default=1, | |
| help="Number of iterations") | |
| parser.add_argument("-c", "--csv", type=str, default='output.xlsx', | |
| help="output trace log file") | |
| parser.add_argument("-f", "--figure", type=str, default='micro', | |
| help="output pdf file") | |
| parser.add_argument("-p", "--profiling", action='store_true', | |
| help="whether to run profiling or just parse results") | |
| def get_config_list(root_directory): | |
| config_list = [] | |
| for dict in os.listdir(root_directory): | |
| if os.path.isdir(dict) and dict in config_super_list: | |
| config_list.append(dict) | |
| return config_list | |
| def get_workload_dict(root_directory, config_list): | |
| workload_list = [] | |
| workload_dict = dict() | |
| for config in config_list: | |
| config_dir = root_directory + '/' + config | |
| for root, directories, files in os.walk(config_dir, topdown=False): | |
| for dir in directories: | |
| if dir in workload_super_list: | |
| if dir not in workload_dict: | |
| workload_dict[dir] = dict() | |
| workload_dict[dir][config] = os.path.join(root, dir + '_perf') | |
| if dir not in workload_list: | |
| workload_list.append(dir) | |
| return workload_list, workload_dict | |
| def get_run_cmd(bash_file): | |
| return_txt = '' | |
| text = open(bash_file, "r") | |
| for line in text: | |
| return_txt += line.rstrip() | |
| return return_txt | |
| def execute_bashes(workload_dict, iterations, perf_list): | |
| for workload in workload_dict: | |
| if workload in workload_super_list: | |
| for config in workload_dict[workload]: | |
| if config in config_super_list: | |
| cur_dir = workload_dict[workload][config] | |
| pwd = os.getcwd() | |
| os.chdir(cur_dir) | |
| os.system('make') | |
| for para in parameter_super_list: | |
| for iter in range(0, iterations): | |
| sh_file = './' + prefix + para + '.sh' | |
| perf_cmd = '' | |
| for i in range(0, len(perf_list)): | |
| perf_cmd += perf_list[i] | |
| if i != len(perf_list) - 1: | |
| perf_cmd += ',' | |
| profile_cmd = 'ncu --metrics ' | |
| profile_cmd += perf_cmd | |
| profile_cmd += ' --csv --log-file ' + para + '_' + str(iter) + '.profile.csv ' | |
| profile_cmd += get_run_cmd(sh_file) | |
| os.system(profile_cmd) | |
| os.chdir(pwd) | |
| def main(): | |
| parser = argparse.ArgumentParser() | |
| addOptions(parser) | |
| options = parser.parse_args() | |
| iterations = options.iterations | |
| output_csv_file = options.csv | |
| output_figure_file = options.figure | |
| profiling = options.profiling | |
| perf_list = [] | |
| perf_list.append('smsp__inst_executed.sum') | |
| perf_list.append('smsp__sass_thread_inst_executed_op_memory_pred_on.sum') | |
| perf_list.append('smsp__sass_thread_inst_executed_op_control_pred_on.sum') | |
| perf_list.append('smsp__sass_thread_inst_executed_op_integer_pred_on.sum') | |
| perf_list.append('smsp__sass_thread_inst_executed_op_fp16_pred_on.sum') | |
| perf_list.append('smsp__sass_thread_inst_executed_op_fp32_pred_on.sum') | |
| perf_list.append('smsp__sass_thread_inst_executed_op_fp64_pred_on.sum') | |
| perf_list.append('l1tex__t_sectors_pipe_lsu_mem_global_op_ld.sum') | |
| perf_list.append('l1tex__t_sectors_pipe_lsu_mem_global_op_ld_lookup_hit.sum') | |
| perf_list.append('l1tex__t_sectors_pipe_lsu_mem_global_op_st.sum') | |
| perf_list.append('l1tex__t_sectors_pipe_lsu_mem_global_op_st_lookup_hit.sum') | |
| root_directory = './' | |
| config_list = get_config_list(root_directory) | |
| print(config_list) | |
| workload_list, workload_dict = get_workload_dict(root_directory, config_list) | |
| print(workload_dict) | |
| if profiling: | |
| execute_bashes(workload_dict, iterations, perf_list) | |
| if __name__ == '__main__': | |
| main() | |