Работа суперскалярного конвейера
Тип команды | Ступень конвейера | |||||||
Целочисленная команда | IF | ID | EX | MEM | WB | |||
ПТ команда | IF | ID | EX | MEM | WB | |||
Целочисленная команда | IF | ID | EX | MEM | WB | |||
ПТ команда | IF | ID | EX | MEM | WB | |||
Целочисленная команда | IF | ID | EX | MEM | WB | |||
ПТ команда | IF | ID | EX | MEM | WB | |||
Целочисленная команда | IF | ID | EX | MEM | WB | |||
ПТ команда | IF | ID | EX | MEM | WB |
Пример цикла:
Loop: LD F0,0(R1) ;F0=элемент
вектора
ADDD F4,F0,F2 ;добавление
скалярной величины из F2
SD 0(R1),F4 ;запись
результата
SUBI R1,R1,#8 ;декрементирование
указателя
;8 байт
на двойное слово
BNEZ R1,Loop ;переход
R1!=нулю
Оптимизированная программа после 5-кратного
разворачивания цикла:
Целочисленная команда | Команда ПТ | Номер такта |
Loop: LD F0,0(R1) LD F8,-8(R1) LD F10,-16(R1) LD F14,-24(R1) LD F18,-32(R1) SD 0(R1),F4 SD -8(R1),F8 SD -16(R1),F12 SD -24(R1),F16 SUBI R1,R1,#40 BNEZ R1,Loop SD -32(R1),F20 | ADDD F4,F0,F2 ADDD F8,F6,F2 ADDD F12,F10,F2 ADDD F16,F14,F2 ADDD F20,F18,F2 | 1 2 3 4 5 6 7 8 9 10 11 12 |
Скорость работы цикла: 2.4 такта на элемент