Przeglądaj źródła

Fixed Modelverse input, partially by disabling the JIT on the input function

Yentl Van Tendeloo 8 lat temu
rodzic
commit
a8117802fb

+ 1 - 1
bootstrap/primitives.alc

@@ -178,7 +178,7 @@ Integer function integer_modulo(a : Integer, b : Integer):
 	return a - b * (a / b)!
 
 Boolean function has_input():
-	return (element_neq(dict_read(read_taskroot(), "input"), dict_read(read_taskroot(),"last_input")))!
+	return dict_in(dict_read(read_taskroot(), "input"), "value")!
 
 Element function list_pop(lst : Element, index : Integer):
 	Element v

+ 1 - 1
bootstrap/utils.alc

@@ -68,7 +68,7 @@ Element function input_timeout(timeout : Float):
 			return input()!
 		else:
 			// Nothing to do, we should yield...
-			sleep(0.01)
+			sleep(0.02)
 
 	return read_root()!
 

+ 4 - 0
interface/HUTN/hutn_compiler/compiler.py

@@ -24,6 +24,8 @@ def md5digest(filename):
     return hasher.hexdigest()
 
 def fetch_cached(filename, mode=None):
+    if mode is not None:
+        return None
     try:
         md5 = md5digest(filename)
         cache_folder = os.path.abspath("%s/../caches/" % (os.path.dirname(os.path.abspath(__file__))))
@@ -37,6 +39,8 @@ def fetch_cached(filename, mode=None):
         return None
 
 def make_cached(filename, data, mode=None):
+    if mode is not None:
+        return
     md5 = md5digest(filename)
     cache_folder = os.path.abspath("%s/../caches/" % (os.path.dirname(os.path.abspath(__file__))))
     if mode is None:

+ 1 - 0
kernel/modelverse_jit/bytecode_to_tree.py

@@ -91,6 +91,7 @@ def create_input(use_input_function=False):
     """Creates an instruction that pops a value from the input queue."""
     # Possible alternative to the explicit syntax tree: just call the jit_runtime.__get_input
     # function.
+    use_input_function = True
     if use_input_function:
         return tree_ir.create_jit_call(
             tree_ir.LoadGlobalInstruction(jit_runtime.GET_INPUT_FUNCTION_NAME),

+ 1 - 2
kernel/modelverse_jit/runtime.py

@@ -178,13 +178,12 @@ def unreachable():
 
 def get_input(**parameters):
     """Retrieves input."""
-    print("EXECUTED")
     mvk = parameters["mvk"]
     task_root = parameters["task_root"]
     while 1:
         yield [("CALL_ARGS", [mvk.input_init, (task_root,)])]
         # Finished
-        if mvk.success:
+        if mvk.input_value is not None:
             # Got some input, so we can access it
             raise primitive_functions.PrimitiveFinished(mvk.input_value)
         else:

+ 10 - 10
kernel/modelverse_kernel/main.py

@@ -250,25 +250,26 @@ class ModelverseKernel(object):
             self.success = False
             self.returnvalue = None
         else:
-            rv_value, =     yield [("RV", [rv])]
-            _, _ =          yield [("CD", [task_root, "output", next_output]),
+            rv_value, _, _ = \
+                            yield [("RV", [rv]),
+                                   ("CD", [task_root, "output", next_output]),
                                    ("DN", [first_output]),
                                   ]
+
             self.returnvalue = rv_value
             self.success = True
 
     def set_input(self, taskname, value):
         task_root, =        yield [("RD", [self.root, taskname])]
-        old_input, link =   yield [("RD", [task_root, "last_input"]),
+        old_input, link, new_input, new_value = \
+                            yield [("RD", [task_root, "last_input"]),
                                    ("RDE", [task_root, "last_input"]),
+                                   ("CN", []),
+                                   ("CNV", [value]),
                                   ]
-        new_input, =        yield [("CN", [])]
-        _, _ =              yield [("CD", [task_root, "last_input", new_input]),
+        _, _, _, _ =        yield [("CD", [task_root, "last_input", new_input]),
                                    ("CD", [old_input, "next", new_input]),
-                                  ]
-
-        new_value, =        yield [("CNV", [value])]
-        _, _ =              yield [("CD", [old_input, "value", new_value]),
+                                   ("CD", [old_input, "value", new_value]),
                                    ("DE", [link])
                                   ]
         self.returnvalue = {"id": 100, "value": "success"}
@@ -1087,7 +1088,6 @@ class ModelverseKernel(object):
         else:
             # No input yet, so just wait and don't advance IP or phase
             self.input_value = None
-            self.success = False
 
     def output_init(self, task_root):
         task_frame, =   yield [("RD", [task_root, "frame"])]

+ 1 - 1
state/modelverse_state/main.py

@@ -57,7 +57,7 @@ class ModelverseState(object):
         picklefile = filename + ".pickle"
         try:
             if os.path.getmtime(picklefile) > os.path.getmtime(filename):
-                # Pickle is more recent than grammarfile, so we can use it
+                # Pickle is more recent than bootstrap file, so we can use it
                 self.root, self.free_id, self.nodes, self.edges, self.values, self.cache, self.cache_node = pickle.load(open(picklefile, 'rb'))
                 for name in self.edges:
                     source, destination = self.edges[name]