# [risolto] CFLAG in make.conf

## alexbgl

Vorrei sapere cosa mi conviene mettere in -march=

lascio i686 o metto pentium4 o prescott?

Vi posto l'output di /proc/cpuinfo:

```

processor       : 0

vendor_id       : GenuineIntel

cpu family      : 15

model           : 2

model name      : Intel(R) Pentium(R) 4 CPU 2.66GHz

stepping        : 9

cpu MHz         : 2333.275

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 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe cid xtpr

bogomips        : 5322.97

```

Last edited by alexbgl on Mon May 28, 2007 3:55 pm; edited 1 time in total

----------

## dark_knight

Questa pagina dice -march=pentium4 .

----------

## alexbgl

perfetto

----------

## riccardo

Confermo quanto dice dark_knight, ho messo anch'io -march=pentium4

Riccardo

----------

## Cazzantonio

Io ormai uso march=i686 dovunque e non ho mai notato cali prestazionali rispetto a prima. Il vantaggio è che puoi spostare il sistema operativo su qualsiasi macchina senza dover ricompilare.

Per esempio:

```
CFLAGS="-O2 -march=i686 -mmmx -msse -fomit-frame-pointer -pipe"
```

viene accettata su praticamente tutti i processori dal pentium 3 in su

----------

## alexbgl

 *Cazzantonio wrote:*   

> 
> 
> Per esempio:
> 
> ```
> ...

 

Scusa l'ingnoranza: cosa vuol dire -mmmx e -msse?

----------

## Cazzantonio

Per abilitare le istruzioni mmx e sse (presenti in tutti i pc dal pentium 3 in su). Vengono automaticamente selezionate se imposti march=pentium3 o superiore.

Effettivamente anche la loro utilità è dubbia per cui potresti omettere -msse e lasciare solo -mmmx (compatibilità dal pentium mmx in su) oppure rimuoverle entrambe... dubito servano davvero a qualcosa.

I programmi che usano tali estensioni (tipo mplayer mi pare) dovrebbero avere delle use flag apposite per abilitarle (USE="mmx sse etc...") mentre per gli altri sono probabilmente inutili (se un programma non è scritto specificatamente per tali estensioni può il gcc farci qualcosa? dubito...).

Nello specifico esistono le seguenti use:

```
mmx mmxext sse sse2 3dnow 3dnowext
```

selezionabili a seconda  delle estensioni che vuoi abilitare nei programmi che le supportano (sono per la maggior parte programmi legati all'editing audio/video).

Per vedere le estensioni supprotate dalla tua cpu prova

```
cat /proc/cpuinfo |grep flags
```

e guarda quali delle precedenti sono presenti.

Non c'entra nulla ma io ho avuto un po' di problemi con -mfpmath=sse (che un tempo abilitavo) perché cambia la precisione numerica a cui vengono eseguiti i conti... forse sono più veloci ma penso abbiano meno bit di precisione rispetto all'fpu standard (387) e le mie simulazioni di calcolo numerico (programmi scritti da me... quindi potrebbe essere anche un bug del codice) sputavano fuori risultati leggermente diversi e meno precisi...

----------

## xveilsidex

ma se non sbaglio queste istruzioni   3dnow 3dnowext  sono dei processori athlon e non pentium!

----------

## Cazzantonio

 *xveilsidex wrote:*   

> ma se non sbaglio queste istruzioni   3dnow 3dnowext  sono dei processori athlon e non pentium!

 

Si certo... per questo gli ho detto di guardare in /proc/cpuinfo prima di abilitare a caso delle istruzioni... mi pare tuttavia che i pentium più recenti abbiano le 3dnow (può essere anche una cazzata) così come gli athlon64 mi pare abbiano le sse3...

Comunque se usi march=tuoprocessore vengono già abilitate di default quindi non hai bisogno di scomodarti... sono utili solo se usi march=i686 ma vuoi abilitare delle istruzioni ulteriori (anche se l'utilità è dubbia come dicevo prima).

----------

## xveilsidex

 *Cazzantonio wrote:*   

>  *xveilsidex wrote:*   ma se non sbaglio queste istruzioni   3dnow 3dnowext  sono dei processori athlon e non pentium! 
> 
> Si certo... per questo gli ho detto di guardare in /proc/cpuinfo prima di abilitare a caso delle istruzioni... mi pare tuttavia che i pentium più recenti abbiano le 3dnow (può essere anche una cazzata) così come gli athlon64 mi pare abbiano le sse3...
> 
> Comunque se usi march=tuoprocessore vengono già abilitate di default quindi non hai bisogno di scomodarti... sono utili solo se usi march=i686 ma vuoi abilitare delle istruzioni ulteriori (anche se l'utilità è dubbia come dicevo prima).

 

spesso anch'io mi sono chiesto se abilitando più flag ci fossero dei miglioramenti. qualcuno ha mai fatto qualche benchmark per testare effettivamente le reali prestazioni con flag attive oppure no?

----------

## Cazzantonio

Si ma dipendono tutti dall'applicazione che stai testando... ovvero le ottimizzazioni dipendono dal codice che stai ottimizzando ed è difficile stabilire delle opzioni generiche che vadano bene per tutti (per questo esistono i vari -O[1,2,3]).

La cosa migliore è provare... io l'ho  fatto e sinceramente non vedo la differenza tra march=ilmioprocessore e march=i686 a parte il fatto che posso esportare i binari su un'altra macchina...

Puoi passare una vita a guardare i benchmark e poi scoprire che non è servito assolutamente a nulla.

----------

## djinnZ

per mesa, X, mplayer, beryl, kdelibs e roba del genere serve a qualcosa, per il resto non tanto. Usare -march=i686 -mmsse etc. o -march=pentium4 è la stessa cosa solo che l'attivazione dell'ottimizzaione usando le sse, sse2 etc è decisa dal compilatore e non la specifichi a mano. Cosi come ogni -Ox corrsponde ad una serie di -fvattelappesca.

----------

## Cazzantonio

La verifica sperimentale dell'importanza di -march è presto fatta:

Vi siete mai accorti di una differenza sostanziale (e intendo "apprezzabile a occhio nudo") tra altre distro precompilate e gentoo? (in termini di prestazioni... non di configurabilità   :Wink:  ). Io no! Anzi! Slackware in particolar modo, ma anche ubuntu su molte applicazioni vanno più veloci! Ok è solo una mia impressione... tuttavia non so perché ma ho la netta senzasione che il sistema sia più "agile" con i pacchetti precompilati di altre distro   :Rolling Eyes: 

Imho le ottimizzazioni importanti non sono i vari -march, inoltre bisognerebbe scegliere le opzioni giuste pacchetto per pacchetto (cosa chiaramente impossibile a meno di non essere il mantainer di quel pacchetto   :Wink:  ).

Sono dell'idea che la vera forza di gentoo non siano le cflags (semmai una seccatura) ma le use flags! Dove veramente puoi configurare a piacimento ogni aspetto dei tuoi programmi.

----------

## alexbgl

Sono pienamente d'accordo con te!

Ma oltre a march ci saranno pure dei miglioramenti con altre flag, o no?

----------

## djinnZ

Non guardo con attenzione slack da un poco ma non credere che usino compilare -O1. In genere nelle distribuzioni binarie ti puoi permettere di usare delle ottimizzazioni abbastanza spinte visto che basta che compili una volta mentre su gentoo deve compilare dappertutto e con o senza alcune librerie etc.

Visto poi che il grosso delle istruzioni "specializzate" sono dedicate alla grafica e non mi sembri il tipo che passa il tempo a giocare non te ne accorgerai mai.

----------

