From 74aec30b6291195340034f8433b20e1ff8e44358 Mon Sep 17 00:00:00 2001 From: Hashim Sharif <hsharif3@miranda.cs.illinois.edu> Date: Sat, 13 Mar 2021 23:12:12 -0600 Subject: [PATCH] Starting with Tuner HPVM-C generation --- .../keras/frontend/hpvm_dfg_translator.py | 66 +++++++++++++++++-- 1 file changed, 62 insertions(+), 4 deletions(-) diff --git a/hpvm/projects/keras/frontend/hpvm_dfg_translator.py b/hpvm/projects/keras/frontend/hpvm_dfg_translator.py index 4a3c44a24b..7402bd7492 100644 --- a/hpvm/projects/keras/frontend/hpvm_dfg_translator.py +++ b/hpvm/projects/keras/frontend/hpvm_dfg_translator.py @@ -17,6 +17,7 @@ class HPVMTranslator: self.root_str = "" self.root_struct_str = "" self.main_func_str = "" + self.tuner_main_func_str = "" self.file_header_str = "" self.hpvm_node_names = {} @@ -709,7 +710,6 @@ class HPVMTranslator: main_func_str += "llvm_hpvm_invokeRtControl(result, labels_path.c_str(), start, end); \n" main_func_str += self.endBatchLoop() - main_func_str += HPVM_cleanup + "(); \n " ####main_func_str += "computeAccuracy3(labels, result); \n" @@ -719,10 +719,51 @@ class HPVMTranslator: self.main_func_str += main_func_str + + + + def genTunerMainFunction(self, test_data, batch_size): + + tuner_main_func_str = "int main(int argc, char* argv[]){ \n\n" + tuner_main_func_str += self.weight_str + tuner_main_func_str += self.input_str + tuner_main_func_str += "RootIn* args = static_cast<RootIn*>(malloc(sizeof(RootIn))); \n\n" + + tuner_main_func_str += self.handleTuneTestData() + + for f_name in self.filter_names: + tuner_main_func_str += "args->" + f_name + " = " + f_name + "; \n" + tuner_main_func_str += "args->" + f_name + "_bytes = 0; \n" + + tuner_main_func_str += self.genBatchLoop(test_data, batch_size) + + tuner_main_func_str += "\n" + HPVM_init + "(); \n" + + tuner_main_func_str += "void* dfg = " + HPVM_launch + "(0, root, (void*) args); \n\n" + tuner_main_func_str += HPVM_wait + "(dfg); \n\n" + + if LLVM_4_BRANCH: + tuner_main_func_str += "void *result = static_cast<RootIn*>(args)->input; \n" + elif LLVM_9_BRANCH: + tuner_main_func_str += "void *result = static_cast<RootIn *>(args)->r.tensor; \n" + + tuner_main_func_str += "hpvm_request_tensor(result, 0); \n\n" + tuner_main_func_str += "uint32_t* labels = readLabelsBatch3(labels_path.c_str(), start, end); \n" + tuner_main_func_str += "computeAccuracy3(labels, result); \n" + tuner_main_func_str += HPVM_cleanup + "(); \n " + tuner_main_func_str += self.endBatchLoop() + + tuner_main_func_str += "return 0; \n\n" + tuner_main_func_str += "} \n" + + self.tuner_main_func_str += tuner_main_func_str + + + - def generateSourceProgram(self, dir_prefix): + def generateTestProgram(self, dir_prefix): program_str = self.file_header_str + self.node_str + self.root_str program_str += self.root_struct_str + self.main_func_str @@ -733,19 +774,36 @@ class HPVMTranslator: f.write(program_str) f.close() + + + def generateTunerProgram(self, dir_prefix): + + program_str = self.file_header_str + self.node_str + self.root_str + program_str += self.root_struct_str + self.tuner_main_func_str + + DEBUG (program_str) + + f = open(dir_prefix + "/approxhpvm_tuner_src.cc", "w+") + f.write(program_str) + f.close() + def translate(self, model, src_dir, test_data, tuner_data, batch_size): self.genFileHeader() + self.genRootNodeHeader() self.genRootStructure() + self.codegen(self.dfg) self.genRootNodeFooter() + self.genMainFunction(test_data, batch_size) + self.genTunerMainFunction(test_data, batch_size) # dump generated program string to source file - self.generateSourceProgram(src_dir) - + self.generateTestProgram(src_dir) + self.generateTunerProgram(src_dir) -- GitLab