PDA

View Full Version : gcc 3.x (ottimizzazioni athlon), quale?


Kernel Panic!!
31-07-2002, 17:33
Ho letto che per compilare software ottimizzato K7 serve un gcc della serie 3.x... meglio (o forse è più corretto dire meno peggio :p ) il 3.0 o il 3.1?
Volevo provare a costruirmi una debian from source... :D

ilsensine
31-07-2002, 17:38
Anche il 2.96 ottimizza per l'Athlon

Kernel Panic!!
31-07-2002, 17:39
boh, ma non era bello buggatello? :)
cmq tra i tre qual è meno peggio?

ilsensine
31-07-2002, 17:46
Gli "ultimi" gcc 2.96 impacchettati dalle distribuzioni sono decenti. Ho provato un gcc 3.1 dalla Mandrake Cooker e l'impressione è stata disastrosa (codice assemblato alla mano) - devono ancora mangiare parecchie pagnotte prima di farmelo usare.

ilsensine
31-07-2002, 17:48
boh, ma non era bello buggatello? :)

No, era quello "in via di sviluppo". Era bacata la testa di quelli della Redhat e della Mandrake che hanno deciso di introdurlo anzitempo. Ormai c'è, e a quanto pare sono riusciti a stabilizzarlo, dopo tanta fatica.

Ikitt
31-07-2002, 17:56
Originariamente inviato da Kernel Panic!!
[B]Ho letto che per compilare software ottimizzato K7 serve un gcc della serie 3.x... meglio (o forse è più corretto dire meno peggio :p ) il 3.0 o il 3.1?

Il 3.2 :)
Ti serviranno anche binutils aggiornate (maggioreuguale 2.11.9), ma questo solitamente non e` un problema.

Kernel Panic!!
31-07-2002, 18:22
Originariamente inviato da ilsensine
[B]
No, era quello "in via di sviluppo". Era bacata la testa di quelli della Redhat e della Mandrake che hanno deciso di introdurlo anzitempo. Ormai c'è, e a quanto pare sono riusciti a stabilizzarlo, dopo tanta fatica.

nei repository debian (ho potato, woody, sarge e sid in /etc/apt/source.list) ci sono solo gcc-2.95, gcc-3.0 e gcc-3.1 ...

ilsensine
31-07-2002, 18:30
La Debian non è la Mandrake, per vostra fortuna.
Tra i due non saprei quale prendere, sono rimasto abbastanza "scottato" dal 3.1 della Mandrake - però era la Mandrake

Kernel Panic!!
31-07-2002, 18:31
ma scusa, se allora il 3.1 fa così schifo mentre il 2.96 è usabile, perchè avrebbero preferito includere il 3.1 e non anche il 2.96? :)

Kernel Panic!!
31-07-2002, 18:32
cmq faccio un po' di prove, al massimo mi becco un paio di segmentation fault :)

Ikitt
31-07-2002, 19:15
Originariamente inviato da ilsensine
[B]La Debian non è la Mandrake, per vostra fortuna.
Tra i due non saprei quale prendere, sono rimasto abbastanza "scottato" dal 3.1 della Mandrake - però era la Mandrake

Io GCC 2.96 non lo toccherei neanche con una canna da pesca.

Ora funzionera` anche bene, ma e` pur sempre un`aborto.
NON doveva nascere. NON deve esistere.

Senza contare che una percentuale non trascurabile del software non garantisce ancora il corretto funzionamento con gcc 2.96.

Xyrax
31-07-2002, 21:49
Se permettete, con Gcc3.1 su debian attivando march/mcpu=athlon ho compilato il kernel Linux version 2.4.19-pre7-preemptive, mplayer, transcode, xine senza nessun problema di stabilità, testandolo per nottate intere codificando avi in xvid.
Non sono un programmatore C/C++, quindi lascio i giudizi più tecnici a persone come ilsensine, tuttavia non'ho mai riscontrato problemi con software compilato con gcc3.1.

Kernel Panic!!
31-07-2002, 22:15
Originariamente inviato da Xyrax
su debian attivando march/mcpu=athlon

come si attiva? :D
(immagino exportando qualcosa)

Kernel Panic!!
31-07-2002, 22:17
PS volevo provare a compilarmi qualcosa ottimizzandolo per athlon, usando apt-build

ilsensine
01-08-2002, 08:51
Originariamente inviato da Xyrax
con Gcc3.1 su debian attivando march/mcpu=athlon ho compilato il kernel Linux version 2.4.19-pre7-preemptive
Puoi farmi questa prova?

Vai nella directory /usr/src/linux/kernel e esegui:

gcc -O2 -fomit-frame-pointer -I/usr/src/linux/include -include /usr/src/linux/include/linux/modversions.h -D__KERNEL__ -DMODULE -DMODVERSIONS -S -o resource.s resource.c

puoi spedirmi poi il file resource.s che viene creato e il file resource.c originale?
Puoi mandarmeli a [email protected]

Grazie

Kernel Panic!!
01-08-2002, 12:37
mi son compilato un bel kerneluzzo 2.4.18 con patch preempt e low-latency con gcc-3.1, il tutto ottimizzato per athlon :)

Kernel Panic!!
01-08-2002, 12:46
Originariamente inviato da ilsensine
[B]
Puoi farmi questa prova?

Vai nella directory /usr/src/linux/kernel e esegui:

gcc -O2 -fomit-frame-pointer -I/usr/src/linux/include -include /usr/src/linux/include/linux/modversions.h -D__KERNEL__ -DMODULE -DMODVERSIONS -S -o resource.s resource.c

puoi spedirmi poi il file resource.s che viene creato e il file resource.c originale?
Puoi mandarmeli a [email protected]

Grazie
lo faccio io o Xyrax? :p

ilsensine
01-08-2002, 13:19
E' ugiale, chiunque abbia il gcc della Debian

Kernel Panic!!
01-08-2002, 13:22
ok te li ho spediti :)

ilsensine
01-08-2002, 13:32
Ok grazie. Il codice mi sembra buono, non ha un certo "problema" che ha quello della Mandrake. Forse stasera ti chiederò di fare un'altra prova ok?

Kernel Panic!!
01-08-2002, 13:32
ok :)
(che problema ha il codice prodotto dal gcc-3.1 della mdk?)

ilsensine
01-08-2002, 13:36
Niente, semplicemente hanno disabilitato -fomit-frame-pointer...

ilsensine
02-08-2002, 08:28
Ok ieri sera ero lesso quindi nulla.

Scaricati l'allegato (rinominalo come test.tar.gz), decomprimilo, e compila il programmino con make. Ti verrà creato l'eseguibile "test", lancialo e dimmi se abortisce o se scrive "ok". Questo test riproduce un fastidioso bug nel gcc 2.9x, che non ho potuto verificare sul 3.x in quanto quello della Mandrake che ho usato ignorava -fomit-frame-pointer.

Fammi sapere

Kernel Panic!!
02-08-2002, 09:31
/* gcc-3.1 */ $ make all
gcc-3.1 -O2 -fomit-frame-pointer -c -o lib.o lib.cpp
gcc-3.1 -shared -o libtest.so lib.o
gcc-3.1 -O2 -fomit-frame-pointer -c -o main.o main.cpp
gcc-3.1 -o test main.o libtest.so
main.o: In function `main':
main.o(.text+0x19): undefined reference to `__cxa_begin_catch'
main.o(.text+0x33): undefined reference to `__cxa_end_catch'
main.o(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
libtest.so: undefined reference to `__cxa_throw'
libtest.so: undefined reference to `typeinfo for char const*'
libtest.so: undefined reference to `__cxa_allocate_exception'
collect2: ld returned 1 exit status
make: *** [all] Error 1

/* gcc-3.0 */ $ make all
gcc-3.0 -O2 -fomit-frame-pointer -c -o lib.o lib.cpp
gcc-3.0 -shared -o libtest.so lib.o
gcc-3.0 -O2 -fomit-frame-pointer -c -o main.o main.cpp
gcc-3.0 -o test main.o libtest.so
main.o: In function `main':
main.o(.text+0x19): undefined reference to `__cxa_begin_catch'
main.o(.text+0x33): undefined reference to `__cxa_end_catch'
main.o(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
libtest.so: undefined reference to `__cxa_throw'
libtest.so: undefined reference to `typeinfo for char const*'
libtest.so: undefined reference to `__cxa_allocate_exception'
collect2: ld returned 1 exit status
make: *** [all] Error 1

/* gcc-2.95 */ $ make all
gcc-2.95 -shared -o libtest.so lib.o
gcc-2.95 -o test main.o libtest.so
main.o: In function `main':
main.o(.text+0x19): undefined reference to `__cxa_begin_catch'
main.o(.text+0x33): undefined reference to `__cxa_end_catch'
main.o(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
libtest.so: undefined reference to `__cxa_throw'
libtest.so: undefined reference to `typeinfo for char const*'
libtest.so: undefined reference to `__cxa_allocate_exception'
collect2: ld returned 1 exit status
make: *** [all] Error 1


pure col gcc-2.95? :eek:

ilsensine
02-08-2002, 09:33
azz sul gcc della Mandrake funziona
Edita il Makefile e imposta g++ al posto di gcc

Kernel Panic!!
02-08-2002, 09:39
$ ./test
./test: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory

mi dà quell'output con tutt'e 3 i compilatori
e il file (libtest.so) c'è (nella dir . )

Kernel Panic!!
02-08-2002, 09:56
PS questa notte mi son compilato mozilla usando gcc-3.1
ho cambiato il makefile e ho sostituito -O2 con -O3 :p
installato i binari così compilati
e si chiude dopo un po' da solo (nessun messaggio sulla shell, boh)

colpa di gcc-3.1 o di -O3? (per controprova lo sto ricompilando con gcc-3.0, sempre col -O3)

ilsensine
02-08-2002, 11:41
$ ./test
./test: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory
Interessante, la Mandrake accetta il caricamento di librerie locali
Sposta libtest.so in /usr/lib, esegui ldconfig e dovrebbe funzionare. Ricordati di sovrascrivere la libreria quando ricompili.


installato i binari così compilati
e si chiude dopo un po' da solo (nessun messaggio sulla shell, boh)

colpa di gcc-3.1 o di -O3? (per controprova lo sto ricompilando con gcc-3.0, sempre col -O3)
Il codice prodotto da -O3 non è sempre ritenuto stabile (in realtà forse neanche il gcc 3 lo è ancora), e non sempre è più veloce. Se vuoi provare opzioni efficienti, ti consiglio:
-fforce-mem -fforce-addr -funroll-loops -fexpensive-optimizations -felide-constructors -ffast-math -march=i686 -mcpu=i686

Se hai un athlon, sostituisci athlon a i686. -fomit-frame-pointer la puoi usare se i sorgenti non sono in c++, oppure se hanno corretto il bug che ti sto chiedendo di verificare.

Ikitt
02-08-2002, 12:06
Originariamente inviato da Kernel Panic!!
[B]$ ./test
./test: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
$ ./test

Kernel Panic!!
02-08-2002, 12:19
Originariamente inviato da Ikitt
[B]

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
$ ./test

OK, con questo ./test dà "Ok" con tutt'e tre i compilatori
ho ricompilato mozilla con -O3 ma sempre il solito problema
adesso provo con un po' delle opzioni suggerite da ilsensine :) (tanto cambierà poco o niente)

ilsensine
02-08-2002, 12:28
OK, con questo ./test dà "Ok" con tutt'e tre i compilatori
Bene, col gcc 2.91 e il 2.96 mi va in abort.

Kernel Panic!!
02-08-2002, 12:32
avevo compilato xfree con gcc-3.0 con march=athlon e mcpu=athlon
aggiungendo le altre opzioni da te consigliate che possa cambiar qualcosa? (tipo magari, random freezes :D )

ilsensine
02-08-2002, 12:36
No, sono solo opzioni di ottimizzazione. Per alcune ho effettivamente verificato un "decente" aumento della velocità (qualche punto percentuale)

Kernel Panic!!
02-08-2002, 12:39
magari farò delle prove (non che sia na passeggiata compilare tutto xfree...)
ah, la mia cpu è un duron morgan, dotato di sse... per compilare usando anche ste istruzioni? :p

Ikitt
02-08-2002, 13:41
Originariamente inviato da Kernel Panic!!
magari farò delle prove (non che sia na passeggiata compilare tutto xfree...)
ah, la mia cpu è un duron morgan, dotato di sse... per compilare usando anche ste istruzioni? :p [/QUOTE]
-mmmx -msse
(credo)
potrebbero essere utili anche
-march=athlon
-mcpu=athlon
(o era k7?)

Kernel Panic!!
02-08-2002, 14:03
mah, niente da fare, con tutta quella roba abilitata alla fine il binario che mi fa dà seg. fault
mi sa che lascio stare mozilla (tanto non cambierà molto... +ttosto provo a ricompilarmi kernel e xfree con tutte le ottimizzazioni abilitate)