Newsgroup: it.comp.lang.c
Titolo: GCC e ottimizzazioni

Qualcuno mi sa indicare una risorsa esauriente (qualcosa + specifico di
google) dove capire bene cosa faccia, nel dettaglio, l'utilizzo delle
opzioni -O1, -O2, -O3... per gcc.
Ho infatti delle discrepanze cronometriche tra due programmi identici, uno
dei quali utilizza le ottimizzazioni, mentre l'altro no.
Vorrei quindi capire a cosa sono dovute tali diversità.
Grazie.
        Fabbro

 opzioni -O1, -O2, -O3... per gcc.
qui c'è la lista degli switch attivati da ogni Ox
http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Optimize-Options.html#Optimize-Options
ciao.

Fabbro wrote:

In parole povere:
più aumenti le ottimizzazioni, più il binario risultante cresce di 
dimensioni,
con conseguente perdita di tempo nel caricamento.
La via corretta è -02

 opzioni -O1, -O2, -O3... per gcc.
man gcc
-- 
28/2/2005 | -1 all' alba!

 La via corretta è -02
Mi sembra una affermazione ad dir poco apodittica.
Io ho scritto diversi programmi di number crunching intero
che giravano per giorni.
Sai quanto poco mi importava del tempo di caricamento...
Il giusto switch da usare dipende dall'uso che uno fa del programma....
Ricordo inoltre che ci sono altri switch specifici relativi 
all'ottimizzazione, tipo -fomit-frame-pointer etc.etc.
ciao,
v.

 v.
Inoltre è controllare che l'ottimizzazione non alteri il codice 
semanticamente. Questo accade specialmente in presenza di 
sincronizzazione lock-free/wait-free, asm inline, SMC, ecc...
Kiuhnm

 Inoltre è controllare che l'ottimizzazione non alteri il codice 
          ^
necessario

 che giravano per giorni.
Non capisco cosa centrino con le ottimizzazioni del binario finale!?!?
Lui parlava, giustamente, di tempi diversi di CARICAMENTO dello stesso
programma con ottimizzazioni diverse...ben diverso dal CORRETTO
funzionamento di un software!!

 funzionamento di un software!!
Al 99% sta parlando di runtime, tanto è vero che si stava occupando di 
misurare i Mhz del processore.
Kiuhnm

 funzionamento di un software!!
Mi sembra che ti sia sfuggito il messaggio originale di Fabbro
che  ti riporto sotto. Non si parla affatto di tempi di CARICAMENTO....
ciao,
v.


 Kiuhnm
Intervengo per porre fine a inutili discussioni.
Si... come ha intuito l'attento Kiuhnm scrutando tra i threads, il problema
si presenta proprio in runtime... se volete ve lo esplicito...
Il programma in questione ha una parte di codice in assembler, che va a
prelevare il valore di un registro (presente in tutte le macchine con
architettura IA-32 o successiva) in cui viene stoccato il valore corrente
del clock del sistema... 
Leggendo tale registro in due momenti consecutivi, e calcolandone la
differenza, si può ottenere una stima abbastanza precisa (al microsecondo,
con errore dell' 1-2%) del tempo trascorso tra la prima e la seconda
lettura.
Il problema riscontrato con le ottimizzazioni (già a partire dal livello 1),
è il seguente:
senza ottimizzazioni il codice mi restituisce tempi "presumibilmente" giusti
(c'è coerenza tra i log e il tempo reale trascorso), ma se provo a
introdurre -O1 o -O3 (con -O2 non ho provato, sinceramente) il discorso
cambia: se effettivamente passa, ad esempio, un minuto nell'esecuzione del
processo, nei log del programma vengono rilevati colpi di clock solo per
dieci secondi.
Chiaro?
Ho provato ad indagare sul manuale del gcc, ma non mi è chiaro il
funzionamento dei vari flag che vengono attivati/disattivati (per ignoranza
relativa mia, e perchè non ho mai avuto il piacere di approfondire
l'argomento) e quindi non riesco a capacitarmi delle cause di questo
sballamento dei valori...
Ipotesi intelligenti (non lo metto in dubbio ;) ) sono ben accette...
        Fabbro

 cambia:
non so se il tuo problema primario consiste nell'avere un programma
funzionante o capire perche' le ottimizzazioni spinte creano problemi
al tuo programma.
Se lo scopo fosse avere un programma che funziona, io proverei a
compilare a parte le funzioni che ti servono per il tuo orologio.
Cosi' potresti ottenere un oggetto *.o da linkare col resto
del codice eventualmente ottimizzato in modo piu' spinto.
O potresti anche crearti una mini-libreria.
ciao,
v.

 v.
Grazie, ciao
        Fabbro