Browse Source

Faster reverseKeyLookupMulti

Yentl Van Tendeloo 8 years ago
parent
commit
134539d5a6
1 changed files with 7 additions and 30 deletions
  1. 7 30
      kernel/modelverse_kernel/compiled.py

+ 7 - 30
kernel/modelverse_kernel/compiled.py

@@ -2,34 +2,21 @@ from modelverse_kernel.primitives import PrimitiveFinished
 import modelverse_jit.runtime as jit_runtime 
 
 def reverseKeyLookupMulti(a, b, **remainder):
-    edges, = yield [("RO", [a])]
-    b_val, = yield [("RV", [b])]
+    edges, b_val, result = yield [("RO", [a]), ("RV", [b]), ("CN", [])]
     expanded_edges = yield [("RE", [i]) for i in edges]
     values = yield [("RV", [i[1]]) for i in expanded_edges]
-    result, = yield [("CN", [])]
 
+    # Keep results in a local Python set, as we want to bundle as many requests as possible
+    todo = set()
     for i, edge in enumerate(values):
         if b_val == edge:
-            # Found our edge: edges[i]
-            outgoing, = yield [("RO", [edges[i]])]
-            value, = yield [("RE", [outgoing[0]])]
-            yield [("CE", [result, value[1]])]
+            todo.add(i)
 
-    raise PrimitiveFinished(result)
+    outgoings = yield [("RO", [edges[i]]) for i in todo]
+    values = yield [("RE", [outgoing[0]]) for outgoing in outgoings]
+    yield [("CE", [result, value[1]]) for value in values]
 
-    """
-    edges_out, edges_in, result = yield [("RO", [a]), ("RI", [b]), ("CN", [])]
-    python_result = set()
-    options = set(edges_out) & set(edges_in)
-    if options:
-        all_destination_edges = yield [("RO", [i]) for i in options]
-        for e in all_destination_edges:
-            st, = yield [("RE", [edge]) for edge in e]
-            s, t = st
-            python_result.add(t)
-    yield [("CE", [result, i]) for i in python_result]
     raise PrimitiveFinished(result)
-    """
 
 def reverseKeyLookup(a, b, **remainder):
     edges_out, edges_in = yield [("RO", [a]), ("RI", [b])]
@@ -54,16 +41,6 @@ def set_copy(a, **remainder):
     _ =         yield [("CE", [b, i[1]]) for i in exp_links]
     raise PrimitiveFinished(b)
 
-def construct_const(**remainder):
-    v, = yield [("CNV", [{"value": "constant"}])]
-
-    # Get input: keep trying until we get something
-    inp, = yield [("CALL_KWARGS", [jit_runtime.get_input, remainder])]
-
-    yield [("CD", [v, "node", inp])]
-
-    raise PrimitiveFinished(v)
-
 def instantiated_name(a, b, **remainder):
     name_value, = yield [("RV", [b])]
     if name_value == "":