25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

3.8 Ottimizzazione delle operazioni con array 157<br />

! D: scalarizzazione corretta e<br />

! loop reversal<br />

DO i=n-1,2,-1<br />

a(i) = a(i)+a(i-1)<br />

END DO<br />

3.8.12 Loop normalization<br />

<strong>Il</strong> loop normalization converte tutti i cicli in modo tale che l’indice del ciclo valga inizialmente<br />

1 (oppure 0) e sia incrementato di un fattore unitario ad ogni iterazione. Normalizzare un ciclo<br />

può consentire altri tipi di trasformazione come il peeling o la fusione sebbene la sua maggiore<br />

utilità risiede nel fatto di consentire al compilatore di eseguire test di coerenza sulle variabili<br />

indiciate nei cicli, test che di solito possono aver luogo soltanto in presenza di cicli con range<br />

normalizzati. Un esempio di loop normalization è il seguente:<br />

! ciclo originale<br />

DO i=1,n<br />

a(i) = a(i)+k<br />

END DO<br />

DO i=2,n+1<br />

b(i) = a(i-1)+b(i)<br />

END DO<br />

! dopo la normalizzazione<br />

DO i=1,n<br />

a(i) = a(i)+k<br />

END DO<br />

DO i=1,n<br />

b(i+1) = a(i)+b(i+1)<br />

END DO<br />

Si noti che è soltanto dopo l’operazione di normalizzazione che i due cicli potranno essere<br />

eventualmente fusi:<br />

! dopo normalizzazione e fusione<br />

DO i=1,n<br />

a(i) = a(i)+k<br />

b(i+1) = a(i)+b(i+1)<br />

END DO<br />

E’ da notare che tutte queste operazioni vengono svolte automaticamente da alcuni compilatori<br />

a determinati livelli di ottimizzazione il che lascia al programmatore come unica preoccupazione<br />

quella di scrivere programmi che utilizzino cicli nel modo più semplice, chiaro e<br />

compatto possibile, mentre è il compilatore a farsi carico del compito di ottimizzare il codice<br />

”dietro alle quinte”. Nondimeno è importante capire i problemi coinvolti nell’ottimizzazione dei

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!