From d579f04c2fa58ab6894b3e6ebbb6e22895d856e9 Mon Sep 17 00:00:00 2001
From: Elizabeth <hashim.sharif91@gmail.com>
Date: Wed, 9 Oct 2019 00:43:40 -0500
Subject: [PATCH] Implemented code to run promise simulator

---
 llvm/projects/soc_simulator/src/driver.py | 33 +++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/llvm/projects/soc_simulator/src/driver.py b/llvm/projects/soc_simulator/src/driver.py
index f9df2f32c4..b56f60ac68 100644
--- a/llvm/projects/soc_simulator/src/driver.py
+++ b/llvm/projects/soc_simulator/src/driver.py
@@ -2,6 +2,7 @@
 
 from collections import defaultdict
 import os
+import subprocess
 import sys
 
 def build_nested_default_dict():
@@ -145,6 +146,38 @@ def quantize(curr_layer, prev_layer, h2f_f2h_operation_ind, layer_data):
     assert(False) # Error: Should never reach this section
 
 
+def run_promise_simulation(swing, layer_data):
+    layer_name = layer_data["Name"] 
+    patch_factor = 1 
+
+    if is_conv(layer_name): 
+        rows_a = layer_data["N"] * layer_data["H"] * layer_data["W"] \
+				/ (layer_data["Sh"] * layer_data["Sw"])
+        cols_a = layer_data["Cin"] * layer_data["Kh"] * layer_data["Kw"]
+        rows_b = cols_a
+        cols_b = layer_data["Cout"]
+        patch_factor = layer_data["Kh"] * layer_data["Kw"]
+    elif is_fc(layer_name):
+        rows_a = layer_data["RA"] 
+        cols_a = layer_data["CA"]
+        rows_b = cols_a
+        cols_b = layer_data["CB"]
+    else:
+        print("PROMISE can't run whatever this layer is.")
+        exit(1)
+
+	# Run promise simulator
+	# TODO need to print time and energy so we can pipe it
+	# get output --> total time and energy
+	ptm_process = subprocess.Popen(["./ptm", str(rows_a), str(cols_a), str(rows_b), \
+			str(cols_b), str(patch_factor), str(swing)])
+	output, _ = ptm_process.communicate()
+	total_time_energy = output.strip().split(' ')
+
+	assert(len(total_time_energy) == 2)
+	return total_time_energy[0], total_time_energy[1]
+
+
 def run_simulations(config_filename, results_filename):
     config_file = open(config_filename, "r")
     results_file = open(results_filename, "w")
-- 
GitLab