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>
This commit is contained in:
parent
c07a2d68f3
commit
b043dcf58a
4 changed files with 17 additions and 8 deletions
|
@ -50,7 +50,7 @@
|
||||||
#include "mem/ruby/system/RubySystem.hh"
|
#include "mem/ruby/system/RubySystem.hh"
|
||||||
#include "sim/sim_exit.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),
|
clock(p->clk_domain->clockPeriod()), cpuThread(nullptr), gpuTc(nullptr),
|
||||||
cpuPointer(p->cpu_pointer), tickEvent(this), timingSim(p->timing),
|
cpuPointer(p->cpu_pointer), tickEvent(this), timingSim(p->timing),
|
||||||
hsail_mode(SIMT), impl_kern_boundary_sync(p->impl_kern_boundary_sync),
|
hsail_mode(SIMT), impl_kern_boundary_sync(p->impl_kern_boundary_sync),
|
||||||
|
|
|
@ -73,7 +73,7 @@ static const int LDS_SIZE = 65536;
|
||||||
// Class Shader: This describes a single shader instance. Most
|
// Class Shader: This describes a single shader instance. Most
|
||||||
// configurations will only have a single shader.
|
// configurations will only have a single shader.
|
||||||
|
|
||||||
class Shader : public SimObject
|
class Shader : public ClockedObject
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
// Shader's clock period in terms of number of ticks of curTime,
|
// Shader's clock period in terms of number of ticks of curTime,
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
#include "mem/request.hh"
|
#include "mem/request.hh"
|
||||||
#include "mem/ruby/common/Address.hh"
|
#include "mem/ruby/common/Address.hh"
|
||||||
#include "mem/ruby/common/Consumer.hh"
|
#include "mem/ruby/common/Consumer.hh"
|
||||||
#include "mem/ruby/system/RubyPort.hh"
|
#include "mem/ruby/system/Sequencer.hh"
|
||||||
|
|
||||||
class DataBlock;
|
class DataBlock;
|
||||||
class CacheMsg;
|
class CacheMsg;
|
||||||
|
@ -255,10 +255,6 @@ class GPUCoalescer : public RubyPort
|
||||||
|
|
||||||
bool handleLlsc(Addr address, GPUCoalescerRequest* request);
|
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
|
class IssueEvent : public Event
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
@ -370,6 +366,11 @@ class GPUCoalescer : public RubyPort
|
||||||
std::vector<Stats::Histogram *> m_InitialToForwardDelayHist;
|
std::vector<Stats::Histogram *> m_InitialToForwardDelayHist;
|
||||||
std::vector<Stats::Histogram *> m_ForwardToFirstResponseDelayHist;
|
std::vector<Stats::Histogram *> m_ForwardToFirstResponseDelayHist;
|
||||||
std::vector<Stats::Histogram *> m_FirstResponseToCompletionDelayHist;
|
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&
|
inline std::ostream&
|
||||||
|
|
|
@ -36,7 +36,7 @@ from m5.params import *
|
||||||
from m5.proxy import *
|
from m5.proxy import *
|
||||||
from Sequencer import *
|
from Sequencer import *
|
||||||
|
|
||||||
class RubyGPUCoalescer(RubySequencer):
|
class RubyGPUCoalescer(RubyPort):
|
||||||
type = 'RubyGPUCoalescer'
|
type = 'RubyGPUCoalescer'
|
||||||
cxx_class = 'GPUCoalescer'
|
cxx_class = 'GPUCoalescer'
|
||||||
cxx_header = "mem/ruby/system/GPUCoalescer.hh"
|
cxx_header = "mem/ruby/system/GPUCoalescer.hh"
|
||||||
|
@ -46,3 +46,11 @@ class RubyGPUCoalescer(RubySequencer):
|
||||||
"max requests (incl. prefetches) outstanding")
|
"max requests (incl. prefetches) outstanding")
|
||||||
assume_rfo = Param.Bool(True, "assume protocol implementes Read for "
|
assume_rfo = Param.Bool(True, "assume protocol implementes Read for "
|
||||||
"Ownership coherence");
|
"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")
|
||||||
|
|
Loading…
Reference in a new issue