Hello,
I'm having some problems running with 4 cores and a Nehalem-like cache
in the latest few updates of m5. Previously the three-level cache
structure had worked fine. Specifically, the error I am getting is:
build/ALPHA_FS/mem/cache/cache_impl.hh:909: void
Cache<TagStore>::handleResponse(Packet*) [with TagStore = LRU]:
Assertion `target->pkt->cmd == MemCmd::StoreCondReq || target->pkt->cmd
== MemCmd::StoreCondFailReq' failed.
I have added this to Options.py:
parser.add_option("--l3cache", action="store_true")
I have also updated Caches.py and CacheConfig.py and they are attached.
I updated the kernel to a newer rev according to the directions on the
web page.
(gdb) print *target
$2 = {recvTime = 2238099124338, readyTime = 2238099127776, order = 643,
pkt = 0x5a66ea0, source = 0, markedPending = true}
(gdb) print *target->pkt
$4 = {<FastAlloc> = {_vptr.FastAlloc = 0xc4ce10, static Max_Alloc_Size =
512, static Log2_Alloc_Quantum = 3, static Alloc_Quantum = 8, static
Num_Buckets = 65,
static Num_Structs_Per_New = <optimized out>, static freeLists =
{0x0, 0x0, 0x0, 0x0, 0x0, 0x59e3108, 0x0, 0x5a5ce28, 0x0, 0x59df018,
0x5a0cad0, 0x233ec90, 0x5a08e80,
0x0 <repeats 22 times>, 0x5a01b00, 0x0 <repeats 29 times>}},
<Printable> = {_vptr.Printable = 0xc4ce38}, static PUBLIC_FLAGS =
<optimized out>,
static PRIVATE_FLAGS = <optimized out>, static COPY_FLAGS = 15,
static SHARED = 1, static EXPRESS_SNOOP = 2, static SUPPLY_EXCLUSIVE =
4, static MEM_INHIBIT = 8, static VALID_ADDR = 256,
static VALID_SIZE = 512, static VALID_SRC = 1024, static VALID_DST =
2048, static STATIC_DATA = 4096, static DYNAMIC_DATA = 8192, static
ARRAY_DATA = 16384, flags = {_flags = 28416},
cmd = {static commandInfo = 0x11d1480, cmd =
MemCmd::SCUpgradeFailReq}, req = 0x59dc650, data = 0x5a70d10
"\320N\250\005", addr = 17759616, size = 64, src = 1, dest = -1, origCmd = {
static commandInfo = 0x11d1480, cmd = MemCmd::InvalidCmd}, time =
2238099124338, finishTime = 2238099126000, firstWordTime =
2238099127000, static Broadcast = -1,
senderState = 0x25876b8}
It works fine with only the L2 cache, the problem is adding the L3
cache. Any ideas?
Joe
# 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.
#
# Authors: Lisa Hsu
# Configure the M5 cache hierarchy config in one place
#
import m5
from m5.objects import *
from Caches import *
def config_cache(options, system):
if options.l3cache:
system.l3cache = L3Cache()
system.tol3bus = Bus()
system.l3cache.cpu_side = system.tol3bus.port
system.l3cache.mem_side = system.membus.port
system.l3cache.num_cpus = options.num_cpus
elif options.l2cache:
system.l2cache = L2Cache()
system.tol2bus = Bus()
system.l2cache.cpu_side = system.tol2bus.port
system.l2cache.mem_side = system.membus.port
system.l2cache.num_cpus = options.num_cpus
for i in xrange(options.num_cpus):
if options.l3cache:
system.cpu[i].addTwoLevelCacheHierarchy(L1Cache(), L1Cache(), L2Cache())
system.cpu[i].connectMemPorts(system.tol3bus)
elif options.l2cache:
system.cpu[i].addPrivateSplitL1Caches(L1Cache(), L1Cache())
system.cpu[i].connectMemPorts(system.tol2bus)
return system
# 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.
#
# Authors: Lisa Hsu
from m5.objects import *
class L1Cache(BaseCache):
size = '32kB'
assoc = 4
block_size = 64
latency = '.9375ns'
mshrs = 10
tgts_per_mshr = 5
class L2Cache(BaseCache):
size = '256kB'
assoc = 8
block_size = 64
latency = '3.4375ns'
mshrs = 20
tgts_per_mshr = 12
class L3Cache(BaseCache):
size = '16MB'
assoc = 16
block_size = 64
latency = '12.25ns'
mshrs = 32
tgts_per_mshr = 12
prefetch_policy = 'ghb'
prefetch_degree = 3
prefetcher_size = 256
class IOCache(BaseCache):
assoc = 8
block_size = 64
latency = '10ns'
mshrs = 20
size = '1kB'
tgts_per_mshr = 12
forward_snoops = False
_______________________________________________
m5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users