From 8c507806d50860f59c193eb7694ac21104b2e837 Mon Sep 17 00:00:00 2001 From: Elizabeth <hashim.sharif91@gmail.com> Date: Wed, 9 Oct 2019 00:29:03 -0500 Subject: [PATCH] Ported quantize method to python --- llvm/projects/soc_simulator/src/driver.py | 29 +++++++++++++---------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/llvm/projects/soc_simulator/src/driver.py b/llvm/projects/soc_simulator/src/driver.py index 56e6006c9f..f9df2f32c4 100644 --- a/llvm/projects/soc_simulator/src/driver.py +++ b/llvm/projects/soc_simulator/src/driver.py @@ -58,8 +58,7 @@ def parse_tensor_layer_file(layer_filename): layer_file.close() # [layer_name][operation_name][cols] -# operation names need to be stored in order of insertion (use a list) -# defaultdict, value = lists of default dicts +# Operation names need to be stored in order of insertion tensor_table = defaultdict(lambda: list(defaultdict(str))) def parse_tensor_table(table_filename): @@ -116,13 +115,13 @@ def is_promise(config_layer): return config_layer.split(' ')[0] < fp16_swing # NOTE smart_dma is always true -def quantize(curr_layer, prev_layer, tensor, layer_data): +def quantize(curr_layer, prev_layer, h2f_f2h_operation_ind, layer_data): if curr_layer == prev_layer or curr_layer == ApproxTypes.PROMISE \ or prev_layer == ApproxTypes.PROMISE: # No quantization needed - return (0.0, 0.0) + return 0.0, 0.0 - size = None layer_name = layer_data["Name"] + ''' if is_conv(layer_name): size = layer_data["N"] * layer_data["Cin"] * layer_data["H"] * layer_data["W"] \ + layer_data["Cout"] * layer_data["Cin"] * layer_data["Kh"] * layer_data["Kw"] @@ -131,16 +130,20 @@ def quantize(curr_layer, prev_layer, tensor, layer_data): elif not is_nml(layer_name): print("ERROR: Invalid layer name %s" % layer_name) exit(1) - + ''' + # NOTE: Ignoring logic where curr == promise or prev == promise bc # smartDMA is always true so we'd return near the beginning of the method - # Converting between fp16 and fp32 - #info = tensor_table[layer_name] -# [layer_name][operation_name][cols] -# [layer name][operation number] = list of values -# we need to get the layer number, the first operation in that layer --> need to change table to store order -# then the h2f and f2h values + # Get h2f/f2h data using the first tensor operation in the layer + # (which is why order matters in the tensor table) + tensor_op_row = tensor_table[layer_name][h2f_f2h_operation_ind] + if curr_layer == ApproxTypes.FP32: + return tensor_op_row["h2f_time"], tensor_op_row["h2f_energy"] + elif curr_layer == ApproxTypes.FP16: + return tensor_op_row["f2h_time"], tensor_op_row["f2h_energy"] + assert(False) # Error: Should never reach this section + def run_simulations(config_filename, results_filename): config_file = open(config_filename, "r") @@ -161,7 +164,9 @@ def run_simulations(config_filename, results_filename): if is_promise(config_layer): print("Running layer %s on PROMISE" % layer_data["Name"]) curr_layer = ApproxTypes.PROMISE + quant_time, quant_energy = quantize(curr_layer, prev_layer, 0, layer_data) + # Compute else: pass -- GitLab