From de4a11436bfb7d61343f2191c3f93a2814b51cdc Mon Sep 17 00:00:00 2001
From: Elizabeth <hashim.sharif91@gmail.com>
Date: Thu, 10 Oct 2019 13:57:05 -0500
Subject: [PATCH] Cleaned up code

---
 llvm/projects/soc_simulator/src/driver.py | 55 ++++++++++++++---------
 1 file changed, 35 insertions(+), 20 deletions(-)

diff --git a/llvm/projects/soc_simulator/src/driver.py b/llvm/projects/soc_simulator/src/driver.py
index 5de17ef673..1df46eec8f 100644
--- a/llvm/projects/soc_simulator/src/driver.py
+++ b/llvm/projects/soc_simulator/src/driver.py
@@ -4,11 +4,23 @@ import subprocess
 import sys
 
 class Driver:
+    fp16_swing = 8
+
+    class ApproxTypes:
+        FP16 = 0
+        FP32 = 1
+        PROMISE = 2
+
+    results_time_key = "Time"
+    results_energy_key = "Energy"
+
+
     def driver(self):
-        self.parse_tensor_layer_file()
-        self.parse_tensor_table()
-        self.run_simulations()
-        self.display_results()
+        self.__parse_tensor_layer_file()
+        self.__parse_tensor_table()
+        self.__run_simulations()
+        self.__display_results()
+
 
     def __init__(self, layer_filename, table_filename, config_filename, results_filename):
         self.__layer_filename = layer_filename
@@ -29,19 +41,23 @@ class Driver:
         self.__aggregate_results = defaultdict(lambda: defaultdict(float))
         self.__config_count = 0
 
+
     @staticmethod
     def is_conv(operation_name):
         return operation_name.startswith("Conv")
 
+
     @staticmethod
     def is_nml(operation_name):
         return operation_name.startswith("NML")
 
+
     @staticmethod
     def is_fc(operation_name):
         return operation_name.startswith("FC")
 
-    def parse_tensor_layer_file(self): 
+
+    def __parse_tensor_layer_file(self): 
         if not os.path.isfile(self.__layer_filename):
             print("ERROR: %s was not found." % self.__layer_filename)
             exit(1)
@@ -78,7 +94,8 @@ class Driver:
             self.__tensor_layers.append(tensor_layer)
         layer_file.close()
 
-    def parse_tensor_table(self): 
+
+    def __parse_tensor_table(self): 
         if not os.path.isfile(self.__table_filename):
             print("ERROR: %s was not found." % self.__table_filename)
             exit(1)
@@ -119,17 +136,12 @@ class Driver:
             line = table_file.readline().strip()
         table_file.close()
 
-    fp16_swing = 8
-
-    class ApproxTypes:
-        FP16 = 0
-        FP32 = 1
-        PROMISE = 2
 
     @staticmethod
     def is_promise(config_layer):
         return float(config_layer.split(' ')[0]) < Driver.fp16_swing
 
+
     def __quantize(self, curr_layer, prev_layer, h2f_f2h_operation_ind, layer_data):
         if curr_layer == prev_layer or curr_layer == Driver.ApproxTypes.PROMISE \
                     or prev_layer == Driver.ApproxTypes.PROMISE: # No quantization needed
@@ -153,6 +165,7 @@ class Driver:
         print("Quantization: (%f, %f)" % (time, energy))
         return (time, energy)
 
+
     def __run_promise_simulation(self, swing, layer_data):
         layer_name = layer_data["Name"] 
         patch_factor = 1 
@@ -183,6 +196,7 @@ class Driver:
         print("PROMISE: (%s, %s)" % (total_time_energy[0], total_time_energy[1]))
         return float(total_time_energy[0]), float(total_time_energy[1])
 
+
     def __run_gpu_simulation(self, curr_layer, layer_name, tensor_ind):
         tensor_info = self.__tensor_table[layer_name][tensor_ind]
         if curr_layer == Driver.ApproxTypes.FP32:
@@ -194,11 +208,8 @@ class Driver:
         print("GPU: (%f, %f)" % (conversion_time, conversion_energy))
         return (conversion_time, conversion_energy)
 
-    # Default dict of default dicts 
-    results_time_key = "Time"
-    results_energy_key = "Energy"
 
-    def run_simulations(self):
+    def __run_simulations(self):
         print("run sim")
         if not os.path.isfile(self.__config_filename):
             print("ERROR: %s was not found" % self.__config_filename)
@@ -252,7 +263,8 @@ class Driver:
             print("\n")
         config_file.close()
 
-    def display_results(self):
+
+    def __display_results(self):
         results_file = open(self.__results_filename, "w")
         attributes_to_print = [Driver.results_time_key, Driver.results_energy_key]
 
@@ -268,15 +280,18 @@ class Driver:
             for config_ind in range(self.__config_count):
                 results_file.write("c%d" % config_ind)
                 time_or_energy_val = self.__aggregate_results[attribute][config_ind]
-                results_file.write(",%f" % time_or_energy_val)
-                results_file.write(",%f\n" % (baseline_val / (time_or_energy_val + 0.0001)))
+
+                # Using repr to keep all decimal digits when writing to file
+                results_file.write(",%s" % repr(time_or_energy_val))
+                results_file.write(",%s\n" % repr(baseline_val / (time_or_energy_val + 0.0001)))
 
                 if not best_result or time_or_energy_val < best_result:
                     best_result = time_or_energy_val
                     best_config = config_ind
-            results_file.write("\nc%d,%f\n\n" % (best_config, self.__aggregate_results[attribute][best_config]))
+            results_file.write("\nc%d,%s\n\n" % (best_config, repr(self.__aggregate_results[attribute][best_config])))
         results_file.close()
 
+
 if __name__ == "__main__":
     if len(sys.argv) != 5:
         print("Usage: python driver.py <layer info> <tensor info> <configurations> <results file>")
-- 
GitLab