Browse Source

Optimize for less kwargs accesses

Yentl Van Tendeloo 7 years ago
parent
commit
f069f80b3d
2 changed files with 14 additions and 10 deletions
  1. 13 9
      kernel/modelverse_kernel/main.py
  2. 1 1
      wrappers/modelverse_SCCD.py

+ 13 - 9
kernel/modelverse_kernel/main.py

@@ -258,16 +258,16 @@ class ModelverseKernel(object):
             instruction = "  " * indent + "continue\n"
             instruction = "  " * indent + "continue\n"
 
 
         elif inst_type["value"] == "input":
         elif inst_type["value"] == "input":
-            prev = "  " * nested_indent + "_inputs, = yield [('RD', [kwargs['task_root'], 'input'])]\n" + \
+            prev = "  " * nested_indent + "_inputs, = yield [('RD', [_root, 'input'])]\n" + \
                    "  " * nested_indent + "while 1:\n" + \
                    "  " * nested_indent + "while 1:\n" + \
                    "  " * (nested_indent + 1) + "val, = yield [('RD', [_inputs, 'value'])]\n" + \
                    "  " * (nested_indent + 1) + "val, = yield [('RD', [_inputs, 'value'])]\n" + \
                    "  " * (nested_indent + 1) + "if val is not None:\n" + \
                    "  " * (nested_indent + 1) + "if val is not None:\n" + \
                    "  " * (nested_indent + 2) + "val_e, = yield [('RDE', [_inputs, 'value'])]\n" + \
                    "  " * (nested_indent + 2) + "val_e, = yield [('RDE', [_inputs, 'value'])]\n" + \
                    "  " * (nested_indent + 2) + "yield [('DE', [val_e])]\n" + \
                    "  " * (nested_indent + 2) + "yield [('DE', [val_e])]\n" + \
-                   "  " * (nested_indent + 2) + "val_e, = yield [('RDE', [kwargs['task_root'], 'input'])]\n" + \
+                   "  " * (nested_indent + 2) + "val_e, = yield [('RDE', [_root, 'input'])]\n" + \
                    "  " * (nested_indent + 2) + "yield [('DE', [val_e])]\n" + \
                    "  " * (nested_indent + 2) + "yield [('DE', [val_e])]\n" + \
                    "  " * (nested_indent + 2) + "nxt, = yield [('RD', [_inputs, 'next'])]\n" + \
                    "  " * (nested_indent + 2) + "nxt, = yield [('RD', [_inputs, 'next'])]\n" + \
-                   "  " * (nested_indent + 2) + "yield [('CD', [kwargs['task_root'], 'input', nxt])]\n" + \
+                   "  " * (nested_indent + 2) + "yield [('CD', [_root, 'input', nxt])]\n" + \
                    "  " * (nested_indent + 2) + "_result = val\n" + \
                    "  " * (nested_indent + 2) + "_result = val\n" + \
                    "  " * (nested_indent + 2) + "break\n" + \
                    "  " * (nested_indent + 2) + "break\n" + \
                    "  " * (nested_indent + 1)+ "else:\n" + \
                    "  " * (nested_indent + 1)+ "else:\n" + \
@@ -278,13 +278,13 @@ class ModelverseKernel(object):
             value, = yield [("RD", [inst, "value"])]
             value, = yield [("RD", [inst, "value"])]
             (prev, inst), = yield [("CALL_ARGS", [self.print_instruction, (value, 0, indent)])]
             (prev, inst), = yield [("CALL_ARGS", [self.print_instruction, (value, 0, indent)])]
             instruction = prev + \
             instruction = prev + \
-                          "  " * indent + "_outputs, = yield [('RD', [kwargs['task_root'], 'last_output'])]\n" + \
-                          "  " * indent + "_outputs_e, = yield [('RDE', [kwargs['task_root'], 'last_output'])]\n" + \
+                          "  " * indent + "_outputs, = yield [('RD', [_root, 'last_output'])]\n" + \
+                          "  " * indent + "_outputs_e, = yield [('RDE', [_root, 'last_output'])]\n" + \
                           "  " * indent + "yield [('CD', [_outputs, 'value', %s])]\n" % inst + \
                           "  " * indent + "yield [('CD', [_outputs, 'value', %s])]\n" % inst + \
                           "  " * indent + "_new, = yield [('CN', [])]\n" + \
                           "  " * indent + "_new, = yield [('CN', [])]\n" + \
                           "  " * indent + "yield [('CD', [_outputs, 'next', _new])]\n" + \
                           "  " * indent + "yield [('CD', [_outputs, 'next', _new])]\n" + \
                           "  " * indent + "yield [('DE', [_outputs_e])]\n" + \
                           "  " * indent + "yield [('DE', [_outputs_e])]\n" + \
-                          "  " * indent + "yield [('CD', [kwargs['task_root'], 'last_output', _new])]\n"
+                          "  " * indent + "yield [('CD', [_root, 'last_output', _new])]\n"
 
 
 
 
         elif inst_type["value"] == "resolve":
         elif inst_type["value"] == "resolve":
@@ -330,7 +330,7 @@ class ModelverseKernel(object):
                        "  " * nested_indent + "_old_edge, = yield [('RDE', [_var, 'value'])]\n" + \
                        "  " * nested_indent + "_old_edge, = yield [('RDE', [_var, 'value'])]\n" + \
                        "  " * nested_indent + "yield [('CD', [_var, 'value', %s])]\n" % instruction_var + \
                        "  " * 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)
+                       "  " * nested_indent + "_mvk.jit.register_global('%s', %s)\n" % (instruction_var, instruction_var)
 
 
         elif inst_type["value"] == "call":
         elif inst_type["value"] == "call":
             func_name, = yield [("RD", [inst, "func"])]
             func_name, = yield [("RD", [inst, "func"])]
@@ -357,7 +357,7 @@ class ModelverseKernel(object):
                 value = "func_result_" + str(ModelverseKernel.counter)
                 value = "func_result_" + str(ModelverseKernel.counter)
                 ModelverseKernel.counter += 1
                 ModelverseKernel.counter += 1
                 param_list = "{" + ", ".join(["'%s': %s" % (k, v) for k, v in param_list.items()]) + "}"
                 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', [_mvk.execute_jit_internal, (_root, %s, _taskname, %s)])]\n" % (value, func_name, param_list)
 
 
                 if indent == 0:
                 if indent == 0:
                     # No indent, meaning that we use it inline
                     # No indent, meaning that we use it inline
@@ -404,7 +404,11 @@ class ModelverseKernel(object):
 
 
         print("Reading function: %s" % suggested_name)
         print("Reading function: %s" % suggested_name)
         (prev, printed), = yield [("CALL_ARGS", [self.print_instruction, (inst, 1)])]
         (prev, printed), = yield [("CALL_ARGS", [self.print_instruction, (inst, 1)])]
-        printed = "  _globs, = yield [('RD', [kwargs['task_root'], 'globals'])]\n" + prev + printed
+        preamble = "  _globs, = yield [('RD', [kwargs['task_root'], 'globals'])]\n" + \
+                   "  _root = kwargs['task_root']\n" + \
+                   "  _taskname = kwargs['taskname']\n" + \
+                   "  _mvk = kwargs['mvk']\n"
+        printed = preamble + prev + printed
         print("Total printed function: ")
         print("Total printed function: ")
         if params:
         if params:
             func = "def " + suggested_name + "(" + ", ".join([chr(ord('a') + i) for i in range(len(params))]) + ", **kwargs):\n" + "".join(["  var_%s = %s\n" % (param, chr(ord('a') + i)) for i, param in enumerate(params)]) + printed
             func = "def " + suggested_name + "(" + ", ".join([chr(ord('a') + i) for i in range(len(params))]) + ", **kwargs):\n" + "".join(["  var_%s = %s\n" % (param, chr(ord('a') + i)) for i, param in enumerate(params)]) + printed

+ 1 - 1
wrappers/modelverse_SCCD.py

@@ -1,7 +1,7 @@
 """
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
 
-Date:   Tue Apr 24 07:14:54 2018
+Date:   Tue Apr 24 07:27:14 2018
 
 
 Model author: Yentl Van Tendeloo
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server
 Model name:   MvK Server