Files
Kirill 3a96c27c48 Arch: new
Все теоритические билеты по Архитектуре ЭВМ в основном были написаны,
кроме: 8.4; 13.4; 14.4; 15.4. Задачи будут позже.
2025-01-14 19:40:01 +03:00

1.4 KiB
Raw Blame History

Пример разворачивания цикла.

for (i = 1000; i>0; i = i-1)
    x[i]= x[i] + s;
Без оптимизации:
Loop: LD [R1], F0 1
    простой 2
    ADD F2, F0, F4 3
    простой 4
    простой 5
    ST F4, [R1] 6
    ADD R1, R3, R1 7
    простой 8
    BNE R1, R2, Loop 9
    простой 10
  • 4 копии цикла развернуты без повторного использования регистров.
  • Размер базового блока увеличен с 5 до 14 инструкций.
  • 3 перехода и 3 уменьшения R1 удалены.
  • Адреса загрузки и сохранения изменены.
  • 7 тактов для исходной итерации.

Разворачивание цикла сразу с оптимизацией:

Loop: LD [R1], F0 1
LD [R1-8], F6 2
LD [R1-16], F10 3
LD [R1-24], F14 4
ADD F2, F0, F4 5
ADD F2, F6, F8 6
ADD F2, F10, F12 7
ADD F2, F14, F16 8
ST F4, [R1] 9
ST F8, [R1-8] 10
ADD R1, R3, R1; R3 -=32; 11
ST F12, [R1+16] 12
BNE R1, R2, Loop 13
ST F16, [R1+8]; 8-32 = -24

Время итерации цикла сократилось до 14 тактов или \frac{14}{4}=3.5 для исходной итерации; Ускорение \frac{6}{3.5}=1.7