El 2003-11-21 a las 12:41 +0100, Jordi Rubió escribió:
las optimizaciones son "mentira", me explico:
Que entiendo yo por optimizar: utilizar un codigo especifico para un hardware determinado. Si bien es cierto que el compilador empaqueta los datos para que una cpu u otra las pueda tratar mejor, solo se trata de eso, el binario será el mismo aqui y en china, el problema radica en el codigo si me dijeran: codigo fuente para 386, codigo fuente para pentium 3, para amd etc...
Si y no. La opción -mcpu hace eso que dices, variar el empaquetamiento. Pero la opción -march además de eso cambia el juego de instrucciones disponible. Trata de ejecutar un "hello world" compilado con march=pentium4 en un 386... se cuelga. `-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', ... 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 `-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'. Es decir, "march" selecciona el tipo de CPU con sus instrucciones disponibles, y -mcpu el ordenamiento. Así, puedes hacer `-march=i386 -cpu=pentium4' y funcionaría en un 386, pero con el empaquetamiento optimizado para el PIV. `-march=pentium4' a secas, en cambio, no, genera codigo de pentium4, con sus instrucciones propias. -- Saludos Carlos Robinson