Files
2025-02-15 15:42:36 +03:00

46 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#### Пример разворачивания цикла.
```c
for (i = 1000; i>0; i = i-1)
x[i] = x[i] + s;
```
Без оптимизации:
```armasm
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$