Initial commit
This commit is contained in:
commit
66a6860316
407 changed files with 1254365 additions and 0 deletions
101
models/seq_devstone/model.py
Normal file
101
models/seq_devstone/model.py
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
import sys
|
||||
sys.path.append("../../src/")
|
||||
|
||||
from infinity import INFINITY
|
||||
from simulator import Simulator
|
||||
from DEVS import *
|
||||
import random
|
||||
|
||||
class Event:
|
||||
def __init__(self, eventSize):
|
||||
self.eventSize = eventSize
|
||||
|
||||
def copy(self):
|
||||
return Event(self.eventSize)
|
||||
|
||||
class ProcessorState:
|
||||
def __init__(self):
|
||||
self.event1_counter = INFINITY
|
||||
self.event1 = None
|
||||
self.queue = []
|
||||
|
||||
class Processor(AtomicDEVS):
|
||||
def __init__(self, name, randomta):
|
||||
AtomicDEVS.__init__(self, name)
|
||||
self.recv_event1 = self.addInPort("in_event1")
|
||||
self.send_event1 = self.addOutPort("out_event1")
|
||||
self.state = ProcessorState()
|
||||
self.randomta = randomta
|
||||
|
||||
def timeAdvance(self):
|
||||
return self.state.event1_counter
|
||||
|
||||
def intTransition(self):
|
||||
self.state.event1_counter -= self.timeAdvance()
|
||||
if self.state.event1_counter == 0 and self.state.queue == []:
|
||||
self.state.event1_counter = INFINITY
|
||||
self.state.event1 = None
|
||||
else:
|
||||
self.state.event1 = self.state.queue.pop()
|
||||
self.state.event1_counter = round(random.uniform(0.75, 1.25), 4) if self.randomta else 1.0
|
||||
return self.state
|
||||
|
||||
def extTransition(self, inputs):
|
||||
self.state.event1_counter -= self.elapsed
|
||||
#Only one element, so exploit this
|
||||
ev1 = inputs[self.recv_event1][0]
|
||||
if self.state.event1 is not None:
|
||||
self.state.queue.append(ev1)
|
||||
else:
|
||||
self.state.event1 = ev1
|
||||
self.state.event1_counter = round(random.uniform(0.75, 1.25), 4) if self.randomta else 1.0
|
||||
return self.state
|
||||
|
||||
def outputFnc(self):
|
||||
return {self.send_event1: [self.state.event1]}
|
||||
|
||||
class Generator(AtomicDEVS):
|
||||
def __init__(self):
|
||||
AtomicDEVS.__init__(self, "Generator")
|
||||
self.state = "gen_event1"
|
||||
self.send_event1 = self.addOutPort("out_event1")
|
||||
|
||||
def timeAdvance(self):
|
||||
return 1
|
||||
|
||||
def intTransition(self):
|
||||
return self.state
|
||||
|
||||
def outputFnc(self):
|
||||
return {self.send_event1: [Event(1)]}
|
||||
|
||||
class CoupledRecursion(CoupledDEVS):
|
||||
def __init__(self, width, depth, randomta):
|
||||
CoupledDEVS.__init__(self, "Coupled" + str(depth))
|
||||
self.recv_event1 = self.addInPort("in_event1")
|
||||
self.send_event1 = self.addOutPort("out_event1")
|
||||
|
||||
if depth > 1:
|
||||
self.recurse = self.addSubModel(CoupledRecursion(width, depth-1, randomta))
|
||||
self.connectPorts(self.recv_event1, self.recurse.recv_event1)
|
||||
|
||||
for i in range(width):
|
||||
processor = self.addSubModel(Processor("Processor%s_%s" % (depth, i), randomta))
|
||||
if i == 0:
|
||||
if depth > 1:
|
||||
self.connectPorts(self.recurse.send_event1, processor.recv_event1)
|
||||
else:
|
||||
self.connectPorts(self.recv_event1, processor.recv_event1)
|
||||
else:
|
||||
self.connectPorts(prev.send_event1, processor.recv_event1)
|
||||
prev = processor
|
||||
self.connectPorts(prev.send_event1, self.send_event1)
|
||||
|
||||
class DEVStone(CoupledDEVS):
|
||||
def __init__(self, width, depth, randomta):
|
||||
random.seed(1)
|
||||
CoupledDEVS.__init__(self, "DEVStone")
|
||||
self.generator = self.addSubModel(Generator())
|
||||
self.recurse = self.addSubModel(CoupledRecursion(width, depth, randomta))
|
||||
|
||||
self.connectPorts(self.generator.send_event1, self.recurse.recv_event1)
|
||||
14
models/seq_devstone/plot
Normal file
14
models/seq_devstone/plot
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# The one with (nearly) no collisions
|
||||
set terminal postscript enhanced colour portrait size 6,6
|
||||
set out 'seq_devstone_nocols.eps'
|
||||
set key top left
|
||||
set title "DEVStone with no collisions"
|
||||
set xlabel "Models"
|
||||
set ylabel "Time (s)"
|
||||
plot 'seq_devstone/setSchedulerSortedList_True' title 'Sorted List' w l, 'seq_devstone/setSchedulerActivityHeap_True' title 'Activity Heap' w l, 'seq_devstone/setSchedulerHeapSet_True' title 'HeapSet' w l, 'seq_devstone/setSchedulerMinimalList_True' title 'Minimal List' w l, 'seq_devstone/setSchedulerPolymorphic_True' title 'Polymorphic' w l
|
||||
|
||||
set out 'seq_devstone_cols.eps'
|
||||
set title "DEVStone with collisions"
|
||||
set xlabel "Models"
|
||||
set ylabel "Time (s)"
|
||||
plot 'seq_devstone/setSchedulerSortedList_False' title 'Sorted List' w l, 'seq_devstone/setSchedulerActivityHeap_False' title 'Activity Heap' w l, 'seq_devstone/setSchedulerHeapSet_False' title 'HeapSet' w l, 'seq_devstone/setSchedulerMinimalList_False' title 'Minimal List' w l, 'seq_devstone/setSchedulerPolymorphic_False' title 'Polymorphic' w l
|
||||
19
models/seq_devstone/setSchedulerActivityHeap_False
Normal file
19
models/seq_devstone/setSchedulerActivityHeap_False
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
10 0.437839746475
|
||||
20 0.838352044423
|
||||
30 1.23832241694
|
||||
40 1.62369831403
|
||||
50 2.03471469879
|
||||
60 2.3982702891
|
||||
70 2.71508129438
|
||||
80 3.08537697792
|
||||
90 3.35919324557
|
||||
100 3.66545367241
|
||||
110 3.99771698316
|
||||
120 4.30113895734
|
||||
130 4.6090083917
|
||||
140 4.92210634549
|
||||
150 5.13410464923
|
||||
160 5.42776799202
|
||||
170 5.70533943176
|
||||
180 6.04043372472
|
||||
190 6.26584196091
|
||||
19
models/seq_devstone/setSchedulerActivityHeap_True
Normal file
19
models/seq_devstone/setSchedulerActivityHeap_True
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
10 1.33379991849
|
||||
20 2.56409867605
|
||||
30 3.73020831744
|
||||
40 4.84184964498
|
||||
50 5.90984932582
|
||||
60 6.93722422918
|
||||
70 7.9074113369
|
||||
80 8.78074463209
|
||||
90 9.70985627174
|
||||
100 10.5298990409
|
||||
110 11.3867829641
|
||||
120 12.0932377974
|
||||
130 12.9424080849
|
||||
140 13.5705699921
|
||||
150 14.1854366461
|
||||
160 14.7894349893
|
||||
170 15.4617639383
|
||||
180 15.9409413338
|
||||
190 16.4453493754
|
||||
19
models/seq_devstone/setSchedulerHeapSet_False
Normal file
19
models/seq_devstone/setSchedulerHeapSet_False
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
10 0.414174636205
|
||||
20 0.774947961171
|
||||
30 1.13483039538
|
||||
40 1.45920920372
|
||||
50 1.78932205836
|
||||
60 2.09535908699
|
||||
70 2.40192437172
|
||||
80 2.69138073921
|
||||
90 2.97452743848
|
||||
100 3.23167562485
|
||||
110 3.50100167592
|
||||
120 3.79129091899
|
||||
130 4.02312636375
|
||||
140 4.29253562291
|
||||
150 4.54305259387
|
||||
160 4.77058641116
|
||||
170 4.97935740153
|
||||
180 5.2971016566
|
||||
190 5.4662481149
|
||||
19
models/seq_devstone/setSchedulerHeapSet_True
Normal file
19
models/seq_devstone/setSchedulerHeapSet_True
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
10 1.57455770175
|
||||
20 3.01242303848
|
||||
30 4.42655134201
|
||||
40 5.713078022
|
||||
50 6.9416876634
|
||||
60 8.1475593249
|
||||
70 9.30796901385
|
||||
80 10.3482016722
|
||||
90 11.4466376305
|
||||
100 12.4166307449
|
||||
110 13.3313566844
|
||||
120 14.2453057766
|
||||
130 15.0876230399
|
||||
140 16.1068829695
|
||||
150 16.6650173664
|
||||
160 17.4818486373
|
||||
170 18.0478870869
|
||||
180 18.7646377087
|
||||
190 19.2946422895
|
||||
19
models/seq_devstone/setSchedulerMinimalList_False
Normal file
19
models/seq_devstone/setSchedulerMinimalList_False
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
10 0.356722752253
|
||||
20 0.695328394572
|
||||
30 0.984358946482
|
||||
40 1.28946503003
|
||||
50 1.58443156878
|
||||
60 1.85481826464
|
||||
70 2.12389302254
|
||||
80 2.41723569234
|
||||
90 2.63971495628
|
||||
100 2.88680028915
|
||||
110 3.12467455864
|
||||
120 3.38523236911
|
||||
130 3.59177176158
|
||||
140 3.81154934565
|
||||
150 4.0165497462
|
||||
160 4.19292529424
|
||||
170 4.42385840416
|
||||
180 4.70577200254
|
||||
190 4.81698600451
|
||||
19
models/seq_devstone/setSchedulerMinimalList_True
Normal file
19
models/seq_devstone/setSchedulerMinimalList_True
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
10 1.58622638385
|
||||
20 3.8258433342
|
||||
30 6.64790463448
|
||||
40 10.0542449951
|
||||
50 14.038122654
|
||||
60 18.5242940585
|
||||
70 23.4125142097
|
||||
80 28.9115383625
|
||||
90 34.5205084483
|
||||
100 40.5443122387
|
||||
110 46.9102050463
|
||||
120 53.4750003815
|
||||
130 60.521493276
|
||||
140 67.5775249004
|
||||
150 75.1472173532
|
||||
160 81.8402016958
|
||||
170 89.9278153578
|
||||
180 97.1462076505
|
||||
190 104.351580064
|
||||
19
models/seq_devstone/setSchedulerPolymorphic_False
Normal file
19
models/seq_devstone/setSchedulerPolymorphic_False
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
10 0.36528468132
|
||||
20 0.683707316717
|
||||
30 0.995394706726
|
||||
40 1.29519406954
|
||||
50 1.58813436826
|
||||
60 1.86663738887
|
||||
70 2.1451207002
|
||||
80 2.3982073466
|
||||
90 2.6423646609
|
||||
100 2.89975301425
|
||||
110 3.12576993306
|
||||
120 3.36786293983
|
||||
130 3.59041968981
|
||||
140 3.82534766197
|
||||
150 4.05860129992
|
||||
160 4.23038538297
|
||||
170 4.44673268
|
||||
180 4.63879235586
|
||||
190 4.9046608607
|
||||
19
models/seq_devstone/setSchedulerPolymorphic_True
Normal file
19
models/seq_devstone/setSchedulerPolymorphic_True
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
10 1.68884372711
|
||||
20 3.16421024005
|
||||
30 4.60829607646
|
||||
40 5.99316096306
|
||||
50 7.28700860341
|
||||
60 8.58272306124
|
||||
70 9.75450809797
|
||||
80 10.8544566631
|
||||
90 12.0032290618
|
||||
100 13.1575163205
|
||||
110 14.1107816696
|
||||
120 15.0913612843
|
||||
130 15.8385444482
|
||||
140 16.6956853072
|
||||
150 17.4701259136
|
||||
160 18.2787590027
|
||||
170 19.064447403
|
||||
180 19.6151806513
|
||||
190 20.2545849482
|
||||
19
models/seq_devstone/setSchedulerSortedList_False
Normal file
19
models/seq_devstone/setSchedulerSortedList_False
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
10 0.369857708613
|
||||
20 0.699753363927
|
||||
30 1.01596601804
|
||||
40 1.32530903816
|
||||
50 1.62454009056
|
||||
60 1.90396229426
|
||||
70 2.18831857045
|
||||
80 2.46065966288
|
||||
90 2.72151025136
|
||||
100 2.95614862442
|
||||
110 3.21730534236
|
||||
120 3.45908157031
|
||||
130 3.68607433637
|
||||
140 3.89230473836
|
||||
150 4.13080430031
|
||||
160 4.41335296631
|
||||
170 4.52402035395
|
||||
180 4.77974073092
|
||||
190 4.9639043808
|
||||
19
models/seq_devstone/setSchedulerSortedList_True
Normal file
19
models/seq_devstone/setSchedulerSortedList_True
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
10 1.60033178329
|
||||
20 3.97595032056
|
||||
30 6.25149710973
|
||||
40 9.55855766932
|
||||
50 11.8856077194
|
||||
60 15.3778207302
|
||||
70 19.4193336169
|
||||
80 23.7153232892
|
||||
90 26.269172589
|
||||
100 30.5113313993
|
||||
110 35.0631963412
|
||||
120 39.7746334076
|
||||
130 44.6801886559
|
||||
140 49.7458384037
|
||||
150 54.9730383555
|
||||
160 60.1869065762
|
||||
170 65.4318309625
|
||||
180 67.3761057059
|
||||
190 72.4436699549
|
||||
40
models/seq_devstone/timer.py
Normal file
40
models/seq_devstone/timer.py
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
import sys
|
||||
import random
|
||||
schedulers = ["setSchedulerSortedList", "setSchedulerActivityHeap", "setSchedulerMinimalList", "setSchedulerHeapSet", "setSchedulerPolymorphic"]
|
||||
sys.path.append("../../src/")
|
||||
sizes = range(10, 200, 10)
|
||||
from simulator import Simulator
|
||||
import time
|
||||
iters = int(sys.argv[1])
|
||||
|
||||
def runFunc(param):
|
||||
scheduler, randomta = param
|
||||
f = open("seq_devstone/%s_%s" % (scheduler, randomta), 'w')
|
||||
for size in sizes:
|
||||
from model import DEVStone
|
||||
total = 0.0
|
||||
for _ in range(iters):
|
||||
random.seed(1)
|
||||
model = DEVStone(3, size, randomta)
|
||||
sim = Simulator(model)
|
||||
sim.setMessageCopy('none')
|
||||
getattr(sim, scheduler)()
|
||||
sim.setTerminationTime(1000)
|
||||
start = time.time()
|
||||
sim.simulate()
|
||||
total += (time.time() - start)
|
||||
f.write("%s %s\n" % (size, total/iters))
|
||||
print("%s %s" % (size, total/iters))
|
||||
f.close()
|
||||
|
||||
allprocs = []
|
||||
for scheduler in schedulers:
|
||||
for randomta in [True, False]:
|
||||
allprocs.append([scheduler, randomta])
|
||||
|
||||
map(runFunc, allprocs)
|
||||
"""
|
||||
from multiprocessing import Pool
|
||||
p = Pool(3)
|
||||
p.map(runFunc, allprocs)
|
||||
"""
|
||||
Loading…
Add table
Add a link
Reference in a new issue