configs: Remove Python 2.7 glue code
[gem5.git] / configs / splash2 / run.py
index d051f1f1beba566bbf42f03329e2b6ed5a715294..38fdbc89be5f2762bae8b86a7e1f4c2a14b89470 100644 (file)
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-# Authors: Ron Dreslinski
 
 # Splash2 Run Script
 #
 
+import os
+import optparse
+import sys
+
 import m5
 from m5.objects import *
-import os, optparse, sys
-m5.AddToPath('../common')
 
 # --------------------
 # Define Command Line Options
@@ -48,17 +48,14 @@ parser.add_option("-n", "--numcpus",
 parser.add_option("-f", "--frequency",
                   default = "1GHz",
                   help="Frequency of each CPU")
-parser.add_option("-p", "--protocol",
-                  default="moesi",
-                  help="The coherence protocol to use for the L1'a (i.e. MOESI, MOSI)")
 parser.add_option("--l1size",
                   default = "32kB")
 parser.add_option("--l1latency",
-                  default = 1)
+                  default = "1ns")
 parser.add_option("--l2size",
                   default = "256kB")
 parser.add_option("--l2latency",
-                  default = 10)
+                  default = "10ns")
 parser.add_option("--rootdir",
                   help="Root directory of Splash2",
                   default="/dist/splash2/codes")
@@ -68,85 +65,85 @@ parser.add_option("-b", "--benchmark",
 (options, args) = parser.parse_args()
 
 if args:
-    print "Error: script doesn't take any positional arguments"
+    print("Error: script doesn't take any positional arguments")
     sys.exit(1)
 
 if not options.numcpus:
-    print "Specify the number of cpus with -n"
+    print("Specify the number of cpus with -n")
     sys.exit(1)
 
 # --------------------
 # Define Splash2 Benchmarks
 # ====================
-class Cholesky(LiveProcess):
+class Cholesky(Process):
     cwd = options.rootdir + '/kernels/cholesky'
     executable = options.rootdir + '/kernels/cholesky/CHOLESKY'
-    cmd = 'CHOLESKY -p' + str(options.numcpus) + ' '\
-          + options.rootdir + '/kernels/cholesky/inputs/tk23.O'
+    cmd = ['CHOLESKY', '-p' +  str(options.numcpus),
+            options.rootdir + '/kernels/cholesky/inputs/tk23.O']
 
-class FFT(LiveProcess):
+class FFT(Process):
     cwd = options.rootdir + '/kernels/fft'
     executable = options.rootdir + '/kernels/fft/FFT'
-    cmd = 'FFT -p' + str(options.numcpus) + ' -m18'
+    cmd = ['FFT', '-p', str(options.numcpus), '-m18']
 
-class LU_contig(LiveProcess):
+class LU_contig(Process):
     executable = options.rootdir + '/kernels/lu/contiguous_blocks/LU'
-    cmd = 'LU -p' + str(options.numcpus)
+    cmd = ['LU', '-p', str(options.numcpus)]
     cwd = options.rootdir + '/kernels/lu/contiguous_blocks'
 
-class LU_noncontig(LiveProcess):
+class LU_noncontig(Process):
     executable = options.rootdir + '/kernels/lu/non_contiguous_blocks/LU'
-    cmd = 'LU -p' + str(options.numcpus)
+    cmd = ['LU', '-p', str(options.numcpus)]
     cwd = options.rootdir + '/kernels/lu/non_contiguous_blocks'
 
-class Radix(LiveProcess):
+class Radix(Process):
     executable = options.rootdir + '/kernels/radix/RADIX'
-    cmd = 'RADIX -n524288 -p' + str(options.numcpus)
+    cmd = ['RADIX', '-n524288', '-p', str(options.numcpus)]
     cwd = options.rootdir + '/kernels/radix'
 
-class Barnes(LiveProcess):
+class Barnes(Process):
     executable = options.rootdir + '/apps/barnes/BARNES'
-    cmd = 'BARNES'
+    cmd = ['BARNES']
     input = options.rootdir + '/apps/barnes/input.p' + str(options.numcpus)
     cwd = options.rootdir + '/apps/barnes'
 
-class FMM(LiveProcess):
+class FMM(Process):
     executable = options.rootdir + '/apps/fmm/FMM'
-    cmd = 'FMM'
+    cmd = ['FMM']
     if str(options.numcpus) == '1':
         input = options.rootdir + '/apps/fmm/inputs/input.2048'
     else:
         input = options.rootdir + '/apps/fmm/inputs/input.2048.p' + str(options.numcpus)
     cwd = options.rootdir + '/apps/fmm'
 
-class Ocean_contig(LiveProcess):
+class Ocean_contig(Process):
     executable = options.rootdir + '/apps/ocean/contiguous_partitions/OCEAN'
-    cmd = 'OCEAN -p' + str(options.numcpus)
+    cmd = ['OCEAN', '-p', str(options.numcpus)]
     cwd = options.rootdir + '/apps/ocean/contiguous_partitions'
 
-class Ocean_noncontig(LiveProcess):
+class Ocean_noncontig(Process):
     executable = options.rootdir + '/apps/ocean/non_contiguous_partitions/OCEAN'
-    cmd = 'OCEAN -p' + str(options.numcpus)
+    cmd = ['OCEAN', '-p', str(options.numcpus)]
     cwd = options.rootdir + '/apps/ocean/non_contiguous_partitions'
 
-class Raytrace(LiveProcess):
+class Raytrace(Process):
     executable = options.rootdir + '/apps/raytrace/RAYTRACE'
-    cmd = 'RAYTRACE -p' + str(options.numcpus) + ' ' \
-          + options.rootdir + '/apps/raytrace/inputs/teapot.env'
+    cmd = ['RAYTRACE', '-p' + str(options.numcpus),
+           options.rootdir + '/apps/raytrace/inputs/teapot.env']
     cwd = options.rootdir + '/apps/raytrace'
 
-class Water_nsquared(LiveProcess):
+class Water_nsquared(Process):
     executable = options.rootdir + '/apps/water-nsquared/WATER-NSQUARED'
-    cmd = 'WATER-NSQUARED'
+    cmd = ['WATER-NSQUARED']
     if options.numcpus==1:
         input = options.rootdir + '/apps/water-nsquared/input'
     else:
         input = options.rootdir + '/apps/water-nsquared/input.p' + str(options.numcpus)
     cwd = options.rootdir + '/apps/water-nsquared'
 
-class Water_spatial(LiveProcess):
+class Water_spatial(Process):
     executable = options.rootdir + '/apps/water-spatial/WATER-SPATIAL'
-    cmd = 'WATER-SPATIAL'
+    cmd = ['WATER-SPATIAL']
     if options.numcpus==1:
         input = options.rootdir + '/apps/water-spatial/input'
     else:
@@ -157,19 +154,16 @@ class Water_spatial(LiveProcess):
 # Base L1 Cache Definition
 # ====================
 
-class L1(BaseCache):
+class L1(Cache):
     latency = options.l1latency
-    block_size = 64
     mshrs = 12
     tgts_per_mshr = 8
-    protocol = CoherenceProtocol(protocol=options.protocol)
 
 # ----------------------
 # Base L2 Cache Definition
 # ----------------------
 
-class L2(BaseCache):
-    block_size = 64
+class L2(Cache):
     latency = options.l2latency
     mshrs = 92
     tgts_per_mshr = 16
@@ -184,32 +178,34 @@ busFrequency = Frequency(options.frequency)
 if options.timing:
     cpus = [TimingSimpleCPU(cpu_id = i,
                             clock=options.frequency)
-            for i in xrange(options.numcpus)]
+            for i in range(options.numcpus)]
 elif options.detailed:
     cpus = [DerivO3CPU(cpu_id = i,
                        clock=options.frequency)
-            for i in xrange(options.numcpus)]
+            for i in range(options.numcpus)]
 else:
     cpus = [AtomicSimpleCPU(cpu_id = i,
                             clock=options.frequency)
-            for i in xrange(options.numcpus)]
+            for i in range(options.numcpus)]
 
 # ----------------------
 # Create a system, and add system wide objects
 # ----------------------
-system = System(cpu = cpus, physmem = PhysicalMemory(),
-                membus = Bus(clock = busFrequency))
+system = System(cpu = cpus, physmem = SimpleMemory(),
+                membus = SystemXBar(clock = busFrequency))
+system.clock = '1GHz'
 
-system.toL2bus = Bus(clock = busFrequency)
+system.toL2bus = L2XBar(clock = busFrequency)
 system.l2 = L2(size = options.l2size, assoc = 8)
 
 # ----------------------
 # Connect the L2 cache and memory together
 # ----------------------
 
-system.physmem.port = system.membus.port
-system.l2.cpu_side = system.toL2bus.port
-system.l2.mem_side = system.membus.port
+system.physmem.port = system.membus.master
+system.l2.cpu_side = system.toL2bus.master
+system.l2.mem_side = system.membus.slave
+system.system_port = system.membus.slave
 
 # ----------------------
 # Connect the L2 cache and clusters together
@@ -217,16 +213,15 @@ system.l2.mem_side = system.membus.port
 for cpu in cpus:
     cpu.addPrivateSplitL1Caches(L1(size = options.l1size, assoc = 1),
                                 L1(size = options.l1size, assoc = 4))
-    cpu.mem = cpu.dcache
     # connect cpu level-1 caches to shared level-2 cache
-    cpu.connectMemPorts(system.toL2bus)
+    cpu.connectAllPorts(system.toL2bus, system.membus)
 
 
 # ----------------------
 # Define the root
 # ----------------------
 
-root = Root(system = system)
+root = Root(full_system = False, system = system)
 
 # --------------------
 # Pick the correct Splash2 Benchmarks
@@ -256,10 +251,11 @@ elif options.benchmark == 'WaterNSquared':
 elif options.benchmark == 'WaterSpatial':
     root.workload = Water_spatial()
 else:
-    panic("The --benchmark environment variable was set to something" \
-          +" improper.\nUse Cholesky, FFT, LUContig, LUNoncontig, Radix" \
-          +", Barnes, FMM, OceanContig,\nOceanNoncontig, Raytrace," \
-          +" WaterNSquared, or WaterSpatial\n")
+    print("The --benchmark environment variable was set to something "
+          "improper. Use Cholesky, FFT, LUContig, LUNoncontig, Radix, "
+          "Barnes, FMM, OceanContig, OceanNoncontig, Raytrace, WaterNSquared, "
+          "or WaterSpatial", file=sys.stderr)
+    sys.exit(1)
 
 # --------------------
 # Assign the workload to the cpus
@@ -268,6 +264,8 @@ else:
 for cpu in cpus:
     cpu.workload = root.workload
 
+system.workload = SEWorkload.init_compatible(root.workload.executable)
+
 # ----------------------
 # Run the simulation
 # ----------------------
@@ -276,7 +274,7 @@ if options.timing or options.detailed:
     root.system.mem_mode = 'timing'
 
 # instantiate configuration
-m5.instantiate(root)
+m5.instantiate()
 
 # simulate until program terminates
 if options.maxtick:
@@ -284,5 +282,5 @@ if options.maxtick:
 else:
     exit_event = m5.simulate(m5.MaxTick)
 
-print 'Exiting @ tick', m5.curTick(), 'because', exit_event.getCause()
+print('Exiting @ tick', m5.curTick(), 'because', exit_event.getCause())