CUScheduler::Status_ComputeUnitExe CUScheduler::ScheduleWF(WorkGroup& workGroup, size_t wf, bool& isScheduleProgress) { isScheduleProgress = true; WaveFront& waveFront = workGroup.GetWaveFront(wf); size_t instIdx = waveFront.GetNextInstIdx(); Instruction* pInst = workGroup.GetInstruction(instIdx); if (pInst == NULL) { isScheduleProgress = false; return Status_CUExeSuccess; } Instruction::InstructionCategory instFormatKind = pInst->GetInstructionCategory(); if (m_branchUnitScheduler.IsInstructionBranch(pInst)) { size_t branchInstIdx = waveFront.GetNextBranchInstIdx(); if (m_branchUnitScheduler.IsBranchTaken(branchInstIdx)) { m_branchUnitNextFreeClk++; } } else if (instFormatKind == Instruction::ScalarMemoryRead || instFormatKind == Instruction::ScalarMemoryWrite || instFormatKind == Instruction::ScalarALU) { m_scalarUnitNextFreeClk++; } else { m_vectorUnitNextFreeClk++; } return Status_CUExeSuccess; }