From: Alexandru Dutu Date: Wed, 11 Jul 2018 20:32:18 +0000 (-0400) Subject: gpu-compute: No RF scheduling in case of SKIP or EMPTY X-Git-Tag: v20.1.0.0~424 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7d50d5d97237c2df0c08ccfbe6e5c40591d3bcff;p=gem5.git gpu-compute: No RF scheduling in case of SKIP or EMPTY In case of flat memory instructions the status for the LM pipe execution unit is set to SKIP or EMPTY, as the bus between the VRF and the GM and LM pipe is shared. The destination operands should not be scheduled for the LM pipe, event if the wave is in the dispatch list. This can lead to deadlock in the destination cache as DCEs are reused and the slotsAvailableForBank count gets artificially incremented. Change-Id: I2230c53e3bc1032d2cccbe00fab62c99ab8de6cd Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/29970 Maintainer: Anthony Gutierrez Tested-by: kokoro Reviewed-by: Matt Sinclair --- diff --git a/src/gpu-compute/schedule_stage.cc b/src/gpu-compute/schedule_stage.cc index 0785aa03d..e0600a623 100644 --- a/src/gpu-compute/schedule_stage.cc +++ b/src/gpu-compute/schedule_stage.cc @@ -236,9 +236,13 @@ void ScheduleStage::scheduleRfDestOperands() { for (int j = 0; j < computeUnit.numExeUnits(); ++j) { - if (!dispatchList->at(j).first) { + if (dispatchList->at(j).second == EMPTY || + dispatchList->at(j).second == SKIP) { continue; } + + assert(dispatchList->at(j).first); + // get the wave on dispatch list and attempt to allocate write // resources in the RFs Wavefront *w = dispatchList->at(j).first;