# CFLAGS per Pentium M

## gutter

Apro un nuovo post (sotto consiglio di fedeliallalinea) per fare maggiore chiarezza riguardo le cflags da usare nel caso di portatili con processori Pentium M (che spesso fanno parte dell'architettura centrino).

Come sappiamo esistono due release del core:

- banias (1 MB L2 cache)

- dothan (2 MB L2 cache)

Per quanto riguarda il primo di questi core (banias) ho trovato un post interessante cioè:

https://forums.gentoo.org/viewtopic.php?t=78780&highlight=acer+centrino

dove vengono specificate le CFLAGS sia nel caso in cui si usi GCC 3.3 che 3.4. In tal caso il parametro usato per march è:

```

-march=pentium3 (GCC 3.3)

-march=pentium-m (GCC 3.4)
```

Il mio dubbio sorge nel caso di Pentium M con core dothan.  Per quanto riguarda le CFLAGS nel caso di GCC 3.4 si potrebbero usare le precedenti. Ma nel caso di GCC 3.3 cosa conviene usare come march?!? pentium3 o pentium4.

----------

## Vendicatore

Per quanto riguarda il 3.3 ti consiglio di optare per pentium4, visto che se usi march=pentium3 non usi le sse2 che sono supportate dal processore.

Il fatto di avere piu' cache di L2 non dovrebbe influenzare piu' di tanto le ottimizzazioni.

Ps=usa -mtune al posto di -march, visto che quest'ultima e' li solo per compatibilita'

----------

## gutter

 *Vendicatore wrote:*   

> Per quanto riguarda il 3.3 ti consiglio di optare per pentium4, visto che se usi march=pentium3 non usi le sse2 che sono supportate dal processore.
> 
> [CUT]
> 
> 

 

Questo dove lo hai letto, io non sono riuscito a trovare nessun riferimento a ciò nel manuale di GCC.

 *Vendicatore wrote:*   

> 
> 
> [CUT]
> 
> Il fatto di avere piu' cache di L2 non dovrebbe influenzare piu' di tanto le ottimizzazioni.
> ...

 

Non saprei. Come sopra: hai un riferimento su cui basi la tua affermazione.

 *Vendicatore wrote:*   

> 
> 
> [CUT]
> 
> Ps=usa -mtune al posto di -march, visto che quest'ultima e' li solo per compatibilita'

 

Uhm   :Confused:   il manuale di GCC dice altro:

 *Il manuale di GCC wrote:*   

> -march=cpu-type
> 
>     Generate instructions for the machine type cpu-type. The choices for cpu-type are the same as for -mtune. Moreover, specifying -march=cpu-type implies -mtune=cpu-type. 

 

----------

## Vendicatore

 *gutter wrote:*   

>  *Vendicatore wrote:*   Per quanto riguarda il 3.3 ti consiglio di optare per pentium4, visto che se usi march=pentium3 non usi le sse2 che sono supportate dal processore.
> 
> [CUT]
> 
>  
> ...

 

I pentium 3 non hanno il supporto alle sse2, mentre il pentium-m (centrino) si. Se usi -arch=pentium3 de facto rinunci alle sse2. 

Non c'e' bisogno di leggerlo, e' una questione architetturale.

 *gutter wrote:*   

> 
> 
>  *Vendicatore wrote:*   
> 
> [CUT]
> ...

 

Anche qui il discorso e' abbastanza fumoso. Le ottimizzazioni di un compilatore riguardano principalmente il modo in cui determinate istruzioni/sequenze di istruzioni vengono tradotte in linguaggio macchina.

Questo dipende essenzialmente dall'arcitettura interna del processore: 

ad esempio (tralasciando il discorso sse2) i pentium 4 e gli athlon-xp (o athlon 64, quando eseguono condice a 32 bit) riguarda essenzialmente la lunghezza delle pipe di esecuzione. Infatti il p4 ha una pipe estremamente lunga (mi pare 20 stadi, ma potrei sbagliarmi) e questo significa che per funzionare a livello ottimale bisogna cercare di ridurre i casi in cui si ha una "pipe lock" (ovvero un attesa attiva sulla pipe per l'attesa del risultato di un operzione precedente direttamente connessa all'istruzione in corso), in quanto avendo una pipe piu' lunga aumenta "il danno" derivato dall'avvenire di questa condizione.

Quindi il codice ottimizzato per p4 avra un utilizzo "speculativo" (o cerchera una via "speculativa") di alcune operazioni atte a mantenere le pipes occupate e a massimizzarne l'efficienza.

Per quanto riguarda la cache di L1/2/3, indipendente dall'architettura che si sta utilizzando, piu' se ne ha meglio e' (in pratica limiti l'accesso alla memoria di sistema per piu' codice, e siccome nel migliore dei casi la ram e' a 400Mhz, avere un tampone da qualche Ghz non e' male).

Di fatti da quando esiste il p4 ha continuato ad aumentare la cache di L1/2 ma questo non ha portato ad altre ottimizzazioni di gcc.

 *gutter wrote:*   

> 
> 
>  *Vendicatore wrote:*   
> 
> [CUT]
> ...

 

Qui errore mio   :Rolling Eyes:  , mi ero confuso con -mcpu...

----------

## gutter

Grazie per la risposta  :Wink:  sei stato molto chiaro.   :Very Happy: 

----------

## federico

 *gutter wrote:*   

>  *Vendicatore wrote:*   Per quanto riguarda il 3.3 ti consiglio di optare per pentium4, visto che se usi march=pentium3 non usi le sse2 che sono supportate dal processore.
> 
> [CUT]
> 
>  
> ...

 

Si anche secondo me e' meglio cosi', io ho sempre usato cosi' col gcc 3.3

E' scritto nel man di gcc

 *man gcc wrote:*   

> 
> 
> pentium3, pentium3m
> 
> Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set support.
> ...

 

Quantunque secondo me e' opinabile la descrizione data di p-m

----------

## Taglia

 *Vendicatore wrote:*   

> 
> 
> Di fatti da quando esiste il p4 ha continuato ad aumentare la cache di L1/2 ma questo non ha portato ad altre ottimizzazioni di gcc.
> 
> 

 

Anche perchè i livelli di caching sono un meccanismo trasparente rispetto al programmatore e al compilatore (a parte qualche eccezione in cui si può effettivamente forzare un blocco a non essere rimosso dalla cache, ma dubito che ci siano tali meccanismi su un sistema PC ... lo vedo più utile per un sistema embedded magari )  :Very Happy: 

----------

## gutter

 *federico wrote:*   

> [
> 
> [CUT]
> 
> Quantunque secondo me e' opinabile la descrizione data di p-m

 

In che senso?

----------

## djpaccio

Ciau a tutti,

avrei una mezza idea di installare gentoo sul mio nuovo portatile, avevo già provato ad installarla nel desktop che avevo prima ed era andato tutto ok, mi piace molto.

Il portatile è dotato di un pentium-centrino, ho visto che solo la nuova versione di gcc-3.4 accetta le opzioni di compilazione ottimizzate per il mio processore, ( ma gcc-3.4 è ancora instabile, infatti ad un mio amico che l'ha provato ha avuto molti errori di compilazione con esso ). :Sad: 

Vorrei sapere che opzioni "sicure" posso usare per compilare correttamente programmi con un pentium-centrino, utilizzando la versione di gcc stabile?

Vi ringrazio in anticipo!!!!

Saluti

Federico

 :Wink: 

----------

## fedeliallalinea

Facciamo una ricerca almeno prima di postare, grazie

----------

## Lucacri

So che forse potrei essere leggermente OT. 

Vorrei sapere chi di voi ha provato il GCC 4.0 sul pentium-centrino, perche io sto aspettando a installarlo perche ho letto che ci sono innumerevoli errori di compilazione dei pacchetti in portage!

Grazie  :Smile: 

----------

## .:deadhead:.

Lucacri credo troverai interessanti i 2 thread sul gcc 4 che ci sono stati su questo forum di recente  :Rolling Eyes:  prova a cercare la prossima volta.

----------

## wolf3d

Ciao a tutti 

volevo sapere tra quelli che hanno un laptop con centrino che flags usano giusto per farmi un'idea (si ho già guardato in wiki, forum e google  :Sad:  )

io attualmente uso queste (trovate in un wiki, dove erano consigliate per evitare problemi in bootstrap...)

```
CFLAGS="-O2 -march=pentium3 -pipe -mfpmath=sse"
```

questa è la cpu 

```
ragnarok root # cat /proc/cpuinfo

processor       : 0

vendor_id       : GenuineIntel

cpu family      : 6

model           : 9

model name      : Intel(R) Pentium(R) M processor 1500MHz

stepping        : 5

cpu MHz         : 1496.343

cache size      : 1024 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 mce cx8 sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 tm pbe est tm2

bogomips        : 2957.31

```

Il laptop è un toshiba satellite pro m30

ah ultima cosa.. esiste qualche utility e/o database dove vedere tutti i tipi di processori? io non sono riuscito a trovare nulla.. 

mi spiego meglio centrino è generico.. dai valori di model family e stepping si dovrebbero ottenere informazioni più precise no? (tipo se è un core dothan o banias etc)

ciao ^^

----------

## gutter

Fatto il merge del thread di wolf3d con questo.

@wolf3d: molte delle risposte alle tue domande sono contenue in questo thread, buona lettura  :Wink: 

----------

## wolf3d

grazieeee!!  leggo subbbito  :Exclamation: 

----------

## nick_spacca

Io con questo processore qui (con attivo cpufreq & enhanced speedstep...):

```
nick@nick-book nick $ cat /proc/cpuinfo 

processor       : 0

vendor_id       : GenuineIntel

cpu family      : 6

model           : 13

model name      : Intel(R) Pentium(R) M processor 1.70GHz

stepping        : 6

cpu MHz         : 599.523

cache size      : 2048 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 mce cx8 sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss tm pbe est tm2

bogomips        : 1188.32

```

uso queste CFlag:

```
CFLAGS="-O2 -pipe -march=pentium-m  -mfpmath=sse -mmmx -msse -msse2 -fforce-addr -fprefetch-loop-arrays  -fomit-frame-pointer"
```

con questo compilatore:

```
nick@nick-book nick $ gcc -v

(...)

gcc version 3.4.4 (Gentoo 3.4.4, ssp-3.4.4-1.0, pie-8.7.8)

```

che ho trovato in un thread internazionale sul pentium-m (ma non ricordo quale...sorry) e non ho mai -al momento- avuto problemi di compilazione di nessun tipo di programma.....Ed ho un sistema completo con anche programmi ~x86 e M~x86....

Come prestazioni pero' non ho mai fatto un confronto con altri tipi di flag e/o compilatori (sono partito da stage 1 ricompilando tutto con gcc 3.4 praticamente da subito....), pero' devo dire che il processore viaggia che e' una bellezza.... :Cool: 

----------

## f0llia

Ciao a tutti, vorrei sapere che CFLAG utilizzate per un notebook centrino ? Che ottimizzazioni ?

Qualcuno ha provato qualcosa in particolare e ha delle buone prestazioni ? 

Tnx all  :Wink: 

----------

## nick_spacca

Ci sono molti 3D in  cui se ne parla, italiani ed internazionali!!!

Uno di questi lo trovi qui :Wink: 

----------

## f0llia

ti ringrazio  :Wink:  Leggo tutto..  :Smile: 

----------

## gutter

Fatto il merge del thread di f0llia con questo.

----------

## MrDirt Gizmo

Scusate la banalità della domanda,

il compilatore presente nell'ultima versione del live cd di gentoo è lo stesso che poi uno si ritrova nel sistema?

Se si, quello del minimal cd che versione di gcc è?

Se uno volesse usare un compilatore più aggiornato al momento della compilazione / installazione del sistema, come potrebbe fare?

Questa domanda nasce dal fatto che specificando come march=pentiumm, la compilazione produce un sacco di errori.

Grazie

----------

## wolf3d

mi sembra che 'pentiumm' sia per le gcc > 3.4 che sono ancora masked e cmq sul live cd ci sono le 3.3

----------

## MrDirt Gizmo

 *wolf3d wrote:*   

> mi sembra che 'pentiumm' sia per le gcc > 3.4 che sono ancora masked e cmq sul live cd ci sono le 3.3

 

Appunto, per compilare con il corretto flag, partendo ad installare un sistema da zero su di una macchina con il dothan, come si potrebbe fare?

----------

## wolf3d

ho lanciato un search generico ma dovrebbe andare bene

----------

## Apetrini

Ho un portatile centrino.

Ora uso il gcc 3.4 e chiaramente la flag è settata su pentium-m

Quando usavo il gcc 3.3 era settata su pentium3 e tra le USE c'era la flag "sse" e "sse2".

Tutto qua!

Sul gcc 3.3 ho preferito usare pentium3 piuttosto che pentium4 perche il centrino è molto simile al pentium3, anzi è quasi uguale, è solo che ha la cache piu ampia e il supporto alle sse2.

Ciao.

----------

## MrDirt Gizmo

 *wolf3d wrote:*   

> ho lanciato un search generico ma dovrebbe andare bene

 

Va benissimo, grazie

----------

## Thegreatone

Ciao a tutti!

Attualmente cul mio Centrino 1.5 uso GCC 3.3.6 con le seguenti CFLAGS:

```
CFLAGS="-O2 -mcpu=i686 -fomit-frame-pointer -march=pentium3 -mfpmath=sse -msse2 -mmmx"
```

Vale la pena fare l'aggiornamento a GCC 3.4 e adattare le CFLAGS a questo compilatore?

Grazie mille

Luca

----------

## neryo

 *Thegreatone wrote:*   

> 
> 
> Vale la pena fare l'aggiornamento a GCC 3.4 e adattare le CFLAGS a questo compilatore?
> 
> 

 

se fai un ricerca questo tipo di argomento è stato trattato molte volte.

----------

## Cazzantonio

per esempio qua

[mod]topic mergiato[/mod]

io uso  *Quote:*   

> CFLAGS="-O2 -march=i686 -mmmx -msse -mfpmath=sse,387 -pipe -fomit-frame-pointer -momit-leaf-frame-pointer -fno-ident -ffast-math"

 

e non ho mai notato alcuna differenza nelle prestazioni... fai te

----------

## federico

 *Cazzantonio wrote:*   

> per esempio qua
> 
> [mod]topic mergiato[/mod]
> 
> io uso  *Quote:*   CFLAGS="-O2 -march=i686 -mmmx -msse -mfpmath=sse,387 -pipe -fomit-frame-pointer -momit-leaf-frame-pointer -fno-ident -ffast-math" 
> ...

 

Differenza rispetto cosa?

----------

## Cazzantonio

 *federico wrote:*   

> Differenza rispetto cosa?

 

Rispetto ad usare una march specifica... il gcc 3.4 ha questo in più per i processori centrino no?

p.s. anche le altre cflags sono lì per inerzia... effettivamente le potrei anche togliere...

----------

## Peach

io ho un portatile con intel crentrino

e con gcc 3.3 uso costantemente queste flag: 

```
CFLAGS="-O2 -march=pentium4 -pipe -fomit-frame-pointer -ffast-math"
```

ma -badabén- che non saprei dire se cambia molto tra march pentium4 e pentium3... forse la soluzione proposta da Thegreatone è la migliore?

Inoltre mi sono state consigliate queste flag se volessi passare a gcc 3.4 :

```
CFLAGS="-O2 -march=pentium-m -mtune=pentium-m -pipe -ftracer -fomit-frame-pointer -ffast-math -momit-leaf-frame-pointers"
```

----------

