[gem5-dev] Change in gem5/gem5[master]: mem-ruby: Hit latencies defined by the controllers

2019-05-14 Thread Tiago Mück (Gerrit)
Tiago Mück has submitted this change and it was merged. (  
https://gem5-review.googlesource.com/c/public/gem5/+/18413 )


Change subject: mem-ruby: Hit latencies defined by the controllers
..

mem-ruby: Hit latencies defined by the controllers

Removed the icache/dcache hit latency parameters from the Sequencer.
They were replaced by the mandatory queue enqueue latency that is now
defined by the top-level cache controller. By default, the latency is
defined by the mandatory_queue_latency parameter. When the latency
depends on specific protocol states or on the request type, the protocol
may override the mandatoryQueueLatency function.

Change-Id: I72e57a7ea49501ef81dc7f591bef14134274647c
Signed-off-by: Tiago Muck 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18413
Tested-by: kokoro 
Reviewed-by: Nikos Nikoleris 
Reviewed-by: Jason Lowe-Power 
Maintainer: Jason Lowe-Power 
---
M configs/ruby/GPU_RfO.py
M configs/ruby/MOESI_AMD_Base.py
M src/mem/ruby/slicc_interface/AbstractController.cc
M src/mem/ruby/slicc_interface/AbstractController.hh
M src/mem/ruby/slicc_interface/Controller.py
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/Sequencer.cc
M src/mem/ruby/system/Sequencer.py
10 files changed, 34 insertions(+), 47 deletions(-)

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



diff --git a/configs/ruby/GPU_RfO.py b/configs/ruby/GPU_RfO.py
index c9bda0b..1f4df38 100644
--- a/configs/ruby/GPU_RfO.py
+++ b/configs/ruby/GPU_RfO.py
@@ -115,8 +115,6 @@
 self.L2cache.create(options)

 self.sequencer = RubySequencer()
-self.sequencer.icache_hit_latency = 2
-self.sequencer.dcache_hit_latency = 2
 self.sequencer.version = self.seqCount()
 self.sequencer.icache = self.L1Icache
 self.sequencer.dcache = self.L1D0cache
@@ -128,12 +126,13 @@
 self.sequencer1.version = self.seqCount()
 self.sequencer1.icache = self.L1Icache
 self.sequencer1.dcache = self.L1D1cache
-self.sequencer1.icache_hit_latency = 2
-self.sequencer1.dcache_hit_latency = 2
 self.sequencer1.ruby_system = ruby_system
 self.sequencer1.coreid = 1
 self.sequencer1.is_cpu_sequencer = True

+# Defines icache/dcache hit latency
+self.mandatory_queue_latency = 2
+
 self.issue_latency = options.cpu_to_dir_latency
 self.send_evictions = send_evicts(options)

diff --git a/configs/ruby/MOESI_AMD_Base.py b/configs/ruby/MOESI_AMD_Base.py
index 5c4bbe0..a1faf1d 100644
--- a/configs/ruby/MOESI_AMD_Base.py
+++ b/configs/ruby/MOESI_AMD_Base.py
@@ -102,8 +102,6 @@
 self.L2cache.create(options)

 self.sequencer = RubySequencer()
-self.sequencer.icache_hit_latency = 2
-self.sequencer.dcache_hit_latency = 2
 self.sequencer.version = self.seqCount()
 self.sequencer.icache = self.L1Icache
 self.sequencer.dcache = self.L1D0cache
@@ -115,12 +113,13 @@
 self.sequencer1.version = self.seqCount()
 self.sequencer1.icache = self.L1Icache
 self.sequencer1.dcache = self.L1D1cache
-self.sequencer1.icache_hit_latency = 2
-self.sequencer1.dcache_hit_latency = 2
 self.sequencer1.ruby_system = ruby_system
 self.sequencer1.coreid = 1
 self.sequencer1.is_cpu_sequencer = True

+# Defines icache/dcache hit latency
+self.mandatory_queue_latency = 2
+
 self.issue_latency = options.cpu_to_dir_latency
 self.send_evictions = send_evicts(options)

diff --git a/src/mem/ruby/slicc_interface/AbstractController.cc  
b/src/mem/ruby/slicc_interface/AbstractController.cc

index 68edcba..c953e82 100644
--- a/src/mem/ruby/slicc_interface/AbstractController.cc
+++ b/src/mem/ruby/slicc_interface/AbstractController.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited
+ * Copyright (c) 2017,2019 ARM Limited
  * All rights reserved.
  *
  * The license below extends only to copyright in the software and shall
@@ -55,6 +55,7 @@
   m_number_of_TBEs(p->number_of_TBEs),
   m_transitions_per_cycle(p->transitions_per_cycle),
   m_buffer_size(p->buffer_size), m_recycle_latency(p->recycle_latency),
+  m_mandatory_queue_latency(p->mandatory_queue_latency),
   memoryPort(csprintf("%s.memory", name()), this, ""),
   addrRanges(p->addr_ranges.begin(), p->addr_ranges.end())
 {
diff --git a/src/mem/ruby/slicc_interface/AbstractController.hh  
b/src/mem/ruby/slicc_interface/AbstractController.hh

index 4d06546..bd0 100644
--- a/src/mem/ruby/slicc_interface/AbstractController.hh
+++ b/src/mem/ruby/slicc_interface/AbstractController.hh
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited
+ * Copyright (c) 2017,201

[gem5-dev] Change in gem5/gem5[master]: mem-ruby: Hit latencies defined by the controllers

2019-04-26 Thread Tiago Mück (Gerrit)
Tiago Mück has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/18413



Change subject: mem-ruby: Hit latencies defined by the controllers
..

mem-ruby: Hit latencies defined by the controllers

Removed the icache/dcache hit latency parameters from the Sequencer.
They were replaced by the mandatory queue enqueue latency that is now
defined by the top-level cache controller. By default, the latency is
defined by the mandatory_queue_latency parameter. When the latency
depends on specific protocol states or on the request type, the protocol
may override the mandatoryQueueLatency function.

Change-Id: I72e57a7ea49501ef81dc7f591bef14134274647c
Signed-off-by: Tiago Muck 
---
M configs/ruby/GPU_RfO.py
M configs/ruby/MOESI_AMD_Base.py
M src/mem/ruby/slicc_interface/AbstractController.cc
M src/mem/ruby/slicc_interface/AbstractController.hh
M src/mem/ruby/slicc_interface/Controller.py
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/Sequencer.cc
M src/mem/ruby/system/Sequencer.py
10 files changed, 34 insertions(+), 47 deletions(-)



diff --git a/configs/ruby/GPU_RfO.py b/configs/ruby/GPU_RfO.py
index c9bda0b..1f4df38 100644
--- a/configs/ruby/GPU_RfO.py
+++ b/configs/ruby/GPU_RfO.py
@@ -115,8 +115,6 @@
 self.L2cache.create(options)

 self.sequencer = RubySequencer()
-self.sequencer.icache_hit_latency = 2
-self.sequencer.dcache_hit_latency = 2
 self.sequencer.version = self.seqCount()
 self.sequencer.icache = self.L1Icache
 self.sequencer.dcache = self.L1D0cache
@@ -128,12 +126,13 @@
 self.sequencer1.version = self.seqCount()
 self.sequencer1.icache = self.L1Icache
 self.sequencer1.dcache = self.L1D1cache
-self.sequencer1.icache_hit_latency = 2
-self.sequencer1.dcache_hit_latency = 2
 self.sequencer1.ruby_system = ruby_system
 self.sequencer1.coreid = 1
 self.sequencer1.is_cpu_sequencer = True

+# Defines icache/dcache hit latency
+self.mandatory_queue_latency = 2
+
 self.issue_latency = options.cpu_to_dir_latency
 self.send_evictions = send_evicts(options)

diff --git a/configs/ruby/MOESI_AMD_Base.py b/configs/ruby/MOESI_AMD_Base.py
index d465083..cfa7449 100644
--- a/configs/ruby/MOESI_AMD_Base.py
+++ b/configs/ruby/MOESI_AMD_Base.py
@@ -102,8 +102,6 @@
 self.L2cache.create(options)

 self.sequencer = RubySequencer()
-self.sequencer.icache_hit_latency = 2
-self.sequencer.dcache_hit_latency = 2
 self.sequencer.version = self.seqCount()
 self.sequencer.icache = self.L1Icache
 self.sequencer.dcache = self.L1D0cache
@@ -115,12 +113,13 @@
 self.sequencer1.version = self.seqCount()
 self.sequencer1.icache = self.L1Icache
 self.sequencer1.dcache = self.L1D1cache
-self.sequencer1.icache_hit_latency = 2
-self.sequencer1.dcache_hit_latency = 2
 self.sequencer1.ruby_system = ruby_system
 self.sequencer1.coreid = 1
 self.sequencer1.is_cpu_sequencer = True

+# Defines icache/dcache hit latency
+self.mandatory_queue_latency = 2
+
 self.issue_latency = options.cpu_to_dir_latency
 self.send_evictions = send_evicts(options)

diff --git a/src/mem/ruby/slicc_interface/AbstractController.cc  
b/src/mem/ruby/slicc_interface/AbstractController.cc

index fa1c936..a665062 100644
--- a/src/mem/ruby/slicc_interface/AbstractController.cc
+++ b/src/mem/ruby/slicc_interface/AbstractController.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited
+ * Copyright (c) 2017,2019 ARM Limited
  * All rights reserved.
  *
  * The license below extends only to copyright in the software and shall
@@ -55,6 +55,7 @@
   m_number_of_TBEs(p->number_of_TBEs),
   m_transitions_per_cycle(p->transitions_per_cycle),
   m_buffer_size(p->buffer_size), m_recycle_latency(p->recycle_latency),
+  m_mandatory_queue_latency(p->mandatory_queue_latency),
   memoryPort(csprintf("%s.memory", name()), this, ""),
   addrRanges(p->addr_ranges.begin(), p->addr_ranges.end())
 {
diff --git a/src/mem/ruby/slicc_interface/AbstractController.hh  
b/src/mem/ruby/slicc_interface/AbstractController.hh

index 5e39a28..5e0fa28 100644
--- a/src/mem/ruby/slicc_interface/AbstractController.hh
+++ b/src/mem/ruby/slicc_interface/AbstractController.hh
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited
+ * Copyright (c) 2017,2019 ARM Limited
  * All rights reserved.
  *
  * The license below extends only to copyright in the software and shall
@@ -102,6 +102,13 @@
 virtual Sequencer* getCPUSequencer() const = 0;
 virtual GPUCoalescer* getGPUCoalescer() const = 0;

+// This latency is used by the sequencer when enqueueing requests.
+// Different latencies may