Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
-march vs. -mcpu
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian)
View previous topic :: View next topic  
Author Message
Montag[SGU]
Tux's lil' helper
Tux's lil' helper


Joined: 24 Feb 2003
Posts: 95

PostPosted: Tue Apr 01, 2003 8:03 am    Post subject: -march vs. -mcpu Reply with quote

A quanto pare esistono dei problemi con march=pentium4 che non esistono con mpcu=pentium4, pero' non ho ben chiara la differenza tra i due.
Qualcuno e' ben disposto a spiegarla in poche parole e in termini semplici che anche un vermetto possa comprendere?
Grazie
Back to top
View user's profile Send private message
Dani Tsevech
Apprentice
Apprentice


Joined: 23 Mar 2003
Posts: 284

PostPosted: Tue Apr 01, 2003 8:14 am    Post subject: Reply with quote

Poche parole semplici? Certo! Due parole: man gcc :D :lol:
Back to top
View user's profile Send private message
Montag[SGU]
Tux's lil' helper
Tux's lil' helper


Joined: 24 Feb 2003
Posts: 95

PostPosted: Tue Apr 01, 2003 8:26 am    Post subject: Reply with quote

Hai mai provato a fare 'man gcc'? 'Guerra e pace' e' molto piu' stringato.
No, davvero, all'atto pratico cosa cambia nell'usare uno, l'altro o entrambi?
Back to top
View user's profile Send private message
Dani Tsevech
Apprentice
Apprentice


Joined: 23 Mar 2003
Posts: 284

PostPosted: Tue Apr 01, 2003 8:34 am    Post subject: Reply with quote

Lo so, stavo scherzando :D
-mcpu = processore
-march = architettura :)
Back to top
View user's profile Send private message
Montag[SGU]
Tux's lil' helper
Tux's lil' helper


Joined: 24 Feb 2003
Posts: 95

PostPosted: Tue Apr 01, 2003 12:16 pm    Post subject: Reply with quote

Vado sul pratico cosi' forse riusciamo a far uscire questo thread dall'ineffabile gorgo che lo sta risucchiando.

Ho questi tre casi:

gcc -march=pentium4
gcc -mcpu=pentium4
gcc -march=pentium4 -mcpu=pentium4

Io ero convinto che -march implicasse -mcpu, cioe' che le ottimizzazioni di -mcpu fossero un subset di quelle attivate da -march. Quindi, secondo la mia (distorta?) visione della realta', il primo e il terzo caso dovevano essere equivalenti.
Questa mia logica e' pero' crollata oggi, quando ho dovuto settare i cflags a -march=pentium3 -mcpu=pentium4 per ovviare al problema che attanaglia la compilazione di glibc con gcc-3.2.2.

Per quello chiedevo una minima spiegazione di quali ottimizzazioni comportassero questi due flag (tipo, -msse2 probabilmente viene attivato da -march=pentium4 e non da -mcpu, come invece sarebbe logico aspettarsi, perche' proprio le ss2 sembrano la causa del summenzionato problema di compilazione).
Quindi?
Quindi siate buoni.
Back to top
View user's profile Send private message
Dani Tsevech
Apprentice
Apprentice


Joined: 23 Mar 2003
Posts: 284

PostPosted: Tue Apr 01, 2003 12:30 pm    Post subject: Reply with quote

Vuoi un esempio pratico? Architettura del mio Athlon XP: i686
Cpu: athlon xp 2000+
Architettura <> CPU, son due cose indipendenti. Spero di essermi spiegato :)
Back to top
View user's profile Send private message
Montag[SGU]
Tux's lil' helper
Tux's lil' helper


Joined: 24 Feb 2003
Posts: 95

PostPosted: Wed Apr 02, 2003 12:42 pm    Post subject: Reply with quote

A questo punto non capisco se sono io che non so spiegarmi o che altro...

@Dani
Le tue precisazioni non mi sono molto d'aiuto visto che non e' cio' che ho chiesto, ma grazie ugualmente.
Back to top
View user's profile Send private message
teknux
Guru
Guru


Joined: 19 Feb 2003
Posts: 517
Location: Rome, IT

PostPosted: Wed Apr 02, 2003 1:42 pm    Post subject: Reply with quote

premetto che ne capisco meno di te, ma io dalla risposta di dani ho capito più o meno questo:

architettura = 686 che potrebbero essere celeron, pentium, athlon, duron etc... l'architettura però è comunque 686, diversa dai 586 (es i primi pentium...) e dalle precedenti ARCHITETTURE

cpu = è da intendersi marca e modello, quindi athlon o pntium (modello 4), differenti comunque da un pentium 3 che è comunque una architettura 686, idem per athlon, ora ci sono gli XP, prima erano solo k7 e così via...

spero di aver capito io, e che hai capito anche te ora :)
ciauz, tek
Back to top
View user's profile Send private message
bsolar
Bodhisattva
Bodhisattva


Joined: 12 Jan 2003
Posts: 2764

PostPosted: Wed Apr 02, 2003 1:59 pm    Post subject: Reply with quote

Innanzitutto -march include -mcpu.

-mcpu ottimizza, ma non genera istruzioni che rompono la compatibilità tra processori, quindi ad.es. usando -mcpu=pentium4 creo binari ottimizati che però ancora vanno su un i386.
-march invece permette di generare istruzioni specifiche per l'opzione usata, e non è detto che queste istruzioni funzionino su altri processori pur della stessa architettura.

Per quanto riguarda il manuale ciclopico di gcc, puoi usare l'info:
Code:
# info gcc

che è ipertestuale e diviso in categorie (l'Option Index è molto interessante e più comodo da usare) e sia in man che in info puoi cercare con "/".
_________________
I may not agree with what you say, but I'll defend to the death your right to say it.
Back to top
View user's profile Send private message
Dani Tsevech
Apprentice
Apprentice


Joined: 23 Mar 2003
Posts: 284

PostPosted: Wed Apr 02, 2003 3:07 pm    Post subject: Reply with quote

bsolar, sei sicuro? Mi pareva fosse il contrario, cpu ottimizza per lo specifico, arch per il generico :/
Back to top
View user's profile Send private message
bsolar
Bodhisattva
Bodhisattva


Joined: 12 Jan 2003
Posts: 2764

PostPosted: Wed Apr 02, 2003 3:28 pm    Post subject: Reply with quote

Dani Tsevech wrote:
bsolar, sei sicuro? Mi pareva fosse il contrario, cpu ottimizza per lo specifico, arch per il generico :/

info gcc wrote:
Intel 386 and AMD x86-64 Options
--------------------------------

These `-m' options are defined for the i386 and x86-64 family of
computers:

`-mcpu=CPU-TYPE'
Tune to CPU-TYPE everything applicable about the generated code,
except for the ABI and the set of available instructions. The
choices for CPU-TYPE are `i386', `i486', `i586', `i686',
`pentium', `pentium-mmx', `pentiumpro', `pentium2', `pentium3',
`pentium4', `k6', `k6-2', `k6-3', `athlon', `athlon-tbird',
`athlon-4', `athlon-xp' and `athlon-mp'.

While picking a specific CPU-TYPE will schedule things
appropriately for that particular chip, the compiler will not
generate any code that does not run on the i386 without the
`-march=CPU-TYPE' option being used. `i586' is equivalent to
`pentium' and `i686' is equivalent to `pentiumpro'. `k6' and
`athlon' are the AMD chips as opposed to the Intel ones.

`-march=CPU-TYPE'
Generate instructions for the machine type CPU-TYPE. The choices
for CPU-TYPE are the same as for `-mcpu'. Moreover, specifying
`-march=CPU-TYPE' implies `-mcpu=CPU-TYPE'.

Inoltre:
cat /etc/make.conf wrote:
# -mcpu=<cpu-type> means optimize code for the particular type of CPU without
# breaking compatibility with other CPUs.
#
# -march=<cpu-type> means to take full advantage of the ABI and instructions
# for the particular CPU; this will break compatibility with older CPUs (for
# example, -march=athlon-xp code will not run on a regular Athlon, and
# -march=i686 code will not run on a Pentium Classic.

_________________
I may not agree with what you say, but I'll defend to the death your right to say it.
Back to top
View user's profile Send private message
Montag[SGU]
Tux's lil' helper
Tux's lil' helper


Joined: 24 Feb 2003
Posts: 95

PostPosted: Wed Apr 02, 2003 7:01 pm    Post subject: Reply with quote

bsolar wrote:
Innanzitutto -march include -mcpu.

E' un punto di partenza ed e' quello che sapevo anch'io.
Ma march... "overrides" mcpu? Da quanto ho letto sembra che possano convivere, ma non ne capisco logica e precedenze.

Quote:

-mcpu ottimizza, ma non genera istruzioni che rompono la compatibilità tra processori, quindi ad.es. usando -mcpu=pentium4 creo binari ottimizati che però ancora vanno su un i386.
-march invece permette di generare istruzioni specifiche per l'opzione usata, e non è detto che queste istruzioni funzionino su altri processori pur della stessa architettura.


Va bene, ma queste ottimizzazioni sono disponibili anche singolarmente? Mi spiego: march e mcpu possono essere viste come delle "macro" (!) per un certo numero di ottimizzazioni che anche e' possibile attivare singolarmente con appositi flag o sono ottimizzazioni totalmente slegate dagli altri flag? Esempio: in '-march=pentium4 -mcpu=pentium4' sono comprese anche '-mmmx -msse -msse2' o no? Perche' dalla documentazione sembrerebbe di no, ma ho trovato voci contrastanti anche su questo; l'ultimo caso per il problema con glibc: '-march=pentium4 -mno-sse2' ne permette la corretta compilazione anche con gcc-3.2.x (fonte: mailing list gcc).

Quote:

Per quanto riguarda il manuale ciclopico di gcc, puoi usare l'info:
Code:
# info gcc

che è ipertestuale e diviso in categorie (l'Option Index è molto interessante e più comodo da usare) e sia in man che in info puoi cercare con "/".

Grazie, pur pescando dalle stesse risorse di 'man', 'info' le rende in effetti quantomeno piu' accessibili. Su gnu.org, inoltre, ho trovato on-line tutta la documentazione, pero' ancora non riesco a carpire le informazioni che cerco.

--
S+E
[ Perche' tanto odio? ]EOL
Back to top
View user's profile Send private message
Montag[SGU]
Tux's lil' helper
Tux's lil' helper


Joined: 24 Feb 2003
Posts: 95

PostPosted: Wed Apr 02, 2003 7:11 pm    Post subject: Reply with quote

teknux wrote:
spero di aver capito io, e che hai capito anche te ora :)

Grazie teknux, il mio problema non e' pero' tanto quello di non riuscire a comprendere il significato semantico di march e mcpu, ma proprio il cosa comporti l'adozione di uno o dell'altro (o di entrambi) ai fini delle ottimizzazioni in fase di compilazione.

--
S+E
[ Perche' tanto odio? ]EOL
Back to top
View user's profile Send private message
bsolar
Bodhisattva
Bodhisattva


Joined: 12 Jan 2003
Posts: 2764

PostPosted: Wed Apr 02, 2003 8:26 pm    Post subject: Reply with quote

OK, ho avuto una discussione in IRC che si può riassumere più o meno così: usa -march :roll:

Da quel che mi han detto non ha molto senso usare entrambe le opzioni, ma comunque non mi hanno spiegato cosa otterrei se lo facessi (il che è sospetto. Non è che cazzeggiavano?)

In effetti qualche dubbio ce l'ho. Ad es. se usassi -march=pentium3 -mcpu=i686 cosa ottengo? L'ottimizzazione -march o quella -mcpu? O un misto? O niente del tutto?

Misteri della fede...
_________________
I may not agree with what you say, but I'll defend to the death your right to say it.
Back to top
View user's profile Send private message
Dani Tsevech
Apprentice
Apprentice


Joined: 23 Mar 2003
Posts: 284

PostPosted: Wed Apr 02, 2003 8:30 pm    Post subject: Reply with quote

Però march mi ricorda il nome della mia vecchia prof di italiano e latino, cattivissima! :twisted:
Back to top
View user's profile Send private message
bsolar
Bodhisattva
Bodhisattva


Joined: 12 Jan 2003
Posts: 2764

PostPosted: Thu Apr 03, 2003 7:44 am    Post subject: Reply with quote

Ho indagato un altro po' e mi sembra di aver capito la cosa seguente:

"invento" l'opzione -march-senza-cpu per poter separare la parte -mcpu "inclusa" in -march:

-march = -march-senza-mcpu -mcpu (divido l'ozione in due)

quindi:

-march=A = -march-senza-mcpu=A -mcpu=A

-march=A -mcpu=B = -march-senza-mcpu=A -mcpu=B
-mcpu=B -march=A = -march-senza-mcpu=A -mcpu=A

Ma forse sono solo idiozie...
_________________
I may not agree with what you say, but I'll defend to the death your right to say it.
Back to top
View user's profile Send private message
Montag[SGU]
Tux's lil' helper
Tux's lil' helper


Joined: 24 Feb 2003
Posts: 95

PostPosted: Fri Apr 04, 2003 10:00 pm    Post subject: Reply with quote

Vediamo se ho capito cosa intendi (mi aiuto con delle parentesi):
Code:
(-march) = (-march-senza-mcpu) + (-mcpu)

quindi:
Code:

(-march = A) = (-march-senza-mcpu=A) + (-mcpu=A)

(-march = A) + (-mcpu = B) = (-march-senza-mcpu = A) + (-mcpu = B)
(-mcpu = B) + (-march = A) = (-march-senza-mcpu = A) + (-mcpu = A)

E' giusto?
Perche' questo vorrebbe dire che il risultato della compilazione cambia a seconda dell'ordine con cui vengono passati i parametri. E' davvero cosi' o ti e' sfuggito un errore?
O forse posso pensare che B e A siano processori della stessa famiglia, con B "figlio" di A? (tipo: A ha un subset delle istruzioni di B)

Per come la intendo io: il compilatore genera prima il codice ottimizzato ma compatibile che soddisfa il parametro '-mcpu' e poi procede aggressivamente, rompendo la compatibilita' ottenuta, secondo quanto detto da '-march'.
Secondo questa logica, nel caso di '-march=pentium3 -mcpu=pentium4', il codice generato non sarebbe ottimizzato per SSE2, ma solo per SSE, in quanto '-mcpu' punta al mantenimento della compatibilita' verso il basso...
Cosi' si spiegherebbe anche la stringa '-march=pentium4 -m-no-sse2' che ho visto usare sulla mailing list di gcc, e anche '-march=pentium3 -msse2' guadagnerebbe senso.
A questi potrei pero' aggiungere altri casi privi di logica... uno per tutti: '-march=pentium3 -mmmx -msse -msse2'
Ci sono evidenti sovrapposizioni tra le ottimizzazioni attivabili dai vari flag ('-mmmx' e '-msse' sono inutili in questo caso?) e, per tornare al mio quesito iniziale, sarebbe utile sapere chi fa cosa e in che modo.

L'ultima perplessita' della giornata e' ancora relativa al "guasto" di glibc (sempre li' vado a parare):
- compilarlo con '-march=pentium4' porta all'errore
- compilarlo con '-march=pentium4 -m-no-sse2' no
- compilarlo con '-march=pentium3 -msse2' no
eppure sembrano proprio essere le ottimizzazioni di sse2 in '-march=pentium4' a dar problemi... che dovrebbero corrispondere a '-msse2'!
A questo punto non sono piu' neppure tanto convinto che cio' che ho appena scritto corrisponda a verita'... non ho provato in prima persona tutte le combinazioni dei parametri e mi sono fidato della parola di chi ne sapeva piu' di me, ma forse e' venuto il momento di allungare il mio codino di verme verso il fuoco per verificare come stanno realmente le cose.
A presto per ragguagli.
Back to top
View user's profile Send private message
bsolar
Bodhisattva
Bodhisattva


Joined: 12 Jan 2003
Posts: 2764

PostPosted: Fri Apr 04, 2003 10:16 pm    Post subject: Reply with quote

Montag[SGU] wrote:
Vediamo se ho capito cosa intendi (mi aiuto con delle parentesi):
Code:
(-march) = (-march-senza-mcpu) + (-mcpu)

quindi:
Code:

(-march = A) = (-march-senza-mcpu=A) + (-mcpu=A)

(-march = A) + (-mcpu = B) = (-march-senza-mcpu = A) + (-mcpu = B)

(-mcpu = B) + (-march = A) = (-march-senza-mcpu = A) + (-mcpu = A)

E' giusto?
Perche' questo vorrebbe dire che il risultato della compilazione cambia a seconda dell'ordine con cui vengono passati i parametri. E' davvero cosi' o ti e' sfuggito un errore?
O forse posso pensare che B e A siano processori della stessa famiglia, con B "figlio" di A? (tipo: A ha un subset delle istruzioni di B)

Onestamente, non lo so...
Parto dal presupposto che l'ultima opzione "overridda" la prima, ad es:
Code:
# df -h -m
Filesystem           1M-blocks      Used Available Use% Mounted on
/dev/root                20905     10837     10068  52% /

# df -m -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/root              21G   11G  9.9G  52% /

L'ultima opzione che compare ha il sopravvento.
Quindi:
Code:
(-march) = (-march-senza-mcpu) + (-march-mcpu)

Per differenziare il -mcpu di -march dall'opzione esplicita -mcpu... fa schifo, fa niente ;)
Code:
(-march = A) + (-mcpu = B) = (-march-senza-mcpu = A) + (-march-mcpu = A) + (-mcpu = B)
(-mcpu = B) + (-march = A) = (-mcpu = B) + (-march-senza-mcpu = A) + (-march-mcpu = A)

Ma come ti ho detto, sto banfando durissimo (anche se a dire il vero al liceo funzionava... :wink: )
_________________
I may not agree with what you say, but I'll defend to the death your right to say it.
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
Page 1 of 1

 
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