diff options
author | Andreas Sandberg <andreas.sandberg@arm.com> | 2017-02-27 13:17:51 +0000 |
---|---|---|
committer | Andreas Sandberg <andreas.sandberg@arm.com> | 2017-03-07 11:50:35 +0000 |
commit | b043dcf58ad766582aeab162fb855cc3fc95f2cf (patch) | |
tree | 1da517346bef667cf20f80a54c934a3931129e4f | |
parent | c07a2d68f34ab4cef8b3ed4d079316d2b4306244 (diff) | |
download | gem5-b043dcf58ad766582aeab162fb855cc3fc95f2cf.tar.xz |
gpu-compute: Fix Python/C++ object hierarchy discrepancies
The GPUCoalescer and the Shader classes have different base classes in
C++ and Python. This causes subtle bugs in SWIG and compilation errors
for PyBind.
Change-Id: I1ddd2a8ea43f083470538ddfea891347b21d14d8
Reviewed-by: Andreas Hansson <andreas.hansson@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/2228
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Tony Gutierrez <anthony.gutierrez@amd.com>
Reviewed-by: Pierre-Yves PĂ©neau <pierre-yves.peneau@lirmm.fr>
Reviewed-by: Bradford Beckmann <brad.beckmann@amd.com>
-rw-r--r-- | src/gpu-compute/shader.cc | 2 | ||||
-rw-r--r-- | src/gpu-compute/shader.hh | 2 | ||||
-rw-r--r-- | src/mem/ruby/system/GPUCoalescer.hh | 11 | ||||
-rw-r--r-- | src/mem/ruby/system/GPUCoalescer.py | 10 |
4 files changed, 17 insertions, 8 deletions
diff --git a/src/gpu-compute/shader.cc b/src/gpu-compute/shader.cc index 6deaaab94..6c328a7fd 100644 --- a/src/gpu-compute/shader.cc +++ b/src/gpu-compute/shader.cc @@ -50,7 +50,7 @@ #include "mem/ruby/system/RubySystem.hh" #include "sim/sim_exit.hh" -Shader::Shader(const Params *p) : SimObject(p), +Shader::Shader(const Params *p) : ClockedObject(p), clock(p->clk_domain->clockPeriod()), cpuThread(nullptr), gpuTc(nullptr), cpuPointer(p->cpu_pointer), tickEvent(this), timingSim(p->timing), hsail_mode(SIMT), impl_kern_boundary_sync(p->impl_kern_boundary_sync), diff --git a/src/gpu-compute/shader.hh b/src/gpu-compute/shader.hh index 13afab977..55c3feef9 100644 --- a/src/gpu-compute/shader.hh +++ b/src/gpu-compute/shader.hh @@ -73,7 +73,7 @@ static const int LDS_SIZE = 65536; // Class Shader: This describes a single shader instance. Most // configurations will only have a single shader. -class Shader : public SimObject +class Shader : public ClockedObject { protected: // Shader's clock period in terms of number of ticks of curTime, diff --git a/src/mem/ruby/system/GPUCoalescer.hh b/src/mem/ruby/system/GPUCoalescer.hh index 557d39235..2b42e1933 100644 --- a/src/mem/ruby/system/GPUCoalescer.hh +++ b/src/mem/ruby/system/GPUCoalescer.hh @@ -49,7 +49,7 @@ #include "mem/request.hh" #include "mem/ruby/common/Address.hh" #include "mem/ruby/common/Consumer.hh" -#include "mem/ruby/system/RubyPort.hh" +#include "mem/ruby/system/Sequencer.hh" class DataBlock; class CacheMsg; @@ -255,10 +255,6 @@ class GPUCoalescer : public RubyPort bool handleLlsc(Addr address, GPUCoalescerRequest* request); - // Private copy constructor and assignment operator - GPUCoalescer(const GPUCoalescer& obj); - GPUCoalescer& operator=(const GPUCoalescer& obj); - class IssueEvent : public Event { private: @@ -370,6 +366,11 @@ class GPUCoalescer : public RubyPort std::vector<Stats::Histogram *> m_InitialToForwardDelayHist; std::vector<Stats::Histogram *> m_ForwardToFirstResponseDelayHist; std::vector<Stats::Histogram *> m_FirstResponseToCompletionDelayHist; + +private: + // Private copy constructor and assignment operator + GPUCoalescer(const GPUCoalescer& obj); + GPUCoalescer& operator=(const GPUCoalescer& obj); }; inline std::ostream& diff --git a/src/mem/ruby/system/GPUCoalescer.py b/src/mem/ruby/system/GPUCoalescer.py index 0c19f875d..101a5fe30 100644 --- a/src/mem/ruby/system/GPUCoalescer.py +++ b/src/mem/ruby/system/GPUCoalescer.py @@ -36,7 +36,7 @@ from m5.params import * from m5.proxy import * from Sequencer import * -class RubyGPUCoalescer(RubySequencer): +class RubyGPUCoalescer(RubyPort): type = 'RubyGPUCoalescer' cxx_class = 'GPUCoalescer' cxx_header = "mem/ruby/system/GPUCoalescer.hh" @@ -46,3 +46,11 @@ class RubyGPUCoalescer(RubySequencer): "max requests (incl. prefetches) outstanding") assume_rfo = Param.Bool(True, "assume protocol implementes Read for " "Ownership coherence"); + + icache = Param.RubyCache("") + dcache = Param.RubyCache("") + deadlock_threshold = Param.Cycles(500000, + "max outstanding cycles for a request before " \ + "deadlock/livelock declared") + garnet_standalone = Param.Bool(False, "") + dcache_hit_latency = Param.Cycles(1, "Data cache hit latency") |