configs: Replace DirMem w/RubyDirectoryMemory, set addr_ranges
This was originally from the GCN staging branch, which only had GPU_VIPER.py, but the other GPU_VIPER configs had DirMem as well, so I applied this change to all of them. The patch replaces the Directory in DirCntrl from DirMem to RubyDirectoryMemory. This fixes errors that DirMem caused relating to setting class variables. It also generates and sets addr_ranges in DirCntrl as RubyDirectoryMemory uses the parent object's addr_ranges in its code The style checker complained about a line length in GPU_VIPER_Region, so the patch also fixes that Change-Id: Icec96777a51d8a826b576fc752fae0f7f15427bc Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/32674 Reviewed-by: Matt Sinclair <mattdsinclair@gmail.com> Reviewed-by: Bradford Beckmann <brad.beckmann@amd.com> Maintainer: Bradford Beckmann <brad.beckmann@amd.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
committed by
Anthony Gutierrez
parent
a65eed883b
commit
bd52b4793d
@@ -322,24 +322,14 @@ class L3Cntrl(L3Cache_Controller, CntrlBase):
|
||||
self.probeToL3 = probe_to_l3
|
||||
self.respToL3 = resp_to_l3
|
||||
|
||||
class DirMem(RubyDirectoryMemory, CntrlBase):
|
||||
def create(self, options, ruby_system, system):
|
||||
self.version = self.versionCount()
|
||||
|
||||
phys_mem_size = AddrRange(options.mem_size).size()
|
||||
mem_module_size = phys_mem_size / options.num_dirs
|
||||
dir_size = MemorySize('0B')
|
||||
dir_size.value = mem_module_size
|
||||
self.size = dir_size
|
||||
|
||||
class DirCntrl(Directory_Controller, CntrlBase):
|
||||
def create(self, options, ruby_system, system):
|
||||
def create(self, options, dir_ranges, ruby_system, system):
|
||||
self.version = self.versionCount()
|
||||
|
||||
self.response_latency = 30
|
||||
|
||||
self.directory = DirMem()
|
||||
self.directory.create(options, ruby_system, system)
|
||||
self.addr_ranges = dir_ranges
|
||||
self.directory = RubyDirectoryMemory()
|
||||
|
||||
self.L3CacheMemory = L3Cache()
|
||||
self.L3CacheMemory.create(options, ruby_system, system)
|
||||
@@ -441,6 +431,17 @@ def create_system(options, full_system, system, dma_devices, bootmem,
|
||||
# Clusters
|
||||
crossbar_bw = None
|
||||
mainCluster = None
|
||||
|
||||
if options.numa_high_bit:
|
||||
numa_bit = options.numa_high_bit
|
||||
else:
|
||||
# if the numa_bit is not specified, set the directory bits as the
|
||||
# lowest bits above the block offset bits, and the numa_bit as the
|
||||
# highest of those directory bits
|
||||
dir_bits = int(math.log(options.num_dirs, 2))
|
||||
block_size_bits = int(math.log(options.cacheline_size, 2))
|
||||
numa_bit = block_size_bits + dir_bits - 1
|
||||
|
||||
if hasattr(options, 'bw_scalor') and options.bw_scalor > 0:
|
||||
#Assuming a 2GHz clock
|
||||
crossbar_bw = 16 * options.num_compute_units * options.bw_scalor
|
||||
@@ -448,9 +449,16 @@ def create_system(options, full_system, system, dma_devices, bootmem,
|
||||
else:
|
||||
mainCluster = Cluster(intBW=8) # 16 GB/s
|
||||
for i in range(options.num_dirs):
|
||||
dir_ranges = []
|
||||
for r in system.mem_ranges:
|
||||
addr_range = m5.objects.AddrRange(r.start, size = r.size(),
|
||||
intlvHighBit = numa_bit,
|
||||
intlvBits = dir_bits,
|
||||
intlvMatch = i)
|
||||
dir_ranges.append(addr_range)
|
||||
|
||||
dir_cntrl = DirCntrl(noTCCdir = True, TCC_select_num_bits = TCC_bits)
|
||||
dir_cntrl.create(options, ruby_system, system)
|
||||
dir_cntrl.create(options, dir_ranges, ruby_system, system)
|
||||
dir_cntrl.number_of_TBEs = options.num_tbes
|
||||
dir_cntrl.useL3OnWT = options.use_L3_on_WT
|
||||
# the number_of_TBEs is inclusive of TBEs below
|
||||
|
||||
Reference in New Issue
Block a user