tests: Refactor test configs (#156)
The yaml file changes made here will need to be copied to develop for our scheduled tests to run properly. In addition, the original comments on this can be seen here: https://gem5-review.googlesource.com/c/public/gem5/+/70340/2
This commit is contained in:
2
.github/workflows/daily-tests.yaml
vendored
2
.github/workflows/daily-tests.yaml
vendored
@@ -74,7 +74,7 @@ jobs:
|
||||
testlib-long-tests:
|
||||
strategy:
|
||||
matrix:
|
||||
test-type: [arm-boot-tests, fs, gem5_library_example_tests, gpu, insttest_se, learning_gem5, m5threads_test_atomic, memory, multi_isa, replacement-policies, riscv-boot-tests, stdlib, x86-boot-tests]
|
||||
test-type: [arm_boot_tests, fs, gem5_library_example_tests, gpu, insttest_se, learning_gem5, m5threads_test_atomic, memory, multi_isa, replacement_policies, riscv_boot_tests, stdlib, x86_boot_tests]
|
||||
runs-on: [self-hosted, linux, x64, run]
|
||||
container: gcr.io/gem5-test/ubuntu-22.04_all-dependencies:latest
|
||||
needs: [name-artifacts, build-gem5]
|
||||
|
||||
8
.github/workflows/weekly-tests.yaml
vendored
8
.github/workflows/weekly-tests.yaml
vendored
@@ -93,7 +93,7 @@ jobs:
|
||||
- run: chmod u+x build/ALL/gem5.opt
|
||||
- name: very-long gem5-resources tests
|
||||
working-directory: ${{ github.workspace }}/tests
|
||||
run: ./main.py run gem5/gem5-resources --length very-long --skip-build -vv -t $(nproc)
|
||||
run: ./main.py run gem5/gem5_resources --length very-long --skip-build -vv -t $(nproc)
|
||||
- name: create zip of results
|
||||
if: success() || failure()
|
||||
run: |
|
||||
@@ -131,9 +131,9 @@ jobs:
|
||||
name: ${{needs.build-gem5.outputs.build-name}}
|
||||
path: build/ALL
|
||||
- run: chmod u+x build/ALL/gem5.opt
|
||||
- name: very-long x86-boot-tests
|
||||
- name: very-long parsec_benchmarks
|
||||
working-directory: ${{ github.workspace }}/tests
|
||||
run: ./main.py run gem5/x86-boot-tests --length very-long --skip-build -vv -t $(nproc)
|
||||
run: ./main.py run gem5/parsec_benchmarks --length very-long --skip-build -vv -t $(nproc)
|
||||
- name: create zip of results
|
||||
if: success() || failure()
|
||||
run: |
|
||||
@@ -173,7 +173,7 @@ jobs:
|
||||
- run: chmod u+x build/ALL/gem5.opt
|
||||
- name: very-long x86-boot-tests
|
||||
working-directory: ${{ github.workspace }}/tests
|
||||
run: ./main.py run gem5/x86-boot-tests --length very-long --skip-build -vv -t $(nproc)
|
||||
run: ./main.py run gem5/x86_boot_tests --length very-long --skip-build -vv -t $(nproc)
|
||||
- name: create zip of results
|
||||
if: success() || failure()
|
||||
run: |
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
# Copyright (c) 2017 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Copyright (c) 2015 Jason Lowe-Power
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
#
|
||||
# A wrapper around configs/dram/low_power_sweep.py
|
||||
|
||||
# For some reason, this is implicitly needed by run.py
|
||||
root = None
|
||||
|
||||
import m5
|
||||
|
||||
|
||||
def run_test(root):
|
||||
# Called from tests/run.py
|
||||
|
||||
import sys
|
||||
|
||||
argv = [
|
||||
sys.argv[0],
|
||||
# Add a specific page policy and specify the number of ranks
|
||||
f"-p{page_policy}",
|
||||
"-r 2",
|
||||
]
|
||||
|
||||
# Execute the script we are wrapping
|
||||
run_config("configs/dram/low_power_sweep.py", argv=argv)
|
||||
@@ -1,164 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2010-2015 Advanced Micro Devices, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its contributors
|
||||
# may be used to endorse or promote products derived from this software
|
||||
# without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY 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.
|
||||
|
||||
import m5
|
||||
from m5.objects import *
|
||||
from m5.defines import buildEnv
|
||||
from m5.util import addToPath
|
||||
import os, argparse, sys
|
||||
|
||||
m5.util.addToPath("../configs/")
|
||||
|
||||
from ruby import Ruby
|
||||
from common import Options
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
Options.addCommonOptions(parser)
|
||||
|
||||
# add the gpu specific options expected by the the gpu and gpu_RfO
|
||||
parser.add_argument(
|
||||
"-u",
|
||||
"--num-compute-units",
|
||||
type=int,
|
||||
default=8,
|
||||
help="number of compute units in the GPU",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--num-cp",
|
||||
type=int,
|
||||
default=0,
|
||||
help="Number of GPU Command Processors (CP)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--simds-per-cu", type=int, default=4, help="SIMD unitsper CU"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--wf-size", type=int, default=64, help="Wavefront size(in workitems)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--wfs-per-simd",
|
||||
type=int,
|
||||
default=10,
|
||||
help="Number of WF slots per SIMD",
|
||||
)
|
||||
|
||||
# Add the ruby specific and protocol specific options
|
||||
Ruby.define_options(parser)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
#
|
||||
# Set the default cache size and associativity to be very small to encourage
|
||||
# races between requests and writebacks.
|
||||
#
|
||||
args.l1d_size = "256B"
|
||||
args.l1i_size = "256B"
|
||||
args.l2_size = "512B"
|
||||
args.l3_size = "1kB"
|
||||
args.l1d_assoc = 2
|
||||
args.l1i_assoc = 2
|
||||
args.l2_assoc = 2
|
||||
args.l3_assoc = 2
|
||||
args.num_compute_units = 8
|
||||
args.num_sqc = 2
|
||||
|
||||
# Check to for the GPU_RfO protocol. Other GPU protocols are non-SC and will
|
||||
# not work with the Ruby random tester.
|
||||
assert buildEnv["PROTOCOL"] == "GPU_RfO"
|
||||
|
||||
#
|
||||
# create the tester and system, including ruby
|
||||
#
|
||||
tester = RubyTester(
|
||||
check_flush=False,
|
||||
checks_to_complete=100,
|
||||
wakeup_frequency=10,
|
||||
num_cpus=args.num_cpus,
|
||||
)
|
||||
|
||||
# We set the testers as cpu for ruby to find the correct clock domains
|
||||
# for the L1 Objects.
|
||||
system = System(cpu=tester)
|
||||
|
||||
# Dummy voltage domain for all our clock domains
|
||||
system.voltage_domain = VoltageDomain(voltage=args.sys_voltage)
|
||||
system.clk_domain = SrcClockDomain(
|
||||
clock="1GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
system.mem_ranges = AddrRange("256MB")
|
||||
|
||||
# the ruby tester reuses num_cpus to specify the
|
||||
# number of cpu ports connected to the tester object, which
|
||||
# is stored in system.cpu. because there is only ever one
|
||||
# tester object, num_cpus is not necessarily equal to the
|
||||
# size of system.cpu
|
||||
cpu_list = [system.cpu] * args.num_cpus
|
||||
Ruby.create_system(args, False, system, cpus=cpu_list)
|
||||
|
||||
# Create a separate clock domain for Ruby
|
||||
system.ruby.clk_domain = SrcClockDomain(
|
||||
clock="1GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
tester.num_cpus = len(system.ruby._cpu_ports)
|
||||
|
||||
#
|
||||
# The tester is most effective when randomization is turned on and
|
||||
# artifical delay is randomly inserted on messages
|
||||
#
|
||||
system.ruby.randomization = True
|
||||
|
||||
for ruby_port in system.ruby._cpu_ports:
|
||||
#
|
||||
# Tie the ruby tester ports to the ruby cpu read and write ports
|
||||
#
|
||||
if ruby_port.support_data_reqs and ruby_port.support_inst_reqs:
|
||||
tester.cpuInstDataPort = ruby_port.in_ports
|
||||
elif ruby_port.support_data_reqs:
|
||||
tester.cpuDataPort = ruby_port.in_ports
|
||||
elif ruby_port.support_inst_reqs:
|
||||
tester.cpuInstPort = ruby_port.in_ports
|
||||
|
||||
# Do not automatically retry stalled Ruby requests
|
||||
ruby_port.no_retry_on_stall = True
|
||||
|
||||
#
|
||||
# Tell the sequencer this is the ruby tester so that it
|
||||
# copies the subblock back to the checker
|
||||
#
|
||||
ruby_port.using_ruby_tester = True
|
||||
|
||||
# -----------------------
|
||||
# run simulation
|
||||
# -----------------------
|
||||
|
||||
root = Root(full_system=False, system=system)
|
||||
root.system.mem_mode = "timing"
|
||||
@@ -1,433 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 2015 Advanced Micro Devices, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its contributors
|
||||
# may be used to endorse or promote products derived from this software
|
||||
# without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY 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.
|
||||
|
||||
import m5
|
||||
from m5.objects import *
|
||||
from m5.defines import buildEnv
|
||||
from m5.util import addToPath
|
||||
import os, argparse, sys, math, glob
|
||||
|
||||
m5.util.addToPath("../configs/")
|
||||
|
||||
from ruby import Ruby
|
||||
from common import Options
|
||||
from common import GPUTLBOptions, GPUTLBConfig
|
||||
|
||||
|
||||
def run_test(root):
|
||||
"""gpu test requires a specialized run_test implementation to set up the
|
||||
mmio space."""
|
||||
|
||||
# instantiate configuration
|
||||
m5.instantiate()
|
||||
|
||||
# Now that the system has been constructed, setup the mmio space
|
||||
root.system.cpu[0].workload[0].map(0x10000000, 0x200000000, 4096)
|
||||
|
||||
# simulate until program terminates
|
||||
exit_event = m5.simulate(maxtick)
|
||||
print("Exiting @ tick", m5.curTick(), "because", exit_event.getCause())
|
||||
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
Options.addCommonOptions(parser)
|
||||
Options.addSEOptions(parser)
|
||||
|
||||
parser.add_argument(
|
||||
"-k",
|
||||
"--kernel-files",
|
||||
help="file(s) containing GPU kernel code (colon separated)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-u",
|
||||
"--num-compute-units",
|
||||
type=int,
|
||||
default=2,
|
||||
help="number of GPU compute units",
|
||||
),
|
||||
parser.add_argument(
|
||||
"--num-cp",
|
||||
type=int,
|
||||
default=0,
|
||||
help="Number of GPU Command Processors (CP)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--simds-per-cu", type=int, default=4, help="SIMD unitsper CU"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--cu-per-sqc",
|
||||
type=int,
|
||||
default=4,
|
||||
help="number of CUssharing an SQC (icache, and thus icache TLB)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--wf-size", type=int, default=64, help="Wavefront size(in workitems)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--wfs-per-simd",
|
||||
type=int,
|
||||
default=8,
|
||||
help="Number of WF slots per SIMD",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--sp-bypass-path-length",
|
||||
type=int,
|
||||
default=4,
|
||||
help="Number of stages of bypass path in vector ALU for Single "
|
||||
"Precision ops",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--dp-bypass-path-length",
|
||||
type=int,
|
||||
default=4,
|
||||
help="Number of stages of bypass path in vector ALU for Double "
|
||||
"Precision ops",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--issue-period",
|
||||
type=int,
|
||||
default=4,
|
||||
help="Number of cycles per vector instruction issue period",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--glbmem-wr-bus-width",
|
||||
type=int,
|
||||
default=32,
|
||||
help="VGPR to Coalescer (Global Memory) data bus width in bytes",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--glbmem-rd-bus-width",
|
||||
type=int,
|
||||
default=32,
|
||||
help="Coalescer to VGPR (Global Memory) data bus width in bytes",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--shr-mem-pipes-per-cu",
|
||||
type=int,
|
||||
default=1,
|
||||
help="Number of Shared Memory pipelines per CU",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--glb-mem-pipes-per-cu",
|
||||
type=int,
|
||||
default=1,
|
||||
help="Number of Global Memory pipelines per CU",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--vreg-file-size",
|
||||
type=int,
|
||||
default=2048,
|
||||
help="number of physical vector registers per SIMD",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--bw-scalor",
|
||||
type=int,
|
||||
default=0,
|
||||
help="bandwidth scalor for scalability analysis",
|
||||
)
|
||||
parser.add_argument("--CPUClock", type=str, default="2GHz", help="CPU clock")
|
||||
parser.add_argument("--GPUClock", type=str, default="1GHz", help="GPU clock")
|
||||
parser.add_argument(
|
||||
"--cpu-voltage",
|
||||
action="store",
|
||||
type=str,
|
||||
default="1.0V",
|
||||
help="""CPU voltage domain""",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--gpu-voltage",
|
||||
action="store",
|
||||
type=str,
|
||||
default="1.0V",
|
||||
help="""CPU voltage domain""",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--CUExecPolicy",
|
||||
type=str,
|
||||
default="OLDEST-FIRST",
|
||||
help="WF exec policy (OLDEST-FIRST, ROUND-ROBIN)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--xact-cas-mode",
|
||||
action="store_true",
|
||||
help="enable load_compare mode (transactional CAS)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--SegFaultDebug",
|
||||
action="store_true",
|
||||
help="checks for GPU seg fault before TLB access",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--LocalMemBarrier",
|
||||
action="store_true",
|
||||
help="Barrier does not wait for writethroughs to complete",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--countPages",
|
||||
action="store_true",
|
||||
help="Count Page Accesses and output in per-CU output files",
|
||||
)
|
||||
parser.add_argument("--TLB-prefetch", type=int, help="prefetch depth forTLBs")
|
||||
parser.add_argument(
|
||||
"--pf-type",
|
||||
type=str,
|
||||
help="type of prefetch: PF_CU, PF_WF, PF_PHASE, PF_STRIDE",
|
||||
)
|
||||
parser.add_argument("--pf-stride", type=int, help="set prefetch stride")
|
||||
parser.add_argument(
|
||||
"--numLdsBanks",
|
||||
type=int,
|
||||
default=32,
|
||||
help="number of physical banks per LDS module",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--ldsBankConflictPenalty",
|
||||
type=int,
|
||||
default=1,
|
||||
help="number of cycles per LDS bank conflict",
|
||||
)
|
||||
|
||||
# Add the ruby specific and protocol specific options
|
||||
Ruby.define_options(parser)
|
||||
|
||||
GPUTLBOptions.tlb_options(parser)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# The GPU cache coherence protocols only work with the backing store
|
||||
args.access_backing_store = True
|
||||
|
||||
# Currently, the sqc (I-Cache of GPU) is shared by
|
||||
# multiple compute units(CUs). The protocol works just fine
|
||||
# even if sqc is not shared. Overriding this option here
|
||||
# so that the user need not explicitly set this (assuming
|
||||
# sharing sqc is the common usage)
|
||||
n_cu = args.num_compute_units
|
||||
num_sqc = int(math.ceil(float(n_cu) / args.cu_per_sqc))
|
||||
args.num_sqc = num_sqc # pass this to Ruby
|
||||
|
||||
########################## Creating the GPU system ########################
|
||||
# shader is the GPU
|
||||
shader = Shader(
|
||||
n_wf=args.wfs_per_simd,
|
||||
clk_domain=SrcClockDomain(
|
||||
clock=args.GPUClock,
|
||||
voltage_domain=VoltageDomain(voltage=args.gpu_voltage),
|
||||
),
|
||||
timing=True,
|
||||
)
|
||||
|
||||
# GPU_RfO(Read For Ownership) implements SC/TSO memory model.
|
||||
# Other GPU protocols implement release consistency at GPU side.
|
||||
# So, all GPU protocols other than GPU_RfO should make their writes
|
||||
# visible to the global memory and should read from global memory
|
||||
# during kernal boundary. The pipeline initiates(or do not initiate)
|
||||
# the acquire/release operation depending on this impl_kern_boundary_sync
|
||||
# flag. This flag=true means pipeline initiates a acquire/release operation
|
||||
# at kernel boundary.
|
||||
if buildEnv["PROTOCOL"] == "GPU_RfO":
|
||||
shader.impl_kern_boundary_sync = False
|
||||
else:
|
||||
shader.impl_kern_boundary_sync = True
|
||||
|
||||
# Switching off per-lane TLB by default
|
||||
per_lane = False
|
||||
if args.TLB_config == "perLane":
|
||||
per_lane = True
|
||||
|
||||
# List of compute units; one GPU can have multiple compute units
|
||||
compute_units = []
|
||||
for i in range(n_cu):
|
||||
compute_units.append(
|
||||
ComputeUnit(
|
||||
cu_id=i,
|
||||
perLaneTLB=per_lane,
|
||||
num_SIMDs=args.simds_per_cu,
|
||||
wfSize=args.wf_size,
|
||||
spbypass_pipe_length=args.sp_bypass_path_length,
|
||||
dpbypass_pipe_length=args.dp_bypass_path_length,
|
||||
issue_period=args.issue_period,
|
||||
coalescer_to_vrf_bus_width=args.glbmem_rd_bus_width,
|
||||
vrf_to_coalescer_bus_width=args.glbmem_wr_bus_width,
|
||||
num_global_mem_pipes=args.glb_mem_pipes_per_cu,
|
||||
num_shared_mem_pipes=args.shr_mem_pipes_per_cu,
|
||||
n_wf=args.wfs_per_simd,
|
||||
execPolicy=args.CUExecPolicy,
|
||||
xactCasMode=args.xact_cas_mode,
|
||||
debugSegFault=args.SegFaultDebug,
|
||||
functionalTLB=True,
|
||||
localMemBarrier=args.LocalMemBarrier,
|
||||
countPages=args.countPages,
|
||||
localDataStore=LdsState(
|
||||
banks=args.numLdsBanks,
|
||||
bankConflictPenalty=args.ldsBankConflictPenalty,
|
||||
),
|
||||
)
|
||||
)
|
||||
wavefronts = []
|
||||
vrfs = []
|
||||
for j in range(args.simds_per_cu):
|
||||
for k in range(int(shader.n_wf)):
|
||||
wavefronts.append(Wavefront(simdId=j, wf_slot_id=k))
|
||||
vrfs.append(
|
||||
VectorRegisterFile(
|
||||
simd_id=j, num_regs_per_simd=args.vreg_file_size
|
||||
)
|
||||
)
|
||||
compute_units[-1].wavefronts = wavefronts
|
||||
compute_units[-1].vector_register_file = vrfs
|
||||
if args.TLB_prefetch:
|
||||
compute_units[-1].prefetch_depth = args.TLB_prefetch
|
||||
compute_units[-1].prefetch_prev_type = args.pf_type
|
||||
|
||||
# attach the LDS and the CU to the bus (actually a Bridge)
|
||||
compute_units[-1].ldsPort = compute_units[-1].ldsBus.slave
|
||||
compute_units[-1].ldsBus.master = compute_units[-1].localDataStore.cuPort
|
||||
|
||||
# Attach compute units to GPU
|
||||
shader.CUs = compute_units
|
||||
|
||||
# this is a uniprocessor only test, thus the shader is the second index in the
|
||||
# list of "system.cpus"
|
||||
args.num_cpus = 1
|
||||
shader_idx = 1
|
||||
cpu = TimingSimpleCPU(cpu_id=0)
|
||||
|
||||
########################## Creating the GPU dispatcher ########################
|
||||
# Dispatcher dispatches work from host CPU to GPU
|
||||
host_cpu = cpu
|
||||
dispatcher = GpuDispatcher()
|
||||
|
||||
# Currently does not test for command processors
|
||||
cpu_list = [cpu] + [shader] + [dispatcher]
|
||||
|
||||
system = System(
|
||||
cpu=cpu_list,
|
||||
mem_ranges=[AddrRange(args.mem_size)],
|
||||
mem_mode="timing",
|
||||
workload=SEWorkload(),
|
||||
)
|
||||
|
||||
# Dummy voltage domain for all our clock domains
|
||||
system.voltage_domain = VoltageDomain(voltage=args.sys_voltage)
|
||||
system.clk_domain = SrcClockDomain(
|
||||
clock="1GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
# Create a seperate clock domain for components that should run at
|
||||
# CPUs frequency
|
||||
system.cpu[0].clk_domain = SrcClockDomain(
|
||||
clock="2GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
# configure the TLB hierarchy
|
||||
GPUTLBConfig.config_tlb_hierarchy(args, system, shader_idx)
|
||||
|
||||
# create Ruby system
|
||||
system.piobus = IOXBar(
|
||||
width=32, response_latency=0, frontend_latency=0, forward_latency=0
|
||||
)
|
||||
Ruby.create_system(args, None, system)
|
||||
|
||||
# Create a separate clock for Ruby
|
||||
system.ruby.clk_domain = SrcClockDomain(
|
||||
clock=args.ruby_clock, voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
# create the interrupt controller
|
||||
cpu.createInterruptController()
|
||||
|
||||
#
|
||||
# Tie the cpu cache ports to the ruby cpu ports and
|
||||
# physmem, respectively
|
||||
#
|
||||
cpu.connectAllPorts(
|
||||
system.ruby._cpu_ports[0].in_ports,
|
||||
system.ruby._cpu_ports[0].in_ports,
|
||||
system.ruby._cpu_ports[0].interrupt_out_port,
|
||||
)
|
||||
system.ruby._cpu_ports[0].mem_request_port = system.piobus.cpu_side_ports
|
||||
|
||||
# attach CU ports to Ruby
|
||||
# Because of the peculiarities of the CP core, you may have 1 CPU but 2
|
||||
# sequencers and thus 2 _cpu_ports created. Your GPUs shouldn't be
|
||||
# hooked up until after the CP. To make this script generic, figure out
|
||||
# the index as below, but note that this assumes there is one sequencer
|
||||
# per compute unit and one sequencer per SQC for the math to work out
|
||||
# correctly.
|
||||
gpu_port_idx = (
|
||||
len(system.ruby._cpu_ports) - args.num_compute_units - args.num_sqc
|
||||
)
|
||||
gpu_port_idx = gpu_port_idx - args.num_cp * 2
|
||||
|
||||
wavefront_size = args.wf_size
|
||||
for i in range(n_cu):
|
||||
# The pipeline issues wavefront_size number of uncoalesced requests
|
||||
# in one GPU issue cycle. Hence wavefront_size mem ports.
|
||||
for j in range(wavefront_size):
|
||||
system.cpu[shader_idx].CUs[i].memory_port[j] = system.ruby._cpu_ports[
|
||||
gpu_port_idx
|
||||
].slave[j]
|
||||
gpu_port_idx += 1
|
||||
|
||||
for i in range(n_cu):
|
||||
if i > 0 and not i % args.cu_per_sqc:
|
||||
gpu_port_idx += 1
|
||||
system.cpu[shader_idx].CUs[i].sqc_port = system.ruby._cpu_ports[
|
||||
gpu_port_idx
|
||||
].slave
|
||||
gpu_port_idx = gpu_port_idx + 1
|
||||
|
||||
# Current regression tests do not support the command processor
|
||||
assert args.num_cp == 0
|
||||
|
||||
# connect dispatcher to the system.piobus
|
||||
dispatcher.pio = system.piobus.mem_side_ports
|
||||
dispatcher.dma = system.piobus.cpu_side_ports
|
||||
|
||||
################# Connect the CPU and GPU via GPU Dispatcher ###################
|
||||
# CPU rings the GPU doorbell to notify a pending task
|
||||
# using this interface.
|
||||
# And GPU uses this interface to notify the CPU of task completion
|
||||
# The communcation happens through emulated driver.
|
||||
|
||||
# Note this implicit setting of the cpu_pointer, shader_pointer and tlb array
|
||||
# parameters must be after the explicit setting of the System cpu list
|
||||
shader.cpu_pointer = host_cpu
|
||||
dispatcher.cpu = host_cpu
|
||||
dispatcher.shader_pointer = shader
|
||||
|
||||
# -----------------------
|
||||
# run simulation
|
||||
# -----------------------
|
||||
|
||||
root = Root(full_system=False, system=system)
|
||||
m5.ticks.setGlobalFrequency("1THz")
|
||||
root.system.mem_mode = "timing"
|
||||
@@ -1,60 +0,0 @@
|
||||
# Copyright (c) 2016 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Copyright (c) 2015 Jason Lowe-Power
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
import m5
|
||||
from m5.objects import *
|
||||
|
||||
# the traffic generator is only available if we have protobuf support,
|
||||
# so potentially skip this test
|
||||
require_sim_object("TrafficGen")
|
||||
|
||||
# A wrapper around configs/example/memcheck.py
|
||||
|
||||
# For some reason, this is implicitly needed by run.py
|
||||
root = None
|
||||
|
||||
|
||||
def run_test(root):
|
||||
# Called from tests/run.py
|
||||
|
||||
import sys
|
||||
|
||||
argv = [sys.argv[0], "-m %d" % maxtick]
|
||||
|
||||
# Execute the script we are wrapping
|
||||
run_config("configs/example/memcheck.py", argv=argv)
|
||||
@@ -1,83 +0,0 @@
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
import m5
|
||||
from m5.objects import *
|
||||
|
||||
m5.util.addToPath("../configs/")
|
||||
from common.Caches import *
|
||||
|
||||
# MAX CORES IS 8 with the fals sharing method
|
||||
nb_cores = 8
|
||||
cpus = [MemTest() for i in range(nb_cores)]
|
||||
|
||||
# system simulated
|
||||
system = System(
|
||||
cpu=cpus,
|
||||
physmem=SimpleMemory(),
|
||||
membus=SystemXBar(width=16, snoop_filter=SnoopFilter()),
|
||||
)
|
||||
# Dummy voltage domain for all our clock domains
|
||||
system.voltage_domain = VoltageDomain()
|
||||
system.clk_domain = SrcClockDomain(
|
||||
clock="1GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
# Create a seperate clock domain for components that should run at
|
||||
# CPUs frequency
|
||||
system.cpu_clk_domain = SrcClockDomain(
|
||||
clock="2GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
system.toL2Bus = L2XBar(
|
||||
clk_domain=system.cpu_clk_domain, snoop_filter=SnoopFilter()
|
||||
)
|
||||
system.l2c = L2Cache(clk_domain=system.cpu_clk_domain, size="64kB", assoc=8)
|
||||
system.l2c.cpu_side = system.toL2Bus.mem_side_ports
|
||||
|
||||
# connect l2c to membus
|
||||
system.l2c.mem_side = system.membus.cpu_side_ports
|
||||
|
||||
# add L1 caches
|
||||
for cpu in cpus:
|
||||
# All cpus are associated with cpu_clk_domain
|
||||
cpu.clk_domain = system.cpu_clk_domain
|
||||
cpu.l1c = L1Cache(size="32kB", assoc=4)
|
||||
cpu.l1c.cpu_side = cpu.port
|
||||
cpu.l1c.mem_side = system.toL2Bus.cpu_side_ports
|
||||
|
||||
system.system_port = system.membus.cpu_side_ports
|
||||
|
||||
# connect memory to membus
|
||||
system.physmem.port = system.membus.mem_side_ports
|
||||
|
||||
|
||||
# -----------------------
|
||||
# run simulation
|
||||
# -----------------------
|
||||
|
||||
root = Root(full_system=False, system=system)
|
||||
root.system.mem_mode = "timing"
|
||||
@@ -1,122 +0,0 @@
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# Copyright (c) 2010 Advanced Micro Devices, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
import m5
|
||||
from m5.objects import *
|
||||
from m5.defines import buildEnv
|
||||
from m5.util import addToPath
|
||||
import os, argparse, sys
|
||||
|
||||
m5.util.addToPath("../configs/")
|
||||
|
||||
from ruby import Ruby
|
||||
from common import Options
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
Options.addCommonOptions(parser)
|
||||
|
||||
# Add the ruby specific and protocol specific options
|
||||
Ruby.define_options(parser)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
#
|
||||
# Set the default cache size and associativity to be very small to encourage
|
||||
# races between requests and writebacks.
|
||||
#
|
||||
args.l1d_size = "256B"
|
||||
args.l1i_size = "256B"
|
||||
args.l2_size = "512B"
|
||||
args.l3_size = "1kB"
|
||||
args.l1d_assoc = 2
|
||||
args.l1i_assoc = 2
|
||||
args.l2_assoc = 2
|
||||
args.l3_assoc = 2
|
||||
args.ports = 32
|
||||
|
||||
# MAX CORES IS 8 with the fals sharing method
|
||||
nb_cores = 8
|
||||
|
||||
# ruby does not support atomic, functional, or uncacheable accesses
|
||||
cpus = [
|
||||
MemTest(
|
||||
percent_functional=50, percent_uncacheable=0, suppress_func_errors=True
|
||||
)
|
||||
for i in range(nb_cores)
|
||||
]
|
||||
|
||||
# overwrite args.num_cpus with the nb_cores value
|
||||
args.num_cpus = nb_cores
|
||||
|
||||
# system simulated
|
||||
system = System(cpu=cpus)
|
||||
# Dummy voltage domain for all our clock domains
|
||||
system.voltage_domain = VoltageDomain()
|
||||
system.clk_domain = SrcClockDomain(
|
||||
clock="1GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
# Create a seperate clock domain for components that should run at
|
||||
# CPUs frequency
|
||||
system.cpu_clk_domain = SrcClockDomain(
|
||||
clock="2GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
# All cpus are associated with cpu_clk_domain
|
||||
for cpu in cpus:
|
||||
cpu.clk_domain = system.cpu_clk_domain
|
||||
|
||||
system.mem_ranges = AddrRange("256MB")
|
||||
|
||||
Ruby.create_system(args, False, system)
|
||||
|
||||
# Create a separate clock domain for Ruby
|
||||
system.ruby.clk_domain = SrcClockDomain(
|
||||
clock=args.ruby_clock, voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
assert len(cpus) == len(system.ruby._cpu_ports)
|
||||
|
||||
for (i, ruby_port) in enumerate(system.ruby._cpu_ports):
|
||||
#
|
||||
# Tie the cpu port to the ruby cpu ports and
|
||||
# physmem, respectively
|
||||
#
|
||||
cpus[i].port = ruby_port.in_ports
|
||||
|
||||
#
|
||||
# Since the memtester is incredibly bursty, increase the deadlock
|
||||
# threshold to 1 million cycles
|
||||
#
|
||||
ruby_port.deadlock_threshold = 1000000
|
||||
|
||||
# -----------------------
|
||||
# run simulation
|
||||
# -----------------------
|
||||
|
||||
root = Root(full_system=False, system=system)
|
||||
root.system.mem_mode = "timing"
|
||||
@@ -1,77 +0,0 @@
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
import m5
|
||||
from m5.objects import *
|
||||
|
||||
m5.util.addToPath("../configs/")
|
||||
from common.Caches import *
|
||||
|
||||
# MAX CORES IS 8 with the fals sharing method
|
||||
nb_cores = 8
|
||||
cpus = [MemTest() for i in range(nb_cores)]
|
||||
|
||||
# system simulated
|
||||
system = System(cpu=cpus, physmem=SimpleMemory(), membus=SystemXBar())
|
||||
# Dummy voltage domain for all our clock domains
|
||||
system.voltage_domain = VoltageDomain()
|
||||
system.clk_domain = SrcClockDomain(
|
||||
clock="1GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
# Create a seperate clock domain for components that should run at
|
||||
# CPUs frequency
|
||||
system.cpu_clk_domain = SrcClockDomain(
|
||||
clock="2GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
system.toL2Bus = L2XBar(clk_domain=system.cpu_clk_domain)
|
||||
system.l2c = L2Cache(clk_domain=system.cpu_clk_domain, size="64kB", assoc=8)
|
||||
system.l2c.cpu_side = system.toL2Bus.mem_side_ports
|
||||
|
||||
# connect l2c to membus
|
||||
system.l2c.mem_side = system.membus.cpu_side_ports
|
||||
|
||||
# add L1 caches
|
||||
for cpu in cpus:
|
||||
# All cpus are associated with cpu_clk_domain
|
||||
cpu.clk_domain = system.cpu_clk_domain
|
||||
cpu.l1c = L1Cache(size="32kB", assoc=4)
|
||||
cpu.l1c.cpu_side = cpu.port
|
||||
cpu.l1c.mem_side = system.toL2Bus.cpu_side_ports
|
||||
|
||||
system.system_port = system.membus.cpu_side_ports
|
||||
|
||||
# connect memory to membus
|
||||
system.physmem.port = system.membus.mem_side_ports
|
||||
|
||||
|
||||
# -----------------------
|
||||
# run simulation
|
||||
# -----------------------
|
||||
|
||||
root = Root(full_system=False, system=system)
|
||||
root.system.mem_mode = "timing"
|
||||
@@ -1,48 +0,0 @@
|
||||
# Copyright (c) 2013 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from m5.objects import *
|
||||
from base_config import *
|
||||
|
||||
nb_cores = 4
|
||||
root = BaseSESystem(
|
||||
mem_mode="timing",
|
||||
mem_class=DDR3_1600_8x8,
|
||||
cpu_class=MinorCPU,
|
||||
num_cpus=nb_cores,
|
||||
).create_root()
|
||||
@@ -1,44 +0,0 @@
|
||||
# Copyright (c) 2013 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from m5.objects import *
|
||||
from base_config import *
|
||||
|
||||
root = BaseSESystemUniprocessor(
|
||||
mem_mode="timing", mem_class=DDR3_1600_8x8, cpu_class=MinorCPU
|
||||
).create_root()
|
||||
@@ -1,44 +0,0 @@
|
||||
# Copyright (c) 2013 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from m5.objects import *
|
||||
from base_config import *
|
||||
|
||||
root = BaseSESystemUniprocessor(
|
||||
mem_mode="timing",
|
||||
mem_class=DDR3_1600_8x8,
|
||||
cpu_class=DerivO3CPU,
|
||||
checker=True,
|
||||
).create_root()
|
||||
@@ -1,68 +0,0 @@
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
import m5
|
||||
from m5.objects import *
|
||||
|
||||
nb_cores = 4
|
||||
cpus = [DerivO3CPU(cpu_id=i) for i in range(nb_cores)]
|
||||
|
||||
import ruby_config
|
||||
|
||||
ruby_memory = ruby_config.generate("TwoLevel_SplitL1UnifiedL2.rb", nb_cores)
|
||||
|
||||
# system simulated
|
||||
system = System(
|
||||
cpu=cpus,
|
||||
physmem=ruby_memory,
|
||||
membus=SystemXBar(),
|
||||
mem_mode="timing",
|
||||
clk_domain=SrcClockDomain(clock="1GHz"),
|
||||
)
|
||||
|
||||
# Create a seperate clock domain for components that should run at
|
||||
# CPUs frequency
|
||||
system.cpu_clk_domain = SrcClockDomain(clock="2GHz")
|
||||
|
||||
for cpu in cpus:
|
||||
# create the interrupt controller
|
||||
cpu.createInterruptController()
|
||||
cpu.connectBus(system.membus)
|
||||
# All cpus are associated with cpu_clk_domain
|
||||
cpu.clk_domain = system.cpu_clk_domain
|
||||
|
||||
# connect memory to membus
|
||||
system.physmem.port = system.membus.mem_side_ports
|
||||
|
||||
# Connect the system port for loading of binaries etc
|
||||
system.system_port = system.membus.cpu_side_ports
|
||||
|
||||
# -----------------------
|
||||
# run simulation
|
||||
# -----------------------
|
||||
|
||||
root = Root(full_system=False, system=system)
|
||||
root.system.mem_mode = "timing"
|
||||
@@ -1,48 +0,0 @@
|
||||
# Copyright (c) 2013 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from m5.objects import *
|
||||
from base_config import *
|
||||
|
||||
nb_cores = 4
|
||||
root = BaseSESystem(
|
||||
mem_mode="timing",
|
||||
mem_class=DDR3_1600_8x8,
|
||||
cpu_class=DerivO3CPU,
|
||||
num_cpus=nb_cores,
|
||||
).create_root()
|
||||
@@ -1,63 +0,0 @@
|
||||
# Copyright (c) 2013, 2015 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from m5.objects import *
|
||||
from m5.defines import buildEnv
|
||||
from base_config import *
|
||||
from arm_generic import *
|
||||
from common.cores.arm.O3_ARM_v7a import O3_ARM_v7a_3
|
||||
from gem5.isas import ISA
|
||||
from gem5.runtime import get_runtime_isa
|
||||
|
||||
# If we are running ARM regressions, use a more sensible CPU
|
||||
# configuration. This makes the results more meaningful, and also
|
||||
# increases the coverage of the regressions.
|
||||
if get_runtime_isa() == ISA.ARM:
|
||||
root = ArmSESystemUniprocessor(
|
||||
mem_mode="timing",
|
||||
mem_class=DDR3_1600_8x8,
|
||||
cpu_class=O3_ARM_v7a_3,
|
||||
num_threads=2,
|
||||
).create_root()
|
||||
else:
|
||||
root = BaseSESystemUniprocessor(
|
||||
mem_mode="timing",
|
||||
mem_class=DDR3_1600_8x8,
|
||||
cpu_class=DerivO3CPU,
|
||||
num_threads=2,
|
||||
).create_root()
|
||||
@@ -1,56 +0,0 @@
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
import m5
|
||||
from m5.objects import *
|
||||
|
||||
import ruby_config
|
||||
|
||||
ruby_memory = ruby_config.generate("TwoLevel_SplitL1UnifiedL2.rb", 1)
|
||||
|
||||
cpu = DerivO3CPU(cpu_id=0)
|
||||
|
||||
system = System(
|
||||
cpu=cpu,
|
||||
physmem=ruby_memory,
|
||||
membus=SystemXBar(),
|
||||
mem_mode="timing",
|
||||
clk_domain=SrcClockDomain(clock="1GHz"),
|
||||
)
|
||||
|
||||
# Create a seperate clock domain for components that should run at
|
||||
# CPUs frequency
|
||||
system.cpu.clk_domain = SrcClockDomain(clock="2GHz")
|
||||
|
||||
system.physmem.port = system.membus.mem_side_ports
|
||||
# create the interrupt controller
|
||||
cpu.createInterruptController()
|
||||
cpu.connectBus(system.membus)
|
||||
|
||||
# Connect the system port for loading of binaries etc
|
||||
system.system_port = system.membus.cpu_side_ports
|
||||
|
||||
root = Root(full_system=False, system=system)
|
||||
@@ -1,57 +0,0 @@
|
||||
# Copyright (c) 2013 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from m5.objects import *
|
||||
from m5.defines import buildEnv
|
||||
from base_config import *
|
||||
from arm_generic import *
|
||||
from common.cores.arm.O3_ARM_v7a import O3_ARM_v7a_3
|
||||
from gem5.isas import ISA
|
||||
from gem5.runtime import get_runtime_isa
|
||||
|
||||
# If we are running ARM regressions, use a more sensible CPU
|
||||
# configuration. This makes the results more meaningful, and also
|
||||
# increases the coverage of the regressions.
|
||||
if get_runtime_isa() == ISA.ARM:
|
||||
root = ArmSESystemUniprocessor(
|
||||
mem_mode="timing", mem_class=DDR3_1600_8x8, cpu_class=O3_ARM_v7a_3
|
||||
).create_root()
|
||||
else:
|
||||
root = BaseSESystemUniprocessor(
|
||||
mem_mode="timing", mem_class=DDR3_1600_8x8, cpu_class=DerivO3CPU
|
||||
).create_root()
|
||||
@@ -1,41 +0,0 @@
|
||||
# Copyright (c) 2012 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from m5.objects import *
|
||||
from x86_generic import *
|
||||
|
||||
root = LinuxX86FSSystemUniprocessor(
|
||||
mem_mode="timing", mem_class=DDR3_1600_8x8, cpu_class=DerivO3CPU
|
||||
).create_root()
|
||||
@@ -1,41 +0,0 @@
|
||||
# Copyright (c) 2012 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from m5.objects import *
|
||||
from x86_generic import *
|
||||
|
||||
root = LinuxX86FSSystemUniprocessor(
|
||||
mem_mode="atomic", mem_class=SimpleMemory, cpu_class=AtomicSimpleCPU
|
||||
).create_root()
|
||||
@@ -1,91 +0,0 @@
|
||||
# Copyright (c) 2012 Mark D. Hill and David A. Wood
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
import m5, os, argparse, sys
|
||||
from m5.objects import *
|
||||
|
||||
m5.util.addToPath("../configs/")
|
||||
from common.Benchmarks import SysConfig
|
||||
from common import FSConfig, SysPaths
|
||||
from ruby import Ruby
|
||||
from common import Options
|
||||
|
||||
# Add the ruby specific and protocol specific options
|
||||
parser = argparse.ArgumentParser()
|
||||
Options.addCommonOptions(parser)
|
||||
Ruby.define_options(parser)
|
||||
args = parser.parse_args()
|
||||
|
||||
# Set the default cache size and associativity to be very small to encourage
|
||||
# races between requests and writebacks.
|
||||
args.l1d_size = "32kB"
|
||||
args.l1i_size = "32kB"
|
||||
args.l2_size = "4MB"
|
||||
args.l1d_assoc = 2
|
||||
args.l1i_assoc = 2
|
||||
args.l2_assoc = 2
|
||||
args.num_cpus = 2
|
||||
|
||||
# the system
|
||||
mdesc = SysConfig(disks=["linux-x86.img"])
|
||||
system = FSConfig.makeLinuxX86System(
|
||||
"timing", args.num_cpus, mdesc=mdesc, Ruby=True
|
||||
)
|
||||
system.kernel = SysPaths.binary("x86_64-vmlinux-2.6.22.9")
|
||||
# Dummy voltage domain for all our clock domains
|
||||
system.voltage_domain = VoltageDomain(voltage=args.sys_voltage)
|
||||
|
||||
system.kernel = FSConfig.binary("x86_64-vmlinux-2.6.22.9.smp")
|
||||
system.clk_domain = SrcClockDomain(
|
||||
clock="1GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
system.cpu_clk_domain = SrcClockDomain(
|
||||
clock="2GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
system.cpu = [
|
||||
TimingSimpleCPU(cpu_id=i, clk_domain=system.cpu_clk_domain)
|
||||
for i in range(args.num_cpus)
|
||||
]
|
||||
|
||||
Ruby.create_system(args, True, system, system.iobus, system._dma_ports)
|
||||
|
||||
# Create a seperate clock domain for Ruby
|
||||
system.ruby.clk_domain = SrcClockDomain(
|
||||
clock=args.ruby_clock, voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
# Connect the ruby io port to the PIO bus,
|
||||
# assuming that there is just one such port.
|
||||
system.iobus.mem_side_ports = system.ruby._io_port.in_ports
|
||||
|
||||
for (i, cpu) in enumerate(system.cpu):
|
||||
# create the interrupt controller
|
||||
cpu.createInterruptController()
|
||||
# Tie the cpu ports to the correct ruby system ports
|
||||
system.ruby._cpu_ports[i].connectCpuPorts(cpu)
|
||||
|
||||
root = Root(full_system=True, system=system)
|
||||
m5.ticks.setGlobalFrequency("1THz")
|
||||
@@ -1,41 +0,0 @@
|
||||
# Copyright (c) 2012 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from m5.objects import *
|
||||
from x86_generic import *
|
||||
|
||||
root = LinuxX86FSSystemUniprocessor(
|
||||
mem_mode="timing", mem_class=DDR3_1600_8x8, cpu_class=TimingSimpleCPU
|
||||
).create_root()
|
||||
@@ -1,48 +0,0 @@
|
||||
# Copyright (c) 2012 ARM Limited
|
||||
# Copyright (c) 2013 Mark D. Hill and David A. Wood
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from m5.objects import *
|
||||
from x86_generic import *
|
||||
import switcheroo
|
||||
|
||||
root = LinuxX86FSSwitcheroo(
|
||||
mem_class=DDR3_1600_8x8,
|
||||
cpu_classes=(AtomicSimpleCPU, TimingSimpleCPU, DerivO3CPU),
|
||||
).create_root()
|
||||
|
||||
# Setup a custom test method that uses the switcheroo tester that
|
||||
# switches between CPU models.
|
||||
run_test = switcheroo.run_test
|
||||
@@ -1,136 +0,0 @@
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# Copyright (c) 2009 Advanced Micro Devices, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
import m5
|
||||
from m5.objects import *
|
||||
from m5.defines import buildEnv
|
||||
from m5.util import addToPath
|
||||
import os, argparse, sys
|
||||
|
||||
m5.util.addToPath("../configs/")
|
||||
|
||||
from ruby import Ruby
|
||||
from common import Options
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
Options.addNoISAOptions(parser)
|
||||
|
||||
# Add the ruby specific and protocol specific options
|
||||
Ruby.define_options(parser)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
#
|
||||
# Set the default cache size and associativity to be very small to encourage
|
||||
# races between requests and writebacks.
|
||||
#
|
||||
args.l1d_size = "256B"
|
||||
args.l1i_size = "256B"
|
||||
args.l2_size = "512B"
|
||||
args.l3_size = "1kB"
|
||||
args.l1d_assoc = 2
|
||||
args.l1i_assoc = 2
|
||||
args.l2_assoc = 2
|
||||
args.l3_assoc = 2
|
||||
args.ports = 32
|
||||
|
||||
# Turn on flush check for the hammer protocol
|
||||
check_flush = False
|
||||
if buildEnv["PROTOCOL"] == "MOESI_hammer":
|
||||
check_flush = True
|
||||
|
||||
#
|
||||
# create the tester and system, including ruby
|
||||
#
|
||||
tester = RubyTester(
|
||||
check_flush=check_flush,
|
||||
checks_to_complete=100,
|
||||
wakeup_frequency=10,
|
||||
num_cpus=args.num_cpus,
|
||||
)
|
||||
|
||||
# We set the testers as cpu for ruby to find the correct clock domains
|
||||
# for the L1 Objects.
|
||||
system = System(cpu=tester)
|
||||
|
||||
# Dummy voltage domain for all our clock domains
|
||||
system.voltage_domain = VoltageDomain(voltage=args.sys_voltage)
|
||||
system.clk_domain = SrcClockDomain(
|
||||
clock="1GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
system.mem_ranges = AddrRange("256MB")
|
||||
|
||||
# the ruby tester reuses num_cpus to specify the
|
||||
# number of cpu ports connected to the tester object, which
|
||||
# is stored in system.cpu. because there is only ever one
|
||||
# tester object, num_cpus is not necessarily equal to the
|
||||
# size of system.cpu
|
||||
cpu_list = [system.cpu] * args.num_cpus
|
||||
Ruby.create_system(args, False, system, cpus=cpu_list)
|
||||
|
||||
# Create a separate clock domain for Ruby
|
||||
system.ruby.clk_domain = SrcClockDomain(
|
||||
clock="1GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
assert args.num_cpus == len(system.ruby._cpu_ports)
|
||||
|
||||
tester.num_cpus = len(system.ruby._cpu_ports)
|
||||
|
||||
#
|
||||
# The tester is most effective when randomization is turned on and
|
||||
# artifical delay is randomly inserted on messages
|
||||
#
|
||||
system.ruby.randomization = True
|
||||
|
||||
for ruby_port in system.ruby._cpu_ports:
|
||||
#
|
||||
# Tie the ruby tester ports to the ruby cpu read and write ports
|
||||
#
|
||||
if ruby_port.support_data_reqs and ruby_port.support_inst_reqs:
|
||||
tester.cpuInstDataPort = ruby_port.in_ports
|
||||
elif ruby_port.support_data_reqs:
|
||||
tester.cpuDataPort = ruby_port.in_ports
|
||||
elif ruby_port.support_inst_reqs:
|
||||
tester.cpuInstPort = ruby_port.in_ports
|
||||
|
||||
# Do not automatically retry stalled Ruby requests
|
||||
ruby_port.no_retry_on_stall = True
|
||||
|
||||
#
|
||||
# Tell the sequencer this is the ruby tester so that it
|
||||
# copies the subblock back to the checker
|
||||
#
|
||||
ruby_port.using_ruby_tester = True
|
||||
|
||||
# -----------------------
|
||||
# run simulation
|
||||
# -----------------------
|
||||
|
||||
root = Root(full_system=False, system=system)
|
||||
root.system.mem_mode = "timing"
|
||||
@@ -1,41 +0,0 @@
|
||||
# Copyright (c) 2013 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from m5.objects import *
|
||||
from base_config import *
|
||||
|
||||
root = BaseSESystemUniprocessor(
|
||||
mem_mode="atomic", cpu_class=AtomicSimpleCPU, checker=True
|
||||
).create_root()
|
||||
@@ -1,66 +0,0 @@
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
import m5
|
||||
from m5.objects import *
|
||||
|
||||
nb_cores = 4
|
||||
cpus = [AtomicSimpleCPU(cpu_id=i) for i in range(nb_cores)]
|
||||
|
||||
import ruby_config
|
||||
|
||||
ruby_memory = ruby_config.generate("TwoLevel_SplitL1UnifiedL2.rb", nb_cores)
|
||||
|
||||
# system simulated
|
||||
system = System(
|
||||
cpu=cpus,
|
||||
physmem=ruby_memory,
|
||||
membus=SystemXBar(),
|
||||
clk_domain=SrcClockDomain(clock="1GHz"),
|
||||
)
|
||||
|
||||
# Create a seperate clock domain for components that should run at
|
||||
# CPUs frequency
|
||||
system.cpu.clk_domain = SrcClockDomain(clock="2GHz")
|
||||
|
||||
# add L1 caches
|
||||
for cpu in cpus:
|
||||
cpu.connectBus(system.membus)
|
||||
# All cpus are associated with cpu_clk_domain
|
||||
cpu.clk_domain = system.cpu_clk_domain
|
||||
|
||||
# connect memory to membus
|
||||
system.physmem.port = system.membus.mem_side_ports
|
||||
|
||||
# Connect the system port for loading of binaries etc
|
||||
system.system_port = system.membus.cpu_side_ports
|
||||
|
||||
# -----------------------
|
||||
# run simulation
|
||||
# -----------------------
|
||||
|
||||
root = Root(full_system=False, system=system)
|
||||
root.system.mem_mode = "atomic"
|
||||
@@ -1,45 +0,0 @@
|
||||
# Copyright (c) 2013 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from m5.objects import *
|
||||
from base_config import *
|
||||
|
||||
nb_cores = 4
|
||||
root = BaseSESystem(
|
||||
mem_mode="atomic", cpu_class=AtomicSimpleCPU, num_cpus=nb_cores
|
||||
).create_root()
|
||||
@@ -1,44 +0,0 @@
|
||||
# Copyright (c) 2013 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from m5.objects import *
|
||||
from base_config import *
|
||||
|
||||
root = BaseSESystemUniprocessor(
|
||||
mem_mode="atomic", cpu_class=AtomicSimpleCPU
|
||||
).create_root()
|
||||
@@ -1,97 +0,0 @@
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
import m5
|
||||
from m5.objects import *
|
||||
from m5.defines import buildEnv
|
||||
from m5.util import addToPath
|
||||
import os, argparse, sys
|
||||
|
||||
m5.util.addToPath("../configs/")
|
||||
|
||||
from common import Options
|
||||
from ruby import Ruby
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
Options.addCommonOptions(parser)
|
||||
|
||||
# Add the ruby specific and protocol specific options
|
||||
Ruby.define_options(parser)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
#
|
||||
# Set the default cache size and associativity to be very small to encourage
|
||||
# races between requests and writebacks.
|
||||
#
|
||||
args.l1d_size = "256B"
|
||||
args.l1i_size = "256B"
|
||||
args.l2_size = "512B"
|
||||
args.l3_size = "1kB"
|
||||
args.l1d_assoc = 2
|
||||
args.l1i_assoc = 2
|
||||
args.l2_assoc = 2
|
||||
args.l3_assoc = 2
|
||||
|
||||
nb_cores = 4
|
||||
cpus = [TimingSimpleCPU(cpu_id=i) for i in range(nb_cores)]
|
||||
|
||||
# overwrite the num_cpus to equal nb_cores
|
||||
args.num_cpus = nb_cores
|
||||
|
||||
# system simulated
|
||||
system = System(cpu=cpus, clk_domain=SrcClockDomain(clock="1GHz"))
|
||||
|
||||
# Create a seperate clock domain for components that should run at
|
||||
# CPUs frequency
|
||||
system.cpu.clk_domain = SrcClockDomain(clock="2GHz")
|
||||
|
||||
Ruby.create_system(args, False, system)
|
||||
|
||||
# Create a separate clock domain for Ruby
|
||||
system.ruby.clk_domain = SrcClockDomain(clock=args.ruby_clock)
|
||||
|
||||
assert args.num_cpus == len(system.ruby._cpu_ports)
|
||||
|
||||
for (i, cpu) in enumerate(system.cpu):
|
||||
# create the interrupt controller
|
||||
cpu.createInterruptController()
|
||||
|
||||
#
|
||||
# Tie the cpu ports to the ruby cpu ports
|
||||
#
|
||||
cpu.connectAllPorts(
|
||||
system.ruby._cpu_ports[i].in_ports,
|
||||
system.ruby._cpu_ports[i].in_ports,
|
||||
system.ruby._cpu_ports[i].interrupt_out_port,
|
||||
)
|
||||
|
||||
# -----------------------
|
||||
# run simulation
|
||||
# -----------------------
|
||||
|
||||
root = Root(full_system=False, system=system)
|
||||
root.system.mem_mode = "timing"
|
||||
@@ -1,45 +0,0 @@
|
||||
# Copyright (c) 2013 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from m5.objects import *
|
||||
from base_config import *
|
||||
|
||||
nb_cores = 4
|
||||
root = BaseSESystem(
|
||||
mem_mode="timing", cpu_class=TimingSimpleCPU, num_cpus=nb_cores
|
||||
).create_root()
|
||||
@@ -1,104 +0,0 @@
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
import m5
|
||||
from m5.objects import *
|
||||
from m5.defines import buildEnv
|
||||
from m5.util import addToPath
|
||||
import os, argparse, sys
|
||||
|
||||
m5.util.addToPath("../configs/")
|
||||
|
||||
from ruby import Ruby
|
||||
from common import Options
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
Options.addCommonOptions(parser)
|
||||
|
||||
# Add the ruby specific and protocol specific options
|
||||
Ruby.define_options(parser)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
#
|
||||
# Set the default cache size and associativity to be very small to encourage
|
||||
# races between requests and writebacks.
|
||||
#
|
||||
args.l1d_size = "256B"
|
||||
args.l1i_size = "256B"
|
||||
args.l2_size = "512B"
|
||||
args.l3_size = "1kB"
|
||||
args.l1d_assoc = 2
|
||||
args.l1i_assoc = 2
|
||||
args.l2_assoc = 2
|
||||
args.l3_assoc = 2
|
||||
|
||||
# this is a uniprocessor only test
|
||||
args.num_cpus = 1
|
||||
cpu = TimingSimpleCPU(cpu_id=0)
|
||||
system = System(cpu=cpu)
|
||||
|
||||
# Dummy voltage domain for all our clock domains
|
||||
system.voltage_domain = VoltageDomain(voltage=args.sys_voltage)
|
||||
system.clk_domain = SrcClockDomain(
|
||||
clock="1GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
# Create a seperate clock domain for components that should run at
|
||||
# CPUs frequency
|
||||
system.cpu.clk_domain = SrcClockDomain(
|
||||
clock="2GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
system.mem_ranges = AddrRange("256MB")
|
||||
Ruby.create_system(args, False, system)
|
||||
|
||||
# Create a separate clock for Ruby
|
||||
system.ruby.clk_domain = SrcClockDomain(
|
||||
clock=args.ruby_clock, voltage_domain=system.voltage_domain
|
||||
)
|
||||
|
||||
assert len(system.ruby._cpu_ports) == 1
|
||||
|
||||
# create the interrupt controller
|
||||
cpu.createInterruptController()
|
||||
|
||||
#
|
||||
# Tie the cpu cache ports to the ruby cpu ports and
|
||||
# physmem, respectively
|
||||
#
|
||||
cpu.connectAllPorts(
|
||||
system.ruby._cpu_ports[0].in_ports,
|
||||
system.ruby._cpu_ports[0].in_ports,
|
||||
system.ruby._cpu_ports[0].interrupt_out_port,
|
||||
)
|
||||
|
||||
# -----------------------
|
||||
# run simulation
|
||||
# -----------------------
|
||||
|
||||
root = Root(full_system=False, system=system)
|
||||
root.system.mem_mode = "timing"
|
||||
@@ -1,44 +0,0 @@
|
||||
# Copyright (c) 2013 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Copyright (c) 2006-2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from m5.objects import *
|
||||
from base_config import *
|
||||
|
||||
root = BaseSESystemUniprocessor(
|
||||
mem_mode="timing", cpu_class=TimingSimpleCPU
|
||||
).create_root()
|
||||
@@ -1,59 +0,0 @@
|
||||
# Copyright (c) 2007 The Regents of The University of Michigan
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
import m5
|
||||
from m5.objects import *
|
||||
|
||||
m5.util.addToPath("../configs/")
|
||||
from common import FSConfig
|
||||
|
||||
try:
|
||||
system = FSConfig.makeSparcSystem("atomic")
|
||||
except IOError as e:
|
||||
skip_test(reason=str(e))
|
||||
|
||||
system.voltage_domain = VoltageDomain()
|
||||
system.clk_domain = SrcClockDomain(
|
||||
clock="1GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
system.cpu_clk_domain = SrcClockDomain(
|
||||
clock="1GHz", voltage_domain=system.voltage_domain
|
||||
)
|
||||
cpu = AtomicSimpleCPU(cpu_id=0, clk_domain=system.cpu_clk_domain)
|
||||
system.cpu = cpu
|
||||
# create the interrupt controller
|
||||
cpu.createInterruptController()
|
||||
cpu.connectBus(system.membus)
|
||||
|
||||
# create the memory controllers and connect them, stick with
|
||||
# the physmem name to avoid bumping all the reference stats
|
||||
system.physmem = [SimpleMemory(range=r) for r in system.mem_ranges]
|
||||
for i in range(len(system.physmem)):
|
||||
system.physmem[i].port = system.membus.mem_side_ports
|
||||
|
||||
root = Root(full_system=True, system=system)
|
||||
|
||||
m5.ticks.setGlobalFrequency("2GHz")
|
||||
@@ -1,123 +0,0 @@
|
||||
# Copyright (c) 2012 ARM Limited
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
from abc import ABCMeta, abstractmethod
|
||||
import m5
|
||||
from m5.objects import *
|
||||
from m5.proxy import *
|
||||
|
||||
m5.util.addToPath("../configs/")
|
||||
from common.Benchmarks import SysConfig
|
||||
from common import FSConfig, SysPaths
|
||||
from common.Caches import *
|
||||
from base_config import *
|
||||
|
||||
|
||||
class LinuxX86SystemBuilder(object):
|
||||
"""Mix-in that implements create_system.
|
||||
|
||||
This mix-in is intended as a convenient way of adding an
|
||||
X86-specific create_system method to a class deriving from one of
|
||||
the generic base systems.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def create_system(self):
|
||||
mdesc = SysConfig(disks=["linux-x86.img"])
|
||||
system = FSConfig.makeLinuxX86System(
|
||||
self.mem_mode, numCPUs=self.num_cpus, mdesc=mdesc
|
||||
)
|
||||
system.kernel = SysPaths.binary("x86_64-vmlinux-2.6.22.9")
|
||||
|
||||
self.init_system(system)
|
||||
return system
|
||||
|
||||
|
||||
class LinuxX86FSSystem(LinuxX86SystemBuilder, BaseFSSystem):
|
||||
"""Basic X86 full system builder."""
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
"""Initialize an X86 system that supports full system simulation.
|
||||
|
||||
Note: Keyword arguments that are not listed below will be
|
||||
passed to the BaseFSSystem.
|
||||
|
||||
Keyword Arguments:
|
||||
machine_type -- String describing the platform to simulate
|
||||
"""
|
||||
BaseSystem.__init__(self, **kwargs)
|
||||
LinuxX86SystemBuilder.__init__(self)
|
||||
|
||||
def create_caches_private(self, cpu):
|
||||
cpu.addPrivateSplitL1Caches(
|
||||
L1_ICache(size="32kB", assoc=1),
|
||||
L1_DCache(size="32kB", assoc=4),
|
||||
PageTableWalkerCache(),
|
||||
PageTableWalkerCache(),
|
||||
)
|
||||
|
||||
|
||||
class LinuxX86FSSystemUniprocessor(
|
||||
LinuxX86SystemBuilder, BaseFSSystemUniprocessor
|
||||
):
|
||||
"""Basic X86 full system builder for uniprocessor systems.
|
||||
|
||||
Note: This class is a specialization of the X86FSSystem and is
|
||||
only really needed to provide backwards compatibility for existing
|
||||
test cases.
|
||||
"""
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
BaseFSSystemUniprocessor.__init__(self, **kwargs)
|
||||
LinuxX86SystemBuilder.__init__(self)
|
||||
|
||||
def create_caches_private(self, cpu):
|
||||
cpu.addTwoLevelCacheHierarchy(
|
||||
L1_ICache(size="32kB", assoc=1),
|
||||
L1_DCache(size="32kB", assoc=4),
|
||||
L2Cache(size="4MB", assoc=8),
|
||||
PageTableWalkerCache(),
|
||||
PageTableWalkerCache(),
|
||||
)
|
||||
|
||||
|
||||
class LinuxX86FSSwitcheroo(LinuxX86SystemBuilder, BaseFSSwitcheroo):
|
||||
"""Uniprocessor X86 system prepared for CPU switching"""
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
BaseFSSwitcheroo.__init__(self, **kwargs)
|
||||
LinuxX86SystemBuilder.__init__(self)
|
||||
9
tests/gem5/arm_boot_tests/README.md
Normal file
9
tests/gem5/arm_boot_tests/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# Arm Boot Tests
|
||||
|
||||
These tests run a series of Linux boots on the ARMBoard.
|
||||
It varies the CPU type, number of CPUs, and memory used for each run.
|
||||
To run these tests by themselves, you can run the following command in the tests directory:
|
||||
|
||||
```bash
|
||||
./main.py run gem5/arm_boot_tests --length=[length]
|
||||
```
|
||||
@@ -46,7 +46,7 @@ def test_boot(
|
||||
):
|
||||
|
||||
name = f"{cpu}-cpu_{num_cpus}-cores_{mem_system}_{memory_class}_\
|
||||
arm-boot-test"
|
||||
arm_boot_test"
|
||||
|
||||
verifiers = []
|
||||
|
||||
@@ -90,6 +90,7 @@ arm-boot-test"
|
||||
config.base_dir,
|
||||
"tests",
|
||||
"gem5",
|
||||
"arm_boot_tests",
|
||||
"configs",
|
||||
"arm_boot_exit_run.py",
|
||||
),
|
||||
9
tests/gem5/asmtest/README.md
Normal file
9
tests/gem5/asmtest/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# ASM Test
|
||||
|
||||
These tests run a set of RISCV binaries on a bare bones syscall execution.
|
||||
In addition, these test run these binaries against different CPU types.
|
||||
To run these tests by themselves, you can run the following command in the tests directory:
|
||||
|
||||
```bash
|
||||
./main.py run gem5/asmtest --length=[length]
|
||||
```
|
||||
184
tests/gem5/asmtest/configs/simple_binary_run.py
Normal file
184
tests/gem5/asmtest/configs/simple_binary_run.py
Normal file
@@ -0,0 +1,184 @@
|
||||
# Copyright (c) 2021 The Regents of the University of California
|
||||
# Copyright (c) 2022 Google Inc
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
"""
|
||||
A run script for a very simple Syscall-Execution running simple binaries.
|
||||
The system has no cache heirarchy and is as "bare-bones" as you can get in
|
||||
gem5 while still being functinal.
|
||||
"""
|
||||
|
||||
from gem5.resources.resource import Resource
|
||||
from gem5.components.processors.cpu_types import (
|
||||
get_cpu_types_str_set,
|
||||
get_cpu_type_from_str,
|
||||
)
|
||||
from gem5.components.memory import SingleChannelDDR3_1600
|
||||
from gem5.components.boards.simple_board import SimpleBoard
|
||||
from gem5.components.cachehierarchies.classic.no_cache import NoCache
|
||||
from gem5.components.processors.simple_processor import SimpleProcessor
|
||||
from gem5.components.processors.base_cpu_core import BaseCPUCore
|
||||
from gem5.components.processors.base_cpu_processor import BaseCPUProcessor
|
||||
from gem5.components.processors.simple_core import SimpleCore
|
||||
from gem5.components.boards.mem_mode import MemMode
|
||||
from gem5.components.processors.cpu_types import CPUTypes
|
||||
from gem5.simulate.simulator import Simulator
|
||||
from gem5.isas import get_isa_from_str, get_isas_str_set, ISA
|
||||
|
||||
from m5.util import fatal
|
||||
|
||||
import argparse
|
||||
import importlib
|
||||
|
||||
cpu_types_string_map = {
|
||||
CPUTypes.ATOMIC: "AtomicSimpleCPU",
|
||||
CPUTypes.O3: "O3CPU",
|
||||
CPUTypes.TIMING: "TimingSimpleCPU",
|
||||
CPUTypes.KVM: "KvmCPU",
|
||||
CPUTypes.MINOR: "MinorCPU",
|
||||
}
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description="A gem5 script for running simple binaries in SE mode."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"resource", type=str, help="The gem5 resource binary to run."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"cpu", type=str, choices=get_cpu_types_str_set(), help="The CPU type used."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"isa", type=str, choices=get_isas_str_set(), help="The ISA used"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-b",
|
||||
"--base-cpu-processor",
|
||||
action="store_true",
|
||||
help="Use the BaseCPUProcessor instead of the SimpleProcessor.",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--riscv-32bits",
|
||||
action="store_true",
|
||||
help="Use 32 bits core of Riscv CPU",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-r",
|
||||
"--resource-directory",
|
||||
type=str,
|
||||
required=False,
|
||||
help="The directory in which resources will be downloaded or exist.",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--arguments",
|
||||
type=str,
|
||||
action="append",
|
||||
default=[],
|
||||
required=False,
|
||||
help="The input arguments for the binary.",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-n",
|
||||
"--num-cores",
|
||||
type=int,
|
||||
default=1,
|
||||
required=False,
|
||||
help="The number of CPU cores to run.",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# Setup the system.
|
||||
cache_hierarchy = NoCache()
|
||||
memory = SingleChannelDDR3_1600()
|
||||
|
||||
isa_enum = get_isa_from_str(args.isa)
|
||||
cpu_enum = get_cpu_type_from_str(args.cpu)
|
||||
|
||||
if isa_enum == ISA.RISCV and args.riscv_32bits and not args.base_cpu_processor:
|
||||
fatal("To use Riscv 32 CPU, the base_cpu_processor must be specify!")
|
||||
|
||||
if args.base_cpu_processor:
|
||||
|
||||
if isa_enum == ISA.RISCV and args.riscv_32bits:
|
||||
m5_objects = importlib.import_module("m5.objects")
|
||||
cpu_class = getattr(
|
||||
m5_objects, f"Riscv32{cpu_types_string_map[cpu_enum]}"
|
||||
)
|
||||
cores = [
|
||||
BaseCPUCore(core=cpu_class(cpu_id=i), isa=isa_enum)
|
||||
for i in range(args.num_cores)
|
||||
]
|
||||
else:
|
||||
cores = [
|
||||
BaseCPUCore(
|
||||
core=SimpleCore.cpu_simobject_factory(
|
||||
cpu_type=cpu_enum,
|
||||
isa=isa_enum,
|
||||
core_id=i,
|
||||
),
|
||||
isa=isa_enum,
|
||||
)
|
||||
for i in range(args.num_cores)
|
||||
]
|
||||
|
||||
processor = BaseCPUProcessor(
|
||||
cores=cores,
|
||||
)
|
||||
else:
|
||||
processor = SimpleProcessor(
|
||||
cpu_type=cpu_enum,
|
||||
isa=isa_enum,
|
||||
num_cores=args.num_cores,
|
||||
)
|
||||
|
||||
motherboard = SimpleBoard(
|
||||
clk_freq="3GHz",
|
||||
processor=processor,
|
||||
memory=memory,
|
||||
cache_hierarchy=cache_hierarchy,
|
||||
)
|
||||
|
||||
# Set the workload
|
||||
binary = Resource(args.resource, resource_directory=args.resource_directory)
|
||||
motherboard.set_se_binary_workload(binary, arguments=args.arguments)
|
||||
|
||||
# Run the simulation
|
||||
simulator = Simulator(board=motherboard)
|
||||
simulator.run()
|
||||
|
||||
print(
|
||||
"Exiting @ tick {} because {}.".format(
|
||||
simulator.get_current_tick(), simulator.get_last_exit_event_cause()
|
||||
)
|
||||
)
|
||||
@@ -180,6 +180,7 @@ for cpu_type in cpu_types:
|
||||
config.base_dir,
|
||||
"tests",
|
||||
"gem5",
|
||||
"asmtest",
|
||||
"configs",
|
||||
"simple_binary_run.py",
|
||||
),
|
||||
|
||||
8
tests/gem5/cpu_tests/README.md
Normal file
8
tests/gem5/cpu_tests/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# CPU Tests
|
||||
|
||||
These tests run the Bubblesort and FloatMM workloads against the different CPU models.
|
||||
To run these tests by themselves, you can run the following command in the tests directory:
|
||||
|
||||
```bash
|
||||
./main.py run gem5/cpu_tests --length=[length]
|
||||
```
|
||||
8
tests/gem5/dram_lowp/README.md
Normal file
8
tests/gem5/dram_lowp/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# DRAM LowP
|
||||
|
||||
These tests run the `configs/dram` scripts that trigger low power state transitions in the DRAM controller.
|
||||
To run these tests by themselves, you can run the following command in the tests directory:
|
||||
|
||||
```bash
|
||||
./main.py run gem5/dram_lowp --length=[length]
|
||||
```
|
||||
8
tests/gem5/fs/linux/arm/README.md
Normal file
8
tests/gem5/fs/linux/arm/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# FS
|
||||
|
||||
This is a set of full system ARM tests.
|
||||
To run these tests by themselves, you can run the following command in the tests directory:
|
||||
|
||||
```bash
|
||||
./main.py run gem5/fs/linux/arm --length=[length]
|
||||
```
|
||||
@@ -62,7 +62,7 @@ gem5_root = sys.argv[3]
|
||||
# path setup
|
||||
sys.path.append(joinpath(gem5_root, "configs"))
|
||||
tests_root = joinpath(gem5_root, "tests")
|
||||
sys.path.append(joinpath(tests_root, "gem5", "configs"))
|
||||
sys.path.append(joinpath(tests_root, "gem5", "fs", "linux", "arm", "configs"))
|
||||
|
||||
|
||||
exec(compile(open(config).read(), config, "exec"))
|
||||
|
||||
@@ -129,7 +129,16 @@ for name in arm_fs_quick_tests:
|
||||
valid_hosts = constants.supported_hosts
|
||||
|
||||
args = [
|
||||
joinpath(config.base_dir, "tests", "gem5", "configs", name + ".py"),
|
||||
joinpath(
|
||||
config.base_dir,
|
||||
"tests",
|
||||
"gem5",
|
||||
"fs",
|
||||
"linux",
|
||||
"arm",
|
||||
"configs",
|
||||
name + ".py",
|
||||
),
|
||||
path,
|
||||
config.base_dir,
|
||||
]
|
||||
@@ -147,7 +156,16 @@ for name in arm_fs_quick_tests:
|
||||
|
||||
for name in arm_fs_long_tests:
|
||||
args = [
|
||||
joinpath(config.base_dir, "tests", "gem5", "configs", name + ".py"),
|
||||
joinpath(
|
||||
config.base_dir,
|
||||
"tests",
|
||||
"gem5",
|
||||
"fs",
|
||||
"linux",
|
||||
"arm",
|
||||
"configs",
|
||||
name + ".py",
|
||||
),
|
||||
path,
|
||||
config.base_dir,
|
||||
]
|
||||
@@ -164,7 +182,16 @@ for name in arm_fs_long_tests:
|
||||
|
||||
for name in arm_fs_long_tests_arm_target:
|
||||
args = [
|
||||
joinpath(config.base_dir, "tests", "gem5", "configs", name + ".py"),
|
||||
joinpath(
|
||||
config.base_dir,
|
||||
"tests",
|
||||
"gem5",
|
||||
"fs",
|
||||
"linux",
|
||||
"arm",
|
||||
"configs",
|
||||
name + ".py",
|
||||
),
|
||||
path,
|
||||
config.base_dir,
|
||||
]
|
||||
|
||||
8
tests/gem5/gem5_library_example_tests/README.md
Normal file
8
tests/gem5/gem5_library_example_tests/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# gem5 Library Example Tests
|
||||
|
||||
This set of tests checks the examples in `configs/example/gem5_library`, and makes sure they run to completion.
|
||||
To run these tests by themselves, you can run the following command in the tests directory:
|
||||
|
||||
```bash
|
||||
./main.py run gem5/gem5-resources --length=very-long
|
||||
```
|
||||
8
tests/gem5/gem5_resources/README.md
Normal file
8
tests/gem5/gem5_resources/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# gem5 Resources
|
||||
|
||||
This test makes sure that resources you download within gem5 work properly, and the downloaded resource matches the input given.
|
||||
To run these tests by themselves, you can run the following command in the tests directory:
|
||||
|
||||
```bash
|
||||
./main.py run gem5/gem5_resources --length=very-long
|
||||
```
|
||||
@@ -38,7 +38,12 @@ gem5_verify_config(
|
||||
fixtures=(),
|
||||
verifiers=(),
|
||||
config=joinpath(
|
||||
config.base_dir, "tests", "gem5", "configs", "download_check.py"
|
||||
config.base_dir,
|
||||
"tests",
|
||||
"gem5",
|
||||
"gem5_resources",
|
||||
"configs",
|
||||
"download_check.py",
|
||||
),
|
||||
config_args=["--download-directory", resource_path],
|
||||
valid_isas=(constants.all_compiled_tag,),
|
||||
8
tests/gem5/gpu/README.md
Normal file
8
tests/gem5/gpu/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# GPU
|
||||
|
||||
These tests do random checks to the Ruby GPU protocol within gem5.
|
||||
To run these tests by themselves, you can run the following command in the tests directory:
|
||||
|
||||
```bash
|
||||
./main.py run gem5/gem5-resources --length=very-long
|
||||
```
|
||||
8
tests/gem5/insttest_se/README.md
Normal file
8
tests/gem5/insttest_se/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# Inst Test SE
|
||||
|
||||
These test the insttest binary running on the SPARC ISA, checking against different CPU models.
|
||||
To run these tests by themselves, you can run the following command in the tests directory:
|
||||
|
||||
```bash
|
||||
./main.py run gem5/insttest_se --length=[length]
|
||||
```
|
||||
130
tests/gem5/insttest_se/configs/simple_binary_run.py
Normal file
130
tests/gem5/insttest_se/configs/simple_binary_run.py
Normal file
@@ -0,0 +1,130 @@
|
||||
# Copyright (c) 2021 The Regents of the University of California
|
||||
# Copyright (c) 2022 Google Inc
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# 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.
|
||||
|
||||
"""
|
||||
A run script for a very simple Syscall-Execution running simple binaries.
|
||||
The system has no cache heirarchy and is as "bare-bones" as you can get in
|
||||
gem5 while still being functinal.
|
||||
"""
|
||||
|
||||
from gem5.resources.resource import Resource
|
||||
from gem5.components.processors.cpu_types import (
|
||||
get_cpu_types_str_set,
|
||||
get_cpu_type_from_str,
|
||||
)
|
||||
from gem5.components.memory import SingleChannelDDR3_1600
|
||||
from gem5.components.boards.simple_board import SimpleBoard
|
||||
from gem5.components.cachehierarchies.classic.no_cache import NoCache
|
||||
from gem5.components.processors.simple_processor import SimpleProcessor
|
||||
from gem5.components.processors.base_cpu_core import BaseCPUCore
|
||||
from gem5.components.processors.base_cpu_processor import BaseCPUProcessor
|
||||
from gem5.components.processors.simple_core import SimpleCore
|
||||
from gem5.components.boards.mem_mode import MemMode
|
||||
from gem5.components.processors.cpu_types import CPUTypes
|
||||
from gem5.simulate.simulator import Simulator
|
||||
from gem5.isas import get_isa_from_str, get_isas_str_set, ISA
|
||||
|
||||
from m5.util import fatal
|
||||
|
||||
import argparse
|
||||
import importlib
|
||||
|
||||
cpu_types_string_map = {
|
||||
CPUTypes.ATOMIC: "AtomicSimpleCPU",
|
||||
CPUTypes.O3: "O3CPU",
|
||||
CPUTypes.TIMING: "TimingSimpleCPU",
|
||||
CPUTypes.KVM: "KvmCPU",
|
||||
CPUTypes.MINOR: "MinorCPU",
|
||||
}
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description="A gem5 script for running simple binaries in SE mode."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"resource", type=str, help="The gem5 resource binary to run."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"cpu", type=str, choices=get_cpu_types_str_set(), help="The CPU type used."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"isa", type=str, choices=get_isas_str_set(), help="The ISA used"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--resource-directory",
|
||||
type=str,
|
||||
required=False,
|
||||
help="The directory in which resources will be downloaded or exist.",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--arguments",
|
||||
type=str,
|
||||
action="append",
|
||||
default=[],
|
||||
required=False,
|
||||
help="The input arguments for the binary.",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# Setup the system.
|
||||
cache_hierarchy = NoCache()
|
||||
memory = SingleChannelDDR3_1600()
|
||||
|
||||
isa_enum = get_isa_from_str(args.isa)
|
||||
cpu_enum = get_cpu_type_from_str(args.cpu)
|
||||
|
||||
processor = SimpleProcessor(
|
||||
cpu_type=cpu_enum,
|
||||
isa=isa_enum,
|
||||
num_cores=1,
|
||||
)
|
||||
|
||||
motherboard = SimpleBoard(
|
||||
clk_freq="3GHz",
|
||||
processor=processor,
|
||||
memory=memory,
|
||||
cache_hierarchy=cache_hierarchy,
|
||||
)
|
||||
|
||||
# Set the workload
|
||||
binary = Resource(args.resource, resource_directory=args.resource_directory)
|
||||
motherboard.set_se_binary_workload(binary, arguments=args.arguments)
|
||||
|
||||
# Run the simulation
|
||||
simulator = Simulator(board=motherboard)
|
||||
simulator.run()
|
||||
|
||||
print(
|
||||
"Exiting @ tick {} because {}.".format(
|
||||
simulator.get_current_tick(), simulator.get_last_exit_event_cause()
|
||||
)
|
||||
)
|
||||
@@ -52,6 +52,7 @@ for isa in test_progs:
|
||||
config.base_dir,
|
||||
"tests",
|
||||
"gem5",
|
||||
"insttest_se",
|
||||
"configs",
|
||||
"simple_binary_run.py",
|
||||
),
|
||||
|
||||
8
tests/gem5/kvm_fork_tests/README.md
Normal file
8
tests/gem5/kvm_fork_tests/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# KVM Fork Tests
|
||||
|
||||
These tests check that gem5 can fork with the KVM cpu, then switch to a different CPU.
|
||||
To run these tests by themselves, you can run the following command in the tests directory:
|
||||
|
||||
```bash
|
||||
./main.py run gem5/kvm_fork_tests --length=[length]
|
||||
```
|
||||
@@ -64,7 +64,12 @@ def test_kvm_fork_run(cpu: str, num_cpus: int, mem_system: str, length: str):
|
||||
verifiers=verifiers,
|
||||
fixtures=(),
|
||||
config=joinpath(
|
||||
config.base_dir, "tests", "gem5", "configs", "boot_kvm_fork_run.py"
|
||||
config.base_dir,
|
||||
"tests",
|
||||
"gem5",
|
||||
"kvm_fork_tests",
|
||||
"configs",
|
||||
"boot_kvm_fork_run.py",
|
||||
),
|
||||
config_args=[
|
||||
"--cpu",
|
||||
8
tests/gem5/kvm_switch_tests/README.md
Normal file
8
tests/gem5/kvm_switch_tests/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# KVM Switch Tests
|
||||
|
||||
These tests ensure that gem5 can switch processors during simulation.
|
||||
To run these tests by themselves, you can run the following command in the tests directory:
|
||||
|
||||
```bash
|
||||
./main.py run gem5/kvm_switch_tests --length=[length]
|
||||
```
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user