cpu: Add store-access operations
Review Request #2788 - Created May 11, 2015 and updated
| Information | |
|---|---|
| Tony Gutierrez | |
| gem5 | |
| default | |
| Reviewers | |
| Default | |
Changeset 10818:d8ed395159dc --------------------------- cpu: Add store-access operations This patch was created by Bihn Pham during his internship at AMD. This patch adds decoupled store operations that are commonly used by high-performance processors. The patch modifies the O3 CPU model to issue StoreAccess operations as soon as possible to acquire exclusive permission for eventual stores. Later data store operations behave as normal. In the classic memory model, StoreAccess requests are treated as HardPFExReq and share the existing prefetch queue. Therefore, they affect performance only if the prefetcher is enabled in the classic model. In Ruby, StoreAccess requests are treated as RubyStore with NULL data field.
Issue Summary
-
src/cpu/o3/lsq_unit.hh (Diff revision 1) -
I am not a huge fan of the massive conditional and the code flow. First simple change is to check for the inverse and return NoFault early.
Is there any chance to annotate the reasoning behind some of these?
-
src/cpu/o3/lsq_unit_impl.hh (Diff revision 1) -
What is the point of factoring this out into a separate function? I'd think most of the logic in LSQUnit::write could / should be moved into this function. Wrapping the dcachePort->sendTimingReq really does not make any difference.
-
src/mem/abstract_mem.cc (Diff revision 1) -
Why is the store access not an invalidate?
-
src/mem/cache/cache_impl.hh (Diff revision 1) -
Superfluous debug? Should be handled by 302 already.
-
src/mem/cache/cache_impl.hh (Diff revision 1) -
Drop.
-
src/mem/cache/cache_impl.hh (Diff revision 1) -
Unneccessary fast-out (althrough I would like the fast-path to be more obvious in gernal in this function).
Also.. who deallocates the pkt?
-
src/mem/cache/cache_impl.hh (Diff revision 1) -
Please don't remove these assertions. Add a more specific one with a justification.
-
src/mem/cache/mshr.cc (Diff revision 1) -
Surperfluous (..) around isHWPrefetch vs quite (too IMHO) sparing usage of () in other introduced conditionals.
-
src/mem/cache/prefetch/queued.cc (Diff revision 1) -
pull out blk_addr computation
-
src/mem/packet.hh (Diff revision 1) -
Why add both and not start out with sending HardPFExReq straight away?
-
src/mem/packet.hh (Diff revision 1) -
Drop, if not used anywhere except redundant check which could be isInvalidate.
-
src/mem/packet.hh (Diff revision 1) -
The comment is confusing; the "hence" part. Why isn't the HardPFexReq marked as NeedsResponse, too (similar to HardPFReq)?
-
src/mem/packet.cc (Diff revision 1) -
See earlier comment regarding NeedsResponse?
Description: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 2 (+229 -17) |
