From e40192a73465891aae4147da7f593a28067244a6 Mon Sep 17 00:00:00 2001
From: Hashim Sharif <hsharif3@miranda.cs.illinois.edu>
Date: Thu, 18 Mar 2021 01:39:32 -0500
Subject: [PATCH] Adding fclose() on pipe in Keras HPVM-C generation

---
 .../keras/frontend/approxhpvm_translator.py   |  2 +-
 .../keras/frontend/hpvm_dfg_translator.py     | 21 +++++++++++++++----
 2 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/hpvm/projects/keras/frontend/approxhpvm_translator.py b/hpvm/projects/keras/frontend/approxhpvm_translator.py
index 7515bf67da..32a4839ee6 100644
--- a/hpvm/projects/keras/frontend/approxhpvm_translator.py
+++ b/hpvm/projects/keras/frontend/approxhpvm_translator.py
@@ -211,7 +211,7 @@ class TensorRtTranslator:
     self.knobs_str = ""
     self.cur_height = 32    
     self.cur_width = 32     
-    self.op_count = 1       
+    self.op_count = 0       
     
     
 
diff --git a/hpvm/projects/keras/frontend/hpvm_dfg_translator.py b/hpvm/projects/keras/frontend/hpvm_dfg_translator.py
index c631b605cb..d14c64bbf4 100644
--- a/hpvm/projects/keras/frontend/hpvm_dfg_translator.py
+++ b/hpvm/projects/keras/frontend/hpvm_dfg_translator.py
@@ -751,7 +751,8 @@ class HPVMTranslator:
 
      abs_src_path = str(os.getcwd()) + "/" + src_dir 
      tuner_main_func_str += "auto* fp = open_fifo(\"" + abs_src_path + "/hpvm_fifo_w\", \"wb\"); \n\n"
-
+     tuner_main_func_str += "float total_accuracy = 0; \n"
+     
      tuner_main_func_str += self.genBatchLoop(test_data.shape, batch_size)
      tuner_main_func_str += self.genBatchInput(test_data.shape, "input_pth")
 
@@ -765,12 +766,14 @@ class HPVMTranslator:
     
      tuner_main_func_str += "hpvm_request_tensor(result, 0); \n\n"
      tuner_main_func_str += "uint32_t* labels = readLabelsBatch3(labels_pth.c_str(), start, end); \n"
-     tuner_main_func_str += "computeAccuracy3(labels, result); \n"
+     tuner_main_func_str += "total_accuracy += computeAccuracy3(labels, result) * batch_size  ; \n"
 
      tuner_main_func_str += "\nfifo_write_batch(fp, result); \n"     
 
      tuner_main_func_str += self.endBatchLoop()
-    
+
+     tuner_main_func_str += "write_accuracy(total_accuracy / test_input_size); \n"
+     tuner_main_func_str += "fclose(fp); \n"
      tuner_main_func_str += HPVM_cleanup + "(); \n "
 
      tuner_main_func_str += "\n}\n\n"  # End of FIFO loop
@@ -783,6 +786,8 @@ class HPVMTranslator:
 
   def addFIFORoutines(self, src_dir):
 
+    abs_src_dir = str(os.getcwd()) + "/" + src_dir 
+
     FIFO_str = """
    
  FILE *open_fifo(const char *path, const char *mode) { 
@@ -797,7 +802,7 @@ class HPVMTranslator:
 
 
 int fifo_wait() {
-    auto* fp = open_fifo(\"/tmp/lenet_mnist_tune/hpvm_fifo_r\", \"r\");
+    auto* fp = open_fifo(\"""" + abs_src_dir + """/hpvm_fifo_r\", \"r\");
     const int maxn = 100;
     char linebuf[maxn];
     fgets(linebuf, maxn, fp);
@@ -822,6 +827,14 @@ void fifo_write_batch(FILE *fp, void *output_ptr) {
     fwrite(output->host_data, 1, output->size_in_bytes, fp);
 }
 
+
+void write_accuracy(float accuracy) {
+  std::ofstream fout("final_accuracy");
+  fout << std::fixed << accuracy;
+}
+
+
+
 """
 
     return FIFO_str
-- 
GitLab