Browse Source

Fixed some problems with the network, which was taking a lot of time

Yentl Van Tendeloo 7 years ago
parent
commit
63df4c276d
2 changed files with 17 additions and 13 deletions
  1. 16 12
      model/model.py
  2. 1 1
      wrappers/modelverse_SCCD.py

+ 16 - 12
model/model.py

@@ -194,7 +194,6 @@ class ModelverseKernel(AtomicDEVS):
                     # No MvK, so set it with the root we have just received (or should have received)
                     # No MvK, so set it with the root we have just received (or should have received)
                     self.state.root = mvs_input[0]
                     self.state.root = mvs_input[0]
                     self.state.mvk = MvK(self.state.root)
                     self.state.mvk = MvK(self.state.root)
-                    #self.state.mvk.jit.set_jit_enabled(False)
                 else:
                 else:
                     self.state.reply = mvs_input
                     self.state.reply = mvs_input
             self.state.waiting = False
             self.state.waiting = False
@@ -236,7 +235,7 @@ class ModelverseKernel(AtomicDEVS):
                     commands = [("RV", [self.state.tasks[0]])]
                     commands = [("RV", [self.state.tasks[0]])]
                 else:
                 else:
                     self.state.current_task = self.state.reply[0]
                     self.state.current_task = self.state.reply[0]
-                    #print("Processing task %s at time %s" % (self.state.current_task, self.time_last))
+                    print("Processing task %s at time %s" % (self.state.current_task, self.time_last))
                     self.state.start_task_time = self.state.current_time
                     self.state.start_task_time = self.state.current_time
                     if self.state.current_task.startswith("__"):
                     if self.state.current_task.startswith("__"):
                         # Don't process this task and force termination of task
                         # Don't process this task and force termination of task
@@ -250,6 +249,7 @@ class ModelverseKernel(AtomicDEVS):
                     commands = self.state.mvk.execute_yields(self.state.current_task, "set_input", [value], self.state.reply)
                     commands = self.state.mvk.execute_yields(self.state.current_task, "set_input", [value], self.state.reply)
                     if PROFILE:
                     if PROFILE:
                         print("rule_generation: %.17f" % ((time.time() - start)))
                         print("rule_generation: %.17f" % ((time.time() - start)))
+                    #self.state.rule_generation = time.time() - start
                     self.state.mvk.returnvalue = None
                     self.state.mvk.returnvalue = None
                     if commands is None:
                     if commands is None:
                         self.state.inputs[self.state.current_task].pop(0)
                         self.state.inputs[self.state.current_task].pop(0)
@@ -262,6 +262,7 @@ class ModelverseKernel(AtomicDEVS):
                     commands = self.state.mvk.execute_yields(self.state.current_task, "execute_rule", [], self.state.reply)
                     commands = self.state.mvk.execute_yields(self.state.current_task, "execute_rule", [], self.state.reply)
                     if PROFILE:
                     if PROFILE:
                         print("rule_generation: %.17f" % ((time.time() - start)))
                         print("rule_generation: %.17f" % ((time.time() - start)))
+                    #self.state.rule_generation = time.time() - start
                 except SleepKernel:
                 except SleepKernel:
                     commands = None
                     commands = None
                     self.state.mvk.success = False
                     self.state.mvk.success = False
@@ -272,6 +273,7 @@ class ModelverseKernel(AtomicDEVS):
                 commands = self.state.mvk.execute_yields(self.state.current_task, "get_output", [], self.state.reply)
                 commands = self.state.mvk.execute_yields(self.state.current_task, "get_output", [], self.state.reply)
                 if PROFILE:
                 if PROFILE:
                     print("rule_generation: %.17f" % ((time.time() - start)))
                     print("rule_generation: %.17f" % ((time.time() - start)))
+                #self.state.rule_generation = time.time() - start
             else:
             else:
                 raise Exception("Phase: " + str(self.state.phase))
                 raise Exception("Phase: " + str(self.state.phase))
 
 
@@ -387,7 +389,7 @@ class Network(AtomicDEVS):
     def intTransition(self):
     def intTransition(self):
         self.state.processing.pop(0)
         self.state.processing.pop(0)
         if self.state.processing:
         if self.state.processing:
-            self.state.timer = (len(self.state.processing[0]) / float(self.bandwidth) + self.latency)
+            self.state.timer = (len(self.state.processing[0]) * 8 / float(self.bandwidth) + self.latency)
         else:
         else:
             self.state.timer = float("inf")
             self.state.timer = float("inf")
         return self.state
         return self.state
@@ -398,14 +400,16 @@ class Network(AtomicDEVS):
             self.state.timer = 0
             self.state.timer = 0
         for v in inputs[self.input_port]:
         for v in inputs[self.input_port]:
             self.state.processing.append(json.dumps(v))
             self.state.processing.append(json.dumps(v))
+            # NOTE data is in bytes, while bandwidth is in bits, so multiply by 8
         if len(self.state.processing) > 0:
         if len(self.state.processing) > 0:
-            self.state.timer = (len(self.state.processing[0]) / float(self.bandwidth) + self.latency)
+            self.state.timer = (len(self.state.processing[0]) * 8 / float(self.bandwidth) + self.latency)
         return self.state
         return self.state
 
 
     def outputFnc(self):
     def outputFnc(self):
         return {self.output_port: [json.loads(self.state.processing[0])]}
         return {self.output_port: [json.loads(self.state.processing[0])]}
 
 
     def timeAdvance(self):
     def timeAdvance(self):
+        #print("Timer: " + str(self.state.timer))
         return self.state.timer
         return self.state.timer
 
 
 class System(CoupledDEVS):
 class System(CoupledDEVS):
@@ -478,22 +482,22 @@ class System(CoupledDEVS):
         self.mvi2mvk = self.addSubModel(Network(\
         self.mvi2mvk = self.addSubModel(Network(\
                             name        = "mvi2mvk",
                             name        = "mvi2mvk",
                             latency     = mvi2mvk_latency,
                             latency     = mvi2mvk_latency,
-                            bandwidth   = mvi2mvk_bandwidth
+                            bandwidth   = mvi2mvk_bandwidth,
                         ))
                         ))
         self.mvk2mvs = self.addSubModel(Network(\
         self.mvk2mvs = self.addSubModel(Network(\
                             name        = "mvk2mvs",
                             name        = "mvk2mvs",
                             latency     = mvk2mvs_latency,
                             latency     = mvk2mvs_latency,
-                            bandwidth   = mvk2mvs_bandwidth
+                            bandwidth   = mvk2mvs_bandwidth,
                         ))
                         ))
         self.mvs2mvk = self.addSubModel(Network(\
         self.mvs2mvk = self.addSubModel(Network(\
                             name        = "mvs2mvk",
                             name        = "mvs2mvk",
                             latency     = mvs2mvk_latency,
                             latency     = mvs2mvk_latency,
-                            bandwidth   = mvs2mvk_bandwidth
+                            bandwidth   = mvs2mvk_bandwidth,
                         ))
                         ))
         self.mvk2mvi = self.addSubModel(Network(\
         self.mvk2mvi = self.addSubModel(Network(\
                             name        = "mvk2mvi",
                             name        = "mvk2mvi",
                             latency     = mvk2mvi_latency,
                             latency     = mvk2mvi_latency,
-                            bandwidth   = mvk2mvi_bandwidth
+                            bandwidth   = mvk2mvi_bandwidth,
                         ))
                         ))
 
 
         self.connectPorts(self.mvi_manager.to_mvk, self.mvk.from_mvi)
         self.connectPorts(self.mvi_manager.to_mvk, self.mvk.from_mvi)
@@ -515,13 +519,13 @@ args = {
         "taskname":             taskname,
         "taskname":             taskname,
         "operations":           operations,
         "operations":           operations,
         "finish_on":            finish_on,
         "finish_on":            finish_on,
-        "mvi2mvk_latency":      0.000001,
+        "mvi2mvk_latency":      0.0000001,
         "mvi2mvk_bandwidth":    50000000000,
         "mvi2mvk_bandwidth":    50000000000,
-        "mvk2mvs_latency":      0.000001,
+        "mvk2mvs_latency":      0.0000001,
         "mvk2mvs_bandwidth":    50000000000,
         "mvk2mvs_bandwidth":    50000000000,
-        "mvs2mvk_latency":      0.000001,
+        "mvs2mvk_latency":      0.0000001,
         "mvs2mvk_bandwidth":    50000000000,
         "mvs2mvk_bandwidth":    50000000000,
-        "mvk2mvi_latency":      0.000001,
+        "mvk2mvi_latency":      0.0000001,
         "mvk2mvi_bandwidth":    50000000000,
         "mvk2mvi_bandwidth":    50000000000,
         "time_per_phase":       0.05,
         "time_per_phase":       0.05,
         # Automatically filled in from calibration results, just here to prevent crashes (results for my UA desktop)
         # Automatically filled in from calibration results, just here to prevent crashes (results for my UA desktop)

+ 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 Nov 28 16:51:54 2017
+Date:   Mon Dec 18 08:57:20 2017
 
 
 Model author: Yentl Van Tendeloo
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server
 Model name:   MvK Server