mshr_size is not respected because the access list only gets updated after the mshr_size limit check (done in CanAccess() )
When there is room for a new access i.e. accesses.size()-num_coalesced_accesses < mshr_size every single access submitted in the current clock cycle, gets processed.
Root of the error may start in src/Module.cc
bool Module::canAccess(int address) const
{
...
if (num_locked_ports == num_ports)
return false;
...
// Module can be accessed if number of non-coalesced in-flight accesses
// is smaller than the MSHR size.
int num_non_coalesced_accesses = accesses.size() -
num_coalesced_accesses; // ** PROBLEM HAPPENS HERE
return num_non_coalesced_accesses < mshr_size;
}
At this point, because accesses is a list that only gets updated after all the checks, all the access are allowed to be processed, increasing accesses.size() far beyond mshr_size.
mshr_size
is not respected because theaccess
list only gets updated after themshr_size
limit check (done inCanAccess()
)When there is room for a new access i.e.
accesses.size()-num_coalesced_accesses < mshr_size
every single access submitted in the current clock cycle, gets processed.Root of the error may start in
src/Module.cc
At this point, because
accesses
is a list that only gets updated after all the checks, all the access are allowed to be processed, increasingaccesses.size()
far beyondmshr_size
.