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;
}