From ae3a00cd1fd8a0500a9d8be96c9b176a0326b133 Mon Sep 17 00:00:00 2001 From: David Hashe Date: Wed, 18 Apr 2018 16:40:28 -0400 Subject: configs: faux-filesystem fix w/ ruby in se mode These changes are needed so that the config scripts can report cache hierarchy information to the faux filesystem. This is useful for the ROCm runtime when it reads psuedofiles from the host filesytem from "/proc". Change-Id: Iad3e6c088d47c9b93979f584de748367eae8259b Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/12121 Reviewed-by: Brandon Potter Maintainer: Brandon Potter Tested-by: kokoro --- configs/ruby/GPU_VIPER.py | 53 ++++++++++++++++++++++++++++++++++++ configs/ruby/MESI_Three_Level.py | 40 +++++++++++++++++++++++++++ configs/ruby/MOESI_AMD_Base.py | 54 +++++++++++++++++++++++++++++++++++++ configs/ruby/MOESI_CMP_directory.py | 1 - configs/ruby/MOESI_CMP_token.py | 1 - configs/ruby/MOESI_hammer.py | 30 +++++++++++++++++++++ configs/ruby/Ruby.py | 9 +++++++ 7 files changed, 186 insertions(+), 2 deletions(-) (limited to 'configs/ruby') diff --git a/configs/ruby/GPU_VIPER.py b/configs/ruby/GPU_VIPER.py index 94dcbefe3..e8e781562 100644 --- a/configs/ruby/GPU_VIPER.py +++ b/configs/ruby/GPU_VIPER.py @@ -499,6 +499,59 @@ def create_system(options, full_system, system, dma_devices, bootmem, cpuCluster.add(cp_cntrl) + # Register CPUs and caches for each CorePair and directory (SE mode only) + if not full_system: + FileSystemConfig.config_filesystem(options) + for i in xrange((options.num_cpus + 1) // 2): + FileSystemConfig.register_cpu(physical_package_id = 0, + core_siblings = \ + xrange(options.num_cpus), + core_id = i*2, + thread_siblings = []) + + FileSystemConfig.register_cpu(physical_package_id = 0, + core_siblings = \ + xrange(options.num_cpus), + core_id = i*2+1, + thread_siblings = []) + + FileSystemConfig.register_cache(level = 0, + idu_type = 'Instruction', + size = options.l1i_size, + line_size = options.cacheline_size, + assoc = options.l1i_assoc, + cpus = [i*2, i*2+1]) + + FileSystemConfig.register_cache(level = 0, + idu_type = 'Data', + size = options.l1d_size, + line_size = options.cacheline_size, + assoc = options.l1d_assoc, + cpus = [i*2]) + + FileSystemConfig.register_cache(level = 0, + idu_type = 'Data', + size = options.l1d_size, + line_size = options.cacheline_size, + assoc = options.l1d_assoc, + cpus = [i*2+1]) + + FileSystemConfig.register_cache(level = 1, + idu_type = 'Unified', + size = options.l2_size, + line_size = options.cacheline_size, + assoc = options.l2_assoc, + cpus = [i*2, i*2+1]) + + for i in range(options.num_dirs): + FileSystemConfig.register_cache(level = 2, + idu_type = 'Unified', + size = options.l3_size, + line_size = options.cacheline_size, + assoc = options.l3_assoc, + cpus = [n for n in + xrange(options.num_cpus)]) + gpuCluster = None if hasattr(options, 'bw_scalor') and options.bw_scalor > 0: gpuCluster = Cluster(extBW = crossbar_bw, intBW = crossbar_bw) diff --git a/configs/ruby/MESI_Three_Level.py b/configs/ruby/MESI_Three_Level.py index 95ac342a7..6d6bc89b9 100644 --- a/configs/ruby/MESI_Three_Level.py +++ b/configs/ruby/MESI_Three_Level.py @@ -35,6 +35,7 @@ from m5.objects import * from m5.defines import buildEnv from Ruby import create_topology, create_directories from Ruby import send_evicts +import FileSystemConfig # # Declare caches used by the protocol @@ -260,6 +261,45 @@ def create_system(options, full_system, system, dma_ports, bootmem, io_controller.requestToDir.master = ruby_system.network.slave all_cntrls = all_cntrls + [io_controller] + # Register configuration with filesystem + else: + FileSystemConfig.config_filesystem(options) + + for i in xrange(options.num_clusters): + for j in xrange(num_cpus_per_cluster): + FileSystemConfig.register_cpu(physical_package_id = 0, + core_siblings = xrange(options.num_cpus), + core_id = i*num_cpus_per_cluster+j, + thread_siblings = []) + + FileSystemConfig.register_cache(level = 0, + idu_type = 'Instruction', + size = '4096B', + line_size = options.cacheline_size, + assoc = 1, + cpus = [i*num_cpus_per_cluster+j]) + FileSystemConfig.register_cache(level = 0, + idu_type = 'Data', + size = '4096B', + line_size = options.cacheline_size, + assoc = 1, + cpus = [i*num_cpus_per_cluster+j]) + + FileSystemConfig.register_cache(level = 1, + idu_type = 'Unified', + size = options.l1d_size, + line_size = options.cacheline_size, + assoc = options.l1d_assoc, + cpus = [i*num_cpus_per_cluster+j]) + + FileSystemConfig.register_cache(level = 2, + idu_type = 'Unified', + size = str(MemorySize(options.l2_size) * \ + num_l2caches_per_cluster)+'B', + line_size = options.cacheline_size, + assoc = options.l2_assoc, + cpus = [n for n in xrange(i*num_cpus_per_cluster, \ + (i+1)*num_cpus_per_cluster)]) ruby_system.network.number_of_virtual_networks = 3 topology = create_topology(all_cntrls, options) diff --git a/configs/ruby/MOESI_AMD_Base.py b/configs/ruby/MOESI_AMD_Base.py index aeec37838..d46508302 100644 --- a/configs/ruby/MOESI_AMD_Base.py +++ b/configs/ruby/MOESI_AMD_Base.py @@ -38,6 +38,7 @@ from m5.defines import buildEnv from m5.util import addToPath from Ruby import create_topology from Ruby import send_evicts +import FileSystemConfig addToPath('../') @@ -326,6 +327,59 @@ def create_system(options, full_system, system, dma_devices, bootmem, cpuCluster.add(cp_cntrl) + # Register CPUs and caches for each CorePair and directory (SE mode only) + if not full_system: + FileSystemConfig.config_filesystem(options) + for i in xrange((options.num_cpus + 1) // 2): + FileSystemConfig.register_cpu(physical_package_id = 0, + core_siblings = + xrange(options.num_cpus), + core_id = i*2, + thread_siblings = []) + + FileSystemConfig.register_cpu(physical_package_id = 0, + core_siblings = + xrange(options.num_cpus), + core_id = i*2+1, + thread_siblings = []) + + FileSystemConfig.register_cache(level = 0, + idu_type = 'Instruction', + size = options.l1i_size, + line_size = options.cacheline_size, + assoc = options.l1i_assoc, + cpus = [i*2, i*2+1]) + + FileSystemConfig.register_cache(level = 0, + idu_type = 'Data', + size = options.l1d_size, + line_size = options.cacheline_size, + assoc = options.l1d_assoc, + cpus = [i*2]) + + FileSystemConfig.register_cache(level = 0, + idu_type = 'Data', + size = options.l1d_size, + line_size = options.cacheline_size, + assoc = options.l1d_assoc, + cpus = [i*2+1]) + + FileSystemConfig.register_cache(level = 1, + idu_type = 'Unified', + size = options.l2_size, + line_size = options.cacheline_size, + assoc = options.l2_assoc, + cpus = [i*2, i*2+1]) + + for i in range(options.num_dirs): + FileSystemConfig.register_cache(level = 2, + idu_type = 'Unified', + size = options.l3_size, + line_size = options.cacheline_size, + assoc = options.l3_assoc, + cpus = [n for n in + xrange(options.num_cpus)]) + # Assuming no DMA devices assert(len(dma_devices) == 0) diff --git a/configs/ruby/MOESI_CMP_directory.py b/configs/ruby/MOESI_CMP_directory.py index 40cb7ce67..5ce31dfa1 100644 --- a/configs/ruby/MOESI_CMP_directory.py +++ b/configs/ruby/MOESI_CMP_directory.py @@ -237,7 +237,6 @@ def create_system(options, full_system, system, dma_ports, bootmem, all_cntrls = all_cntrls + [io_controller] - ruby_system.network.number_of_virtual_networks = 3 topology = create_topology(all_cntrls, options) return (cpu_sequencers, mem_dir_cntrl_nodes, topology) diff --git a/configs/ruby/MOESI_CMP_token.py b/configs/ruby/MOESI_CMP_token.py index 817d6f96c..6d100bda2 100644 --- a/configs/ruby/MOESI_CMP_token.py +++ b/configs/ruby/MOESI_CMP_token.py @@ -265,7 +265,6 @@ def create_system(options, full_system, system, dma_ports, bootmem, all_cntrls = all_cntrls + [io_controller] - ruby_system.network.number_of_virtual_networks = 6 topology = create_topology(all_cntrls, options) return (cpu_sequencers, mem_dir_cntrl_nodes, topology) diff --git a/configs/ruby/MOESI_hammer.py b/configs/ruby/MOESI_hammer.py index 763088682..ecac17e98 100644 --- a/configs/ruby/MOESI_hammer.py +++ b/configs/ruby/MOESI_hammer.py @@ -33,6 +33,7 @@ from m5.objects import * from m5.defines import buildEnv from Ruby import create_topology, create_directories from Ruby import send_evicts +import FileSystemConfig # # Declare caches used by the protocol @@ -255,6 +256,35 @@ def create_system(options, full_system, system, dma_ports, bootmem, io_controller.mandatoryQueue = MessageBuffer() all_cntrls = all_cntrls + [io_controller] + # Register configuration with filesystem + else: + FileSystemConfig.config_filesystem(options) + + for i in xrange(options.num_cpus): + FileSystemConfig.register_cpu(physical_package_id = 0, + core_siblings = [], + core_id = i, + thread_siblings = []) + + FileSystemConfig.register_cache(level = 1, + idu_type = 'Instruction', + size = options.l1i_size, + line_size = options.cacheline_size, + assoc = options.l1i_assoc, + cpus = [i]) + FileSystemConfig.register_cache(level = 1, + idu_type = 'Data', + size = options.l1d_size, + line_size = options.cacheline_size, + assoc = options.l1d_assoc, + cpus = [i]) + + FileSystemConfig.register_cache(level = 2, + idu_type = 'Unified', + size = options.l2_size, + line_size = options.cacheline_size, + assoc = options.l2_assoc, + cpus = [i]) ruby_system.network.number_of_virtual_networks = 6 topology = create_topology(all_cntrls, options) diff --git a/configs/ruby/Ruby.py b/configs/ruby/Ruby.py index ffa5a0294..369a4e355 100644 --- a/configs/ruby/Ruby.py +++ b/configs/ruby/Ruby.py @@ -50,6 +50,7 @@ from m5.util import addToPath, fatal addToPath('../') from common import MemConfig +from common import FileSystemConfig from topologies import * from network import Network @@ -154,6 +155,9 @@ def create_system(options, full_system, system, piobus = None, dma_ports = [], system.ruby = RubySystem() ruby = system.ruby + # Generate pseudo filesystem + FileSystemConfig.config_filesystem(options) + # Create the network object (network, IntLinkClass, ExtLinkClass, RouterClass, InterfaceClass) = \ Network.create_network(options, ruby) @@ -174,6 +178,11 @@ def create_system(options, full_system, system, piobus = None, dma_ports = [], topology.makeTopology(options, network, IntLinkClass, ExtLinkClass, RouterClass) + # Register the topology elements with faux filesystem (SE mode only) + if not full_system: + topology.registerTopology(options) + + # Initialize network based on topology Network.init_network(options, network, InterfaceClass) -- cgit v1.2.3