Loop-Unrolling Technique
Lo "srotolamento" del ciclo consistente nel modificare il controllo del ciclo e nel replicare opportunamente le istruzioni all'interno del ciclo viene detto "tecnica di LOOP UNROLLING".
VANTAGGI DEL LOOP UNROLLING
-
Utilizzo ottimale dei processori con architettura pipelined
-
Riduzione dell'overhead del ciclo di iterazione
-
Riduzione del numero di trasferimenti fra i vari livelli memoria
-
Aumento delle operazioni concorrenti
L'overhead del programma e il numero di trasferimenti di dati dai livelli più bassi di memoria ai registri Si riducono di un fattore proporzionale alla nuova lunghezza del ciclo (profondità dell'unrolling).
SVANTAGGI DEL LOOP UNROLLING
-
Aumento della memoria destinata al programma
-
Perdita della generalità del codice*
- se si effettua l'unrolling a mano, mentre se si usa un compilatore per queste tecniche se ne risente di meno; ad esempio, il compilatore gcc supporta l'opzione "-unroll-all-loops" per effettuare automaticamente il loop unrolling.
ESEMPIO DI APPLICAZIONE 1
I clicli:
for i=1 to n
a[i] = x(i) + i
endfor
for i=1 to n
b[i] = x(i) + i
endfor
Si possono unificare in:
for i=1 to n
a[i] = x(i) + i
b[i] = x(i) + i
endfor
ESEMPIO DI APPLICAZIONE 2
Il ciclo:
for i=1 to n
if (i % 2) == 0
y(i)++;
else
y(i)-;
endfor
si puo' dividere in questo modo per evitare l'if:
for i=2 to n step 2
y(i)++;
endfor
for i=1 to n step 2
y(i)-;
endfor
ESEMPIO DI APPLICAZIONE 2
Un ciclo del tipo:
for i=1 to n
y(i)=0
endfor
puo' essere modificato il passo del ciclo in questo modo:
for i=1 to n step 2
y(i)=0
y(i+1)=0
endfor