Initial commit

This commit is contained in:
Yentl Van Tendeloo 2016-08-04 17:38:43 +02:00
commit 66a6860316
407 changed files with 1254365 additions and 0 deletions

View 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
View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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)
"""