# CFLAGS para AMD64

## pacho2

Quisiera saber que CFLAGS son recomendadas para un amd Athlon64.

Muchas gracias por la información que me podáis aportar y saludos

----------

## ozito

Hola pacho2:

Te adjunto la información obenida con "emerge --info" de mi AMD64:

```

unit00 juan # emerge --info

Portage 2.0.51.22-r1 (default-linux/amd64/2005.0, gcc-3.4.3-20050110, glibc-2.3.5-r0, 2.6.11-gentoo-r8 x86_64)

=================================================================

System uname: 2.6.11-gentoo-r8 x86_64 AMD Athlon(tm) 64 Processor 3000+

Gentoo Base System version 1.6.12

ccache version 2.4 [enabled]

dev-lang/python:     2.3.5

sys-apps/sandbox:    1.2.8

sys-devel/autoconf:  2.13, 2.59-r6

sys-devel/automake:  1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.5

sys-devel/binutils:  2.16

sys-devel/libtool:   1.5.18

virtual/os-headers:  2.6.11

ACCEPT_KEYWORDS="amd64 ~amd64"

AUTOCLEAN="yes"

CBUILD="x86_64-pc-linux-gnu"

CFLAGS="-mtune=k8 -pipe -O2"

CHOST="x86_64-pc-linux-gnu"

CONFIG_PROTECT="/etc /usr/kde/2/share/config /usr/kde/3.4/env /usr/kde/3.4/share/config /usr/kde/3.4/shutdown /usr/kde/3/share/config /usr/lib/X11/xkb /usr/lib/mozilla/defaults/pref /usr/share/config /var/qmail/control"

CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/env.d"

CXXFLAGS="-mtune=k8 -pipe -O2"

DISTDIR="/usr/portage/distfiles"

FEATURES="autoconfig ccache distlocks sandbox sfperms strict"

GENTOO_MIRRORS="http://linuv.uv.es/mirror/gentoo/"

LANG="es_ES@euro"

LINGUAS="es"

PKGDIR="/usr/portage/packages"

PORTAGE_TMPDIR="/var/tmp"

PORTDIR="/usr/portage"

SYNC="rsync://rsync.gentoo.org/gentoo-portage"

USE="amd64 X acpi alsa arts avi berkdb bitmap-fonts cdr cdrw crypt cups curl dhcp dvdr dvdread encode esd fam flac font-server fortran gd gif gpm gtk imagemagick imlib ipv6 java jp2 jpeg junit kde lzw lzw-tiff mad motif mozilla mp3 mpeg ncurses nls ogg opengl oss pam perl pic png python qt readline ssl tcpd tiff truetype truetype-fonts type1-fonts usb userlocales vcd vorbis xine xml2 xmms xpm xrandr xv zlib linguas_es userland_GNU kernel_linux elibc_glibc"

Unset:  ASFLAGS, CTARGET, LC_ALL, LDFLAGS, MAKEOPTS, PORTDIR_OVERLAY

```

Por si te haces un lio las CFLAGS son:

```
CFLAGS="-mtune=k8 -pipe -O2"
```

Saludos

----------

## LinuxBlues

Yo optaría por:

CFLAGS="-march=amd64 -02 -pipe -fomit-frame-pointer"

Cuando haya programas que deban compilarse en modo 32bit, y los habrá... no te quepa duda, añade

-m32

a esas CFLAGS.

Al parecer, en la página de AMD daban unas CFLAGS para sus procesadores de 64bits, pero no he logrado encontrarlas... Busca con más tiempo.

----------

## pacho2

Yo he "seleccionado" estas CFLAGS:

CFLAGS= -O2 -march=k8 (o amd64?)  -pipe -fomit-frame-pointer 

Tengo algunas dudas:

-¿Es mejor usar -march o -mcpu? ¿Qué diferencia hay entre las dos opciones?

 -D_FILE_OFFSET_BITS=64 -> Esta opción, en principio, permite tamaños de ficheros superiores a 2Gb, lo cual podría ser útil para descargar con FTP imagenes ISO grandes... ¿tiene alguna pega?

 -falign-functions=64 -> ¿Qué hace este FLAG? Parece que va bien para los athlon-xp pero no dice nada respecto a los amd64...

-LDFLAGS -> Mi intención es no seleccionar yo ninguna LDFLAG, sino dejar las que están por defecto, salvo que alguien crea que se puede optimizar algo  :Smile: 

-CXXFLAGS -> Pienso poner las mismas que las CFLAGS, salvo que alguien me recomiende añadir algo  :Smile: 

Gracias por vuestra ayuda y saludos

----------

## Stolz

Mi voto para

CFLAGS="-march=k8 -O2 -pipe -fomit-frame-pointer"

o si quieres algo un poco mas agresivo

CFLAGS="-march=k8 -O2 -pipe -fomit-frame-pointer -ffast-math -frename-registers" (pero lee algo sobre -ffast-math y luego decide si usarlo o no)

Sobre si usar march o mcpu, yo tuve la msima duda y no recuerdo la explicacion exacta, pero si recuerdo que se la conclusion era que por muchos motivos se recomienda usa march.

De los LDFLAGS mejor olvidate, a mi me han dado mas quebraderos de cabeza que otra cosa, y siempre que subia un bug a bugzilla, "los que saben" me decian que los quitase.

Sobre D_FILE_OFFSET_BITS no lo he leido nunca, pero imagino que esos 2GB se referia a tamaño de archivos ejecutables, no al de todos los archivos. De hecho poco tiene que ver el compilador con el sistema de ficheros  :Wink:  Aunque no tengas ese FLAG tarnquilo que podras tener imagenes ISO de mas de 2GB.

Un consejo, no abuses de los CFLAGS, si no sabes lo que estás haciendo seguramente acabe dando peor rendimiento. No dejes que te obsesionen.

Salduozzzzzz

----------

## pacho2

Tranquilo que no me obsesiono  :Smile: 

El -ffast-math me da problemas con los Mozilla Suite compilados con XFT (con gcc 3.3), hace que el dialogo de las preferencias no "marque" las casillas (por ejemplo no me aparece nada marcado en el apartado para que muestre el boton de print, .etc; y si lo marco, al volver a abrirlo se vuelve a desmarcar).

¿Mejor k8 o amd64? Es la única duda que me queda

Muchas gracias

----------

## Stolz

Segun la guia oficial de Gentoo para AMD64, k8, aunque creo que realmente son lo mismo, una es un alias de la otra.

SaludozzzLast edited by Stolz on Fri Jun 10, 2005 5:15 pm; edited 1 time in total

----------

## LinuxBlues

 *pacho2 wrote:*   

> Yo he "seleccionado" estas CFLAGS:
> 
> CFLAGS= -O2 -march=k8 (o amd64?)  -pipe -fomit-frame-pointer 
> 
> -¿Es mejor usar -march o -mcpu? ¿Qué diferencia hay entre las dos opciones?
> ...

 

1.) Busca en www.google.es/linux -march=k8  primero y después -march=amd64; extrae por tí mismo las conclusiones... Aunque no dejan de ser un alias   :Wink: 

2.) -falign-functions=64 lo único que hace es alinear el número de bytes de la caché, en el caso de los athlon-xp, efectivamente es de 64bytes; Pero usarla conlleva llegar a tener la caché llena de basura en muchos casos. Hay mucha gente que usa tan sólo 4 para sacarle todo el partido, con los athlon-xp. No es bueno llenar la caché de datos inútiles.  :Wink: 

3.) march compila única y específicamente para esa cpu; mcpu compila proporcionando compatibilidad con todos los procesadores anteriores, esto equivale a que tus binarios serían también ejecutables en un i386, i486, etc.  :Crying or Very sad: 

EDITADO: Se me olvidaba, no olvides compilar gcc con la USE multilib, así permite compilar dinámicamente para 64 y 32

bits.Last edited by LinuxBlues on Fri Jun 10, 2005 6:30 pm; edited 1 time in total

----------

## pacho2

Gracias por las respuestas

¿Tendría algún inconveniente usar -falign-functions=4 en lugar de =64?

Saludos y gracias

----------

## LinuxBlues

 *pacho2 wrote:*   

> 
> 
> ¿Tendría algún inconveniente usar -falign-functions=4 en lugar de =64?
> 
> 

 

con la cflag de optimización -o2 gcc selecciona la más adecuada para tu cpu, por defecto.

don't worry, be happy.  :Very Happy: 

----------

## pacho2

Respecto al multilib

¿Será necesario pasarle al gcc el -m64 para que compile las cosas para amd64 o lo hará por defecto?

Saludos y gracias por la información

----------

## Stolz

Lo hace por defecto.

Saludozzzzzzz

----------

## pacho2

Gracias

Saludos

----------

## German3D

CFLAGS="-march=amd64 -O2 -pipe"

Tengo yo  :Smile: 

----------

## pacmac

Yo uso los siguientes CFLAGS y CXXFLAGS:

```

CFLAGS="-march=athlon-64 -O2 -pipe -ftracer"

CXXFLAGS="-march=athlon-64 -O2 -pipe"

```

-ftracer mejora la accion de las optimizaciones.

Echale un ojo al wiki de Gentoo: http://gentoo-wiki.com/Safe_Cflags#Opteron.2FAthlon64_.28AMD.29

Respecto a -frename-registers, que veo que te la recomendaban en un reply, podria ser que te cree codigo incorrecto.

----------

## pacho2

Respecto a -ftracer

Gracias por tu ayuda. En el siguiente sitio:

http://gentoo-wiki.com/CFLAGS_matrix

Parece que se comenta algo sobre algun problema que podría dar con gtk2.6 y tetex... ¿te ha sucedido ese problema? ¿se nota mucho el efecto de este FLAG en el sistema?

Saludos y gracias por la información

----------

## pacho2

He seguido buscando información y he encontrado más cosas en los foros en ingles de gentoo. Hay una persona que habla sobre otros CFLAGS e, incluso de LDFLAGS

La página es:

https://forums.gentoo.org/viewtopic-t-319749-highlight-cflags.html

La pega es que tengo ciertas dudas sobre alguna de sus recomendaciones:

-O3 -> Ya he leido en muchos sitios que no siempre es mejor que -O2 y que, por ejemplo (y esto los se por experiencia) mozilla no compila bien con este FLAG.

-ftracer -> Aunque lo recomienda, según trae en http://gentoo-wiki.com/CFLAGS_matrix pare que puede dar problemas con gtk2.6 y tetex, aunque lo mismo lo estoy traduciendo mal, el texto dice lo siguiente:

"Although they seem to compile fine, TeTeX and GTK+-2.6 misbehave weirdly at runtime. It also bloats code a bit"

-funit-at-a-time -> no se gran cosa sobre este CFLAG ¿alguien la ha probado?

-fforce-addr -> Tampoco conozco sus posibles problemas (si los tiene), ¿alguien la ha probado?

-fpeel-loops -> Idem de lo anterior  :Smile: 

Esta persona también dice que el CFLAG -fomit-frame-pointer no es necesario en amd64, aunque no parece que el añadirla haga algo malo  :Smile: 

También recomienda unas CXXFLAGS:

-fvisibility-inlines-hidden -> El único inconveniente que parece que tiene es que viejas aplicaciones wxgtk no funcionan bien, pero sus nuevas versiones si lo hacen.

Las LDFLAGS que recomiendan son las siguientes:

-Wl,O1 -> parece que es para optimizar el lincado

-Wl,--enable-new-dtags -> "use better/newer way of linking", ¿alguien la ha probado?

-Wl,--sort-common -> "sort symbols in optimized order for faster calling" -> Idem  :Smile: 

-Wl,--strip-all -> parece interesante, creo que está la pondré salvo que alguien haya tenido una mala experiencia con este LDFLAG

Como consecuencia los FLAGS que pondría ahora serían los siguientes:

CFLAGS -> -march=k8 -pipe -O2 -fomit-frame-pointer

CXXFLAGS -> Lo mismo que CFLAGS más -fvisibility-inlines-hidden

LDFLAGS -> ¿qué es lo que selecciona gentoo por defecto? Aquí las que me interesarían serían -W1,-O1 y -W1,--strip-all, pero no estoy seguro

¿cuales son vuestras recomendaciones?

Mi sistema estará pensado para usar sobretodo con gnome (de forma que los FLAGS que parece que "molestan" a gtk2.6 mejor no usarlos  :Very Happy: ).

Saludos y muchísimas gracias

----------

## pacho2

Sobre el core San Diego

El core San diego incluye SSE3 y es de 90 nanometros, no de 130. ¿se notarán las diferencias? ¿Creeis que el sse3 se notará tanto? ¿Haría falta añadir el CFLAG -msse3 para que compilase los paquetes para sse3?

Saludos y gracias

Tengo dudas entre decidirme por un 3400+ a 2400 MHz socket 754 y 512 de cache o un 3700 San diego 2200 MHz (menos velocidad en cuanto al "clock") con socket 939 y 1024 de cache (además de añadir el SSE3), ¿creeis que justifica esto la diferencia de precio?

Son 329 euros del 3700 frente a 223 del 3400, ¿creeis que merece la pena?

Muchas gracias por vuestra opinión

----------

## Stolz

Yo creo que tal y como están los precios y los resultados, lo mejor ahora mismo no es ni un Newcatle 754 ni un San Diego 939, sino un Venice 939, suben una burrada con el voltaje de serie y a igualdad de Mhz rinden mas. Eso si, el ancho de banda de las memorias se reduce un poco.

Sobre lo del SSE3, no creo que se note mucho.

SaludozzzzLast edited by Stolz on Thu Jun 23, 2005 10:37 am; edited 1 time in total

----------

## pacho2

¿que quiere decir que suben una burrada con el voltaje de serie?

Gracias por la información, estoy asombrado de la rapidez con la que soléis responder  :Smile: 

Saludos

----------

## Stolz

Que se les puede hacer mucho overclock sin las implicaciones habituales (aumento de voltaje y aumento de temperatura).

Además tienen un nuevo controlador de memoria mejorado y dan menos problemas con modulso de doble cara o mas de 2 modulos pinchados.

Saludozzzzzz

----------

## pacho2

La pega, es que yo no acostumbro a hacer overclocking a los procesadores (conozco más de un intel que ha salido "ardiendo" por eso  :Sad:  ) mi idea es tenerlo con el voltaje de serie.

Veo que el 3800 venice también es 90 nanometros, ¿la diferencia en los nanometros se nota mucho?

Gracias y saludos

----------

## Stolz

Si precisamente lo que te he dicho es que los Venices se les puede hacer mucho OC sin tocar el voltaje, no va a aumentar a penas la temperatura.

Los 90nm se notan en que por defecto requieren menos voltaje y por tanto se calientan menos, lo que a su vez se traduce en menos ruido, que para mi es lo principal  :Very Happy: 

Detallando mas lo que he dicho antes, con los Venice se pueden poner 4 modulos de una cara con latencias 1T, algo impensable en placas 754 o en otros micros 939.

Saludozzzzz

----------

## pacho2

Muchas gracias por la información

Perdona mi ignoracia pero yo no se practicamente nada sobre el overclocking, ¿como se hace? Se que es información que probablemente consideraras que debía conocer, pero no es así  :Sad:  ¿podrías darme información sobre el overclocking o indicarme algunos sitios sonde traiga como se hace en linux? (ya he visto muchos sitios que traen como hacerlo en Windows, pero yo nunca he tenido windows en mis ordenadores  :Very Happy: 

Saludos y muchas gracias

----------

## pacho2

Por cierto

He visto que los cores Venice también tienen el "famoso" sse3

Saludos y gracias

----------

## gringo

por lo del overclocking te contestará mejor Stolz que yo, pero que yo sepa no hay herramientas en linux para hacer overclocking tales como retocar fsb, mhz del micro o juguetear con los voltajes. En caso de querer hacer oc deberás hacerlo directamente en placa.

Si hay herramientas para subir de vueltas las gráficas, tanto para nvidia como para ati.

Sobre el sse3, en entornos amd64 no se puede tocar ( todas las instrucciones sse están soportadas y masked por defecto); si en cambio creo que puedes añadir sse3 si compilas para 32 bits ... cuestión de probar  :Wink: 

saluetes

----------

## pacho2

No sabía yo que las cosas de sse estaban masked, entonces, no parece que merezca la pena.

Saludos y gracias

----------

## gringo

igual me expresé mal : en amd64 puedes poner instrucciones sse ( o 3Dnow) en tus cflags pero como digo serán ignoradas y en algún caso puede que produzcan problemas de ensamblador.

En paquetes que lo requieran nuestro queridos devs se encargan de que se activen por defecto ( mplayer p.ej.).

saluetes

----------

## pacho2

Entendido  :Smile: 

perona, lo entendí mal, yo preguntaba los de sse3 porque tenía entendido que las ordenes de sse, 3dnow, sse2, .etc estaban ya "incluidas" cuando ponías -march-k8, pero dudaba de que el sse3 también lo activase en esta plataforma por defecto.

Saludos y gracias por la información

----------

## Stolz

 *pacho2 wrote:*   

> Entendido 
> 
> perona, lo entendí mal, yo preguntaba los de sse3 porque tenía entendido que las ordenes de sse, 3dnow, sse2, .etc estaban ya "incluidas" cuando ponías -march-k8, pero dudaba de que el sse3 también lo activase en esta plataforma por defecto.
> 
> Saludos y gracias por la información

 

Yo tenia entendido algo similar, pero tampoco estoy seguro.

Para temas de Overclock, mejor pasate por los foros de www.forospc.com o http://www.hardlimit.com/forum/index.php? que hay guias y mucha gente que controla y está dispuesta a ayudar.

Saludozzzzzz

----------

## pacho2

Gracias, me pasaré por allí

Saludos

PD: ¿sabéis algo sobre las CFLAGS, CXXFLAGS y LDFLAGS que puse en un comentario anterior a esto de los Amd venice, san diego, .etc? Se hablaba sobre FLAGS como -fvisibility-inlines-hidden, .etc

gracias

----------

## gringo

 *Quote:*   

> perona, lo entendí mal, yo preguntaba los de sse3 porque tenía entendido que las ordenes de sse, 3dnow, sse2, .etc estaban ya "incluidas" cuando ponías -march-k8, pero dudaba de que el sse3 también lo activase en esta plataforma por defecto. 

 

cierto, están incluidas y son ignoradas, pero que yo sepa la instrucción sse3 no está soportada aún en amd64 ... 

A la hora de compilar para 32 bits creo que si se puede invocar conjuntamente con -mfpmatch=sse,387 , pero no estoy muy puesto en el tema.

 *Quote:*   

>  -fvisibility-inlines-hidden

 

personalmente esa optimización solo me dió problemas. 

Mejor empieza con algo mas o menos estable para ver como va y si luego te ves con ganas lo toqueteas un poco  :Wink: 

saluetes

----------

## pacho2

 *pacho2 wrote:*   

> He seguido buscando información y he encontrado más cosas en los foros en ingles de gentoo. Hay una persona que habla sobre otros CFLAGS e, incluso de LDFLAGS
> 
> La página es:
> 
> https://forums.gentoo.org/viewtopic-t-319749-highlight-cflags.html
> ...

 

¿alguno de vosotros ha probado alguna de las LDFLAGS, CXXFLAGS o CFLAGS que se citan?

NOTA: El -fvisibility-inlines-hidden lo pensaba incluir sólo para los programas escritos en C++ (CXXFLAGS), ¿con qué programas te dio problemas?

Saludos y gracias por vuestras recomendaciones

----------

## pacho2

 *gringo wrote:*   

>  *Quote:*   perona, lo entendí mal, yo preguntaba los de sse3 porque tenía entendido que las ordenes de sse, 3dnow, sse2, .etc estaban ya "incluidas" cuando ponías -march-k8, pero dudaba de que el sse3 también lo activase en esta plataforma por defecto.  
> 
> cierto, están incluidas y son ignoradas, pero que yo sepa la instrucción sse3 no está soportada aún en amd64 ... 
> 
> A la hora de compilar para 32 bits creo que si se puede invocar conjuntamente con -mfpmatch=sse,387 , pero no estoy muy puesto en el tema.
> ...

 

Respecto al -mfpmath tengo entendido que es mejor poner -mftpmath=sse, ya que si pones los dos suele generarse mal código.

Entonces parece que el gcc3.4 no soporta el sse3 en am64?

Saludos y gracias

----------

## German3D

mmm como nota curiosa ... esta mañana me puse hacer un emerge system y al primer pakete que me baja e intenta compilarme , plof! Me peta me dice que no reconoce march=amd64 , lo cambio a k8 y todo perfecto O_o 

54|u2

----------

## pacho2

Normal

El -march=amd64 no existe, debes poner -march=k8 o -march=athlon64

Puede que en el manual de gcc traiga algo sobre eso

Saludos

----------

## pacho2

En https://forums.gentoo.org/viewtopic-t-197983-postdays-0-postorder-asc-start-75.html me he encontrado un post que dice lo siguiente:

 *navegante wrote:*   

> Una pequeña corrección las Cflags que indicas son poquito redundantes, en especifico la de -mtune, ya que con usar -march implica el usar -mtune para la aruitectura que estableces en -march. Otro detalle es que al parecer se requiere para que funcione prelink que los binarios esten compilados con la cflag -fPIC. Por otro lado puedes linkear este howto para el deltup, y tambien laopción inject esta siendo deprecated por el fichero package.provided, Saludos.

 

¿Necesito añadir en mis CFLAGS el -fPIC para poder correr posteriormente prelink?

Muchas gracias por la información y saludos

----------

## Stolz

 *pacho2 wrote:*   

> 
> 
> ¿Necesito añadir en mis CFLAGS el -fPIC para poder correr posteriormente prelink?
> 
> 

 

No. Parece que es un rumor extendido, pero por experiencia se que no hace falta. Todo surgio a raiz de una mala interpretacion de la guia en ingles de prelik. Ya lo han corregido y lo han dejado bastante tajante:

http://www.gentoo.org/doc/en/prelink-howto.xml

 *Quote:*   

> Also make sure that you do not have -fPIC set in your CFLAGS/CXXFLAGS. If you do, you will need to rebuild your entire system without.

 

SaludozzzzzzLast edited by Stolz on Mon Jun 27, 2005 1:25 pm; edited 2 times in total

----------

