Индустрия программирования

Параллелизм на уровне выполнения


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 такта на элемент

Содержание раздела