[gem5-dev] Change in gem5/gem5[develop]: mem-ruby: Fix debug prints for regular Stores

2020-08-13 Thread Pouya Fotouhi (Gerrit) via gem5-dev
Pouya Fotouhi has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/32514 )


Change subject: mem-ruby: Fix debug prints for regular Stores
..

mem-ruby: Fix debug prints for regular Stores

In the updated implementation of LL/SC (27103) the default value
of success was changed, which results in printing "SC_Failed" for
any regular stores.

Change-Id: I4f2e0b26233ce0cbdf948aadd19c9d81bf18bec0
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/32514
Reviewed-by: Jason Lowe-Power 
Reviewed-by: Giacomo Travaglini 
Maintainer: Jason Lowe-Power 
Tested-by: kokoro 
---
M src/mem/ruby/system/Sequencer.cc
1 file changed, 1 insertion(+), 1 deletion(-)

Approvals:
  Jason Lowe-Power: Looks good to me, but someone else must approve; Looks  
good to me, approved

  Giacomo Travaglini: Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/mem/ruby/system/Sequencer.cc  
b/src/mem/ruby/system/Sequencer.cc

index aa134f4..42398e2 100644
--- a/src/mem/ruby/system/Sequencer.cc
+++ b/src/mem/ruby/system/Sequencer.cc
@@ -368,7 +368,7 @@
 (seq_req.m_type != RubyRequestType_Load_Linked) &&
 (seq_req.m_type != RubyRequestType_IFETCH)) {
 // LL/SC support (tested with ARMv8)
-bool success = false;
+bool success = true;

 if (seq_req.m_type != RubyRequestType_Store_Conditional) {
 // Regular stores to addresses being monitored

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/32514
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I4f2e0b26233ce0cbdf948aadd19c9d81bf18bec0
Gerrit-Change-Number: 32514
Gerrit-PatchSet: 2
Gerrit-Owner: Pouya Fotouhi 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Pouya Fotouhi 
Gerrit-Reviewer: Timothy Hayes 
Gerrit-Reviewer: kokoro 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: mem-ruby: Fix debug prints for regular Stores

2020-08-12 Thread Pouya Fotouhi (Gerrit) via gem5-dev
Pouya Fotouhi has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/32514 )



Change subject: mem-ruby: Fix debug prints for regular Stores
..

mem-ruby: Fix debug prints for regular Stores

In the updated implementation of LL/SC (27103) the default value
of success was changed, which results in printing "SC_Failed" for
any regular stores.

Change-Id: I4f2e0b26233ce0cbdf948aadd19c9d81bf18bec0
---
M src/mem/ruby/system/Sequencer.cc
1 file changed, 1 insertion(+), 1 deletion(-)



diff --git a/src/mem/ruby/system/Sequencer.cc  
b/src/mem/ruby/system/Sequencer.cc

index aa134f4..42398e2 100644
--- a/src/mem/ruby/system/Sequencer.cc
+++ b/src/mem/ruby/system/Sequencer.cc
@@ -368,7 +368,7 @@
 (seq_req.m_type != RubyRequestType_Load_Linked) &&
 (seq_req.m_type != RubyRequestType_IFETCH)) {
 // LL/SC support (tested with ARMv8)
-bool success = false;
+bool success = true;

 if (seq_req.m_type != RubyRequestType_Store_Conditional) {
 // Regular stores to addresses being monitored

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/32514
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I4f2e0b26233ce0cbdf948aadd19c9d81bf18bec0
Gerrit-Change-Number: 32514
Gerrit-PatchSet: 1
Gerrit-Owner: Pouya Fotouhi 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: mem-ruby: Adding FS support for MOESI_AMD_Base

2020-08-06 Thread Pouya Fotouhi (Gerrit) via gem5-dev
Pouya Fotouhi has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/32317 )



Change subject: mem-ruby: Adding FS support for MOESI_AMD_Base
..

mem-ruby: Adding FS support for MOESI_AMD_Base

WIP

Change-Id: Ic424cc6e78399e9cd73d6419ea0ad6f8c9397673
---
M configs/ruby/MOESI_AMD_Base.py
M src/mem/ruby/protocol/MOESI_AMD_Base.slicc
2 files changed, 56 insertions(+), 3 deletions(-)



diff --git a/configs/ruby/MOESI_AMD_Base.py b/configs/ruby/MOESI_AMD_Base.py
index 91ff4d2..ae17031 100644
--- a/configs/ruby/MOESI_AMD_Base.py
+++ b/configs/ruby/MOESI_AMD_Base.py
@@ -260,6 +260,12 @@
 dir_cntrl.create(options, dir_ranges, ruby_system, system)

 # Connect the Directory controller to the ruby network
+dir_cntrl.requestFromDMA = MessageBuffer(ordered = True)
+dir_cntrl.requestFromDMA.slave = ruby_system.network.master
+
+dir_cntrl.responseToDMA = MessageBuffer()
+dir_cntrl.responseToDMA.master = ruby_system.network.slave
+
 dir_cntrl.requestFromCores = MessageBuffer(ordered = True)
 dir_cntrl.requestFromCores.slave = ruby_system.network.master

@@ -290,7 +296,7 @@
 # level config files, such as the ruby_random_tester, will get  
confused if
 # the number of cpus does not equal the number of sequencers.  Thus  
make

 # sure that an even number of cpus is specified.
-assert((options.num_cpus % 2) == 0)
+#assert((options.num_cpus % 2) == 0)

 # For an odd number of CPUs, still create the right number of  
controllers

 cpuCluster = Cluster(extBW = 512, intBW = 512)  # 1 TB/s
@@ -378,8 +384,54 @@
 cpus = [n for n in
 range(options.num_cpus)])

-# Assuming no DMA devices
-assert(len(dma_devices) == 0)
+### Assuming no DMA devices
+##assert(len(dma_devices) == 0)
+##dma_cntrl_nodes = []
+
+for i, dma_port in enumerate(dma_devices):
+# Create the Ruby objects associated with the dma controller
+dma_seq = DMASequencer(version = i, ruby_system = ruby_system,
+   slave = dma_port)
+
+dma_cntrl = DMA_Controller(version = i, dma_sequencer = dma_seq,
+   transitions_per_cycle = options.ports,
+   ruby_system = ruby_system)
+
+exec("ruby_system.dma_cntrl%d = dma_cntrl" % i)
+#dma_cntrl_nodes.append(dma_cntrl)
+
+# Connect the dma controller to the network
+dma_cntrl.mandatoryQueue = MessageBuffer()
+dma_cntrl.responseFromDir = MessageBuffer(ordered = True)
+dma_cntrl.responseFromDir.slave = ruby_system.network.master
+dma_cntrl.requestToDir = MessageBuffer()
+dma_cntrl.requestToDir.master = ruby_system.network.slave
+
+mainCluster.add(dma_cntrl)
+
+# Create the io controller and the sequencer
+if full_system:
+io_seq = DMASequencer(version = len(dma_devices),
+  ruby_system = ruby_system)
+ruby_system._io_port = io_seq
+io_controller = DMA_Controller(version = len(dma_devices),
+   dma_sequencer = io_seq,
+   ruby_system = ruby_system)
+ruby_system.io_controller = io_controller
+
+# Connect the dma controller to the network
+io_controller.mandatoryQueue = MessageBuffer()
+io_controller.responseFromDir = MessageBuffer(ordered = True)
+io_controller.responseFromDir.slave = ruby_system.network.master
+io_controller.requestToDir = MessageBuffer()
+io_controller.requestToDir.master = ruby_system.network.slave
+
+#dma_cntrl_nodes.append(io_controller)
+mainCluster.add(io_controller)
+
+
+#mainCluster.add(dma_cntrl_nodes)
+

 # Add cpu/gpu clusters to main cluster
 mainCluster.add(cpuCluster)
diff --git a/src/mem/ruby/protocol/MOESI_AMD_Base.slicc  
b/src/mem/ruby/protocol/MOESI_AMD_Base.slicc

index b381452..dd4b0fc 100644
--- a/src/mem/ruby/protocol/MOESI_AMD_Base.slicc
+++ b/src/mem/ruby/protocol/MOESI_AMD_Base.slicc
@@ -4,3 +4,4 @@
 include "MOESI_AMD_Base-CorePair.sm";
 include "MOESI_AMD_Base-L3cache.sm";
 include "MOESI_AMD_Base-dir.sm";
+include "MOESI_AMD_Base-dma.sm";

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/32317
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ic424cc6e78399e9cd73d6419ea0ad6f8c9397673
Gerrit-Change-Number: 32317
Gerrit-PatchSet: 1
Gerrit-Owner: Pouya Fotouhi 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org

[gem5-dev] Change in gem5/gem5[develop]: mem-ruby: MESI_Three_level prefetcher page crossing

2020-05-02 Thread Pouya Fotouhi (Gerrit) via gem5-dev
Pouya Fotouhi has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/28048 )


Change subject: mem-ruby: MESI_Three_level prefetcher page crossing
..

mem-ruby: MESI_Three_level prefetcher page crossing

This patch allows MESI_Three_level using the Ruby prefetcher to
safely cross page boundaries by determining if an address is bad
and cannot be mapped to a memory controller.

Change-Id: I675a13dfa6deb5b6a9f986ced5a3130436db911d
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28048
Reviewed-by: Jason Lowe-Power 
Maintainer: Jason Lowe-Power 
Tested-by: kokoro 
---
M configs/ruby/MESI_Three_Level.py
M src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm
2 files changed, 16 insertions(+), 2 deletions(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/configs/ruby/MESI_Three_Level.py  
b/configs/ruby/MESI_Three_Level.py

index 0e9ef09..61d6c52 100644
--- a/configs/ruby/MESI_Three_Level.py
+++ b/configs/ruby/MESI_Three_Level.py
@@ -127,7 +127,7 @@
 nonunit_filter = 256,
 train_misses = 5,
 num_startup_pfs = 4,
-cross_page = False
+cross_page = True
 )

 l0_cntrl = L0Cache_Controller(
diff --git a/src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm  
b/src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm

index da89bf5..3639ef2 100644
--- a/src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm
+++ b/src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm
@@ -140,6 +140,7 @@
 PF_Load, desc="Load request from prefetcher";
 PF_Ifetch,   desc="Instruction fetch request from prefetcher";
 PF_Store,desc="Exclusive load request from prefetcher";
+PF_Bad_Addr, desc="Throw away prefetch request due to bad address  
generation";

   }

   // TYPES
@@ -323,7 +324,16 @@
   in_port(optionalQueue_in, RubyRequest, prefetchQueue, desc="...", rank =  
2) {

 if (optionalQueue_in.isReady(clockEdge())) {
   peek(optionalQueue_in, RubyRequest) {
-if (in_msg.Type == RubyRequestType:IFETCH) {
+// first check for valid address
+MachineID mid := mapAddressToMachine(in_msg.LineAddress,  
MachineType:Directory);

+NodeID nid := machineIDToNodeID(mid);
+int nidint := IDToInt(nid);
+int numDirs := machineCount(MachineType:Directory);
+if (nidint >= numDirs) {
+  Entry cache_entry := static_cast(Entry, "pointer",  
Dcache.getNullEntry());

+  TBE tbe := TBEs.getNullEntry();
+  trigger(Event:PF_Bad_Addr, in_msg.LineAddress, cache_entry, tbe);
+} else if (in_msg.Type == RubyRequestType:IFETCH) {
   // Instruction Prefetch
   Entry icache_entry := getICacheEntry(in_msg.LineAddress);
   if (is_valid(icache_entry)) {
@@ -1164,4 +1174,8 @@
 o_popIncomingResponseQueue;
 kd_wakeUpDependents;
   }
+
+  transition(I, PF_Bad_Addr) {
+pq_popPrefetchQueue;
+  }
 }

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/28048
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I675a13dfa6deb5b6a9f986ced5a3130436db911d
Gerrit-Change-Number: 28048
Gerrit-PatchSet: 3
Gerrit-Owner: Giacomo Travaglini 
Gerrit-Reviewer: Ciro Santilli 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Pouya Fotouhi 
Gerrit-Reviewer: Timothy Hayes 
Gerrit-Reviewer: kokoro 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s


[gem5-dev] Change in gem5/gem5[develop]: mem-ruby: MESI_Three_level prefetcher support

2020-05-02 Thread Pouya Fotouhi (Gerrit) via gem5-dev
Pouya Fotouhi has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/27715 )


Change subject: mem-ruby: MESI_Three_level prefetcher support
..

mem-ruby: MESI_Three_level prefetcher support

Add support for the Ruby stride prefetcher to MESI_Three_Level.

Change-Id: Id68935e2a7d3ccd0e22a59f43a15f167410632a2
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/27715
Reviewed-by: Bradford Beckmann 
Maintainer: Bradford Beckmann 
Tested-by: kokoro 
---
M configs/ruby/MESI_Three_Level.py
M src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm
M src/mem/ruby/protocol/MESI_Three_Level-L1cache.sm
M src/mem/ruby/protocol/MESI_Three_Level-msg.sm
M src/mem/ruby/protocol/MESI_Two_Level-L2cache.sm
M src/mem/ruby/protocol/RubySlicc_Types.sm
M src/mem/ruby/structures/CacheMemory.hh
M src/mem/ruby/structures/TBETable.hh
8 files changed, 386 insertions(+), 3 deletions(-)

Approvals:
  Bradford Beckmann: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/configs/ruby/MESI_Three_Level.py  
b/configs/ruby/MESI_Three_Level.py

index fdebea4..0e9ef09 100644
--- a/configs/ruby/MESI_Three_Level.py
+++ b/configs/ruby/MESI_Three_Level.py
@@ -53,6 +53,8 @@
 parser.add_option("--l0_transitions_per_cycle", type="int", default=32)
 parser.add_option("--l1_transitions_per_cycle", type="int", default=32)
 parser.add_option("--l2_transitions_per_cycle", type="int", default=4)
+parser.add_option("--enable-prefetch", action="store_true",  
default=False,\

+help="Enable Ruby hardware prefetcher")
 return

 def create_system(options, full_system, system, dma_ports, bootmem,
@@ -118,10 +120,22 @@
 else:
 clk_domain = system.cpu[i].clk_domain

+# Ruby prefetcher
+prefetcher = RubyPrefetcher.Prefetcher(
+num_streams=16,
+unit_filter = 256,
+nonunit_filter = 256,
+train_misses = 5,
+num_startup_pfs = 4,
+cross_page = False
+)
+
 l0_cntrl = L0Cache_Controller(
version = i * num_cpus_per_cluster + j,
Icache = l0i_cache, Dcache = l0d_cache,
transitions_per_cycle =  
options.l0_transitions_per_cycle,

+   prefetcher = prefetcher,
+   enable_prefetch = options.enable_prefetch,
send_evictions = send_evicts(options),
clk_domain = clk_domain,
ruby_system = ruby_system)
@@ -159,6 +173,7 @@
 l1_cntrl_nodes.append(l1_cntrl)

 # Connect the L0 and L1 controllers
+l0_cntrl.prefetchQueue = MessageBuffer()
 l0_cntrl.mandatoryQueue = MessageBuffer()
 l0_cntrl.bufferToL1 = MessageBuffer(ordered = True)
 l1_cntrl.bufferFromL0 = l0_cntrl.bufferToL1
diff --git a/src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm  
b/src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm

index 14fb07a..da89bf5 100644
--- a/src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm
+++ b/src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm
@@ -46,6 +46,9 @@
Cycles response_latency := 2;
bool send_evictions;

+   Prefetcher * prefetcher;
+   bool enable_prefetch := "False";
+
// From this node's L0 cache to the network
MessageBuffer * bufferToL1, network="To";

@@ -54,6 +57,9 @@

// Message queue between this controller and the processor
MessageBuffer * mandatoryQueue;
+
+   // Request Buffer for prefetches
+   MessageBuffer * prefetchQueue;
 {
   // STATES
   state_declaration(State, desc="Cache states", default="L0Cache_State_I")  
{

@@ -92,6 +98,11 @@
 // processor needs to write to it. So, the controller has requested for
 // write permission.
 SM, AccessPermission:Read_Only, desc="Issued GETX, have not seen  
response yet";

+
+// Transient states in which block is being prefetched
+PF_Inst_IS, AccessPermission:Busy, desc="Issued GETS, have not seen  
response yet";
+PF_IS, AccessPermission:Busy, desc="Issued GETS, have not seen  
response yet";
+PF_IE, AccessPermission:Busy, desc="Issued GETX, have not seen  
response yet";

   }

   // EVENTS
@@ -123,6 +134,12 @@
 WB_Ack,desc="Ack for replacement";

 Failed_SC,desc="Store conditional request that will fail";
+
+// Prefetch events (generated by prefetcher)
+PF_L0_Replacement, desc="L0 Replacement caused by pretcher",  
format="!pr";

+PF_Load, desc="Load request from prefetcher";
+PF_Ifetch,   desc="Instruction fetch request from prefetcher";
+PF_Store,desc="Exclusive load request from prefetcher";
   }

   // TYPES
@@ -132,6 +149,7 @@
 State CacheState,desc="cache state";
 DataBlock DataBlk,   desc="data for the block";
 

[gem5-dev] Change in gem5/gem5[develop]: mem-ruby: MESI_Three_Level LL/SC improvements

2020-05-02 Thread Pouya Fotouhi (Gerrit) via gem5-dev
Pouya Fotouhi has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/28328 )


Change subject: mem-ruby: MESI_Three_Level LL/SC improvements
..

mem-ruby: MESI_Three_Level LL/SC improvements

This patch fixes the MESI_Three_Level protocols so that it correctly
informers the Ruby sequencer when a line eviction occurs. Furthermore,
the patch allows the protocol to recognize the 'Store_Conditional'
RubyRequestType and shortcuts this operation if the monitored line
has been cleared from the address monitor. This prevents certain
livelock behaviour in which a line could ping-pong between competing
cores.

The patch establishes a new C/C++ preprocessor definition which allows
the Sequencer to send the 'Store_Conditional' RubyRequestType to
MESI_Three_Level instead of 'ST'. This is a temporary measure until
the other protocols explicitely recognize 'Store_Conditional'.

Change-Id: I27ae041ab0e015a4f54f20df666f9c4873c7583d
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28328
Reviewed-by: Daniel Carvalho 
Maintainer: Bobby R. Bruce 
Tested-by: kokoro 
---
M src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm
M src/mem/ruby/system/SConscript
M src/mem/ruby/system/Sequencer.cc
3 files changed, 77 insertions(+), 23 deletions(-)

Approvals:
  Daniel Carvalho: Looks good to me, approved
  Bobby R. Bruce: Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm  
b/src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm

index b74a727..14fb07a 100644
--- a/src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm
+++ b/src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm
@@ -121,6 +121,8 @@
 Ack,desc="Ack for processor";

 WB_Ack,desc="Ack for replacement";
+
+Failed_SC,desc="Store conditional request that will fail";
   }

   // TYPES
@@ -257,7 +259,8 @@
   return Event:Load;
 } else if (type == RubyRequestType:IFETCH) {
   return Event:Ifetch;
-} else if ((type == RubyRequestType:ST) || (type ==  
RubyRequestType:ATOMIC)) {
+} else if ((type == RubyRequestType:ST) || (type ==  
RubyRequestType:ATOMIC)

+   || (type == RubyRequestType:Store_Conditional)) {
   return Event:Store;
 } else {
   error("Invalid RubyRequestType");
@@ -349,36 +352,51 @@
 }
   }
 } else {
-
   // *** DATA ACCESS ***
   Entry Dcache_entry := getDCacheEntry(in_msg.LineAddress);
+
+  // early out for failed store conditionals
+
+  if (in_msg.Type == RubyRequestType:Store_Conditional) {
+  if (!sequencer.llscCheckMonitor(in_msg.LineAddress)) {
+trigger(Event:Failed_SC, in_msg.LineAddress,
+Dcache_entry, TBEs[in_msg.LineAddress]);
+}
+  }
+
   if (is_valid(Dcache_entry)) {
 // The tag matches for the L0, so the L0 ask the L1 for it
 trigger(mandatory_request_type_to_event(in_msg.Type),  
in_msg.LineAddress,

 Dcache_entry, TBEs[in_msg.LineAddress]);
   } else {
-
-// Check to see if it is in the OTHER L0
-Entry Icache_entry := getICacheEntry(in_msg.LineAddress);
-if (is_valid(Icache_entry)) {
-  // The block is in the wrong L0, put the request on the  
queue to the private L1

-  trigger(Event:L0_Replacement, in_msg.LineAddress,
-  Icache_entry, TBEs[in_msg.LineAddress]);
-}
-
-if (Dcache.cacheAvail(in_msg.LineAddress)) {
-  // L1 does't have the line, but we have space for it
-  // in the L0 let's see if the L1 has it
-  trigger(mandatory_request_type_to_event(in_msg.Type),  
in_msg.LineAddress,

-  Dcache_entry, TBEs[in_msg.LineAddress]);
+// if the request is not valid, the store conditional will fail
+if (in_msg.Type == RubyRequestType:Store_Conditional) {
+// if the line is not valid, it can't be locked
+trigger(Event:Failed_SC, in_msg.LineAddress,
+Dcache_entry, TBEs[in_msg.LineAddress]);
 } else {
-  // No room in the L1, so we need to make room in the L0
-  // Check if the line we want to evict is not locked
-  Addr addr := Dcache.cacheProbe(in_msg.LineAddress);
-  check_on_cache_probe(mandatoryQueue_in, addr);
-  trigger(Event:L0_Replacement, addr,
-  getDCacheEntry(addr),
-  TBEs[addr]);
+  // Check to see if it is in the OTHER L0
+  Entry Icache_entry := getICacheEntry(in_msg.LineAddress);
+  if (is_valid(Icache_entry)) {
+// The block is in the wrong L0, put the request on the  
queue to the private L1

+ 

[gem5-dev] Change in gem5/gem5[develop]: mem-ruby: LL/SC fixes

2020-05-02 Thread Pouya Fotouhi (Gerrit) via gem5-dev
Pouya Fotouhi has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/27103 )


Change subject: mem-ruby: LL/SC fixes
..

mem-ruby: LL/SC fixes

The implementation for load-linked/store-conditional did not work
correctly for multi-core simulations. Since load-links were treated as
stores, it was not possible for a line to have multiple readers which
often resulted in livelock when using these instructions to implemented
mutexes. This improved implementation treats load-linked instructions
similarly to loads but locks the line after a copy has been fetched
locally. Writes to a monitored address ensure the 'linked' property is
blown away and any subsequent store-conditional will fail.

Change-Id: I19bd74459e26732c92c8b594901936e6439fb073
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/27103
Reviewed-by: Daniel Carvalho 
Maintainer: Bobby R. Bruce 
Tested-by: kokoro 
---
M src/mem/ruby/protocol/RubySlicc_Types.sm
M src/mem/ruby/system/Sequencer.cc
M src/mem/ruby/system/Sequencer.hh
3 files changed, 155 insertions(+), 73 deletions(-)

Approvals:
  Daniel Carvalho: Looks good to me, approved
  Bobby R. Bruce: Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/mem/ruby/protocol/RubySlicc_Types.sm  
b/src/mem/ruby/protocol/RubySlicc_Types.sm

index fd76289..f8de9ed 100644
--- a/src/mem/ruby/protocol/RubySlicc_Types.sm
+++ b/src/mem/ruby/protocol/RubySlicc_Types.sm
@@ -1,4 +1,16 @@
 /*
+ * Copyright (c) 2020 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
  * Copyright (c) 1999-2005 Mark D. Hill and David A. Wood
  * Copyright (c) 2013 Advanced Micro Devices, Inc.
  * All rights reserved.
@@ -112,6 +124,10 @@
   void writeCallback(Addr, DataBlock, bool, MachineType,
  Cycles, Cycles, Cycles);

+  // ll/sc support
+  void writeCallbackScFail(Addr, DataBlock);
+  bool llscCheckMonitor(Addr);
+
   void checkCoherence(Addr);
   void evictionCallback(Addr);
   void recordRequestType(SequencerRequestType);
diff --git a/src/mem/ruby/system/Sequencer.cc  
b/src/mem/ruby/system/Sequencer.cc

index 1f538c3..0287e13 100644
--- a/src/mem/ruby/system/Sequencer.cc
+++ b/src/mem/ruby/system/Sequencer.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 ARM Limited
+ * Copyright (c) 2019-2020 ARM Limited
  * All rights reserved.
  *
  * The license below extends only to copyright in the software and shall
@@ -45,6 +45,7 @@
 #include "base/logging.hh"
 #include "base/str.hh"
 #include "cpu/testers/rubytest/RubyTester.hh"
+#include "debug/LLSC.hh"
 #include "debug/MemoryAccess.hh"
 #include "debug/ProtocolTrace.hh"
 #include "debug/RubySequencer.hh"
@@ -90,6 +91,64 @@
 }

 void
+Sequencer::llscLoadLinked(const Addr claddr)
+{
+AbstractCacheEntry *line = m_dataCache_ptr->lookup(claddr);
+if (line) {
+line->setLocked(m_version);
+DPRINTF(LLSC, "LLSC Monitor - inserting load linked - "
+  "addr=0x%lx - cpu=%u\n", claddr, m_version);
+}
+}
+
+void
+Sequencer::llscClearMonitor(const Addr claddr)
+{
+AbstractCacheEntry *line = m_dataCache_ptr->lookup(claddr);
+if (line && line->isLocked(m_version)) {
+line->clearLocked();
+DPRINTF(LLSC, "LLSC Monitor - clearing due to store - "
+  "addr=0x%lx - cpu=%u\n", claddr, m_version);
+}
+}
+
+bool
+Sequencer::llscStoreConditional(const Addr claddr)
+{
+AbstractCacheEntry *line = m_dataCache_ptr->lookup(claddr);
+if (!line)
+return false;
+
+DPRINTF(LLSC, "LLSC Monitor - clearing due to "
+  "store conditional - "
+  "addr=0x%lx - cpu=%u\n",
+  claddr, m_version);
+
+if (line->isLocked(m_version)) {
+line->clearLocked();
+return true;
+} else {
+line->clearLocked();
+return false;
+}
+}
+
+bool
+Sequencer::llscCheckMonitor(const Addr address)
+{
+const Addr claddr = makeLineAddress(address);
+AbstractCacheEntry *line = m_dataCache_ptr->lookup(claddr);
+if (!line)
+return false;
+
+if (line->isLocked(m_version)) {
+return true;
+} else {
+return false;
+}
+}
+
+void
 Sequencer::wakeup()
 {
 assert(drainState() != DrainState::Draining);
@@ -203,62 +262,6 @@
 }

 void
-Sequencer::invalidateSC(Addr address)
-{
-AbstractCacheEntry *e = 

[gem5-dev] Change in gem5/gem5[develop]: mem-ruby: fix MESI_Three_Level erroneous transition

2020-05-01 Thread Pouya Fotouhi (Gerrit) via gem5-dev
Pouya Fotouhi has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/28047 )


Change subject: mem-ruby: fix MESI_Three_Level erroneous transition
..

mem-ruby: fix MESI_Three_Level erroneous transition

The MESI_Three_Level protocol includes a transition in its L1
definition to invalidate an SM state but this transition does
not notify the L0 cache. The unintended side effect of this
allows stale values to be read by the L0 cache. This can cause
incorrect behaviour when executing LL/SC based mutexes. This
patch ensures that all invalidates to SM states are exposed to
the L0 cache.

Change-Id: I7fefabdaa8027fdfa4c9c362abd7e467493196aa
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28047
Reviewed-by: John Alsop 
Reviewed-by: Pouya Fotouhi 
Maintainer: Bobby R. Bruce 
Tested-by: kokoro 
---
M src/mem/ruby/protocol/MESI_Three_Level-L1cache.sm
1 file changed, 3 insertions(+), 2 deletions(-)

Approvals:
  Pouya Fotouhi: Looks good to me, approved
  John Alsop: Looks good to me, but someone else must approve
  Bobby R. Bruce: Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/mem/ruby/protocol/MESI_Three_Level-L1cache.sm  
b/src/mem/ruby/protocol/MESI_Three_Level-L1cache.sm

index 00d897a..1890bcc 100644
--- a/src/mem/ruby/protocol/MESI_Three_Level-L1cache.sm
+++ b/src/mem/ruby/protocol/MESI_Three_Level-L1cache.sm
@@ -262,7 +262,8 @@
   }

   bool inL0Cache(State state) {
-if (state == State:S || state == State:E || state == State:M ||
+if (state == State:S || state == State:E ||
+state == State:M || state == State:SM ||
 state == State:S_IL0 || state == State:E_IL0 ||
 state == State:M_IL0 || state == State:SM_IL0) {
 return true;
@@ -996,7 +997,7 @@
   }

   // Transitions from IM
-  transition({IM,SM}, Inv, IM) {
+  transition(IM, Inv, IM) {
 fi_sendInvAck;
 l_popL2RequestQueue;
   }

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/28047
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I7fefabdaa8027fdfa4c9c362abd7e467493196aa
Gerrit-Change-Number: 28047
Gerrit-PatchSet: 3
Gerrit-Owner: Giacomo Travaglini 
Gerrit-Reviewer: Bobby R. Bruce 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: John Alsop 
Gerrit-Reviewer: Marjan Fariborz 
Gerrit-Reviewer: Nikos Nikoleris 
Gerrit-Reviewer: Pouya Fotouhi 
Gerrit-Reviewer: Timothy Hayes 
Gerrit-Reviewer: kokoro 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s


[gem5-dev] Change in gem5/gem5[develop]: mem-ruby: GCN3 and VIPER integration

2020-04-30 Thread Pouya Fotouhi (Gerrit) via gem5-dev

Hello Tuan Ta,

I'd like you to do a code review. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/28413

to review the following change.


Change subject: mem-ruby: GCN3 and VIPER integration
..

mem-ruby: GCN3 and VIPER integration

This patch modifies the Coalescer and VIPER protocol to support memory
synchronization requests and write-completion responses that are
required by upcoming GCN3 implementation.

VIPER protocol is simplified to be a solely write-through protocol.

Change-Id: Icc3a5beda8550f55f3fb673216056f79e093e25f
---
M src/mem/ruby/protocol/GPU_VIPER-TCC.sm
M src/mem/ruby/protocol/GPU_VIPER-TCP.sm
M src/mem/ruby/protocol/MOESI_AMD_Base-dir.sm
M src/mem/ruby/protocol/MOESI_AMD_Base-msg.sm
M src/mem/ruby/protocol/RubySlicc_Types.sm
M src/mem/ruby/slicc_interface/RubyRequest.hh
M src/mem/ruby/system/GPUCoalescer.cc
M src/mem/ruby/system/GPUCoalescer.hh
M src/mem/ruby/system/RubyPort.cc
M src/mem/ruby/system/VIPERCoalescer.cc
M src/mem/ruby/system/VIPERCoalescer.hh
11 files changed, 320 insertions(+), 466 deletions(-)



diff --git a/src/mem/ruby/protocol/GPU_VIPER-TCC.sm  
b/src/mem/ruby/protocol/GPU_VIPER-TCC.sm

index f8da4ab..5f05a60 100644
--- a/src/mem/ruby/protocol/GPU_VIPER-TCC.sm
+++ b/src/mem/ruby/protocol/GPU_VIPER-TCC.sm
@@ -392,14 +392,15 @@

   action(w_sendResponseWBAck, "w", desc="send WB Ack") {
 peek(responseFromNB_in, ResponseMsg) {
-enqueue(responseToCore_out, ResponseMsg, l2_response_latency) {
-  out_msg.addr := address;
-  out_msg.Type := CoherenceResponseType:TDSysWBAck;
-  out_msg.Destination.clear();
-  out_msg.Destination.add(in_msg.WTRequestor);
-  out_msg.Sender := machineID;
-  out_msg.MessageSize := MessageSizeType:Writeback_Control;
-}
+  enqueue(responseToCore_out, ResponseMsg, l2_response_latency) {
+out_msg.addr := address;
+out_msg.Type := CoherenceResponseType:TDSysWBAck;
+out_msg.Destination.clear();
+out_msg.Destination.add(in_msg.WTRequestor);
+out_msg.Sender := machineID;
+out_msg.MessageSize := MessageSizeType:Writeback_Control;
+out_msg.instSeqNum := in_msg.instSeqNum;
+  }
 }
   }

@@ -412,6 +413,7 @@
 out_msg.Destination.add(in_msg.Requestor);
 out_msg.Sender := machineID;
 out_msg.MessageSize := MessageSizeType:Writeback_Control;
+out_msg.instSeqNum := in_msg.instSeqNum;
   }
 }
   }
@@ -486,6 +488,7 @@
 out_msg.Dirty := true;
 out_msg.DataBlk := in_msg.DataBlk;
 out_msg.writeMask.orMask(in_msg.writeMask);
+out_msg.instSeqNum := in_msg.instSeqNum;
   }
 }
   }
diff --git a/src/mem/ruby/protocol/GPU_VIPER-TCP.sm  
b/src/mem/ruby/protocol/GPU_VIPER-TCP.sm

index 4047dc6..3f61791 100644
--- a/src/mem/ruby/protocol/GPU_VIPER-TCP.sm
+++ b/src/mem/ruby/protocol/GPU_VIPER-TCP.sm
@@ -56,9 +56,6 @@
   state_declaration(State, desc="TCP Cache States", default="TCP_State_I")  
{

 I, AccessPermission:Invalid, desc="Invalid";
 V, AccessPermission:Read_Only, desc="Valid";
-W, AccessPermission:Read_Write, desc="Written";
-M, AccessPermission:Read_Write, desc="Written and Valid";
-L, AccessPermission:Read_Write, desc="Local access is modifable";
 A, AccessPermission:Invalid, desc="Waiting on Atomic";
   }

@@ -67,7 +64,6 @@
 Load,   desc="Load";
 Store,  desc="Store to L1 (L1 is dirty)";
 StoreThrough,   desc="Store directly to L2(L1 is clean)";
-StoreLocal, desc="Store to L1 but L1 is clean";
 Atomic, desc="Atomic";
 Flush,  desc="Flush if dirty(wbL1 for Store Release)";
 Evict,  desc="Evict if clean(invL1 for Load Acquire)";
@@ -264,7 +260,7 @@
 if (in_msg.Type == CoherenceResponseType:TDSysResp) {
   // disable L1 cache
   if (disableL1) {
-   trigger(Event:Bypass, in_msg.addr, cache_entry, tbe);
+ trigger(Event:Bypass, in_msg.addr, cache_entry, tbe);
   } else {
 if (is_valid(cache_entry) || L1cache.cacheAvail(in_msg.addr)) {
   trigger(Event:TCC_Ack, in_msg.addr, cache_entry, tbe);
@@ -291,18 +287,16 @@
 DPRINTF(RubySlicc, "%s\n", in_msg);
 if (in_msg.Type == RubyRequestType:LD) {
   trigger(Event:Load, in_msg.LineAddress, cache_entry, tbe);
-} else if (in_msg.Type == RubyRequestType:ATOMIC) {
+} else if (in_msg.Type == RubyRequestType:ATOMIC ||
+   in_msg.Type == RubyRequestType:ATOMIC_RETURN ||
+   in_msg.Type == RubyRequestType:ATOMIC_NO_RETURN) {
   trigger(Event:Atomic, in_msg.LineAddress, cache_entry, tbe);
 } else if (in_msg.Type == RubyRequestType:ST) {
   if(disableL1) {
 trigger(Event:StoreThrough, in_msg.LineAddress, cache_entry,  
tbe);

   } else {
 

[gem5-dev] Change in gem5/gem5[develop]: mem-ruby: Add DMA support to MOESI_AMD_Base-dir.sm

2020-04-30 Thread Pouya Fotouhi (Gerrit) via gem5-dev

Hello Tony Gutierrez,

I'd like you to do a code review. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/28414

to review the following change.


Change subject: mem-ruby: Add DMA support to MOESI_AMD_Base-dir.sm
..

mem-ruby: Add DMA support to MOESI_AMD_Base-dir.sm

This change adds DMA support to the MOESI_AMD_Base-dir.sm,
which is needed to support ROCm apps/GCN3 ISA in the VIPER
ptl. The DMA controller is copied from the MOESI_hammer-dma.sm
with few modifications.

Change-Id: I0cb53abedb7817c88a57c66614e37d1f90603906
---
M src/mem/ruby/protocol/GPU_VIPER.slicc
M src/mem/ruby/protocol/MOESI_AMD_Base-dir.sm
A src/mem/ruby/protocol/MOESI_AMD_Base-dma.sm
M src/mem/ruby/protocol/MOESI_AMD_Base-msg.sm
4 files changed, 499 insertions(+), 6 deletions(-)



diff --git a/src/mem/ruby/protocol/GPU_VIPER.slicc  
b/src/mem/ruby/protocol/GPU_VIPER.slicc

index 45f7f34..0b37ce6 100644
--- a/src/mem/ruby/protocol/GPU_VIPER.slicc
+++ b/src/mem/ruby/protocol/GPU_VIPER.slicc
@@ -2,6 +2,7 @@
 include "RubySlicc_interfaces.slicc";
 include "MOESI_AMD_Base-msg.sm";
 include "MOESI_AMD_Base-dir.sm";
+include "MOESI_AMD_Base-dma.sm";
 include "MOESI_AMD_Base-CorePair.sm";
 include "GPU_VIPER-TCP.sm";
 include "GPU_VIPER-SQC.sm";
diff --git a/src/mem/ruby/protocol/MOESI_AMD_Base-dir.sm  
b/src/mem/ruby/protocol/MOESI_AMD_Base-dir.sm

index 6112ec2..e2c5ff5 100644
--- a/src/mem/ruby/protocol/MOESI_AMD_Base-dir.sm
+++ b/src/mem/ruby/protocol/MOESI_AMD_Base-dir.sm
@@ -44,6 +44,10 @@
   bool useL3OnWT := "False";
   Cycles to_memory_controller_latency := 1;

+  // DMA
+  MessageBuffer * requestFromDMA, network="From", virtual_network="1",  
vnet_type="request";
+  MessageBuffer * responseToDMA, network="To", virtual_network="3",  
vnet_type="request";

+
   // From the Cores
   MessageBuffer * requestFromCores, network="From", virtual_network="0",  
vnet_type="request";
   MessageBuffer * responseFromCores, network="From", virtual_network="2",  
vnet_type="response";

@@ -63,13 +67,17 @@
 // BL is Busy because it's possible for the data only to be in the  
network
 // in the WB, L3 has sent it and gone on with its business in possibly  
I

 // state.
+BDR_M, AccessPermission:Backing_Store,  desc="DMA read, blocked  
waiting for memory";
 BS_M, AccessPermission:Backing_Store, desc="blocked  
waiting for memory";
 BM_M, AccessPermission:Backing_Store, desc="blocked  
waiting for memory";
 B_M, AccessPermission:Backing_Store, desc="blocked  
waiting for memory";
 BP, AccessPermission:Backing_Store, desc="blocked  
waiting for probes, no need for memory";
+BDR_PM, AccessPermission:Backing_Store, desc="DMA read, blocked  
waiting for probes and memory";
 BS_PM, AccessPermission:Backing_Store,desc="blocked  
waiting for probes and Memory";
 BM_PM, AccessPermission:Backing_Store,desc="blocked  
waiting for probes and Memory";
 B_PM, AccessPermission:Backing_Store,desc="blocked  
waiting for probes and Memory";
+BDW_P, AccessPermission:Backing_Store, desc="DMA write, blocked  
waiting for probes, no need for memory";
+BDR_Pm, AccessPermission:Backing_Store, desc="DMA read, blocked  
waiting for probes, already got memory";
 BS_Pm, AccessPermission:Backing_Store,desc="blocked  
waiting for probes, already got memory";
 BM_Pm, AccessPermission:Backing_Store,desc="blocked  
waiting for probes, already got memory";
 B_Pm, AccessPermission:Backing_Store,desc="blocked  
waiting for probes, already got memory";

@@ -107,6 +115,10 @@
 UnblockWriteThrough,desc="Unblock because of writethrough request  
finishing";


 StaleVicDirty,desc="Core invalidated before VicDirty  
processed";

+
+// DMA
+DmaRead,desc="DMA read";
+DmaWrite,   desc="DMA write";
   }

   enumeration(RequestType, desc="To communicate stats from transitions to  
recordStats") {

@@ -148,6 +160,7 @@
 bool L3Hit, default="false", desc="Was this an L3 hit?";
 uint64_t probe_id,desc="probe id for lifetime profiling";
 WriteMask writeMask,desc="outstanding write through mask";
+int Len,desc="Length of memory request for DMA";
   }

   structure(TBETable, external="yes") {
@@ -266,6 +279,8 @@
   }

   // ** OUT_PORTS **
+  out_port(dmaResponseQueue_out, DMAResponseMsg, responseToDMA);
+
   out_port(probeNetwork_out, NBProbeRequestMsg, probeToCore);
   out_port(responseNetwork_out, ResponseMsg, responseToCore);

@@ -274,6 +289,23 @@

   // ** IN_PORTS **

+  // DMA Ports
+  in_port(dmaRequestQueue_in, DMARequestMsg, requestFromDMA, rank=6) {
+if (dmaRequestQueue_in.isReady(clockEdge())) {
+  peek(dmaRequestQueue_in, DMARequestMsg) {
+TBE tbe := 

[gem5-dev] Change in gem5/gem5[develop]: mem-ruby: Getting rid of HSA segment and scope

2020-04-30 Thread Pouya Fotouhi (Gerrit) via gem5-dev
Pouya Fotouhi has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/28411 )



Change subject: mem-ruby: Getting rid of HSA segment and scope
..

mem-ruby: Getting rid of HSA segment and scope

This is protocol and sequencer parts of the bigger GCN3 change.

Author: Tony Gutierrez 
Change-Id: I803b4cbb46eeab8462d9af80dd003940a9968b60
---
M src/mem/ruby/protocol/GPU_VIPER-TCP.sm
M src/mem/ruby/protocol/MOESI_AMD_Base-msg.sm
M src/mem/ruby/protocol/RubySlicc_Exports.sm
M src/mem/ruby/protocol/RubySlicc_Types.sm
M src/mem/ruby/system/GPUCoalescer.cc
M src/mem/ruby/system/GPUCoalescer.hh
M src/mem/ruby/system/GPUCoalescer.py
M src/mem/ruby/system/VIPERCoalescer.py
8 files changed, 285 insertions(+), 399 deletions(-)



diff --git a/src/mem/ruby/protocol/GPU_VIPER-TCP.sm  
b/src/mem/ruby/protocol/GPU_VIPER-TCP.sm

index 9dffe0f..4047dc6 100644
--- a/src/mem/ruby/protocol/GPU_VIPER-TCP.sm
+++ b/src/mem/ruby/protocol/GPU_VIPER-TCP.sm
@@ -298,9 +298,7 @@
 trigger(Event:StoreThrough, in_msg.LineAddress, cache_entry,  
tbe);

   } else {
 if (is_valid(cache_entry) ||  
L1cache.cacheAvail(in_msg.LineAddress)) {

-  if (in_msg.segment == HSASegment:SPILL) {
-trigger(Event:StoreLocal, in_msg.LineAddress, cache_entry,  
tbe);

-  } else if (WB) {
+  if (WB) {
 trigger(Event:Store, in_msg.LineAddress, cache_entry, tbe);
   } else {
 trigger(Event:StoreThrough, in_msg.LineAddress,  
cache_entry, tbe);
diff --git a/src/mem/ruby/protocol/MOESI_AMD_Base-msg.sm  
b/src/mem/ruby/protocol/MOESI_AMD_Base-msg.sm

index a66939c..6d04c76 100644
--- a/src/mem/ruby/protocol/MOESI_AMD_Base-msg.sm
+++ b/src/mem/ruby/protocol/MOESI_AMD_Base-msg.sm
@@ -137,7 +137,6 @@
   CoherenceRequestType OriginalType, default="CoherenceRequestType_NA",   
desc="Type of request from core fwded through region buffer";

   WriteMask writeMask, desc="Write Through Data";
   MachineID WTRequestor,desc="Node who initiated the write  
through";
-  HSAScope scope,  default="HSAScope_SYSTEM",  
desc="Request Scope";

   int wfid, default="0", desc="wavefront id";
   bool NoWriteConflict, default="true", desc="write collided  
with CAB entry";

   int ProgramCounter,   desc="PC that accesses to this block";
diff --git a/src/mem/ruby/protocol/RubySlicc_Exports.sm  
b/src/mem/ruby/protocol/RubySlicc_Exports.sm

index 8e17f98..fe2c83b 100644
--- a/src/mem/ruby/protocol/RubySlicc_Exports.sm
+++ b/src/mem/ruby/protocol/RubySlicc_Exports.sm
@@ -91,26 +91,6 @@
   NotPresent, desc="block is NotPresent";
   Busy,   desc="block is in a transient state, currently invalid";
 }
-//HSA scopes
-enumeration(HSAScope, desc="...", default="HSAScope_UNSPECIFIED") {
-  UNSPECIFIED, desc="Unspecified scope";
-  NOSCOPE, desc="Explictly unscoped";
-  WAVEFRONT,   desc="Wavefront scope";
-  WORKGROUP,   desc="Workgroup scope";
-  DEVICE,  desc="Device scope";
-  SYSTEM,  desc="System scope";
-}
-
-// HSA segment types
-enumeration(HSASegment, desc="...", default="HSASegment_GLOBAL") {
-  GLOBAL,   desc="Global segment";
-  GROUP,desc="Group segment";
-  PRIVATE,  desc="Private segment";
-  KERNARG,  desc="Kernarg segment";
-  READONLY, desc="Readonly segment";
-  SPILL,desc="Spill segment";
-  ARG,  desc="Arg segment";
-}

 // TesterStatus
 enumeration(TesterStatus, desc="...") {
diff --git a/src/mem/ruby/protocol/RubySlicc_Types.sm  
b/src/mem/ruby/protocol/RubySlicc_Types.sm

index fd76289..95a093a 100644
--- a/src/mem/ruby/protocol/RubySlicc_Types.sm
+++ b/src/mem/ruby/protocol/RubySlicc_Types.sm
@@ -169,8 +169,6 @@
   WriteMask writeMask,   desc="Writethrough mask";
   DataBlock WTData,  desc="Writethrough data block";
   int wfid,  desc="Writethrough wavefront";
-  HSAScope scope,desc="HSA scope";
-  HSASegment segment,desc="HSA segment";
   PacketPtr pkt, desc="Packet associated with this request";
 }

diff --git a/src/mem/ruby/system/GPUCoalescer.cc  
b/src/mem/ruby/system/GPUCoalescer.cc

index 4cea30f..19b50ea 100644
--- a/src/mem/ruby/system/GPUCoalescer.cc
+++ b/src/mem/ruby/system/GPUCoalescer.cc
@@ -63,58 +63,6 @@

 using namespace std;

-GPUCoalescer *
-RubyGPUCoalescerParams::create()
-{
-return new GPUCoalescer(this);
-}
-
-HSAScope
-reqScopeToHSAScope(const RequestPtr )
-{
-HSAScope accessScope = HSAScope_UNSPECIFIED;
-if (req->isScoped()) {
-if (req->isWavefrontScope()) {
-accessScope = HSAScope_WAVEFRONT;
-} else if (req->isWorkgroupScope()) {
-accessScope = HSAScope_WORKGROUP;
-} else if (req->isDeviceScope()) {
-accessScope = HSAScope_DEVICE;
-} else if (req->isSystemScope()) {
-

[gem5-dev] Change in gem5/gem5[develop]: gpu-compute, configs: Add GCN3 ISA support to GPU model

2020-04-30 Thread Pouya Fotouhi (Gerrit) via gem5-dev

Hello Tony Gutierrez,

I'd like you to do a code review. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/28412

to review the following change.


Change subject: gpu-compute, configs: Add GCN3 ISA support to GPU model
..

gpu-compute, configs: Add GCN3 ISA support to GPU model

Change-Id: I0ead5bcab6fa014e37294c22243831e08dbc5656
---
M configs/common/GPUTLBConfig.py
M src/gpu-compute/GPU.py
M src/gpu-compute/GPUStaticInstFlags.py
M src/gpu-compute/SConscript
M src/gpu-compute/compute_unit.cc
M src/gpu-compute/compute_unit.hh
M src/gpu-compute/dispatcher.cc
M src/gpu-compute/dispatcher.hh
M src/gpu-compute/exec_stage.cc
M src/gpu-compute/exec_stage.hh
M src/gpu-compute/fetch_stage.cc
M src/gpu-compute/fetch_stage.hh
M src/gpu-compute/fetch_unit.cc
M src/gpu-compute/fetch_unit.hh
M src/gpu-compute/global_memory_pipeline.cc
M src/gpu-compute/global_memory_pipeline.hh
A src/gpu-compute/gpu_command_processor.cc
A src/gpu-compute/gpu_command_processor.hh
A src/gpu-compute/gpu_compute_driver.cc
A src/gpu-compute/gpu_compute_driver.hh
M src/gpu-compute/gpu_dyn_inst.cc
M src/gpu-compute/gpu_dyn_inst.hh
M src/gpu-compute/gpu_exec_context.cc
M src/gpu-compute/gpu_exec_context.hh
M src/gpu-compute/gpu_static_inst.cc
M src/gpu-compute/gpu_static_inst.hh
M src/gpu-compute/gpu_tlb.cc
M src/gpu-compute/gpu_tlb.hh
A src/gpu-compute/hsa_queue_entry.hh
A src/gpu-compute/kernel_code.hh
M src/gpu-compute/lds_state.cc
M src/gpu-compute/lds_state.hh
M src/gpu-compute/local_memory_pipeline.cc
M src/gpu-compute/local_memory_pipeline.hh
M src/gpu-compute/misc.hh
M src/gpu-compute/pool_manager.cc
M src/gpu-compute/pool_manager.hh
A src/gpu-compute/register_file.cc
A src/gpu-compute/register_file.hh
A src/gpu-compute/register_manager.cc
A src/gpu-compute/register_manager.hh
A src/gpu-compute/register_manager_policy.hh
M src/gpu-compute/rr_scheduling_policy.hh
A src/gpu-compute/scalar_memory_pipeline.cc
A src/gpu-compute/scalar_memory_pipeline.hh
A src/gpu-compute/scalar_register_file.cc
A src/gpu-compute/scalar_register_file.hh
M src/gpu-compute/schedule_stage.cc
M src/gpu-compute/schedule_stage.hh
M src/gpu-compute/scoreboard_check_stage.cc
M src/gpu-compute/scoreboard_check_stage.hh
M src/gpu-compute/shader.cc
M src/gpu-compute/shader.hh
M src/gpu-compute/simple_pool_manager.cc
M src/gpu-compute/simple_pool_manager.hh
A src/gpu-compute/static_register_manager_policy.cc
A src/gpu-compute/static_register_manager_policy.hh
M src/gpu-compute/tlb_coalescer.cc
M src/gpu-compute/tlb_coalescer.hh
M src/gpu-compute/vector_register_file.cc
M src/gpu-compute/vector_register_file.hh
M src/gpu-compute/wavefront.cc
M src/gpu-compute/wavefront.hh
63 files changed, 9,892 insertions(+), 3,278 deletions(-)




--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/28412
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I0ead5bcab6fa014e37294c22243831e08dbc5656
Gerrit-Change-Number: 28412
Gerrit-PatchSet: 1
Gerrit-Owner: Pouya Fotouhi 
Gerrit-Reviewer: Tony Gutierrez 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s