Как я могу реализовать 1-битное предсказание ветвления в C ++, используя операторы if и if else? - PullRequest
0 голосов
/ 18 апреля 2019

Я делаю проект для моего модуля компьютерной архитектуры, и реализация проекта довольно расплывчата. Я просто не уверен, как реализовать алгоритм предсказания ветвлений в c ++

Это то, что я пытался сделать до сих пор:

int random(int& branchNum); //passed by reference to update the global variable when random function is called

int main()
{
    //branch prediction

    //global variable as per request from document
    int myBranchNumber;

    cout << "Enter a branch number from 0 to 100" << endl;
    cin << myBranchNumber;

    //10 different executable branches

    if (myBranchNumber >= 90 && myBranchNumber <= 100) {
        cout << "Scored an A+ of " << myBranchNumber << endl;
    }

    else if (myBranchNumber >= 80 && myBranchNumber >= 89) {
        cout << "Scored an A- of " << myBranchNumber << endl;
    }

    else if (myBranchNumber >= 70 && myBranchNumber <= 79) {
        cout << "Scored an B+ of " << myBranchNumber << endl;
    }

    else if (myBranchNumber >= 60 && myBranchNumber <= 69) {
        cout << "Scored an B+ of " << myBranchNumber << endl;
    }

    else if (myBranchNumber >= 50 && myBranchNumber <= 59) {
        cout << "Scored an D of " << myBranchNumber << endl;
    }

    else if (myBranchNumber >= 40 && myBranchNumber <= 49) {

        cout << "Scored an E of " << myBranchNumber << endl;
    }

    else if (myBranchNumber >= 30 && myBranchNumber <= 39) {
        cout << "Scored an F of " << myBranchNumber << endl;
    }

    else if (myBranchNumber >= 20 && myBranchNumber <= 29) {
        cout << "Scored an G of " << myBranchNumber << endl;
    }

    else if (myBranchNumber >= 10 && myBranchNumber <= 19) {
        cout << "Scored an H of " << myBranchNumber << endl;
    }

    else if (myBranchNumber >= 0 && myBranchNumber <= 9) {
        cout << "Scored an I of " << myBranchNumber << endl;
    }

    //4 random numbers in a reasonable range and range selected is 0-100
    random(myBranchNumber);

    cout << "random number is : " << random(myBranchNumber) << endl;
    cout << "my branch number is now:" << myBranchNumber;
    //function keep track of time taken to complete N runs
    return 0;
}

//function for randomising
int random(int& branchNum)
{
    srand(time(NULL)); //srand is declared once only and we using randomising

    branchNum = (rand() % 100) + 1;
    return branchNum;
}

Вопрос:

Используя любой язык программирования высокого уровня по вашему выбору, разработайте программу для проверки работы метода «прогнозирования отрасли», который используется в компьютерной инженерии для повышения производительности. При разработке этой программы предлагается учитывать следующие возможности:

[1] Напишите основную программу, которая имеет как минимум десять различных исполняемых веток. Выполненная ветвь должна определяться значением глобальной переменной, скажем, myBranchNumber.

[2] Для десяти ветвей, предложенных в [1] выше, убедитесь, что они имеют сопоставимые вычисления.

[3] Помимо десяти ветвей в [1], основная программа должна содержать не менее тридцати (30) последовательно выполняемых инструкций.

[4] Напишите функцию, которая генерирует случайные числа в разумных пределах, и обновите глобальную переменную, как предложено в [1].

[5] Должна быть функция, которая отслеживает время, необходимое для выполнения N запусков программы. Эта функция должна хранить в файле запись предсказанных и выполненных ветвей, а также время для завершения N запусков.

...