From c00161ad41c855240efa4e4d771931f6b68e4ea5 Mon Sep 17 00:00:00 2001 From: Elizabeth <hashim.sharif91@gmail.com> Date: Tue, 8 Oct 2019 23:51:03 -0500 Subject: [PATCH] Changed internal data structure for parsed layers file --- llvm/projects/soc_simulator/src/driver.py | 65 +++++++++++++++-------- 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/llvm/projects/soc_simulator/src/driver.py b/llvm/projects/soc_simulator/src/driver.py index d52711072e..7639ff1554 100644 --- a/llvm/projects/soc_simulator/src/driver.py +++ b/llvm/projects/soc_simulator/src/driver.py @@ -7,8 +7,6 @@ import sys def build_nested_default_dict(): return defaultdict(build_nested_default_dict) -tensor_layers = defaultdict(build_nested_default_dict) - def is_conv(operation_name): return operation_name.startswith("Conv") @@ -18,6 +16,10 @@ def is_nml(operation_name): def is_fc(operation_name): return operation_name.startswith("FC") +# NOTE: Use an OrderedDict if we want to search by operation name +# Using a list bc we care about the order the data is read in +# since it corresponds to the data in the configuration file +tensor_layers = [] def parse_tensor_layer_file(layer_filename): if not os.path.isfile(layer_filename): print("ERROR: %s was not found." % layer_filename) @@ -27,27 +29,32 @@ def parse_tensor_layer_file(layer_filename): for line in layer_file: layer_data = line.strip().split(',') layer_name = layer_data[0] - + + tensor_layer = defaultdict(str) + tensor_layer["Name"] = layer_name + if is_conv(layer_name): - tensor_layers[layer_name]["N"] = layer_data[1] - tensor_layers[layer_name]["Cin"] = layer_data[2] - tensor_layers[layer_name]["H"] = layer_data[3] - tensor_layers[layer_name]["W"] = layer_data[4] - tensor_layers[layer_name]["Cout"] = layer_data[5] - tensor_layers[layer_name]["Kh"] = layer_data[6] - tensor_layers[layer_name]["Kw"] = layer_data[7] - tensor_layers[layer_name]["Sh"] = layer_data[8] - tensor_layers[layer_name]["Sw"] = layer_data[9] + tensor_layer["N"] = layer_data[1] + tensor_layer["Cin"] = layer_data[2] + tensor_layer["H"] = layer_data[3] + tensor_layer["W"] = layer_data[4] + tensor_layer["Cout"] = layer_data[5] + tensor_layer["Kh"] = layer_data[6] + tensor_layer["Kw"] = layer_data[7] + tensor_layer["Sh"] = layer_data[8] + tensor_layer["Sw"] = layer_data[9] elif is_fc(layer_name): - tensor_layers[layer_name]["RA"] = layer_data[1] - tensor_layers[layer_name]["CA"] = layer_data[2] - tensor_layers[layer_name]["RB"] = layer_data[3] - tensor_layers[layer_name]["CB"] = layer_data[4] + tensor_layer["RA"] = layer_data[1] + tensor_layer["CA"] = layer_data[2] + tensor_layer["RB"] = layer_data[3] + tensor_layer["CB"] = layer_data[4] elif not is_nml(layer_name): # TODO should we store data for NMLs? print("ERROR: Invalid layer name %s" % layer_name) exit(1) + + tensor_layers.append(tensor_layer) layer_file.close() # should this be a nested dict of dicts? @@ -89,11 +96,23 @@ def parse_tensor_table(table_filename): table_file.close() -def run_simulations(): - pass - # open configuration file - # open results file - # read through each line in the configuration file +def run_simulations(config_filename, results_filename): + config_file = open(config_filename, "r") + results_file = open(results_filename, "w") + + # each line = indepedent configuration + # layers are separated by commas + # tensor ops are separated by spaces + + for config in config_file: + config_layers = config.strip().split(',') + prev = "FP32" # TODO??! + curr = None + + for layer_ind, curr_layer in enumerate(config_layers): + # TODO tensor_layers needs to be a list? + curr_tensor_layer = tensor_layers[layer_ind] + # for each config file line --> parse the comma separated voltage swing levels # recall: each line = a configuration that works # for each level @@ -119,5 +138,5 @@ if __name__ == "__main__": print("Usage: python driver.py <layer info> <tensor info> <configurations> <results file>") exit(1) ''' - #parse_tensor_layer_file("/home/nvidia/Gitlab/hpvm/llvm/projects/hpvm-tensor-rt/build_mobilenet/mobilenet_layers.txt") - parse_tensor_table("/home/nvidia/Gitlab/hpvm/llvm/projects/hpvm-tensor-rt/build_pldi/mobilenet_results/mobilenet_tensors.txt") + parse_tensor_layer_file("/home/nvidia/Gitlab/hpvm/llvm/projects/hpvm-tensor-rt/build_mobilenet/mobilenet_layers.txt") + #parse_tensor_table("/home/nvidia/Gitlab/hpvm/llvm/projects/hpvm-tensor-rt/build_pldi/mobilenet_results/mobilenet_tensors.txt") -- GitLab