diff options
author | Tony Gutierrez <anthony.gutierrez@amd.com> | 2016-01-19 13:57:50 -0500 |
---|---|---|
committer | Tony Gutierrez <anthony.gutierrez@amd.com> | 2016-01-19 13:57:50 -0500 |
commit | d658b6e1cc22de852fef611e28f448257acc298a (patch) | |
tree | 9d4ab8f7531647eb7df619c77e8ddb2ae1022bcf /src/mem/protocol | |
parent | 34fb6b5e35db751f310aee824046107e57a0ba03 (diff) | |
download | gem5-d658b6e1cc22de852fef611e28f448257acc298a.tar.xz |
* * *
mem: support for gpu-style RMWs in ruby
This patch adds support for GPU-style read-modify-write (RMW) operations in
ruby. Such atomic operations are traditionally executed at the memory controller
(instead of through an L1 cache using cache-line locking).
Currently, this patch works by propogating operation functors through the memory
system.
Diffstat (limited to 'src/mem/protocol')
-rw-r--r-- | src/mem/protocol/RubySlicc_Exports.sm | 7 | ||||
-rw-r--r-- | src/mem/protocol/RubySlicc_Types.sm | 1 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/mem/protocol/RubySlicc_Exports.sm b/src/mem/protocol/RubySlicc_Exports.sm index 6fedfeb2d..882102923 100644 --- a/src/mem/protocol/RubySlicc_Exports.sm +++ b/src/mem/protocol/RubySlicc_Exports.sm @@ -56,6 +56,7 @@ bool testAndWrite(Addr addr, DataBlock datablk, Packet *pkt); enumeration(AccessPermission, desc="...", default="AccessPermission_NotPresent") { // Valid data Read_Only, desc="block is Read Only (modulo functional writes)"; + Write_Only, desc="block is Write Only"; Read_Write, desc="block is Read/Write"; // Possibly Invalid data @@ -144,7 +145,9 @@ enumeration(TransitionResult, desc="...") { enumeration(RubyRequestType, desc="...", default="RubyRequestType_NULL") { LD, desc="Load"; ST, desc="Store"; - ATOMIC, desc="Atomic Load/Store"; + ATOMIC, desc="Atomic Load/Store -- depricated. use ATOMIC_RETURN or ATOMIC_NO_RETURN"; + ATOMIC_RETURN, desc="Atomic Load/Store, return data"; + ATOMIC_NO_RETURN, desc="Atomic Load/Store, do not return data"; IFETCH, desc="Instruction fetch"; IO, desc="I/O"; REPLACEMENT, desc="Replacement"; @@ -166,6 +169,8 @@ enumeration(SequencerRequestType, desc="...", default="SequencerRequestType_NULL Default, desc="Replace this with access_types passed to the DMA Ruby object"; LD, desc="Load"; ST, desc="Store"; + ATOMIC, desc="Atomic Load/Store"; + REPLACEMENT, desc="Replacement"; FLUSH, desc="Flush request type"; NULL, desc="Invalid request type"; } diff --git a/src/mem/protocol/RubySlicc_Types.sm b/src/mem/protocol/RubySlicc_Types.sm index c7479089b..95fa1db17 100644 --- a/src/mem/protocol/RubySlicc_Types.sm +++ b/src/mem/protocol/RubySlicc_Types.sm @@ -126,6 +126,7 @@ structure(RubyRequest, desc="...", interface="Message", external="yes") { int Size, desc="size in bytes of access"; PrefetchBit Prefetch, desc="Is this a prefetch request"; int contextId, desc="this goes away but must be replace with Nilay"; + int wfid, desc="Writethrough wavefront"; HSAScope scope, desc="HSA scope"; HSASegment segment, desc="HSA segment"; } |