<< Chapter < Page Chapter >> Page >

Existe una amplia variedad de técnicas de optimización, no todas ellas aplicables en todas las circunstancias. Así que normalmente se le dan al usuario algunas opciones sobre cuáles optimizaciones realizar y cuáles no. A menudo esto se expresa en la forma de un nivel de optimización que se le especifica al compilador como una opción de la línea de comandos, como por ejemplo –O3.

Entre los distintos niveles de optimización controlados mediante una bandera suelen estar los siguientes:

  • Ninguna optimización : Genera código máquina a partir directamente del código intermedio, que puede ser un código muy largo y lento. Se usa primordialmente para los depuradores, y para establecer la salida correcta del programa. Dado que cada operación se realiza precisamente como el usuario lo especificó, debe ser correcta.
  • Optimizaciones básicas : Similares a las descritas en este capítulo. Generalmente trabaja minimizando el lenguaje intermedio y generando código compacto y rápido.
  • Análisis interprocedimental : Observa más allá de las fronteras de una única rutina, en busca de oportunidades de optimización. Este nivel de optimización puede incluir extender una optimización bñásica, tal como la propagación de copias, a través de múltiples rutinas. Otro resultado de esta técnica es la inserción de procedimientos en línea (inline) en aquellos lugares donde mejore el rendimiento.
  • Análisis de perfil a tiempo de ejecución : Es posible usar el perfilado a tiempo de ejecución para ayudar al compilador a generar código mejorado, basado en su conocimiento de los patrones de ejecución a tiempo de ejecución, reunidos a partir de la información del perfil.
  • Optimizaciones de punto flotante : El estándar de punto flotante del IEEE (IEEE 754) especifica con precisión cómo se llevan a cabo las operaciones de punto flotante. El compilador puede identificar ciertas transformaciones algebraicas que incrementan la velocidad del programa (tales como reemplazar una división con un recíproco una multiplicación), pero ello pudiera cambiar los resultados de salida respecto al código no optimizado.
  • Análisis de flujo de datos : Identifica el paralelismo potencial entre instrucciones, bloques o incluso iteraciones sucesivas de bucles.
  • Optimización avanzada : Puede incluir vectorización, paralelización o descomposición de datos automáticas en computadoras con arquitecturas avanzadas.

Tales optimizaciones pueden controlarse mediante varias opciones distintas del compilador. A menudo se lleva algún tiempo cavilar la mejor combinación de banderas de compilación para un código o conjunto de códigos en particular. En algunos casos, los programadores compilan diferentes rutinas usando diferentes configuraciones de optimización, para lograr el mejor rendimiento global.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Cómputo de alto rendimiento. OpenStax CNX. Sep 02, 2011 Download for free at http://cnx.org/content/col11356/1.2
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Cómputo de alto rendimiento' conversation and receive update notifications?

Ask