Принцип: Реализовывается динамическая оптимизация кода процессором.
Имеется два подхода к отображению параллелизма задачи на среднеблочном уровне:
1). Имеется явное указание на параллелизм в специальных полях команды.
2). Никакого указания на параллелизм в системе команд не содержится, но в процессоре содержится несколько параллельно работающих ОБ.
Команды извлекаются последовательно и , в случае, если ОБ не занят, передаются на исполнение этому блоку.
Рис.6.20. Принцип суперскалярной архитектуры
ОБ извлекает из ОП по одной команде, и по мере освобождения ОУ, параллельно управляет работой этих устройств, т.е. суперскалярную обработку данных можно представить себе как последовательность команд, которые извлекаются отдельно, и по мере освобождения ОУ, производится их выполнение.
При суперскалярной обработке происходит использование нескольких параллельно работающих ОУ при сохранении традиционной последовательности команд. Это позволяет реализовать возможности архитектуры со сверхдлинным командным словом при традиционном кодировании команд, когда в каждой команде содержится один код операции.
Компиляторы и аппаратные средства путем изменения последовательности команд позволяют оптимизировать использование процессора.
Основной процесс при суперскалярной обработке данных – это переупорядочивание, которое изменяет последовательность использования команд.
Существует два типа зависимости между командами:
1). Зависимость по управлению (условные и безусловные переходы, вызовы подпрограмм).
2). Зависимость по данным:
Когда результаты выполнения одной команды являются операндами для выполнения другой.
«Окно исполнения» – равно максимальному числу одновременно исполняемых команд.
Классификация зависимостей по данным:
1). RAR (Read After Read) – зависимость по данным отсутствует.
2). WAR (Write After Read) – фиксированная зависимость по данным.
3). WAW – фиксированная зависимость по данным.
4). RAW – истинная зависимость по данным.
Рассмотрим фрагмент кода:
label: mov bx, addr (1)
mov ax, [bx] (2)
add bx, 4 (3)
mov dx, [bx] (4)
loop label (5)
1 и 3 – WAW,
1 и 2 – RAW,
2 и 3 – WAR.
Предположим имеется процессор с окном исполнения равным 2 для фрагмента вышеуказанного кода:
Рис.6.21. Граф зависимостей команд
Рассмотрим структурную схему суперскалярной обработки.
Рис.6.22. Структурная схема суперскалярной обработки