|
@@ -161,6 +161,8 @@ class ModelverseKernel(object):
|
|
|
|
|
|
def execute_jit_internal(self, task_root, inst, taskname, params):
|
|
|
print("EXEC INTERNAL")
|
|
|
+ print("For instruction: " + str(inst))
|
|
|
+ inst, = yield [("RD", [inst, "body"])]
|
|
|
gen = self.execute_jit(task_root, inst, taskname, params)
|
|
|
print("Got generator: " + str(gen))
|
|
|
|
|
@@ -265,7 +267,7 @@ class ModelverseKernel(object):
|
|
|
# Is a global
|
|
|
prev = " " * nested_indent + "_globs, = yield [('RD', [kwargs['task_root'], 'globals'])]\n" + \
|
|
|
" " * nested_indent + "%s, = yield [('RD', [_globs, '%s'])]\n" % (str_value, str_value) + \
|
|
|
- " " * nested_indent + "%s, = yield [('RD', [%s, 'var'])]\n" % (str_value, str_value)
|
|
|
+ " " * nested_indent + "%s, = yield [('RD', [%s, 'value'])]\n" % (str_value, str_value)
|
|
|
instruction = str_value
|
|
|
else:
|
|
|
# Is a local
|
|
@@ -284,8 +286,8 @@ class ModelverseKernel(object):
|
|
|
# Therefore we actually do the operation in the Modelverse as well!
|
|
|
prev = " " * nested_indent + "_globs, = yield [('RD', [kwargs['task_root'], 'globals'])]\n" + \
|
|
|
" " * nested_indent + "_var, = yield [('RD', [_globs, '%s'])]\n" % instruction_var + \
|
|
|
- " " * nested_indent + "_old_edge, = yield [('RDE', [_var, 'var'])]\n" + \
|
|
|
- " " * nested_indent + "yield [('CD', [_var, 'var', %s])]\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"
|
|
|
|
|
|
elif inst_type["value"] == "call":
|
|
@@ -348,12 +350,12 @@ class ModelverseKernel(object):
|
|
|
|
|
|
raise primitive_functions.PrimitiveFinished((prev, instruction + next_inst))
|
|
|
|
|
|
- def read_function(self, inst):
|
|
|
+ def read_function(self, inst, suggested_name):
|
|
|
initial_instruction = inst
|
|
|
- suggested_name = self.jit.get_global_name(inst)
|
|
|
|
|
|
(params, _, is_mutable), = yield [("CALL_ARGS", [self.jit.jit_signature, (inst,)])]
|
|
|
- if suggested_name is None or is_mutable:
|
|
|
+ #if suggested_name is None or is_mutable:
|
|
|
+ if is_mutable:
|
|
|
print("Ignoring mutable or unreadable: %s" % suggested_name)
|
|
|
raise jit.JitCompilationFailedException("FAIL")
|
|
|
|
|
@@ -370,39 +372,42 @@ class ModelverseKernel(object):
|
|
|
def jit_compile(self, task_root, inst):
|
|
|
# Try to retrieve the suggested name.
|
|
|
suggested_name = self.jit.get_global_name(inst)
|
|
|
+ if suggested_name is None:
|
|
|
+ suggested_name = "func_%s" % str(inst)
|
|
|
+
|
|
|
# Have the JIT compile the function.
|
|
|
- #return self.jit.jit_compile(task_root, inst, suggested_name)
|
|
|
|
|
|
if inst is None:
|
|
|
raise ValueError('body_id cannot be None: ' + str(suggested_name))
|
|
|
elif inst in self.jit.jitted_entry_points:
|
|
|
+ print("Found previously compiled version: " + str(self.jit.jitted_entry_points[inst]))
|
|
|
raise primitive_functions.PrimitiveFinished(
|
|
|
self.jit.jit_globals[self.jit.jitted_entry_points[inst]])
|
|
|
|
|
|
compiled_func = self.jit.lookup_compiled_body(inst)
|
|
|
if compiled_func is None:
|
|
|
- name = self.jit.get_global_name(inst)
|
|
|
- compiled_func, = yield [("CALL_ARGS", [self.read_function, (inst,)])]
|
|
|
+ compiled_func, = yield [("CALL_ARGS", [self.read_function, (inst, suggested_name)])]
|
|
|
exec(str(compiled_func), self.jit.jit_globals)
|
|
|
- compiled_func = self.jit.jit_globals[name]
|
|
|
- self.jit.register_compiled(inst, compiled_func, name)
|
|
|
-
|
|
|
- #raise jit.JitCompilationFailedException("FAIL")
|
|
|
+ compiled_func = self.jit.jit_globals[suggested_name]
|
|
|
+ self.jit.register_compiled(inst, compiled_func, suggested_name)
|
|
|
|
|
|
raise primitive_functions.PrimitiveFinished(compiled_func)
|
|
|
|
|
|
def execute_jit(self, task_root, inst, taskname, params = {}):
|
|
|
# execute_jit
|
|
|
- task_frame, = yield [("RD", [task_root, "frame"])]
|
|
|
- symbols, = yield [("RD", [task_frame, "symbols"])]
|
|
|
- dict_keys_ref, = yield [("RDK", [symbols])]
|
|
|
- dict_keys_ref_n = yield [("RD", [i, "name"]) for i in dict_keys_ref]
|
|
|
- dict_keys = yield [("RV", [i]) for i in dict_keys_ref_n]
|
|
|
- dict_values_elem = yield [("RDN", [symbols, i]) for i in dict_keys_ref]
|
|
|
- dict_values = yield [("RD", [i, "value"]) for i in dict_values_elem]
|
|
|
-
|
|
|
- parameters = dict(list(zip(dict_keys, dict_values)))
|
|
|
- parameters.update(params)
|
|
|
+ try:
|
|
|
+ task_frame, = yield [("RD", [task_root, "frame"])]
|
|
|
+ symbols, = yield [("RD", [task_frame, "symbols"])]
|
|
|
+ dict_keys_ref, = yield [("RDK", [symbols])]
|
|
|
+ dict_keys_ref_n = yield [("RD", [i, "name"]) for i in dict_keys_ref]
|
|
|
+ dict_keys = yield [("RV", [i]) for i in dict_keys_ref_n]
|
|
|
+ dict_values_elem = yield [("RDN", [symbols, i]) for i in dict_keys_ref]
|
|
|
+ dict_values = yield [("RD", [i, "value"]) for i in dict_values_elem]
|
|
|
+
|
|
|
+ parameters = dict(list(zip(dict_keys, dict_values)))
|
|
|
+ parameters.update(params)
|
|
|
+ except:
|
|
|
+ parameters = params
|
|
|
|
|
|
parameters["root"] = self.root
|
|
|
parameters["task_root"] = task_root
|