[gem5-dev] Change in public/gem5[master]: ruby: Refactor GPU coalescer

2018-02-14 Thread Matthew Poremba (Gerrit)

Hello Jason Lowe-Power,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/4180

to look at the new patch set (#2).

Change subject: ruby: Refactor GPU coalescer
..

ruby: Refactor GPU coalescer

Remove the read/write tables and coalescing table and introduce a two
levels of tables for uncoalesced and coalesced packets. Tokens are
granted to GPU instructions to place in uncoalesced table. If tokens
are available, the operation always succeeds such that the 'Aliased'
status is never returned. Coalesced accesses are placed in the
coalesced table while requests are outstanding. Requests to the same
address are added as targets to the table similar to how MSHRs
operate.

Change-Id: I37654091f18d137a40e7fdb0694a4ec4c77b1c1d
---
M configs/ruby/GPU_RfO.py
M configs/ruby/GPU_VIPER.py
M configs/ruby/GPU_VIPER_Baseline.py
M configs/ruby/GPU_VIPER_Region.py
M src/gpu-compute/GPU.py
M src/gpu-compute/compute_unit.cc
M src/gpu-compute/compute_unit.hh
M src/gpu-compute/global_memory_pipeline.cc
M src/gpu-compute/global_memory_pipeline.hh
M src/gpu-compute/wavefront.cc
M src/mem/SConscript
M src/mem/port.hh
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/RubyPort.cc
M src/mem/ruby/system/RubyPort.hh
M src/mem/ruby/system/VIPERCoalescer.cc
A src/mem/token_port.cc
A src/mem/token_port.hh
20 files changed, 798 insertions(+), 654 deletions(-)


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


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I37654091f18d137a40e7fdb0694a4ec4c77b1c1d
Gerrit-Change-Number: 4180
Gerrit-PatchSet: 2
Gerrit-Owner: Matthew Poremba 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-CC: Matt Poremba 
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in public/gem5[master]: ruby: Refactor GPU coalescer

2017-07-20 Thread Matthew Poremba (Gerrit)
Matthew Poremba has uploaded this change for review. (  
https://gem5-review.googlesource.com/4180



Change subject: ruby: Refactor GPU coalescer
..

ruby: Refactor GPU coalescer

Remove the read/write tables and coalescing table and introduce a two
levels of tables for uncoalesced and coalesced packets. Tokens are
granted to GPU instructions to place in uncoalesced table. If tokens
are available, the operation always succeeds such that the 'Aliased'
status is never returned. Coalesced accesses are placed in the
coalesced table while requests are outstanding. Requests to the same
address are added as targets to the table similar to how MSHRs
operate.

Change-Id: I37654091f18d137a40e7fdb0694a4ec4c77b1c1d
---
M configs/ruby/GPU_RfO.py
M configs/ruby/GPU_VIPER.py
M configs/ruby/GPU_VIPER_Baseline.py
M configs/ruby/GPU_VIPER_Region.py
M src/gpu-compute/GPU.py
M src/gpu-compute/compute_unit.cc
M src/gpu-compute/compute_unit.hh
M src/gpu-compute/global_memory_pipeline.cc
M src/gpu-compute/global_memory_pipeline.hh
M src/gpu-compute/wavefront.cc
M src/mem/SConscript
M src/mem/port.hh
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/RubyPort.cc
M src/mem/ruby/system/RubyPort.hh
M src/mem/ruby/system/VIPERCoalescer.cc
A src/mem/token_port.cc
A src/mem/token_port.hh
20 files changed, 799 insertions(+), 654 deletions(-)



diff --git a/configs/ruby/GPU_RfO.py b/configs/ruby/GPU_RfO.py
index 71e21d9..a52ff3d 100644
--- a/configs/ruby/GPU_RfO.py
+++ b/configs/ruby/GPU_RfO.py
@@ -170,6 +170,8 @@
 self.coalescer.max_outstanding_requests = options.simds_per_cu * \
   options.wfs_per_simd * \
   options.wf_size
+self.coalescer.max_coalesces_per_cycle = \
+options.max_coalesces_per_cycle

 self.sequencer = RubySequencer()
 self.sequencer.version = self.seqCount()
@@ -436,6 +438,8 @@
   help="tcp size")
 parser.add_option("--tcc-dir-factor", type='int', default=4,
   help="TCCdir size = factor *(TCPs + TCC)")
+parser.add_option("--max-coalesces-per-cycle", type="int", default=1,
+  help="Maximum insts that may coalesce in a cycle");

 def create_system(options, full_system, system, dma_devices, ruby_system):
 if buildEnv['PROTOCOL'] != 'GPU_RfO':
diff --git a/configs/ruby/GPU_VIPER.py b/configs/ruby/GPU_VIPER.py
index e4ba180..36ef9f5 100644
--- a/configs/ruby/GPU_VIPER.py
+++ b/configs/ruby/GPU_VIPER.py
@@ -154,6 +154,8 @@
 self.coalescer.ruby_system = ruby_system
 self.coalescer.support_inst_reqs = False
 self.coalescer.is_cpu_sequencer = False
+self.coalescer.max_coalesces_per_cycle = \
+options.max_coalesces_per_cycle

 self.sequencer = RubySequencer()
 self.sequencer.version = self.seqCount()
@@ -387,6 +389,9 @@
   help = "tcp size")
 parser.add_option("--tcp-assoc", type = 'int', default = 16,
   help = "tcp assoc")
+parser.add_option("--max-coalesces-per-cycle", type="int", default=1,
+  help="Maximum insts that may coalesce in a cycle");
+
 parser.add_option("--noL1", action = "store_true", default = False,
   help = "bypassL1")

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

index 978d4cc..df3c60a 100644
--- a/configs/ruby/GPU_VIPER_Baseline.py
+++ b/configs/ruby/GPU_VIPER_Baseline.py
@@ -154,6 +154,8 @@
 self.coalescer.ruby_system = ruby_system
 self.coalescer.support_inst_reqs = False
 self.coalescer.is_cpu_sequencer = False
+self.coalescer.max_coalesces_per_cycle = \
+options.max_coalesces_per_cycle

 self.sequencer = RubySequencer()
 self.sequencer.version = self.seqCount()
@@ -365,6 +367,9 @@
   help = "tcc assoc")
 parser.add_option("--tcp-size", type = 'string', default = '16kB',
   help = "tcp size")
+parser.add_option("--max-coalesces-per-cycle", type="int", default=1,
+  help="Maximum insts that may coalesce in a cycle");
+
 parser.add_option("--sampler-sets", type = "int", default = 1024)
 parser.add_option("--sampler-assoc", type = "int", default = 16)
 parser.add_option("--sampler-counter", type = "int", default = 512)
diff --git a/configs/ruby/GPU_VIPER_Region.py  
b/configs/ruby/GPU_VIPER_Region.py

index 8b59c04..239624d 100644
--- a/configs/ruby/GPU_VIPER_Region.py
+++ b/configs/ruby/GPU_VIPER_Region.py
@@ -155,6 +155,8 @@
 self.coalescer.ruby_system = ruby_system
 self.coalescer.support_inst_reqs = False
 self.coalescer.is_cpu_sequencer = False
+