123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- #! /bin/env python
- #import stacktracer
- #stacktracer.trace_start("trace.html",interval=1,auto=True) # Set auto flag to always update file!
- try:
- from mpi4py import MPI
- except ImportError:
- pass
- import models
- import sys
- from pypdevs.simulator import Simulator, loadCheckpoint
- mn = sys.argv[1]
- args = {}
- args["setTerminationTime"] = [40]
- args["setVerbose"] = ["output/" + mn.partition("_local")[0]]
- run = True
- def counter(t, m):
- return m.processor2.coupled[0].state.counter != float('inf')
- def counter_pull(t, m):
- s = m.processor1.coupled[0].getState(t)
- print(s.counter)
- return s.counter != float('inf')
- if mn == "confluent":
- model = models.Chain(1.00)
- elif mn == "confluent_local":
- model = models.Chain_local(1.00)
- elif mn == "rollback":
- args["setTerminationTime"] = [20000]
- model = models.Chain_bad()
- elif mn == "normal_long":
- args["setTerminationTime"] = [20000]
- #args["setVerbose"] = [False]
- model = models.Chain(0.66)
- elif mn == "normal_long_local":
- args["setTerminationTime"] = [20000]
- #args["setVerbose"] = [False]
- model = models.Chain_local(0.66)
- elif mn == "dualdepth":
- model = models.DualDepth(0.66)
- elif mn == "dualdepth_local":
- model = models.DualDepth_local(0.66)
- elif mn == "dual":
- model = models.DualChain(0.66)
- elif mn == "dual_local":
- model = models.DualChain_local(0.66)
- elif mn == "dual_mp":
- model = models.DualChainMP(0.66)
- elif mn == "dual_mp_local":
- model = models.DualChainMP_local(0.66)
- elif mn == "local":
- model = models.Local()
- elif mn == "local_local":
- model = models.Local()
- elif mn == "longtime":
- model = models.Chain(0.66)
- args["setTerminationTime"] = [200]
- elif mn == "longtime_local":
- model = models.Chain_local(0.66)
- args["setTerminationTime"] = [200]
- elif mn == "atomic_local":
- model = models.Generator()
- elif mn == "multi":
- model = models.Chain(0.50)
- elif mn == "multi_local":
- model = models.Chain_local(0.50)
- elif mn == "multinested":
- model = models.MultiNested()
- args["setTerminationTime"] = [10]
- elif mn == "nested_local":
- model = models.Nested_local()
- args["setTerminationTime"] = [20]
- elif mn == "nested_realtime_local":
- model = models.Nested_local()
- args["setTerminationTime"] = [20]
- args["setRealTime"] = [True]
- args["setRealTimePorts"] = [{}]
- args["setRealTimePlatformThreads"] = []
- elif mn == "remotedc":
- model = models.RemoteDC()
- elif mn == "remotedc_long":
- args["setTerminationTime"] = [200]
- model = models.RemoteDC()
- elif mn == "normal":
- model = models.Chain(0.66)
- elif mn == "allocate":
- args["setTerminationTime"] = [10000]
- args["setGreedyAllocator"] = []
- #args["setDrawModel"] = [True, "model.dot", False]
- model = models.Chain(0.66)
- elif mn == "normal_local":
- model = models.Chain_local(0.66)
- elif mn == "zeroLookahead":
- model = models.Chain(0.00)
- elif mn == "zeroLookahead_local":
- model = models.Chain_local(0.00)
- elif mn == "stateStop":
- model = models.Chain(0.66)
- args["setTerminationModel"] = [model.processor2.coupled[0]]
- args["setTerminationCondition"] = [counter]
- del args["setTerminationTime"]
- elif mn == "stateStop_local":
- model = models.Chain_local(0.66)
- args["setTerminationModel"] = [model.processor2.coupled[0]]
- args["setTerminationCondition"] = [counter]
- del args["setTerminationTime"]
- elif mn == "checkpoint":
- model = models.Chain(0.66)
- args["setTerminationTime"] = [2000]
- args["setCheckpointing"] = ["testing", 1]
- if loadCheckpoint("testing") is not None:
- run = False
- elif mn == "checkpoint_long":
- model = models.Chain(0.66)
- args["setTerminationTime"] = [20000]
- args["setCheckpointing"] = ["testing", 1]
- if loadCheckpoint("testing") is not None:
- run = False
- elif mn == "checkpoint_long_local":
- model = models.Chain_local(0.66)
- args["setTerminationTime"] = [20000]
- args["setCheckpointing"] = ["testing", 1]
- if loadCheckpoint("testing") is not None:
- run = False
- elif mn == "autodist":
- model = models.AutoDistChain(3, totalAtomics=500, iterations=1)
- elif mn == "autodist_original":
- from mpi4py import MPI
- model = models.AutoDistChain(MPI.COMM_WORLD.Get_size(), totalAtomics=500, iterations=1)
- elif mn == "autodist_checkpoint":
- from mpi4py import MPI
- model = models.AutoDistChain(MPI.COMM_WORLD.Get_size(), totalAtomics=500, iterations=1)
- args["setTerminationTime"] = [200]
- args["setShowProgress"] = []
- args["setCheckpointing"] = ["testing", 1]
- if loadCheckpoint("testing") is not None:
- run = False
- elif mn == "relocation":
- model = models.Chain(0.66)
- args["setTerminationTime"] = [2000]
- args["setRelocationDirectives"] = [[[500, model.processor1.coupled[0], 0], [1000, model.processor1.coupled[0], 2]]]
- args["setGVTInterval"] = [1]
- elif mn == "relocation_activity":
- model = models.Chain(0.66)
- args["setTerminationTime"] = [20000]
- args["setActivityRelocatorBasicBoundary"] = [1.2]
- del args["setVerbose"]
- args["setGVTInterval"] = [2]
- elif mn == "relocation_noactivity":
- model = models.Chain(0.66)
- args["setTerminationTime"] = [20000]
- del args["setVerbose"]
- args["setGVTInterval"] = [2]
- elif mn == "boundary":
- model = models.Boundary()
- args["setTerminationTime"] = [2000]
- args["setRelocationDirectives"] = [[[100, 2, 0]]]
- args["setGVTInterval"] = [1]
- elif mn == "relocation_faster":
- model = models.Chain(0.66)
- del args["setVerbose"]
- args["setTerminationTime"] = [20000]
- args["setRelocationDirectives"] = [[[0, model.processor1.coupled[0], 1], [0, model.processor2.coupled[0], 2], [0, model.processor2.coupled[1], 2]]]
- elif mn.startswith("realtime"):
- from trafficLightModel import *
- model = TrafficSystem(name="trafficSystem")
- refs = {"INTERRUPT": model.trafficLight.INTERRUPT}
- args["setVerbose"] = ["output/realtime"]
- args["setTerminationTime"] = [35]
- if "0.5" in mn:
- scale = 0.5
- elif "2.0" in mn:
- scale = 2.0
- else:
- scale = 1.0
- args["setRealTime"] = [True, scale]
- args["setRealTimeInputFile"] = ["testmodels/input"]
- args["setRealTimePorts"] = [refs]
- if mn.startswith("realtime_thread"):
- args["setRealTimePlatformThreads"] = []
- elif mn.startswith("realtime_loop"):
- args["setRealTimePlatformGameLoop"] = []
- elif mn.startswith("realtime_tk"):
- try:
- from Tkinter import *
- except ImportError:
- from tkinter import *
- myTk = Tk()
- args["setRealTimePlatformTk"] = [myTk]
- else:
- print("Unknown subsystem requested")
- sys.exit(1)
- elif mn == "progress":
- model = models.Chain(0.66)
- args["setShowProgress"] = []
- args["setTerminationTime"] = [2000]
- elif mn == "progress_local":
- model = models.Chain_local(0.66)
- args["setShowProgress"] = []
- args["setTerminationTime"] = [2000]
- elif mn == "trace":
- model = models.Binary()
- args["setVCD"] = ["devstrace.vcd"]
- args["setXML"] = ["devstrace.xml"]
- elif mn == "trace_local":
- model = models.Binary_local()
- args["setVCD"] = ["devstrace.vcd"]
- args["setXML"] = ["devstrace.xml"]
- elif mn == "fetch":
- model = models.Chain(0.66)
- args["setFetchAllAfterSimulation"] = []
- elif mn == "draw":
- model = models.Chain(0.66)
- args["setDrawModel"] = [True]
- elif mn == "draw_local":
- model = models.Chain_local(0.66)
- args["setDrawModel"] = [True]
- elif mn == "auto_allocate":
- # Take the local variant, as this does not contain location info
- model = models.Chain_local(0.66)
- args["setDrawModel"] = [True]
- args["setAutoAllocator"] = []
- elif mn == "multiinputs":
- model = models.MultipleInputs()
- elif mn == "multiinputs_local":
- model = models.MultipleInputs_local()
- elif mn == "doublelayer_local":
- model = models.DoubleLayerRoot()
- elif mn == "dynamicstructure_local":
- model = models.DSDEVSRoot()
- args["setDSDEVS"] = [True]
- elif mn == "dynamicstructure_realtime_local":
- model = models.DSDEVSRoot()
- args["setRealTime"] = [True]
- args["setRealTimePorts"] = [{}]
- args["setRealTimePlatformThreads"] = []
- args["setDSDEVS"] = [True]
- elif mn == "classicDEVS_local":
- model = models.ClassicCoupled()
- args["setClassicDEVS"] = [True]
- elif mn == "classicDEVSconnect_local":
- model = models.AllConnectClassic()
- args["setClassicDEVS"] = [True]
- elif mn == "random":
- model = models.RandomCoupled()
- elif mn == "random_local":
- model = models.RandomCoupled_local()
- elif mn == "stateStop_pull":
- model = models.Chain(0.66)
- args["setTerminationCondition"] = [counter_pull]
- del args["setTerminationTime"]
- elif mn.startswith("reinit"):
- model = models.AutoDistChain(3, totalAtomics=500, iterations=1)
- if "local" in mn:
- model.forceSequential()
- sim = Simulator(model)
- sim.setAllowLocalReinit(True)
- sim.setTerminationTime(40)
- sim.setVerbose("output/reinit1")
- sim.simulate()
- sim.reinit()
- sim.setVerbose("output/reinit2")
- sim.setModelStateAttr(model.generator.generator, "value", 2)
- sim.simulate()
- sim.reinit()
- sim.setVerbose("output/reinit3")
- sim.setModelStateAttr(model.generator.generator, "value", 3)
- sim.simulate()
- run = False
- elif mn.startswith("multisim"):
- if "local" in mn:
- sim = Simulator(models.Chain_local(0.66))
- else:
- sim = Simulator(models.Chain(0.66))
- sim.setVerbose("output/normal")
- sim.setTerminationTime(40)
- sim.simulate()
- if "local" in mn:
- sim2 = Simulator(models.DualDepth_local(0.66))
- else:
- sim2 = Simulator(models.DualDepth(0.66))
- sim2.setVerbose("output/dualdepth")
- sim2.setTerminationTime(40)
- sim2.simulate()
- run = False
- elif mn.startswith("continue"):
- if "local" in mn:
- sim = Simulator(models.Chain_local(0.66))
- else:
- sim = Simulator(models.Chain(0.66))
- sim.setVerbose("output/run1")
- sim.setTerminationTime(100.0)
- sim.simulate()
- sim.setModelStateAttr(sim.model.generator.generator, "value", 2)
- sim.setVerbose("output/run2")
- sim.setTerminationTime(200.0)
- sim.simulate()
- run = False
- elif mn.startswith("z"):
- if "local" in mn:
- model = models.ZChain_local()
- else:
- model = models.ZChain()
- if run:
- sim = Simulator(model)
- for arg in args.keys():
- function = getattr(sim, arg)
- function(*args[arg])
- sim.simulate()
- if mn.startswith("realtime_loop"):
- # Start a game loop ourselves
- import time
- start_time = time.time()
- while time.time() < start_time + 35.5 * scale:
- before = time.time()
- sim.realtime_loop_call()
- time.sleep(0.001 - (before - time.time()))
- elif mn.startswith("realtime_tk"):
- myTk.after(int(35000 * scale), myTk.quit)
- myTk.mainloop()
- elif mn.startswith("realtime_thread"):
- import time
- time.sleep((35+0.2) * scale)
- elif "realtime" in mn:
- import time
- time.sleep(args["setTerminationTime"][0])
- elif mn == "fetch":
- f = open(args["setVerbose"][0], 'w')
- f.write("Generator: " + str(model.generator.generator.state) + "\n")
- f.write("Processor1.Processor1: " + str(model.processor1.coupled[0].state) + "\n")
- f.write("Processor1.Processor2: " + str(model.processor1.coupled[1].state) + "\n")
- f.write("Processor2.Processor1: " + str(model.processor2.coupled[0].state) + "\n")
- f.write("Processor2.Processor2: " + str(model.processor2.coupled[1].state) + "\n")
- f.write("Processor2.Processor3: " + str(model.processor2.coupled[2].state) + "\n")
- f.close()
|