# Saludos y duda con Core I7

## Noss

Buenas, antes que nada saludaros a todos, que hacía ya mucho tiempo que no entraba por aquí...

Lo siguiente es que he comprado un core I7 y me preguntaba si alguno tiene uno y me enseña su make.conf .... Es que tengo duda si hay un march específico o si poner -j9 ( por eso de que el procesador tiene 8hilos dos por cada procesador con el hyperthreading)....

En fin que si podeis me conteis como hacer un buen make.conf para ese procesador, porque por inet no encuentro nada..

Un saludo a todos!

----------

## Inodoro_Pereyra

 *http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel#Core_i7 wrote:*   

> Core i7 
> 
> vendor_id       : GenuineIntel
> 
> cpu family      : 6
> ...

 

No tengo un core i7 pero me encantaría  :Very Happy: 

Acerca de si lanzar 9 hilos de gcc o mas, yo empezaría probando con 9 que debe ir sobrado, no?

Salud!

----------

## ESF

Tengo un par de dudejas y cuatro núcleos   :Laughing: 

hay alguna diferencia entre poner "-march=nocona -mssse3" y "-march=core2" ?

A parte:

Ya que parece que es compatible con sse4 sse4.1 y sse4.2 no deberían ponerse todas?

Y bueno, esto como curiosidad:

qué hacen -mcx16 -msahf -fomit-frame-pointer ?

mcx16 y msahf son instrucciones atómicas (utilísimas), pero fomit frame pointer? esque no lo pillo... no sé que hace.

Gracias por leer y por contestar (si tal).

----------

## asph

se me hace dificil explicarlo en español, pero digamos que -fomit-frame-pointer guarda menos información de las lineas que se van ejecutando, reduciendo el tamaño y la velocidad de ejecución pero haciendo que el programa no se pueda debuguear.

a no ser que seas un desarrollador, es una flag recomendada.

----------

## gringo

coño, asph, cuanto tiempo sin leerte por aqui !  :Smile: 

 *Quote:*   

> hay alguna diferencia entre poner "-march=nocona -mssse3" y "-march=core2" ? 

 

puedes comprobarlo tu mismo con algo como esto :

```
echo 'int main(){return 0;}' > test.c && gcc -v -Q -march=core2 -O2   test.c -o test && rm test.c test
```

cambia core2 por nocona para ver las diferencias.

por lo del fomit-frame-pointer ya te conestó asph, realmente lo que se hace es liberar un registro lo que siempre es bueno si no se va a depurar código, pero una cosa de la que me acordé ahora mismo : no era que -fomit-frame-pointer en amd64 no valía para nada o algo asi ? 

saluetes

----------

## asph

hola gringo! si la verdad es que llevaba tiempo usando freebsd y tenia la particion de gentoo un poco olvidada.. ahora hace unas semanas he vuelto a retomarla  :Smile: 

lo que comentas del -fomit-frame-pointer, mas que nada la diferencia es que en 32bits el codigo generado es un poco mayor, mientras que en 64bits el codigo es mas pequeño (además de más rápido claro). también es cierto que en algunas arquitecturas no sirve de nada pero no se cuales son la verdad, supongo que vendra en el manual de gcc.

***edit***

On some machines, such as the VAX, this flag has no effect, because the standard calling sequence automatically handles the frame pointer and nothing is saved by pretending it doesn't exist. The machine-description macro FRAME_POINTER_REQUIRED controls whether a target machine supports this flag.

***edit***

----------

## ESF

 *Quote:*   

> ]coño, asph, cuanto tiempo sin leerte por aqui ! 
> 
> puedes comprobarlo tu mismo con algo como esto :
> 
> ```
> ...

 

Lo he probado, ambos ocupan lo mismo. Pero la salida de md5sum es distinta y un diff revela que no son identicos.

Ahora bien: Una explicación un poco didáctica o link a dondequiera que se expliquen las diferencias?

Gracias de antemano

----------

## gringo

 *Quote:*   

> si la verdad es que llevaba tiempo usando freebsd y tenia la particion de gentoo un poco olvidada

 

yo tb. he vuelto a fbsd hace algún tiempo pero gentoo lo echo de menos de vez en cuando, como suele decirse : "once gentoo, always gentoo"  :Razz: 

 *Quote:*   

> también es cierto que en algunas arquitecturas no sirve de nada pero no se cuales son la verdad, supongo que vendra en el manual de gcc. 

 

si, yo lo leí en el manual en algún lao ( o eso creo), pero ahora mismo no lo encuentro ...

 *Quote:*   

> Una explicación un poco didáctica o link a dondequiera que se expliquen las diferencias? 

 

no me atrevería a dar una explicación porque queda mas allá de mis conocimientos cuál es la diferencia técnica entre usar nocona y core2.

Una rápida búsqueda en google me saca la propuesta inicial para implementar core2 en la que se habla un poco de las microoptimizaciones y cosas de estas :

http://gcc.gnu.org/ml/gcc-patches/2006-11/msg00860.html

pero para ver las diferencias exactas en versiones actuales imagino que habrá que acudir al código.

De cualquier manera, si no tienes intención de usar distcc, simplemente usa -march=native con el nivel de optimización -O2, verás que versiones modernas del compilador gcc detectan automáticamente el tamaño de las cachés de tu procesador p.ej.

saluetes

----------

## luispa

Ahí va mi make.conf para el Core i7. Por cierto, vas a ver volar al ordenador  :Smile: , es impresionante. Te recomiendo instalarte gkrellm2 para ver a las 8 cpus a tope gráficamente cuando compiles. 

* Este es el que uso yo. Importante: válido desde >= GCC 4.3.3

```
$ cat /etc/make.conf

# Configuración para Nehalem Intel core i7

CFLAGS="-O2 -pipe -march=native"

CHOST="x86_64-pc-linux-gnu" 

CXXFLAGS="${CFLAGS}" 

MAKEOPTS="-j9"

```

* Si tienes GCC inferior, entonces usa lo siguiente, y en cuanto puedas actualiza a GCC >= 4.3.3, cambia el make.conf y recompila todo de nuevo (hay varias guías por ahí al respecto).

```
# Configuracion valida para el Core i7  con GCC < 4.3.3 (aunque no es la optima)

# del manual, nocona: Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE, SSE2 and SSE3 instruction set support.

CFLAGS="-O2 -pipe -march=nocona"    

CHOST="x86_64-pc-linux-gnu" 

CXXFLAGS="${CFLAGS}" 

MAKEOPTS="-j9"

```

Aquí tienes el manual que usé en su día.

Luis

----------

## ESF

Hay alguna manera de que gcc te diga que flags de compilación va a usar cuando tu le dices que el -mtune te lo ponga en "native" ?

Sería bueno saberlo, para posterior compatibilidad de binarios con sistemas superiores.

(De momento he utilizado las flags que en gentoo-wiki dicen ser seguras)

----------

## luispa

 *ESF wrote:*   

> Hay alguna manera de que gcc te diga que flags de compilación va a usar cuando tu le dices que el -mtune te lo ponga en "native" ?
> 
> Sería bueno saberlo, para posterior compatibilidad de binarios con sistemas superiores.
> 
> (De momento he utilizado las flags que en gentoo-wiki dicen ser seguras)

 

supongo que te refieres a querer compilar en tu equipo hoy y poder usar esos binarios en otro hardware, verdad?.

la verdad es que no lo se, quizá haya alguna opción, no he tenido la necesidad,

Luis

----------

## ESF

Sí bueno. Es una utilidad, pero casi era un interes más didáctico que práctico. 

Si gcc sabe escoger flags de optimización por sí mismo y de manera segura, estaría bien saber cuales son, para no tener que ir haciendo una recopilación gigante de casos de gente que ha creído que sus flags eran óptimos.

No pongo en duda la credibilidad de nadie, de hecho soy el último mono de la cadena: sólo pongo lo que la mayoría pone.

Pero ahí la curiosidad del sysadmin...

Un saludo.

----------

