Hi,
I get following error while running a benchmark with O3CPU and Ruby
configuration:
panic: Unable to find destination for addr 0x47f23002c
@ cycle 5749353955244
[findPort:build_alpha_fs_moesi_cmp_dir/build/ALPHA_FS_MOESI_CMP_directory/mem/bus.cc,
line 359]
Memory Usage: 2711992 KBytes
Program aborted at cycle 5749353955244
On debug, I found that it happens because of bad address generated on
speculation.
In other words, core keeps fetching from predicted branch target (or
targets since it encounters other branches on the speculated path) and
branch will mispredict eventually (confirmed on comparing with trace from
TimingSimple CPU).
But before misprediction happens, it leads to an invalid load address and
generates above error.
I see a check for an invalid address for instruction cache access in
fetch_impl.hh (reproduced below from function finishTranslation) which
stalls fetch stage.
if (!cpu->system->isMemAddr(mem_req->getPaddr())) {
warn("Address %#x is outside of physical memory, stopping
fetch\n",
mem_req->getPaddr());
fetchStatus[tid] = NoGoodAddr;
delete mem_req;
memReq[tid] = NULL;
return;
}
But there is no such check for data or load access in iew or lsq.
I guess the fix would be to not execute (or squash?) the faulting load and
somehow signal to fetch stage to stall as done for instruction cache. Can
you suggest how can I do that?
I already tried limiting in-flight branches to 1. That works but gives
lower perf. So, I'm looking for a better solution.
Thanks,
Ripudaman Singh
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users