gpu-compute: Adding ioctl for HW context size
Adding runtime support for determining the memory required by a SIMD engine when executing a particular wavefront.
This commit is contained in:
parent
589e13a23b
commit
d5c8c5d3db
6 changed files with 35 additions and 2 deletions
|
@ -242,6 +242,13 @@ ClDriver::ioctl(LiveProcess *process, ThreadContext *tc, unsigned req)
|
||||||
buf.copyOut(tc->getMemProxy());
|
buf.copyOut(tc->getMemProxy());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case HSA_GET_HW_STATIC_CONTEXT_SIZE:
|
||||||
|
{
|
||||||
|
BufferArg buf(buf_addr, sizeof(uint32_t));
|
||||||
|
*((uint32_t*)buf.bufferPtr()) = dispatcher->getStaticContextSize();
|
||||||
|
buf.copyOut(tc->getMemProxy());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
fatal("ClDriver: bad ioctl %d\n", req);
|
fatal("ClDriver: bad ioctl %d\n", req);
|
||||||
|
|
|
@ -398,3 +398,9 @@ GpuDispatcher::setFuncargsSize(int funcargs_size)
|
||||||
{
|
{
|
||||||
shader->funcargs_size = funcargs_size;
|
shader->funcargs_size = funcargs_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t
|
||||||
|
GPUDispatcher::getStaticContextSize() const
|
||||||
|
{
|
||||||
|
return shader->cuList[0]->wfList[0][0]->getStaticContextSize();
|
||||||
|
}
|
||||||
|
|
|
@ -159,6 +159,9 @@ class GpuDispatcher : public DmaDevice
|
||||||
int getNumCUs();
|
int getNumCUs();
|
||||||
int wfSize() const;
|
int wfSize() const;
|
||||||
void setFuncargsSize(int funcargs_size);
|
void setFuncargsSize(int funcargs_size);
|
||||||
|
|
||||||
|
/** Returns the size of the static hardware context of a wavefront */
|
||||||
|
uint32_t getStaticContextSize() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __GPU_DISPATCHER_HH__
|
#endif // __GPU_DISPATCHER_HH__
|
||||||
|
|
|
@ -48,6 +48,7 @@ static const int HSA_GET_CODE = 0x4804;
|
||||||
static const int HSA_GET_READONLY_DATA = 0x4805;
|
static const int HSA_GET_READONLY_DATA = 0x4805;
|
||||||
static const int HSA_GET_CU_CNT = 0x4806;
|
static const int HSA_GET_CU_CNT = 0x4806;
|
||||||
static const int HSA_GET_VSZ = 0x4807;
|
static const int HSA_GET_VSZ = 0x4807;
|
||||||
|
static const int HSA_GET_HW_STATIC_CONTEXT_SIZE = 0x4808;
|
||||||
|
|
||||||
// Return value (via buffer ptr) for HSA_GET_SIZES
|
// Return value (via buffer ptr) for HSA_GET_SIZES
|
||||||
struct HsaDriverSizes
|
struct HsaDriverSizes
|
||||||
|
|
|
@ -155,9 +155,9 @@ Wavefront::~Wavefront()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Wavefront::start(uint64_t _wfDynId,uint64_t _base_ptr)
|
Wavefront::start(uint64_t _wf_dyn_id,uint64_t _base_ptr)
|
||||||
{
|
{
|
||||||
wfDynId = _wfDynId;
|
wfDynId = _wf_dyn_id;
|
||||||
basePtr = _base_ptr;
|
basePtr = _base_ptr;
|
||||||
status = S_RUNNING;
|
status = S_RUNNING;
|
||||||
}
|
}
|
||||||
|
@ -931,3 +931,13 @@ Wavefront::pc(uint32_t new_pc)
|
||||||
{
|
{
|
||||||
reconvergenceStack.top()->pc = new_pc;
|
reconvergenceStack.top()->pc = new_pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t
|
||||||
|
Wavefront::getStaticContextSize() const
|
||||||
|
{
|
||||||
|
return barCnt.size() * sizeof(int) + sizeof(dynWaveId) + sizeof(maxBarCnt) +
|
||||||
|
sizeof(oldBarrierCnt) + sizeof(barrierCnt) + sizeof(wgId) +
|
||||||
|
sizeof(computeUnit->cu_id) + sizeof(barrierId) + sizeof(initMask) +
|
||||||
|
sizeof(privBase) + sizeof(spillBase) + sizeof(ldsChunk) +
|
||||||
|
computeUnit->wfSize() * sizeof(ReconvergenceStackEntry);
|
||||||
|
}
|
||||||
|
|
|
@ -354,6 +354,12 @@ class Wavefront : public SimObject
|
||||||
|
|
||||||
void discardFetch();
|
void discardFetch();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the size of the static hardware context of a particular wavefront
|
||||||
|
* This should be updated everytime the context is changed
|
||||||
|
*/
|
||||||
|
uint32_t getStaticContextSize() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* Stack containing Control Flow Graph nodes (i.e., kernel instructions)
|
* Stack containing Control Flow Graph nodes (i.e., kernel instructions)
|
||||||
|
|
Loading…
Reference in a new issue