예제 #1
0
파일: base_config.py 프로젝트: powerjg/gem5
    def init_system(self, system):
        """Initialize a system.

        Arguments:
          system -- System to initialize.
        """
        self.create_clk_src(system)
        system.cpu = self.create_cpus(system.cpu_clk_domain)

        if _have_kvm_support and \
                any([isinstance(c, BaseKvmCPU) for c in system.cpu]):
            self.init_kvm(system)

        if self.use_ruby:
            # Add the ruby specific and protocol specific options
            parser = optparse.OptionParser()
            Options.addCommonOptions(parser)
            Ruby.define_options(parser)
            (options, args) = parser.parse_args()

            # Set the default cache size and associativity to be very
            # small to encourage races between requests and writebacks.
            options.l1d_size="32kB"
            options.l1i_size="32kB"
            options.l2_size="4MB"
            options.l1d_assoc=4
            options.l1i_assoc=2
            options.l2_assoc=8
            options.num_cpus = self.num_cpus
            options.num_dirs = 2

            bootmem = getattr(system, 'bootmem', None)
            Ruby.create_system(options, True, system, system.iobus,
                               system._dma_ports, bootmem)

            # Create a seperate clock domain for Ruby
            system.ruby.clk_domain = SrcClockDomain(
                clock = options.ruby_clock,
                voltage_domain = system.voltage_domain)
            for i, cpu in enumerate(system.cpu):
                if not cpu.switched_out:
                    cpu.createInterruptController()
                    cpu.connectCachedPorts(system.ruby._cpu_ports[i])
        else:
            sha_bus = self.create_caches_shared(system)
            for cpu in system.cpu:
                self.init_cpu(system, cpu, sha_bus)
예제 #2
0
from ruby import Ruby
from common import Options

parser = optparse.OptionParser()
Options.addCommonOptions(parser)

# add the gpu specific options expected by the the gpu and gpu_RfO
parser.add_option("-u", "--num-compute-units", type="int", default=8, help="number of compute units in the GPU")
parser.add_option("--num-cp", type="int", default=0, help="Number of GPU Command Processors (CP)")
parser.add_option("--simds-per-cu", type="int", default=4, help="SIMD units" "per CU")
parser.add_option("--wf-size", type="int", default=64, help="Wavefront size(in workitems)")
parser.add_option("--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)

(options, args) = parser.parse_args()

#
# Set the default cache size and associativity to be very small to encourage
# races between requests and writebacks.
#
options.l1d_size = "256B"
options.l1i_size = "256B"
options.l2_size = "512B"
options.l3_size = "1kB"
options.l1d_assoc = 2
options.l1i_assoc = 2
options.l2_assoc = 2
options.l3_assoc = 2
예제 #3
0
    print("Using cpu: {}".format(cpu))
    exit_event = m5.simulate(opts.abs_max_tick)

    # While there is still something to do in the guest keep executing.
    while exit_event.getCause() != "m5_exit instruction encountered":
        # If the user pressed ctrl-c on the host, then we really should exit
        if exit_event.getCause() == "user interrupt received":
            print("User interrupt. Exiting")
            break

        if exit_event.getCause() == "simulate() limit reached":
            break
        elif "checkpoint" in exit_event.getCause():
            m5.checkpoint(opts.checkpoint_dir)
            break
        elif "switchcpu" in exit_event.getCause():
            system.switchCpus(system.cpu, system.warmupCpu)
        else:
            break

    print('Exiting @ tick %i because %s' %
          (m5.curTick(), exit_event.getCause()))


if __name__ == "__m5_main__":
    addRunFSOptions(SimpleOpts)
    addGPUOptions(SimpleOpts)
    Options.addNoISAOptions(SimpleOpts)
    Ruby.define_options(SimpleOpts)
    runFullSystem()
예제 #4
0
파일: fs.py 프로젝트: wiplashproject/gem5-X
    for i in xrange(len(drive_sys.mem_ctrls)):
        drive_sys.mem_ctrls[i].port = drive_sys.membus.master

    drive_sys.init_param = options.init_param

    return drive_sys


# Add options
parser = optparse.OptionParser()
Options.addCommonOptions(parser)
Options.addFSOptions(parser)

# Add the ruby specific and protocol specific options
if '--ruby' in sys.argv:
    Ruby.define_options(parser)

(options, args) = parser.parse_args()

if args:
    print("Error: script doesn't take any positional arguments")
    sys.exit(1)

# system under test can be any CPU
(TestCPUClass, test_mem_mode, FutureClass) = Simulation.setCPUClass(options)

# Match the memories with the CPUs, based on the options for the test system
TestMemClass = Simulation.setMemClass(options)

if options.benchmark:
    try:
예제 #5
0
def main():
    parser = argparse.ArgumentParser()

    parser.add_argument("--dtb",
                        type=str,
                        default=None,
                        help="DTB file to load")
    parser.add_argument("--kernel",
                        type=str,
                        default=default_kernel,
                        help="Linux kernel")
    parser.add_argument("--disk-image",
                        type=str,
                        default=default_disk,
                        help="Disk to instantiate")
    parser.add_argument(
        "--root-device",
        type=str,
        default=default_root_device,
        help="OS device name for root partition (default: {})".format(
            default_root_device))
    parser.add_argument("--script",
                        type=str,
                        default="",
                        help="Linux bootscript")
    parser.add_argument("--cpu",
                        choices=list(cpu_types.keys()),
                        default="minor",
                        help="CPU model to use")
    parser.add_argument("--cpu-freq", type=str, default="4GHz")
    parser.add_argument("-n", "--num-cpus", type=int, default=1)
    parser.add_argument("--checkpoint", action="store_true")
    parser.add_argument("--restore", type=str, default=None)

    parser.add_argument("--mem-type",
                        default="DDR3_1600_8x8",
                        choices=ObjectList.mem_list.get_names(),
                        help="type of memory to use")
    parser.add_argument("--mem-channels",
                        type=int,
                        default=1,
                        help="number of memory channels")
    parser.add_argument("--mem-ranks",
                        type=int,
                        default=None,
                        help="number of memory ranks per channel")
    parser.add_argument(
        "--mem-size",
        action="store",
        type=str,
        default="2GiB",
        help="Specify the physical memory size (single memory)")
    parser.add_argument("--enable-dram-powerdown",
                        action="store_true",
                        help="Enable low-power states in DRAMInterface")
    parser.add_argument("--mem-channels-intlv",
                        type=int,
                        default=0,
                        help="Memory channels interleave")

    parser.add_argument("--num-dirs", type=int, default=1)
    parser.add_argument("--num-l2caches", type=int, default=1)
    parser.add_argument("--num-l3caches", type=int, default=1)
    parser.add_argument("--l1d_size", type=str, default="64kB")
    parser.add_argument("--l1i_size", type=str, default="32kB")
    parser.add_argument("--l2_size", type=str, default="2MB")
    parser.add_argument("--l3_size", type=str, default="16MB")
    parser.add_argument("--l1d_assoc", type=int, default=2)
    parser.add_argument("--l1i_assoc", type=int, default=2)
    parser.add_argument("--l2_assoc", type=int, default=8)
    parser.add_argument("--l3_assoc", type=int, default=16)
    parser.add_argument("--cacheline_size", type=int, default=64)

    Ruby.define_options(parser)
    args = parser.parse_args()

    root = Root(full_system=True)
    root.system = create(args)

    if args.restore is not None:
        m5.instantiate(args.restore)
    else:
        m5.instantiate()

    run(args)