gpu-compute: use System cache line size in the GPU
This commit is contained in:
parent
844fb845a5
commit
aa7364276f
4 changed files with 9 additions and 5 deletions
|
@ -75,7 +75,8 @@ ComputeUnit::ComputeUnit(const Params *p) : MemObject(p), fetchStage(p),
|
||||||
req_tick_latency(p->mem_req_latency * p->clk_domain->clockPeriod()),
|
req_tick_latency(p->mem_req_latency * p->clk_domain->clockPeriod()),
|
||||||
resp_tick_latency(p->mem_resp_latency * p->clk_domain->clockPeriod()),
|
resp_tick_latency(p->mem_resp_latency * p->clk_domain->clockPeriod()),
|
||||||
_masterId(p->system->getMasterId(name() + ".ComputeUnit")),
|
_masterId(p->system->getMasterId(name() + ".ComputeUnit")),
|
||||||
lds(*p->localDataStore), globalSeqNum(0), wavefrontSize(p->wfSize),
|
lds(*p->localDataStore), _cacheLineSize(p->system->cacheLineSize()),
|
||||||
|
globalSeqNum(0), wavefrontSize(p->wfSize),
|
||||||
kernelLaunchInst(new KernelLaunchStaticInst())
|
kernelLaunchInst(new KernelLaunchStaticInst())
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -390,6 +390,8 @@ class ComputeUnit : public MemObject
|
||||||
int32_t
|
int32_t
|
||||||
getRefCounter(const uint32_t dispatchId, const uint32_t wgId) const;
|
getRefCounter(const uint32_t dispatchId, const uint32_t wgId) const;
|
||||||
|
|
||||||
|
int cacheLineSize() const { return _cacheLineSize; }
|
||||||
|
|
||||||
bool
|
bool
|
||||||
sendToLds(GPUDynInstPtr gpuDynInst) __attribute__((warn_unused_result));
|
sendToLds(GPUDynInstPtr gpuDynInst) __attribute__((warn_unused_result));
|
||||||
|
|
||||||
|
@ -767,6 +769,7 @@ class ComputeUnit : public MemObject
|
||||||
uint64_t getAndIncSeqNum() { return globalSeqNum++; }
|
uint64_t getAndIncSeqNum() { return globalSeqNum++; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
const int _cacheLineSize;
|
||||||
uint64_t globalSeqNum;
|
uint64_t globalSeqNum;
|
||||||
int wavefrontSize;
|
int wavefrontSize;
|
||||||
GPUStaticInst *kernelLaunchInst;
|
GPUStaticInst *kernelLaunchInst;
|
||||||
|
|
|
@ -132,10 +132,10 @@ FetchUnit::initiateFetch(Wavefront *wavefront)
|
||||||
|
|
||||||
// Since this is an instruction prefetch, if you're split then just finish
|
// Since this is an instruction prefetch, if you're split then just finish
|
||||||
// out the current line.
|
// out the current line.
|
||||||
unsigned block_size = RubySystem::getBlockSizeBytes();
|
int block_size = computeUnit->cacheLineSize();
|
||||||
// check for split accesses
|
// check for split accesses
|
||||||
Addr split_addr = roundDown(vaddr + block_size - 1, block_size);
|
Addr split_addr = roundDown(vaddr + block_size - 1, block_size);
|
||||||
unsigned size = block_size;
|
int size = block_size;
|
||||||
|
|
||||||
if (split_addr > vaddr) {
|
if (split_addr > vaddr) {
|
||||||
// misaligned access, just grab the rest of the line
|
// misaligned access, just grab the rest of the line
|
||||||
|
|
|
@ -224,7 +224,7 @@ void
|
||||||
Shader::doFunctionalAccess(RequestPtr req, MemCmd cmd, void *data,
|
Shader::doFunctionalAccess(RequestPtr req, MemCmd cmd, void *data,
|
||||||
bool suppress_func_errors, int cu_id)
|
bool suppress_func_errors, int cu_id)
|
||||||
{
|
{
|
||||||
unsigned block_size = RubySystem::getBlockSizeBytes();
|
int block_size = cuList.at(cu_id)->cacheLineSize();
|
||||||
unsigned size = req->getSize();
|
unsigned size = req->getSize();
|
||||||
|
|
||||||
Addr tmp_addr;
|
Addr tmp_addr;
|
||||||
|
@ -342,7 +342,7 @@ Shader::AccessMem(uint64_t address, void *ptr, uint32_t size, int cu_id,
|
||||||
{
|
{
|
||||||
uint8_t *data_buf = (uint8_t*)ptr;
|
uint8_t *data_buf = (uint8_t*)ptr;
|
||||||
|
|
||||||
for (ChunkGenerator gen(address, size, RubySystem::getBlockSizeBytes());
|
for (ChunkGenerator gen(address, size, cuList.at(cu_id)->cacheLineSize());
|
||||||
!gen.done(); gen.next()) {
|
!gen.done(); gen.next()) {
|
||||||
Request *req = new Request(0, gen.addr(), gen.size(), 0,
|
Request *req = new Request(0, gen.addr(), gen.size(), 0,
|
||||||
cuList[0]->masterId(), 0, 0, 0);
|
cuList[0]->masterId(), 0, 0, 0);
|
||||||
|
|
Loading…
Reference in a new issue