PDF de programación - Guia de Compilacion Optimizada de Gentoo

Imágen de pdf Guia de Compilacion Optimizada de Gentoo

Guia de Compilacion Optimizada de Gentoográfica de visualizaciones

Publicado el 30 de Marzo del 2018
440 visualizaciones desde el 30 de Marzo del 2018
240,0 KB
8 paginas
Creado hace 14a (19/10/2009)
Documentación Gentoo Linux -- Guía de Compila...

http://www.gentoo.org/doc/es/gcc-optimization.xml

Imprimir

Actualizado 19 de

octubre, 2009

Sumario: Esta guía
proporciona una
introducción a la
compilación
optimizada usando
CFLAGS y CXXFLAGS
seguras y sanas. Al
tiempo que se
describe la teoria
detrás de la
optimización en
general.

Joshua Saddler
Autor

John Christian
Stoddart
Traductor

Federico Díaz
Traductor

Sergio D. Rodríguez
Inclan
Traductor

José María Alonso
Traductor

Donate to support our
development efforts.

Guía de Compilación Optimizada

Contenido: 1. Introducción

1. Introducción

¿Qué son CFLAGS y CXXFLAGS?

CFLAGS y CXXFLAGS son variables de entorno usadas para decirle a la
Colección de Compiladores GNU, gcc, que tipo de parámetros usar
cuando compila código fuente. Las CFLAGS son para código escrito en
C, mientras que CXXFLAGS son para código escrito en C++.

Pueden usarse para disminuir la cantidad de mensajes de depuración
para un programa, aumentar los niveles de aviso de errores, y por
supuesto, optimizar el código producido. El Cuaderno de GNU gcc
mantiene una completa lista de opciones disponibles y sus propósitos.

¿Cómo se usan?

CFLAGS y CXXFLAGS pueden ser usados de dos maneras. La primera,
pueden usarse por programa con los Makefiles generados por
automake.

Sin embargo, esto no debería usarse cuando instalamos paquetes
encontrados en el árbol del Portage. En su lugar, establezca sus
CFLAGS y CXXFLAGS en /etc/make.conf. De esta manera todos los
paquetes se compilaran con las opciones que especifique.

Listado de Código 1.1: CFLAGS en /etc/make.conf
CFLAGS="-march=athlon64 -O2 -pipe"
CXXFLAGS="${CFLAGS}"

Como puede ver, CXXFLAGS se establece para usar todas las opciones
presentes en CFLAGS. Esto es lo que deseara casi seguro. No debería
necesitar especificar opciones adicionales en CXXFLAGS nunca.

Conceptos generales

Mientras CFLAGS y CXXFLAGS pueden ser muy efectivos tomando el
código fuente para producir binarios pequeños y/o rápidos, también
pueden deteriorar la función de su código, inflar su tamaño, relentizar
su ejecución, o incluso causar errores de compilación.

1 de 8

19/11/09 21:57

Documentación Gentoo Linux -- Guía de Compila...

http://www.gentoo.org/doc/es/gcc-optimization.xml

CFLAGS no es una solución mágica; no hará que su sistema corra más
rápido o sus binarios sean más pequeños automáticamente. Añadir más
y más parámetros en un intento de optimización (o "rizar") su sistema
es una receta segura para el fallo. Hay un punto en el cual
permanecerá dando vueltas.

A pesar de la jactancia que pueden encontrar en Internet, unas
variables CFLAGS y CXXFLAGS agresivas están más cerca de dañar sus
programas que de hacerles algún bien. Recuerde que la razón para la
cual existen los parámetros en primer lugar es porque están diseñadas
para usarse en sitios específicos para propósitos específicos. ¡Sólo
porque una CFLAG particular sea buena para un fragmento de código
no significa que esté diseñada para compilar todo lo que quiera instalar
en su máquina¡.

¿Preparado?

Ahora que está advertido de algunos de los riesgos involucrados,
echemos un vistazo a algo sano, optimizaciones seguras para su
ordenador. Esto le será útil y lo agradecerán los desarrolladores la
próxima vez que reporte un problema en Bugzilla. (Los desarrolladores
suelen pedir que recompile un paquete con los CFLAGS mínimos para
ver si el problema persiste. Recuerde que los parámetros agresivos
pueden arruinar el código.)

2. Optimizando

Lo básico

La meta detrás de usar CFLAGS y CXXFLAGS es crear código
específico para su sistema; debería funcionar perfectamente mientra es
ligero y rápido, si es posible. Algunas veces estás condiciones son
mutuamente excluyentes, pero nosotros jugaremos con combinaciones
que sabemos que funcionan bien. Idealmente, las mejores están
disponibles para cada arquitectura de CPU. Mencionaremos más
adelante los parámetros agresivos para que se sepa con cuales tener
cuidado. No discutiremos cada opción listada en el manual de gcc (hay
cientos), pero hablaremos de las básicas, los más comunes.

Nota: Si no está seguro qué hace el parámetro, revise el capítulo relevante en
el manual de gcc y si aún continúa atascado, pruebe Google, o revise las listas
de correo de gcc.

-march
La primera y más importante opción es -march. Esta le dice al
compilador que código debería producirse para su arquitectura de
procesador (o arch); dice que debería producir código para un cierto
tipo de CPU. Diferentes CPUs tienen diferentes características, soportan
diferentes conjunto de instrucciones y tienen diferentes formas de
ejecutar código. El parámetro -march mandará al compilador producir
código específico para su CPU, tomando en cuenta todas sus
capacidades, características, conjuntos de instrucciones, caprichos y
demás.

2 de 8

19/11/09 21:57

Documentación Gentoo Linux -- Guía de Compila...

http://www.gentoo.org/doc/es/gcc-optimization.xml

A pesar que la variable CHOST en /etc/make.conf especifica la
arquitectura general usada, -march también se usa para que sus
programas sean optimizados para su procesador específico. Las
arquitecturas x86 y x86-64 (entre otras) también deberían hacer uso
del parámetro -march.

¿Qué tipo de CPU tiene? Para averiguar, ejecute el siguiente comando:

Listado de Código 2.1: Examinando la información de la CPU
$ cat /proc/cpuinfo

Ahora veamos -march en acción. Este ejemplo es para un viejo
Pentium III:

Listado de Código 2.2: /etc/make.conf: Pentium III
CFLAGS="-march=pentium3"
CXXFLAGS="${CFLAGS}"

Aquí hay otro para una CPU de 64-bit AMD:

Listado de Código 2.3: /etc/make.conf: AMD:64
CFLAGS="-march=athlon64"
CXXFLAGS="${CFLAGS}"

Si todavía no está seguro qué tipo de CPU tiene, tal vez quiera usar la
opción -march=native. Al usarla, GCC detectará el procesador y
automáticamente usará las opciones apropiadas.Sin embargo, no use
esta opción si la intención es ¡compilar paquetes para un CPU
diferente!

De manera que, si está compilando paquetes en una computadora,
pero piensa ejecutarlos en una computadora diferente (usando, por
ejemplo, una computadora rápida para construir paquetes para una
máquina más vieja y lenta), entonces no use la opción -march=native.
La palabra "native" significa que el código producido podrá ejecutarse
solamente en ese tipo de CPU. Las aplicaciones construidas con
-march=native en un CPU AMD Athlon 64 CPU no podrán ejecutarse en
un CPU VIA C3 más antiguo.
También están disponibles los parámetros -mcpu y -mtune. Cada uno
de ellos sólo se usará cuando no haya otra opción -march disponible.
Ciertas arquitecturas de procesador pueden requerir -mtune o incluso
de -mcpu. Desgraciadamente, el comportamiento de gcc no es muy
consistente con la manera que cada parámetro se comporta de una
arquitectura a la otra.
En CPUs x86 y x86-64, -mcpu generará código epecífico para esta CPU
usando todas sus instrucciones disponibles y el ABI correcto; no tendrá
compatibilidad hacia atrás para CPUs antiguas/diferentes. Si no
necesita ejecutar código en otro sitio que en el sistema que está
corriendo Gentoo, continue para usar -march. Sólo debería considerar
usar -mtune cuando necesite generar código para CPUs antiguas como

3 de 8

19/11/09 21:57

Documentación Gentoo Linux -- Guía de Compila...

http://www.gentoo.org/doc/es/gcc-optimization.xml

i386 e i486. -mtune produce un código más genérico que -march;
aunque afinará el código para cierto CPU, no tendrá en cuenta los
conjuntos de instrucciones disponibles y ABI. No use -mcpu en sistemas
x86 o x86-64, ya que está obsoleto para estas arquitecturas.

Sólo CPUs no x86/x86-64 (como Sparc, Alpha y PowerPC) pueden
requerir -mtune o -mcpu en lugar de -march. En estas arquitecturas,
-mtune/-mcpu algunas veces se comportará como -march en
(x86/x86-64) ... pero con un nombre distinto. De nuevo, el
comportamiento de gcc y los nombres de los parámetros no es
consistente entre arquitecturas, así que asegúrese de revisar el manual
de gcc para determinar cual de ellos se ajusta a su sistema.

Nota: Para más sugerencias de configuraciones de -march/-mtune/ -mcpu, por
favor lea el capítulo 5 de la Guía de Instalación de Gentoo apropiada a su
arquitectura. También, lea el manual de gcc listado en la página opciones
específicas por arquitectura, con explicaciones más detalladas sobre las
diferencias entre -march, -mcpu, y -mtune.

-O
Lo siguiente es la variable -O. Controla el total de niveles de
optimización. Hace que la compilación de código tome algo más de
tiempo, y puede tomar mucha más memoria, especialmente al
incrementar el nivel de optimización.
Hay cinco configuraciones para -O: -O0, -O1, -O2, -O3 y -Os. Debería
usar solamente una de ellas en /etc/make.conf.
Con la excepción de -O0, la configuración de -O activa varios
parámetros adicionales, así que asegúrese de leer el capítulo del
manual de gcc en opciones de optimización para aprender cuales
parámetros se activan en cada nivel -O, así como algunas explicaciones
sobre lo que hacen.

Examinemos cada nivel de optimización:

-O0: Este nivel (la letra "O" seguida de un cero) desconecta por
completo la optimización y es el predeterminado si no se
especifica ningún nivel -O en CFLAGS o CXXFLAGS. El código no
será optimizado. Esto, normalmente, no es lo que se desea.
-O1: Este es el nivel de optimización más básico. El compilador
intentará producir un código rápido y pequeño sin tomar mucho
tiempo de compilación. Es bastante básico, pero conseguirá
acabar el trabajo siempre.
-O2: Un paso por encima de -O1. Este es el nivel recomendado
de optimización, a no ser que tenga necesidades especiales. -O2
activará unos pocos parámetros añadidos a los que se activan con
-O1. Con -O2, el compilador intentará aumentar el rendimiento
del código sin comprometer el tamaño y sin tomar mucho más
tiempo de compilación.
-O3: Este es el más alto nivel de optimización posible, y también
el más arriesgado. Tomará muchísimo tiempo compilar su código
con esta opción, y de
  • Links de descarga
http://lwp-l.com/pdf10034

Comentarios de: Guia de Compilacion Optimizada de Gentoo (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad