Skip to content
Snippets Groups Projects
Commit 9bf04484 authored by shingjan's avatar shingjan
Browse files

update emit_hpvm_node_edge method & IR no longer holds a copy of the actual onnx node

parent 0c0855fe
No related branches found
No related tags found
No related merge requests found
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
class DFGNode(object): class DFGNode(object):
def __init__(self, onnx_node): def __init__(self, onnx_node):
self.onnx_node = onnx_node #self.onnx_node = onnx_node
self.name = onnx_node.name self.name = onnx_node.name
self.op_type = onnx_node.op_type self.op_type = onnx_node.op_type
self.input = onnx_node.input self.input = onnx_node.input
......
...@@ -87,61 +87,23 @@ class HpvmCodeGen: ...@@ -87,61 +87,23 @@ class HpvmCodeGen:
mapped_output_var + ", 1, 1, 0); \n" mapped_output_var + ", 1, 1, 0); \n"
root_footer_str += "\n}\n\n" root_footer_str += "\n}\n\n"
return root_footer_str return root_footer_str
def genHpvmNodeEdges(out_var_name, input_var_name, input_var_name2): def emit_hpvm_node_edges(out_var_name, input_vars):
print ("input_var_name2 = ", input_var_name2)
print ("input_var_name = ", input_var_name)
hpvm_edge_str = "\n void* " + out_var_name + " = " hpvm_edge_str = "\n void* " + out_var_name + " = "
hpvm_edge_str += "__visc__createNodeND(0, " + out_var_name + "_node); \n\n" hpvm_edge_str += "__visc__createNodeND(0, " + out_var_name + "_node); \n\n"
if input_var_name in self.filter_names:
input_index = self.filter_names[input_var_name]
index1 = input_index * 2
index2 = index1 + 1
hpvm_edge_str += " __visc__bindIn(" + out_var_name + ", " + str(index1) + ", 0, 0); \n"
hpvm_edge_str += " __visc__bindIn(" + out_var_name + ", " + str(index2) + ", 1, 0); \n"
elif input_var_name in self.hpvm_node_names:
hpvm_edge_str += " __visc__edge(" + input_var_name + ", " + out_var_name + ", 1, 0, 0, 0); \n"
hpvm_edge_str += " __visc__edge(" + input_var_name + ", " + out_var_name + ", 1, 1, 1, 0); \n"
if input_var_name2 in self.filter_names:
input_index = self.filter_names[input_var_name2]
index1 = input_index * 2
index2 = index1 + 1
hpvm_edge_str += " __visc__bindIn(" + out_var_name + ", " + str(index1) + ", 2, 0); \n"
hpvm_edge_str += " __visc__bindIn(" + out_var_name + ", " + str(index2) + ", 3, 0); \n"
elif input_var_name2 in self.hpvm_node_names:
hpvm_edge_str += " __visc__edge(" + input_var_name2 + ", " + out_var_name + ", 1, 0, 2, 0); \n"
hpvm_edge_str += " __visc__edge(" + input_var_name2 + ", " + out_var_name + ", 1, 1, 3, 0); \n"
return hpvm_edge_str
def genHpvmNodeEdges2(out_var_name, input_vars):
hpvm_edge_str = "\n void* " + hpvm_node_id + " = "
hpvm_edge_str += "__visc__createNodeND(0, " + hpvm_node_id + "_node); \n\n"
it = 0 it = 0
for input_var_name in input_vars: for input_var_name in input_vars:
if input_var_name in self.filter_names: if input_var_name in self.filter_names:
input_index = self.filter_names[input_var_name] input_index = self.filter_names[input_var_name]
index1 = input_index * 2 index1 = input_index * 2
index2 = index1 + 1 index2 = index1 + 1
hpvm_edge_str += " __visc__bindIn(" + hpvm_node_id + ", " + str(index1) + ", " + str(it*2) + ", 0); \n" hpvm_edge_str += " __visc__bindIn(" + out_var_name + ", " + str(index1) + ", " + str(it*2) + ", 0); \n"
hpvm_edge_str += " __visc__bindIn(" + hpvm_node_id + ", " + str(index2) + ", " + str(it*2+1) + ", 0); \n" hpvm_edge_str += " __visc__bindIn(" + out_var_name + ", " + str(index2) + ", " + str(it*2+1) + ", 0); \n"
elif input_var_name in self.hpvm_node_names: elif input_var_name in self.hpvm_node_names:
hpvm_edge_str += " __visc__edge(" + input_var_name + ", " + hpvm_node_id + ", 1, 0, " + str(it*2) + ", 0); \n" hpvm_edge_str += " __visc__edge(" + input_var_name + ", " + out_var_name + ", 1, 0, " + str(it*2) + ", 0); \n"
hpvm_edge_str += " __visc__edge(" + input_var_name + ", " + hpvm_node_id + ", 1, 1, " + str(it*2+1) + ", 0); \n" hpvm_edge_str += " __visc__edge(" + input_var_name + ", " + out_var_name + ", 1, 1, " + str(it*2+1) + ", 0); \n"
it += 1 it += 1
return hpvm_edge_str return hpvm_edge_str
node_str = "" node_str = ""
for node in self.nodes: for node in self.nodes:
...@@ -153,22 +115,15 @@ class HpvmCodeGen: ...@@ -153,22 +115,15 @@ class HpvmCodeGen:
self.hpvm_node_names[mapped_output_name] = 1 self.hpvm_node_names[mapped_output_name] = 1
if node.op_type in skip_layer: if node.op_type in skip_layer:
continue continue
# node_str
node_str += emit_hpvm_node_header(mapped_output_name, len(node.input)) node_str += emit_hpvm_node_header(mapped_output_name, len(node.input))
node_str += node.hpvm_codegen(self.tensors) node_str += node.hpvm_codegen(self.tensors)
node_str += emit_hpvm_node_footer(2) # Hardcoded as in Keras frontend node_str += emit_hpvm_node_footer(2) # Hardcoded as in Keras frontend
if node.op_type == "BatchNormalization": # hpvm_graph_str
out_var_name = self.tensors[node.output[0]].get_mapped_name() input_vars = list()
input_vars = list() for i in node.input:
for i in node.input: input_vars.append(self.tensors[i].get_mapped_name())
input_vars.append(self.tensors[i].get_mapped_name()) self.hpvm_graph_str += emit_hpvm_node_edges(mapped_output_name, input_vars)
self.hpvm_graph_str += genHpvmNodeEdges2(out_var_name, input_vars)
else:
out_var_name = self.tensors[node.output[0]].get_mapped_name()
input_var_name = self.tensors[node.input[0]].get_mapped_name()
input_var_name2 = ""
if len(node.input) == 2:
input_var_name2 = self.tensors[node.input[1]].get_mapped_name()
self.hpvm_graph_str += genHpvmNodeEdges(out_var_name, input_var_name, input_var_name2)
self.hpvm_graph_str += emit_root_node_footer(self) self.hpvm_graph_str += emit_root_node_footer(self)
self.program_str += node_str self.program_str += node_str
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment