R: serverone
Luca Giuzzi
giuzzi a lugbs.linux.it
Mar 31 Ago 2004 12:52:46 UTC
On Tue, Aug 31, 2004 at 11:59:48AM +0200, Sergio Bevilacqua wrote:
>
> altre cose, che invece funzionano ovunque, sono le ottimizzazioni del
> codice: l'esplicitazione dei cicli (-funroll-loops). evitano il page
> miss in memoria che si verifica alla fine dell'esecuzione del singolo
> ciclo... cose di questo tipo non introducono "variazioni" nel codice, ma
> semplicemente utilizza in modo diverso il processore... non credo che
> questo tipo di interventi possa alterare il funzionamento del programma.
Mah... in realta' la cosa non e' cosi' semplice per essenzialmente due
motivi
(a) bugs del compilatore
(b) differenze di implementazione hw
(c) tempi di esecuzione di sottoprocedure, espansione di codice etc.
Il punto (a) e' quasi auto-esplicativo ma e' bene osservare anche che
in generale alcuni problemi tipo register starvation (su architettura
intel, in particolare) possono rendere del codice "lecito" non
compilabile con talune opzioni di ottimizzazione.
Il punto (b) e' particolarmente evidente (sempre sotto intel) nella
diversa implementazione dell'aritmetica sotto f387 e sotto sse2 ...
SSE2 utilizza la modalita' IEEE per l'aritmetica in virgola mobile;
F387 come standard usa una precisione piu' alta (si puo' mettere
anche questo in modalita' IEEE ma e' necessario del codice
in assembler) fornendo risultati DIVERSI.
[nota bene: NON e' vero che "Precisione piu' alta -> Codice piu' buono"
in caso di elaborazioni numeriche in virgola mobile la implementazione
e (in particolare) il numero di bits significativo deve essere
esplicitamente controllato]
Il punto (c) e' sottile nel caso del tempo di esecuzione, particolarmente
evidente quando si considerano oggetti quali le funzioni INLINE...
Funzioni assembler marcate per l'espansione in linea non vengono
copiate qualora non sia indicato almeno "-O2" ... questo E' un problema
per i programmi che devono eseguire del codice asm (ad esempio per
inizializzare l'FPU) in determinate sezioni e non possono permettersi
un salto ad una subroutine.
> ...almeno... questo ? quello che si trova su quasi tutti i testi che
> parlano di struttura del calcolatore e di compilatori...
Beh... fra la parte teorica e quella pratica ... :)))
ciao,
lg
--
Maggiori informazioni sulla lista
Lug
|