linux user group brescia

immagine del castello

Archivio della mailing list

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