Browse Source

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

Yentl Van Tendeloo 7 years ago
parent
commit
95427aa450
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)
                     self.state.root = mvs_input[0]
                     self.state.mvk = MvK(self.state.root)
-                    #self.state.mvk.jit.set_jit_enabled(False)
                 else:
                     self.state.reply = mvs_input
             self.state.waiting = False
@@ -236,7 +235,7 @@ class ModelverseKernel(AtomicDEVS):
                     commands = [("RV", [self.state.tasks[0]])]
                 else:
                     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
                     if self.state.current_task.startswith("__"):
                         # 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)
                     if PROFILE:
                         print("rule_generation: %.17f" % ((time.time() - start)))
+                    #self.state.rule_generation = time.time() - start
                     self.state.mvk.returnvalue = None
                     if commands is None:
                         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)
                     if PROFILE:
                         print("rule_generation: %.17f" % ((time.time() - start)))
+                    #self.state.rule_generation = time.time() - start
                 except SleepKernel:
                     commands = None
                     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)
                 if PROFILE:
                     print("rule_generation: %.17f" % ((time.time() - start)))
+                #self.state.rule_generation = time.time() - start
             else:
                 raise Exception("Phase: " + str(self.state.phase))
 
@@ -387,7 +389,7 @@ class Network(AtomicDEVS):
     def intTransition(self):
         self.state.processing.pop(0)
         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:
             self.state.timer = float("inf")
         return self.state
@@ -398,14 +400,16 @@ class Network(AtomicDEVS):
             self.state.timer = 0
         for v in inputs[self.input_port]:
             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:
-            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
 
     def outputFnc(self):
         return {self.output_port: [json.loads(self.state.processing[0])]}
 
     def timeAdvance(self):
+        #print("Timer: " + str(self.state.timer))
         return self.state.timer
 
 class System(CoupledDEVS):
@@ -478,22 +482,22 @@ class System(CoupledDEVS):
         self.mvi2mvk = self.addSubModel(Network(\
                             name        = "mvi2mvk",
                             latency     = mvi2mvk_latency,
-                            bandwidth   = mvi2mvk_bandwidth
+                            bandwidth   = mvi2mvk_bandwidth,
                         ))
         self.mvk2mvs = self.addSubModel(Network(\
                             name        = "mvk2mvs",
                             latency     = mvk2mvs_latency,
-                            bandwidth   = mvk2mvs_bandwidth
+                            bandwidth   = mvk2mvs_bandwidth,
                         ))
         self.mvs2mvk = self.addSubModel(Network(\
                             name        = "mvs2mvk",
                             latency     = mvs2mvk_latency,
-                            bandwidth   = mvs2mvk_bandwidth
+                            bandwidth   = mvs2mvk_bandwidth,
                         ))
         self.mvk2mvi = self.addSubModel(Network(\
                             name        = "mvk2mvi",
                             latency     = mvk2mvi_latency,
-                            bandwidth   = mvk2mvi_bandwidth
+                            bandwidth   = mvk2mvi_bandwidth,
                         ))
 
         self.connectPorts(self.mvi_manager.to_mvk, self.mvk.from_mvi)
@@ -515,13 +519,13 @@ args = {
         "taskname":             taskname,
         "operations":           operations,
         "finish_on":            finish_on,
-        "mvi2mvk_latency":      0.000001,
+        "mvi2mvk_latency":      0.0000001,
         "mvi2mvk_bandwidth":    50000000000,
-        "mvk2mvs_latency":      0.000001,
+        "mvk2mvs_latency":      0.0000001,
         "mvk2mvs_bandwidth":    50000000000,
-        "mvs2mvk_latency":      0.000001,
+        "mvs2mvk_latency":      0.0000001,
         "mvs2mvk_bandwidth":    50000000000,
-        "mvk2mvi_latency":      0.000001,
+        "mvk2mvi_latency":      0.0000001,
         "mvk2mvi_bandwidth":    50000000000,
         "time_per_phase":       0.05,
         # 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)
 
-Date:   Tue Nov 28 16:51:54 2017
+Date:   Mon Dec 18 08:57:20 2017
 
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server