34 #include "debug/GPUMem.hh"
35 #include "debug/GPUReg.hh"
47 : computeUnit(cu), _name(cu.
name() +
".ScalarMemPipeline"),
48 queueSize(
p.scalar_mem_queue_size),
49 inflightStores(0), inflightLoads(0)
62 bool accessSrf =
true;
65 if ((
m) && (
m->isLoad() ||
m->isAtomicRet())) {
69 w->computeUnit->srf[
w->simdId]->
70 canScheduleWriteOperandsFromLoad(
w,
m);
81 if (
m->isLoad() ||
m->isAtomicRet()) {
82 w->computeUnit->srf[
w->simdId]->
83 scheduleWriteOperandsFromLoad(
w,
m);
87 w->decLGKMInstsIssued();
89 if (
m->isLoad() ||
m->isAtomic()) {
102 if (
m->isStore() ||
m->isAtomic()) {
107 if (
m->isLoad() ||
m->isAtomic()) {
115 w->computeUnit->scalarMemUnit.set(
m->time);
123 if (
mp->isLoad() ||
mp->isAtomic()) {
140 DPRINTF(GPUMem,
"CU%d: WF[%d][%d] Popping scalar mem_op\n",
149 if (gpuDynInst->isLoad()) {
152 }
else if (gpuDynInst->isStore()) {
WaitClass scalarMemToSrfBus
std::queue< GPUDynInstPtr > returnedLoads
ComputeUnit & computeUnit
ScalarMemPipeline(const ComputeUnitParams &p, ComputeUnit &cu)
std::queue< GPUDynInstPtr > issuedRequests
std::queue< GPUDynInstPtr > returnedStores
void issueRequest(GPUDynInstPtr gpuDynInst)
void ScheduleAdd(int *val, Tick when, int x)
bool rdy(Cycles cycles=Cycles(0)) const
void validateRequestCounters()
int scalarOutstandingReqsWrGm
int scalarOutstandingReqsRdGm
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
std::shared_ptr< GPUDynInst > GPUDynInstPtr
const std::string & name()