Я новичок в gem5 и столкнулся с проблемой при попытке написать простой скрипт конфигурации многоядерной системы.Мой сценарий основан на примере сценариев, приведенных на: http://learning.gem5.org/book/part1/cache_config.html
Когда я пытаюсь добавить более одной dcache в систему (для каждого ядра), я получаю бесконечный цикл этого предупреждающего сообщения:
предупреждение: 186707000: контекст 0: 10000 последовательных сбоев SC.
увеличивается на 10000 каждый раз.
Я пытался искать в заданной конфигурации gem5сценарии se.py и CacheConfig.py, но я до сих пор не могу понять, чего мне здесь не хватает.Я знаю, что могу просто смоделировать эту конфигурацию, используя se.py, но я попытался сделать это самостоятельно на практике и получить более глубокое понимание симулятора gem5.
некоторая дополнительная информация: я запускаю gem5 в режиме seи пытаюсь смоделировать простую многоядерную систему с использованием ядер riscv.
это мой код:
import m5
from m5.objects import *
from Caches import *
#system config
system = System(cpu = [TimingSimpleCPU(cpu_id=i) for i in xrange(4)])
system.clk_domain = SrcClockDomain()
system.clk_domain.clock = '1GHz'
system.clk_domain.voltage_domain = VoltageDomain()
system.mem_mode = 'timing'
system.mem_ranges = [AddrRange('512MB')]
system.cpu_voltage_domain = VoltageDomain()
system.cpu_clk_domain = SrcClockDomain(clock = '1GHz',voltage_domain= system.cpu_voltage_domain)
system.membus = SystemXBar()
system.l2bus = L2XBar()
multiprocess =[Process(cmd = 'tests/test-progs/hello/bin/riscv/linux/hello', pid = 100 + i) for i in xrange(4)]
#cpu config
for i in xrange(4):
system.cpu[i].icache = L1ICache()
system.cpu[i].dcache = L1DCache()
system.cpu[i].icache_port = system.cpu[i].icache.cpu_side
system.cpu[i].dcache_port = system.cpu[i].dcache.cpu_side
system.cpu[i].icache.mem_side = system.l2bus.slave
system.cpu[i].dcache.mem_side = system.l2bus.slave
system.cpu[i].createInterruptController()
system.cpu[i].workload = multiprocess[i]
system.cpu[i].createThreads()
system.l2cache = L2Cache()
system.l2cache.cpu_side = system.l2bus.master
system.l2cache.mem_side = system.membus.slave
system.system_port = system.membus.slave
system.mem_ctrl = DDR3_1600_8x8()
system.mem_ctrl.range = system.mem_ranges[0]
system.mem_ctrl.port = system.membus.master
root = Root(full_system = False , system = system)
m5.instantiate()
print ("Begining Simulation!")
exit_event = m5.simulate()
print ('Exiting @ tick {} because {}' .format(m5.curTick() , exit_event.getCause()))