Browse Source

Attempt some performance tweaks

Yentl Van Tendeloo 8 years ago
parent
commit
18368a8654

+ 1 - 1
addis/Test_PM2SCCD.py

@@ -41,5 +41,5 @@ print("Upload SCCD execution semantics")
 # Add SCCD execution semantics
 transformation_add_AL({"SCCD": "SCCD"}, {}, "SCCD_execute", open("models/SCCD_execute.alc", 'r').read())
 print("DONE")
-transformation_execute_AL("SCCD_execute", {"SCCD": "PM_2_SCCD_output"}, {})
+#transformation_execute_AL("SCCD_execute", {"SCCD": "PM_2_SCCD_output"}, {})
 print("Executed")

+ 3 - 0
bootstrap/compiler.alc

@@ -26,6 +26,9 @@ Element function generic_compile(code : String, port : String):
 		return read_root()!
 
 Element function compile_code(code : String):
+	// TODO to test performance impact
+	return code!
+
 	String port
 	port = comm_connect("compiler")
 	comm_set(port, "code")

+ 1 - 1
hybrid_server/classes/mvkcontroller.xml

@@ -290,7 +290,7 @@
 
                         <transition cond="self.new_tasks" target="../create_SC"/>
                         <transition cond="not self.new_tasks and self.old_tasks" target="../remove_SC"/>
-                        <transition after="0.01" target="."/>
+                        <transition after="1.0" target="."/>
                     </state>
 
                     <state id="create_SC" initial="creating">

+ 1 - 1
kernel/modelverse_jit/tree_ir.py

@@ -30,7 +30,7 @@
 
 import modelverse_jit.source_map as source_map
 
-PROFILING = False
+PROFILING = True
 
 NOP_LITERAL = None
 """A literal that results in a nop during which execution may be interrupted

+ 29 - 16
kernel/modelverse_kernel/compiled.py

@@ -3,7 +3,7 @@ import modelverse_jit.runtime as jit_runtime
 import time
 
 def reverseKeyLookupMulti(a, b, **remainder):
-    #PROFILE start = time.time()
+    start = time.time()
     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]
@@ -19,11 +19,11 @@ def reverseKeyLookupMulti(a, b, **remainder):
     edges = yield [("CE", [result, result]) for value in values]
     yield [("CE", [edge, value[1]]) for edge, value in zip(edges, values)]
 
-    #PROFILE print("[COMPILED]reverseKeyLookupMulti : %s : %s" % (time.time() - start, time.time() - start))
+    print("[COMPILED]reverseKeyLookupMulti : %s : %s" % (time.time() - start, time.time() - start))
     raise PrimitiveFinished(result)
 
 def reverseKeyLookup(a, b, **remainder):
-    #PROFILE start = time.time()
+    start = time.time()
     edges_out, edges_in = yield [("RO", [a]), ("RI", [b])]
     options = set(edges_out) & set(edges_in)
     if options:
@@ -36,46 +36,46 @@ def reverseKeyLookup(a, b, **remainder):
         result = e[1]
     else:
         result, = yield [("CNV", ["(unknown: %s)" % b])]
-    #PROFILE print("[COMPILED]reverseKeyLookup : %s : %s" % (time.time() - start, time.time() - start))
+    print("[COMPILED]reverseKeyLookup : %s : %s" % (time.time() - start, time.time() - start))
     raise PrimitiveFinished(result)
 
 def instantiated_name(a, b, **remainder):
-    #PROFILE start = time.time()
+    start = time.time()
     name_value, = yield [("RV", [b])]
     if name_value == "":
         b, = yield [("CNV", ["__" + str(a)])]
-    #PROFILE print("[COMPILED]instantiated_name : %s : %s" % (time.time() - start, time.time() - start))
+    print("[COMPILED]instantiated_name : %s : %s" % (time.time() - start, time.time() - start))
     raise PrimitiveFinished(b)
 
 def set_merge(a, b, **remainder):
-    #PROFILE start = time.time()
+    start = time.time()
     keys, =         yield [("RDK", [b])]
     edges =         yield [("CE", [a, a]) for key in keys]
     _ =             yield [("CE", [edge, key]) for edge, key in zip(edges, keys)]
-    #PROFILE print("[COMPILED]set_merge : %s : %s" % (time.time() - start, time.time() - start))
+    print("[COMPILED]set_merge : %s : %s" % (time.time() - start, time.time() - start))
     raise PrimitiveFinished(a)
 
 def has_value(a, **remainder):
-    #PROFILE start = time.time()
+    start = time.time()
     v, = yield [("RV", [a])]
     if v is None:
         result, = yield [("CNV", [False])]
     else:
         result, = yield [("CNV", [True])]
-    #PROFILE print("[COMPILED]has_value : %s : %s" % (time.time() - start, time.time() - start))
+    print("[COMPILED]has_value : %s : %s" % (time.time() - start, time.time() - start))
     raise PrimitiveFinished(result)
 
 def make_reverse_dictionary(a, **remainder):
-    #PROFILE start = time.time()
+    start = time.time()
     reverse, = yield [("CN", [])]
     key_nodes, = yield [("RDK", [a])]
     values = yield [("RDN", [a, i]) for i in key_nodes]
     yield [("CD", [reverse, str(v), k]) for k, v in zip(key_nodes, values)]
-    #PROFILE print("[COMPILED]make_reverse_dictionary : %s : %s" % (time.time() - start, time.time() - start))
+    print("[COMPILED]make_reverse_dictionary : %s : %s" % (time.time() - start, time.time() - start))
     raise PrimitiveFinished(reverse)
 
 def dict_eq(a, b, **remainder):
-    #PROFILE start = time.time()
+    start = time.time()
     key_nodes, = yield [("RDK", [a])]
     key_values = yield [("RV", [i]) for i in key_nodes]
     values = yield [("RD", [a, i]) for i in key_values]
@@ -89,11 +89,11 @@ def dict_eq(a, b, **remainder):
     b_dict = dict(zip(key_values, values))
 
     result, = yield [("CNV", [a_dict == b_dict])]
-    #PROFILE print("[COMPILED]dict_eq : %s : %s" % (time.time() - start, time.time() - start))
+    print("[COMPILED]dict_eq : %s : %s" % (time.time() - start, time.time() - start))
     raise PrimitiveFinished(result)
 
 def string_substr(a, b, c, **remainder):
-    #PROFILE start = time.time()
+    start = time.time()
     a_val, b_val, c_val = yield [("RV", [a]),
                                  ("RV", [b]),
                                  ("RV", [c])]
@@ -103,7 +103,7 @@ def string_substr(a, b, c, **remainder):
         new_value = ""
     
     result, = yield [("CNV", [new_value])]
-    #PROFILE print("[COMPILED]string_substr : %s : %s" % (time.time() - start, time.time() - start))
+    print("[COMPILED]string_substr : %s : %s" % (time.time() - start, time.time() - start))
     raise PrimitiveFinished(result)
 
 def integer_gt(a, b, **remainder):
@@ -217,3 +217,16 @@ def set_overlap(a, b, **remainder):
     yield [("CD", [res, value, res]) for value in result]
 
     raise PrimitiveFinished(res)
+
+def get_superclasses(a, b, **remainder):
+    model, name = a, b
+    model_dict, name_value =    yield [("RD", [a, "model"]), 
+                                       ("RV", [b])]
+    elem, =                     yield [("RD", [model_dict, name_value])]
+
+    worklist = set([elem])
+    found = set([])
+
+    while worklist:
+        elem = worklist.pop()
+        found.add(elem)