Параллелизм на уровне выполнения
CPI конвейера = CPI идеального
конвейера +
+ Приостановки
из-за структурных конфликтов +
+ Приостановки
из-за конфликтов типа RAW +
+ Приостановки
из-за конфликтов типа WAR +
+ Приостановки
из-за конфликтов типа WAW +
+ Приостановки
из-за конфликтов по управлению
Метод | Снижает |
Разворачивание циклов | Приостановки по управлению |
Базовое планирование конвейера | Приостановки RAW |
Динамической планирование с централизованной схемой управления | Приостановки RAW |
Динамическое планирование с переименованием регистров | Приостановки WAR и WAW |
Динамическое прогнозирование переходов | Приостановки по управлению |
Выдача нескольких команд в одном такте | Идеальный CPI |
Анализ зависимостей компилятором | Идеальный CPI и приостановки по данным |
Программная конвейеризация и планирование трасс | Идеальный CPI и приостановки по данным |
Выполнение по предположению | Все приостановки по данным и управлению |
Динамическое устранение неоднозначности памяти | Приостановки RAW, связанные с памятью |
Планирование загрузки конвейера:
Команда, вырабатыва-ющая результат | Команда, использующая результат | Задержка в тактах |
Операция АЛУ с ПТ | Другая операция АЛУ с ПТ | 3 |
Операция АЛУ с ПТ | Запись двойного слова | 2 |
Загрузка двойного слова | Другая операция АЛУ с ПТ | 1 |
Загрузка двойного слова | Запись двойного слова | 0 |
Loop: LD F0,0(R1)
;F0=элемент вектора
ADDD F4,F0,F2
;добавляет скаляр из F2
SD 0(R1),F4
;запись результата
SUBI R1,R1,#8
;пересчитать указатель
;8 байт (в двойном слове)
BNEZ R1, Loop
;переход R1!=нулю
Цикл без планирования загрузки конвейера:
Такт
выдачи
Loop: LD F0,0(R1)
1
приостановка
2
ADDD F4,F0,F2
3
приостановка
4
приостановка
5
SD 0(R1),F4
6
SUBI R1,R1,#8
7
BNEZ R1,Loop
8
приостановка
9
Скорость работы цикла: 9 тактов на элемент
Оптимизированный цикл:
Loop: LD F0,0(R1) 1
приостановка
2
ADDD F4,F0,F2
3
SUBI R1,R1,#8
4
BNEZ R1,Loop ;задержанный
переход 5
SD 8(R1),F4 ;команда
изменяется, когда 6
;меняется
местами с командой SUB1
Скорость работы цикла: 6 тактов на элемент
Развернутый 4 раза цикл без оптимизации:
Loop: LD F0,0(R1)
ADDD F4,F0,F2
SD 0(R1),F4
;выбрасывается SUB1 и BNEZ
LD F6,-8(R1)
ADDD F8,F6,F2
SD -8(R1),F8
;выбрасывается SUB1 и BNEZ
LD F10,-16(R1)
ADDD F12,F10,F2
SD -16(R1),F12
;выбрасывается SUB1 и BNEZ
LD F14,-24(R1)
ADDD F16,F14,F2
SD -24(R1),F16
SUB1 R1,R1,#32
BNEZ R1, Loop
Скорость работы цикла: 6.8 такта на элемент
Развернутый 4 раза цикл после оптимизации:
Loop: LD F0,0(R1)
LD F6,-8(R1)
LD F10,-16(R1)
LD F14,-24(R1)
ADDD F4,F0,F2
ADDD F8,F6,F2
ADDD F12,F10,F2
ADDD F16,F14,F2
SD 0(R1),F4
SD -8(R1),F8
SD -16(R1),F12
SUB1 R1,R1,#32
BNEZ R1, Loop
SD 8(R1),F16
; 8 - 32 = -24
Скорость работы цикла: 3.5 такта на элемент