Go to the documentation of this file.
39 #include "debug/GPUSched.hh"
46 : computeUnit(cu), fromSchedule(from_schedule),
47 lastTimeInstExecuted(false),
48 thisTimeInstExecuted(false), instrExecuted (false),
49 executionResourcesUsed(0), _name(cu.
name() +
".ExecStage")
111 std::string
s(
"INVALID");
129 std::stringstream
ss;
137 Wavefront *wf = gpu_dyn_inst->wavefront();
145 DPRINTF(GPUSched,
"Dispatch List:\n%s",
ss.str());
153 if (Debug::GPUSched) {
168 assert(gpu_dyn_inst);
169 Wavefront *wf = gpu_dyn_inst->wavefront();
170 DPRINTF(GPUSched,
"Exec[%d]: SIMD[%d] WV[%d]: %s\n",
172 gpu_dyn_inst->disassemble());
173 DPRINTF(GPUSched,
"dispatchList[%d] EXREADY->EMPTY\n", unitId);
184 assert(gpu_dyn_inst);
185 Wavefront *wf = gpu_dyn_inst->wavefront();
186 DPRINTF(GPUSched,
"dispatchList[%d] SKIP->EMPTY\n", unitId);
192 panic(
"Unknown dispatch status in exec()\n");
203 .
name(
name() +
".num_transitions_active_to_idle")
204 .
desc(
"number of CU transitions from active to idle")
208 .
name(
name() +
".num_cycles_with_no_issue")
209 .
desc(
"number of cycles the CU issues nothing")
213 .
name(
name() +
".num_cycles_with_instr_issued")
214 .
desc(
"number of cycles the CU issued at least one instruction")
220 .
desc(
"Execution units active per cycle (Exec unit=SIMD,MemPipe)")
225 .
name(
name() +
".idle_duration_in_cycles")
226 .
desc(
"duration of idle periods in cycles")
231 .
name(
name() +
".num_cycles_issue_exec_rsrc")
232 .
desc(
"Number of cycles at least one instruction issued to "
233 "execution resource type")
238 .
name(
name() +
".num_cycles_no_issue_exec_rsrc")
239 .
desc(
"Number of clks no instructions issued to execution "
bool thisTimeInstExecuted
void collectStatistics(enum STAT_STATUS stage, int unitId)
Stats::Scalar numCyclesWithInstrIssued
GPUDynInstPtr & readyInst(int func_unit_id)
std::string dispStatusToStr(int j)
const std::string to_string(sc_enc enc)
Stats::Distribution idleDur
DISPATCH_STATUS dispatchStatus(int func_unit_id) const
ScheduleStage scheduleStage
bool lastTimeInstExecuted
void dispatchTransition(const GPUDynInstPtr &gpu_dyn_inst, int func_unit_id, DISPATCH_STATUS disp_status)
Once the scheduler has chosen a winning WF for execution, and after the WF's oldest instruction's ope...
Communication interface between Schedule and Execute stages.
Stats::Vector numCyclesWithInstrTypeIssued
ExecStage(const ComputeUnitParams *p, ComputeUnit &cu, ScheduleToExecute &from_schedule)
ScheduleToExecute & fromSchedule
Derived & name(const std::string &name)
Set the name and marks this stat to print at the end of simulation.
const std::string & name()
Derived & init(size_type size)
Set this vector to have the given size.
Stats::Vector numCyclesWithNoInstrTypeIssued
Stats::Scalar numCyclesWithNoIssue
int executionResourcesUsed
Distribution & init(Counter min, Counter max, Counter bkt)
Set the parameters of this distribution.
std::shared_ptr< GPUDynInst > GPUDynInstPtr
void sample(const U &v, int n=1)
Add a value to the distribtion n times.
const std::string & name() const
std::deque< GPUDynInstPtr > instructionBuffer
Derived & subname(off_type index, const std::string &name)
Set the subfield name for the given index, and marks this stat to print at the end of simulation.
ComputeUnit & computeUnit
Derived & desc(const std::string &_desc)
Set the description and marks this stat to print at the end of simulation.
Stats::Scalar numTransActiveIdle
#define panic(...)
This implements a cprintf based panic() function.
Generated on Wed Sep 30 2020 14:02:12 for gem5 by doxygen 1.8.17