|
@@ -316,6 +316,7 @@ class ModelverseKernel(object):
|
|
|
(prev_var, instruction_var), (prev_val, instruction_val) = \
|
|
|
yield [("CALL_ARGS", [self.print_instruction, (var, 0, indent)]),
|
|
|
("CALL_ARGS", [self.print_instruction, (val, 0, indent)])]
|
|
|
+
|
|
|
instruction = prev_val + " " * indent + instruction_var + " = " + instruction_val + "\n"
|
|
|
|
|
|
if prev_var:
|
|
@@ -324,9 +325,13 @@ class ModelverseKernel(object):
|
|
|
instruction += \
|
|
|
" " * nested_indent + "_globs, = yield [('RD', [kwargs['task_root'], 'globals'])]\n" + \
|
|
|
" " * nested_indent + "_var, = yield [('RD', [_globs, '%s'])]\n" % instruction_var + \
|
|
|
+ " " * nested_indent + "if _var is None:\n" + \
|
|
|
+ " " * (nested_indent + 1) + "_var, = yield [('CN', [])]\n" + \
|
|
|
+ " " * (nested_indent + 1) + "yield [('CD', [_globs, '%s', _var])]\n" % instruction_var + \
|
|
|
" " * nested_indent + "_old_edge, = yield [('RDE', [_var, 'value'])]\n" + \
|
|
|
" " * nested_indent + "yield [('CD', [_var, 'value', %s])]\n" % instruction_var + \
|
|
|
- " " * nested_indent + "yield [('DE', [_old_edge])]\n"
|
|
|
+ " " * nested_indent + "yield [('DE', [_old_edge])]\n" + \
|
|
|
+ " " * nested_indent + "kwargs['mvk'].jit.register_global('%s', %s)\n" % (instruction_var, instruction_var)
|
|
|
|
|
|
elif inst_type["value"] == "call":
|
|
|
func_name, = yield [("RD", [inst, "func"])]
|
|
@@ -353,7 +358,7 @@ class ModelverseKernel(object):
|
|
|
value = "func_result_" + str(ModelverseKernel.counter)
|
|
|
ModelverseKernel.counter += 1
|
|
|
param_list = "{" + ", ".join(["'%s': %s" % (k, v) for k, v in param_list.items()]) + "}"
|
|
|
- actual_computation = "%s, = yield [('CALL_ARGS', [kwargs['mvk'].execute_jit_internal, (kwargs['task_root'], %s, kwargs['taskname'], %s)])]\n" % (value, func_name, param_list)
|
|
|
+ actual_computation = "%s, = yield [('CALL_ARGS', [kwargs['mvk'].execute_jit_internal, (kwargs['task_root'], %s, kwargs['taskname'], %s])]\n" % (value, func_name, param_list)
|
|
|
|
|
|
if indent == 0:
|
|
|
# No indent, meaning that we use it inline
|
|
@@ -407,6 +412,11 @@ class ModelverseKernel(object):
|
|
|
else:
|
|
|
func = "def " + suggested_name + "(**kwargs):\n" + printed
|
|
|
print(func)
|
|
|
+
|
|
|
+ # To write out all generated functions
|
|
|
+ #with open('/tmp/junk/%s' % suggested_name, 'w') as f:
|
|
|
+ # f.write(func)
|
|
|
+
|
|
|
raise primitive_functions.PrimitiveFinished(func)
|
|
|
|
|
|
def jit_compile(self, task_root, inst):
|
|
@@ -416,7 +426,6 @@ class ModelverseKernel(object):
|
|
|
suggested_name = "func_%s" % str(inst)
|
|
|
|
|
|
# Have the JIT compile the function.
|
|
|
-
|
|
|
if inst is None:
|
|
|
raise ValueError('body_id cannot be None: ' + str(suggested_name))
|
|
|
elif inst in self.jit.jitted_entry_points:
|