arch-gcn3: Free dest registers in non-memory Load DS insts
Certain DS insts are classfied as Loads, but don't actually go through the memory pipeline. However, any instruction classified as a load marks its destination registers as free in the memory pipeline. Because these instructions didn't use the memory pipeline, they never freed their destination registers, which led to a deadlock. This patch explicitly calls the function used to free the destination registers in the execute() method of those Load instructions that don't use the memory pipeline. Change-Id: Ic2ac2e232c8fbad63d0c62c1862f2bdaeaba4edf Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/48019 Reviewed-by: Matt Sinclair <mattdsinclair@gmail.com> Reviewed-by: Bobby R. Bruce <bbruce@ucdavis.edu> Maintainer: Matt Sinclair <mattdsinclair@gmail.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -32397,6 +32397,15 @@ namespace Gcn3ISA
|
||||
}
|
||||
|
||||
vdst.write();
|
||||
|
||||
/**
|
||||
* This is needed because we treat this instruction as a load
|
||||
* but it's not an actual memory request.
|
||||
* Without this, the destination register never gets marked as
|
||||
* free, leading to a possible deadlock
|
||||
*/
|
||||
wf->computeUnit->vrf[wf->simdId]->
|
||||
scheduleWriteOperandsFromLoad(wf, gpuDynInst);
|
||||
} // execute
|
||||
// --- Inst_DS__DS_PERMUTE_B32 class methods ---
|
||||
|
||||
@@ -32468,6 +32477,15 @@ namespace Gcn3ISA
|
||||
wf->decLGKMInstsIssued();
|
||||
wf->rdLmReqsInPipe--;
|
||||
wf->validateRequestCounters();
|
||||
|
||||
/**
|
||||
* This is needed because we treat this instruction as a load
|
||||
* but it's not an actual memory request.
|
||||
* Without this, the destination register never gets marked as
|
||||
* free, leading to a possible deadlock
|
||||
*/
|
||||
wf->computeUnit->vrf[wf->simdId]->
|
||||
scheduleWriteOperandsFromLoad(wf, gpuDynInst);
|
||||
} // execute
|
||||
// --- Inst_DS__DS_BPERMUTE_B32 class methods ---
|
||||
|
||||
@@ -32539,6 +32557,15 @@ namespace Gcn3ISA
|
||||
wf->decLGKMInstsIssued();
|
||||
wf->rdLmReqsInPipe--;
|
||||
wf->validateRequestCounters();
|
||||
|
||||
/**
|
||||
* This is needed because we treat this instruction as a load
|
||||
* but it's not an actual memory request.
|
||||
* Without this, the destination register never gets marked as
|
||||
* free, leading to a possible deadlock
|
||||
*/
|
||||
wf->computeUnit->vrf[wf->simdId]->
|
||||
scheduleWriteOperandsFromLoad(wf, gpuDynInst);
|
||||
} // execute
|
||||
|
||||
// --- Inst_DS__DS_ADD_U64 class methods ---
|
||||
|
||||
Reference in New Issue
Block a user