Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Aumentare la prestazioni con l'aiuto delle cflags
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

Goto page 1, 2, 3, 4  Next  
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian)
View previous topic :: View next topic  
Author Message
rete27
Tux's lil' helper
Tux's lil' helper


Joined: 26 Feb 2007
Posts: 86

PostPosted: Wed Jan 02, 2008 12:06 pm    Post subject: Aumentare la prestazioni con l'aiuto delle cflags Reply with quote

Ciao... sto provando a variare le cflags per vedere fino a che punto riesco ad ottimizzare la compilazione e di conseguenza tutto l'intero andazzo della macchina.
vi posto il cpuinfo
Code:

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 7
model name      : Pentium III (Katmai)
stepping        : 3
cpu MHz         : 451.053
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 mtrr pge mca cmov pat pse36 mmx fxsr sse
bogomips        : 902.51
clflush size    : 32

attualmente le cflags che uso sono
Code:
-march=pentium3 -O2 -pipe -fomit-frame-pointer


ora volevo provare a fare delle modifiche ma non so come posso avere un riscontro, o meglio come posso fare una compilazione "fittizia" ne troppo lunga ma ne troppo breve ?
e come posso monitorare la durata della compilazione stessa ?
_________________
Al mondo ci sono 10 tipi di persone quelle che conoscono il sistema binario e quelle che non lo conoscono...
Back to top
View user's profile Send private message
Ic3M4n
Advocate
Advocate


Joined: 02 Nov 2004
Posts: 3489
Location: Bergamo.

PostPosted: Wed Jan 02, 2008 1:41 pm    Post subject: Reply with quote

secondo me il gioco non ne vale la candela. meglio avere delle impostazioni standard ed utilizzare quelle. L'unica cosa che io ho di differente rispetto a te è l'utilizzo diLDFLAGS -Wl, ---as-needed che dovrebbero "teoricamente" produrre dei file più piccoli, però non è che al momento dell'utilizzo ti rendi conto di aver un computer che scheggia.
Back to top
View user's profile Send private message
rete27
Tux's lil' helper
Tux's lil' helper


Joined: 26 Feb 2007
Posts: 86

PostPosted: Wed Jan 02, 2008 5:47 pm    Post subject: Reply with quote

io ho provato così
Code:

#include <stdio.h>
#include <stdlib.h>

int fib (int num)
{
   if (num == 0)
      return 0;
   else if (num == 1)
      return 1;
   else
      return fib(num - 1) + fib(num - 2);
}

int main (int argc, char **argv)
{
   printf("%d\n", fib(atoi(argv[1])));
   
   return 0;
}


bene compilate con cc <nomefile> dopo date un bel "time ./<nomefile> 42"

e postate il risultato.

per ora il mio migliore è:

Quote:

real 0m7.894s
user 0m7.894s
sys 0m0.002s


che ne dite ? però questo risulatato lo ottenuto su
Quote:
processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Xeon(TM) CPU 3.20GHz
stepping : 1
cpu MHz : 3200.000
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl cid cx16 xtpr
bogomips : 6402.66

mancano gli altri 3 processori


sulla macchina di prima il real è attorno ai 58 sec...

che ne dite ?
_________________
Al mondo ci sono 10 tipi di persone quelle che conoscono il sistema binario e quelle che non lo conoscono...
Back to top
View user's profile Send private message
Kernel78
Moderator
Moderator


Joined: 24 Jun 2005
Posts: 3654

PostPosted: Wed Jan 02, 2008 6:08 pm    Post subject: Reply with quote

Stai cercando di raggiungere un obiettivo effimero seguendo il percorso sbagliato.

Ottenere il tempo più veloce nella compilazione non è assolutamente sinonimo di sistema più veloce, se togli le ottimizzazioni di sicuro compili molto più in fretta ma ti trovi con un sistema "non ottimizzato", ti suggerisco quindi di accantonare il desiderio di spaccare il secondo nella compilazione.

Inoltre avere un sistema spremuto al massimo comporta scegliere CFLAGS specifiche per ogni singolo pacchetto visto che per esempio un programma che fa uso intensivo della cpu potrebbe avvantaggiarsi di -O3 mentre un programma che usa pochissima cpu potrebbe rendere il sistema più performante usando -Os

Secondo me se proprio vuoi un sistema spinto usa CFLAGS standard (così almeno non ti vai a cercare problemi) e comprati un buon quantitativo di RAM per montare / in ram (c'è una discussione che spiega come fare), in questo modo il tempo di caricamento si riduce drasticamente.
_________________
Le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza. (Larry Wall).
Prima di postare un file togli i commenti con
Code:
grep -vE '(^[[:space:]]*($|(#|!|;|//)))'
Back to top
View user's profile Send private message
djinnZ
Advocate
Advocate


Joined: 02 Nov 2006
Posts: 4831
Location: somewhere in L.O.S.

PostPosted: Wed Jan 02, 2008 6:22 pm    Post subject: Reply with quote

Ic3M4n wrote:
...

sono d'accordo, se proprio vuoi cercare prestazioni verifica la possibilità di usare le ldflag (--as-need e -O1 sono solo non supportate mentre tutte le altre sono propriamente sconsigliate, la differenza c'è) e l'ottimizzazione per pacchetto.
In ogni caso l'impatto delle ottimizzazioni varia da programma a programma.
_________________
scita et risus abundant in ore stultorum sed etiam semper severi insani sunt:wink:
mala tempora currunt...mater stultorum semper pregna est :evil:
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist :wink:
Back to top
View user's profile Send private message
GiRa
l33t
l33t


Joined: 07 Apr 2005
Posts: 717

PostPosted: Thu Jan 03, 2008 4:09 pm    Post subject: Reply with quote

Potresti togliere altri simboli con -momit-leaf-frame-pointer, per quanto riguarda il togliere le liberie linkate ho letto di ebuild che non compilano.

Potresti usare il prelink al limite.
Back to top
View user's profile Send private message
riverdragon
Veteran
Veteran


Joined: 14 Sep 2006
Posts: 1269
Location: Verona

PostPosted: Thu Jan 03, 2008 4:31 pm    Post subject: Reply with quote

Momit-leaf-frame-pointer mi risulta sia una versione più leggera di fomit-frame-pointer, che libera alcuni registri senza perdere tutte le informazioni necessarie per il debugging. Se questo è corretto fomit-frame-pointer rende inutile momit-leaf-frame-pointer.

EDIT: da qui:
gnu wrote:
-momit-leaf-frame-pointer
Don't keep the frame pointer in a register for leaf functions. This avoids the instructions to save, set up and restore frame pointers and makes an extra register available in leaf functions. The option -fomit-frame-pointer removes the frame pointer for all functions which might make debugging harder.


Ma leggete anche qui... dice il contrario :?
Back to top
View user's profile Send private message
GiRa
l33t
l33t


Joined: 07 Apr 2005
Posts: 717

PostPosted: Thu Jan 03, 2008 5:48 pm    Post subject: Reply with quote

Su un P3 servono entrambe.

Non chiedete come faccio a saperlo. Me lo ricordo e basta :) La teoria è andata persa negli annali.
Back to top
View user's profile Send private message
Flameeyes
Retired Dev
Retired Dev


Joined: 30 Mar 2005
Posts: 189
Location: London, Europe

PostPosted: Thu Jan 03, 2008 8:26 pm    Post subject: Reply with quote

No non servono entrambe, e soprattutto non può esserci nulla di diverso tra P3 e qualsiasi altro processore della famiglia x86. Tenere entrambe ha solo l'effetto di usare -momitetcetcetc quando -fomit-frame-pointer viene filtrata.

E prelink è mezzo inutile (qui un po' di motivazioni), finirebbe probabilmente a richiedere troppo tempo su un P3 e ancora peggio dovrebbe usare l'opzione -m, che con quanto scritto sul link non dà esattamente un bel risultato.

Un consiglio? -O2, -march, -fomit-frame-pointer, e basta. Tentare di spingere GCC spesso può avere effetti contrari.

Il tuo benchmark non è esaustivo, ci sono decine di variabili da considerare, non solo la velocità di masticazione dei numeri, se il programma è piccolo, sarà tenuto in cache dal sistema, se il programma è più complesso, forzare ottimizzazioni pesanti rischia di aumentare la dimensione del codice al punto tale che l'esecuzione diventa più lenta.

Oltretutto il punto cruciale di velocità di un software moderno sta nelle librerie condivise, che usano un registro in meno per le ottimizzazioni, tentare di alzarle troppo rischia di creare codice non funzionante,, o più lento per il save/restore dei registri.
_________________
You want to know what I'm working on right now? Just follow my blog.
Back to top
View user's profile Send private message
rete27
Tux's lil' helper
Tux's lil' helper


Joined: 26 Feb 2007
Posts: 86

PostPosted: Thu Jan 03, 2008 9:17 pm    Post subject: Reply with quote

Se non sbaglio il prelink velocizza solo l'avvio dei programmi e non aiuta ad aumentare le prestazioni in termini di computazione...ho fatto varie prove con varie cflags e varie ottimizzazioni in fase di compilazione con il classico cc -O3 ma i tempi non cambiano.

la cosa strana è che passando da -O2 a -O3 e inserendo anche -funroll-loops le prestazioni non variano...

non capisco proprio il perché...o che la macchina è già "tirata" e non ne vuole sapere...
_________________
Al mondo ci sono 10 tipi di persone quelle che conoscono il sistema binario e quelle che non lo conoscono...
Back to top
View user's profile Send private message
riverdragon
Veteran
Veteran


Joined: 14 Sep 2006
Posts: 1269
Location: Verona

PostPosted: Fri Jan 04, 2008 7:34 pm    Post subject: Reply with quote

Flameeyes wrote:
Tenere entrambe ha solo l'effetto di usare -momitetcetcetc quando -fomit-frame-pointer viene filtrata.
E quand'è che viene filtrata?
Back to top
View user's profile Send private message
Cazzantonio
Bodhisattva
Bodhisattva


Joined: 20 Mar 2004
Posts: 4514
Location: Somewere around the world

PostPosted: Fri Jan 04, 2008 8:50 pm    Post subject: Reply with quote

Che io sapessi l'LDFLAG --as-needed aveva seri problemi di compatibilità con un sacco di programmi (gtk mi pare). In pratica usandola eri sicuro che qualche cosa non avrebbe funzionato.
E' cambiato qualcosa? E' diventata "usabile"?
_________________
Any mans death diminishes me, because I am involved in Mankinde; and therefore never send to know for whom the bell tolls; It tolls for thee.
-John Donne
Back to top
View user's profile Send private message
djinnZ
Advocate
Advocate


Joined: 02 Nov 2006
Posts: 4831
Location: somewhere in L.O.S.

PostPosted: Sat Jan 05, 2008 12:49 pm    Post subject: Reply with quote

rete27 wrote:
Se non sbaglio il prelink velocizza solo l'avvio dei programmi

infatti ma con -O3 crea problemi e quando usi più volte il prelink sullo stesso eseguibile tende ad aumentarne le dimensioni.

rete27 wrote:
la cosa strana è che passando da -O2 a -O3 e inserendo anche -funroll-loops le prestazioni non variano...
in realtà sono i mattoni a beneficiare di -O3 ma poi funzionano male e non serve a molto (e viene filtrata, vedi OOo).
Nota che -O3 sul gcc 4.x corrente i gentoo "normale" non funziona benissimo.

@cazzantonio: funziona se la usi con criterio su alcuni pacchetti. Ho kdelibs compilato senza e gli applicativi kde compilati con che funzionano egregiamente.
Per esempio mysql va con --as-need ma la sua libreria interna no (quindi in attesa di tovare un modo di convincerlo a compilare giustamente meglio disabilitarla).
_________________
scita et risus abundant in ore stultorum sed etiam semper severi insani sunt:wink:
mala tempora currunt...mater stultorum semper pregna est :evil:
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist :wink:
Back to top
View user's profile Send private message
Cazzantonio
Bodhisattva
Bodhisattva


Joined: 20 Mar 2004
Posts: 4514
Location: Somewere around the world

PostPosted: Sat Jan 05, 2008 1:33 pm    Post subject: Reply with quote

djinnZ wrote:
@cazzantonio: funziona se la usi con criterio su alcuni pacchetti. Ho kdelibs compilato senza e gli applicativi kde compilati con che funzionano egregiamente.
Per esempio mysql va con --as-need ma la sua libreria interna no (quindi in attesa di tovare un modo di convincerlo a compilare giustamente meglio disabilitarla).
Si anche io sapevo che bisognava scegliere con il misurino i programmi compatibili. Siccome l'avevo vista consigliare sportivamente mi era venuto il dubbio che fosse utilizzabile tranquillamente nel make.conf
_________________
Any mans death diminishes me, because I am involved in Mankinde; and therefore never send to know for whom the bell tolls; It tolls for thee.
-John Donne
Back to top
View user's profile Send private message
Ic3M4n
Advocate
Advocate


Joined: 02 Nov 2004
Posts: 3489
Location: Bergamo.

PostPosted: Sat Jan 05, 2008 7:49 pm    Post subject: Reply with quote

io è un bel po' che la utilizzo. tutto il sistema è compilato con as needed. non so dirti però se nel frattempo i devel gentoo la filtrino a livello di ebuild.
Back to top
View user's profile Send private message
Flameeyes
Retired Dev
Retired Dev


Joined: 30 Mar 2005
Posts: 189
Location: London, Europe

PostPosted: Sat Jan 05, 2008 10:30 pm    Post subject: Reply with quote

--as-needed NON viene filtrata, e NON deve essere filtrata. Se un pacchetto non compila con --as-needed è rotto, filtrarla nasconderebbe solo il difetto.

Dopo questa premessa, --as-needed non è _ufficialmente_ supportata, ma è comunque stabile, considerando che ricevo buona parte dei bug a riguardo, è da un pezzo che non ne vedo per pacchetti comuni. Molti dev ormai la usano sulle loro macchine e questo aiuta.

Non capisco che problemi dovrebbe avere MySQL: io ce l'ho installato sia da ~amd64 che da amd64 (su un chroot) e funziona perfettamente.

C'è una guida (che ho scritto io) su come correggere i problemi con --as-needed, per chi fosse interessato.

Per il resto, -O3 è più probabile che rompa un eseguibile piuttosto che farlo diventare più veloce... e per quanto riguarda -funroll-loops... scusate, ma a me viene da ridere in faccia a chiunque si aspetti che faccia qualcosa di utile.

Srotolare i cicli è utile solo quando i cicli sono _molto_ piccoli, e in quei casi di solito se ne occupa GCC a fare lo srotolamento. Con -funroll-loops è più probabile che il codice aumenti sproporzionatamente di dimensione, e visto che dubito che siate tutti qua ad usare Xeon con 4MB di cache, vi lascio intuire che effetto fa l'aumentare la dimensione del codice sulla cache del processore.
_________________
You want to know what I'm working on right now? Just follow my blog.
Back to top
View user's profile Send private message
Kernel78
Moderator
Moderator


Joined: 24 Jun 2005
Posts: 3654

PostPosted: Sun Jan 06, 2008 9:36 am    Post subject: Reply with quote

Flameeyes wrote:
C'è una guida (che ho scritto io) su come correggere i problemi con --as-needed, per chi fosse interessato.

presumo tu ti riferisca a questa, giusto ?
_________________
Le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza. (Larry Wall).
Prima di postare un file togli i commenti con
Code:
grep -vE '(^[[:space:]]*($|(#|!|;|//)))'
Back to top
View user's profile Send private message
bandreabis
Advocate
Advocate


Joined: 18 Feb 2005
Posts: 2490
Location: イタリアのロディで

PostPosted: Sun Jan 06, 2008 11:52 am    Post subject: Reply with quote

Kernel78 wrote:
Flameeyes wrote:
C'è una guida (che ho scritto io) su come correggere i problemi con --as-needed, per chi fosse interessato.

presumo tu ti riferisca a questa, giusto ?


Se ho capito bene questa flag funziona solo su amd64 compilata come x86_64, giusto?
_________________
Il numero di post non fa di me un esperto! Anzi!
Back to top
View user's profile Send private message
lavish
Bodhisattva
Bodhisattva


Joined: 13 Sep 2004
Posts: 4296

PostPosted: Sun Jan 06, 2008 12:35 pm    Post subject: Reply with quote

bandreabis wrote:
Kernel78 wrote:
Flameeyes wrote:
C'è una guida (che ho scritto io) su come correggere i problemi con --as-needed, per chi fosse interessato.

presumo tu ti riferisca a questa, giusto ?


Se ho capito bene questa flag funziona solo su amd64 compilata come x86_64, giusto?


Secondo me dovresti controllare il tuo inglese ;)

Quote:
This flag should (note again the conditional) work on every Linux platform supported by binutils, but tests are being done only on AMD64 at the moment (some unofficial testing is being done on PPC too, but problems with binutils mix up their validity). It's known not to work on FreeBSD and probably does not work on other non-Linux targets.

_________________
minimalblue.com | secgroup.github.io/
Back to top
View user's profile Send private message
djinnZ
Advocate
Advocate


Joined: 02 Nov 2006
Posts: 4831
Location: somewhere in L.O.S.

PostPosted: Sun Jan 06, 2008 12:58 pm    Post subject: Reply with quote

Flameeyes wrote:
Non capisco che problemi dovrebbe avere MySQL: io ce l'ho installato sia da ~amd64 che da amd64 (su un chroot) e funziona perfettamente.


Mysql non ha alcun problema, funziona perfettamente, ma compilato con --as-need ho avuto problemi di linking verso libmysqlclient con alcuni pacchetti non ricordo se DBD o ODBC.
Visto che per il momento mysql è li quasi per bellezza non ho investigato più di tanto e la ho rimossa. Dopo di che me ne sono dimenticato e mi è venuto a mente quando ho letto il thread.
_________________
scita et risus abundant in ore stultorum sed etiam semper severi insani sunt:wink:
mala tempora currunt...mater stultorum semper pregna est :evil:
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist :wink:
Back to top
View user's profile Send private message
Flameeyes
Retired Dev
Retired Dev


Joined: 30 Mar 2005
Posts: 189
Location: London, Europe

PostPosted: Sun Jan 06, 2008 1:07 pm    Post subject: Reply with quote

Il problema è negli altri pacchetti (ODBC suppongo, visto che non l'ho mai usato, DBD se è quello di Perl funziona ne son sicuro), non in MySQL :)
_________________
You want to know what I'm working on right now? Just follow my blog.
Back to top
View user's profile Send private message
!equilibrium
Bodhisattva
Bodhisattva


Joined: 06 Jun 2004
Posts: 2109
Location: MI/BG/LC

PostPosted: Mon Jan 07, 2008 4:18 pm    Post subject: Re: Aumentare la prestazioni con l'aiuto delle cflags Reply with quote

rete27 wrote:
flags : fpu vme de pse tsc msr pae mce cx8 mtrr pge mca cmov pat pse36 mmx fxsr sse


vedo che il tuo P3 supporta le SSE, quindi potresti provare ad usare -mfpmath=sse, ma prima di farlo assicurati due cose:
- che la velocità di clock della FPU sia uguale e NON inferiore a quella della CPU;
- che sia una SSE completa, cioè che abbia una FPU di tipo 'double precision' e non 'single precision', altrimenti il gioco non ne vale la candela (il beneficio che ottieni non è apprezzabile)
_________________
Arch Tester for Gentoo/FreeBSD
Equilibrium's Universe

all my contents are released under the Creative Commons Licence by-nc-nd 2.5
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4788
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Mon Jan 07, 2008 8:53 pm    Post subject: Reply with quote

Flameeyes wrote:
--as-needed NON viene filtrata, e NON deve essere filtrata.

io addirittura mi aspetterei qualcosa del tutto opposto, ma non so se quello che penso sia vero o abbia senso.

secondo me, se un pacchetto funziona bene con --as-needed e gli sviluppatori upstream e/o l'estensore dell'ebuild hanno configurato opportunamente le cose, emerge dovrebbe selezionare automaticamente la flag senza l'intervento esplicito dell'utente.

è una stupidaggine pazzesca o è qualcosa che accade realmente in qualche occasione?
_________________
vu vu vu
gentù
mi piaci tu
Back to top
View user's profile Send private message
MeMyselfAndI
l33t
l33t


Joined: 15 Nov 2005
Posts: 784
Location: Between the monitor and the chair

PostPosted: Mon Jan 07, 2008 8:59 pm    Post subject: Reply with quote

non essendo supportata direttamente da portage non credo che possa avvenire automaticamente.. non avrebbe molto senso !
Back to top
View user's profile Send private message
Flameeyes
Retired Dev
Retired Dev


Joined: 30 Mar 2005
Posts: 189
Location: London, Europe

PostPosted: Tue Jan 08, 2008 12:15 am    Post subject: Reply with quote

Alcuni upstream (gettext, libiconv, elfutils, gxine) "vedono" un linker compatibile con --as-needed e lo attivano di default nel configure script.

Se fossi ancora nel team KDE avrei probabilmente inserito una dipendenza su binutils moderne e forzato --enable-new-ldflags (che non fa altro che abilitare --as-needed su Gentoo, visto che --enable-new-dtags è _sempre_ abilitato) per le ebuild di KDE...
_________________
You want to know what I'm working on right now? Just follow my blog.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) All times are GMT
Goto page 1, 2, 3, 4  Next
Page 1 of 4

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum