Добавил:
ИВТ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
экз ответы.docx
Скачиваний:
21
Добавлен:
15.01.2024
Размер:
15.08 Mб
Скачать

14. Методы повышения производительности процессоров: суперскалярность, суперконвейерность, гипертрейдинг, внеочередное исполнение команд, переименовывание регистров и т.П.

Суперконвейерность.

Суперконвейер - конвейерный процессор с числом стадий больше 10.

Суть в том, чтобы разделить стадии обычного конвейера на ещё меньшие стадии.

Суперконвейер в теории может быть быстрее конвейера, но это зависит от эффективности устранения его конфликтов

Суперскалярность

Обычный, скалярный процессор - процессор который работает с одной порцией данных за одну инструкцию.

Суперскалярный процессор - процессор, поддерживающий так называемый параллелизм на уровне инструкций (процессор способен исполнять из одного общего потока инструкций сразу несколько штук) за счет включения в состав его вычислительного ядра нескольких одинаковых исполнительных устройств.

Векторные процессоры - от обычных отличаются тем, что в них стоит несколько исполнительных устройств, данные в которые загружаются одновременно. Операндами здесь выступают упорядоченные массивы данных (векторы), над которыми выполняется ОДНА и та же операция (например, поэлементное сложение или вычитание).

Скалярные процессоры, в отличие от векторных, могут выполнять разные операции в один и тот же момент времени.

Пример реализации суперскалярного процессора:

Микроархитектура очень похожа на конвейерный процессор. Разница в том, что для того, чтобы обрабатывать две инструкции за раз, нам нужно расширить количество портов регистрового файла и количество АЛУ в два раза. А также желательно использование двух портов на чтение в Data Memory для возможности параллельного выполнения двух инструкций чтения (в противном случае при выполнении этих двух операций подряд будет возникать структурный конфликт; при выполнении, например, чтения из Data Memory и вычислительной инструкции конфликт возникать не будет)

При максимальной загрузке двухканального суперскалярного процессора и идеальной пропускной способности параметр cpi = 0.5 (cycle per instruction) или ipc = 2 (instruction per cycle). Пример на картинке:

Но на практике идеальных суперскалярных процессоров не бывает.

На картинке изображён такой пример шестиканального суперскалярного процессора:

Поэтому для увеличения загрузки суперскалярного процессора применяются различные подходы.

Внеочередное выполнение команд

Базовый блок в программном коде - часть кода, в начале и конце которой стоят условные переходы, а внутри код исполняется линейно (не содержит условные переходы). В пределах базового блока можно сортировать инструкции так, как нам угодно, для повышения производительности, но следя за тем, чтобы при этом не появлялись конфликты.

Синими стрелками показано, какой конфликт появился бы, если бы очередь команд была составлена неправильно:

При внеочередном выполнении команд бывает такое, что две инструкции подряд хотят записать результат операции в один и тот же регистр. На первый взгляд, это глупо, но на практике это может быть нужно для формирования исключительных ситуаций (например, переполнения, при котором управление передаётся ОС).

Просто так изменить очередь исполнения этих команд нельзя, так как произойдёт WAW-конфликт. Поэтому существует понятие squashing - запрет команде записывать результат в память. При использовании squashing процессор сначала выполнит команду sub, запишет результат её выполнения в память, а через какое-то время выполнит add, но запретит ей записывать свой результат в память

В данном примере результат команды sub запишется в регистр t0