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