mem-cache: allow prefetchers to emit page crossing references
QueuedPrefetcher takes the responsability to check for page crossing references. Change-Id: I0ae6bf8be465118990d9ea1cac0da8f70e69aeb1 Reviewed-on: https://gem5-review.googlesource.com/c/14735 Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
This commit is contained in:
committed by
Javier Bueno Hedo
parent
38f87dab68
commit
afa039d0c0
18
src/mem/cache/prefetch/queued.cc
vendored
18
src/mem/cache/prefetch/queued.cc
vendored
@@ -93,14 +93,20 @@ QueuedPrefetcher::notify(const PacketPtr &pkt, const PrefetchInfo &pfi)
|
||||
// Block align prefetch address
|
||||
addr_prio.first = blockAddress(addr_prio.first);
|
||||
|
||||
PrefetchInfo new_pfi(pfi,addr_prio.first);
|
||||
if (samePage(pfi.getAddr(), addr_prio.first)) {
|
||||
PrefetchInfo new_pfi(pfi,addr_prio.first);
|
||||
|
||||
pfIdentified++;
|
||||
DPRINTF(HWPrefetch, "Found a pf candidate addr: %#x, "
|
||||
"inserting into prefetch queue.\n", new_pfi.getAddr());
|
||||
pfIdentified++;
|
||||
DPRINTF(HWPrefetch, "Found a pf candidate addr: %#x, "
|
||||
"inserting into prefetch queue.\n", new_pfi.getAddr());
|
||||
|
||||
// Create and insert the request
|
||||
insert(pkt, new_pfi, addr_prio.second);
|
||||
// Create and insert the request
|
||||
insert(pkt, new_pfi, addr_prio.second);
|
||||
} else {
|
||||
// Record the number of page crossing prefetches generate
|
||||
pfSpanPage += 1;
|
||||
DPRINTF(HWPrefetch, "Ignoring page crossing prefetch.\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
10
src/mem/cache/prefetch/stride.cc
vendored
10
src/mem/cache/prefetch/stride.cc
vendored
@@ -195,15 +195,7 @@ StridePrefetcher::calculatePrefetch(const PrefetchInfo &pfi,
|
||||
}
|
||||
|
||||
Addr new_addr = pf_addr + d * prefetch_stride;
|
||||
if (samePage(pf_addr, new_addr)) {
|
||||
DPRINTF(HWPrefetch, "Queuing prefetch to %#x.\n", new_addr);
|
||||
addresses.push_back(AddrPriority(new_addr, 0));
|
||||
} else {
|
||||
// Record the number of page crossing prefetches generated
|
||||
pfSpanPage += degree - d + 1;
|
||||
DPRINTF(HWPrefetch, "Ignoring page crossing prefetch.\n");
|
||||
return;
|
||||
}
|
||||
addresses.push_back(AddrPriority(new_addr, 0));
|
||||
}
|
||||
} else {
|
||||
// Miss in table
|
||||
|
||||
8
src/mem/cache/prefetch/tagged.cc
vendored
8
src/mem/cache/prefetch/tagged.cc
vendored
@@ -51,13 +51,7 @@ TaggedPrefetcher::calculatePrefetch(const PrefetchInfo &pfi,
|
||||
|
||||
for (int d = 1; d <= degree; d++) {
|
||||
Addr newAddr = blkAddr + d*(blkSize);
|
||||
if (!samePage(blkAddr, newAddr)) {
|
||||
// Count number of unissued prefetches due to page crossing
|
||||
pfSpanPage += degree - d + 1;
|
||||
return;
|
||||
} else {
|
||||
addresses.push_back(AddrPriority(newAddr,0));
|
||||
}
|
||||
addresses.push_back(AddrPriority(newAddr,0));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user