Anda di halaman 1dari 4

4.

Herramientas de perfilado, análisis de rendimiento y corte

Las herramientas de análisis de rendimiento se utilizan para permitir el ajuste de código. Las
herramientas de análisis de rendimiento más comunes son las herramientas de perfilado. Una
herramienta de perfiles de ejecución supervisa el código mientras se ejecuta y registra cuántas
veces se ejecuta cada instrucción o cuánto tiempo pasa el programa en cada instrucción.
Perfilar el código mientras se está ejecutando proporciona una idea de cómo funciona el
programa, dónde están los puntos calientes y dónde los desarrolladores deben enfocar los
esfuerzos de ajuste de código.

La división del programa implica el cálculo del conjunto de declaraciones del programa (es
decir, la sección del programa) que puede afectar los valores de las variables especificadas en
algún punto de interés, lo que se conoce como un criterio de división. La segmentación del
programa se puede usar para localizar la fuente de errores, la comprensión del programa y el
análisis de optimización. Las herramientas de división de programas calculan los segmentos de
programas para varios lenguajes de programación utilizando métodos de análisis estáticos o
dinámicos.

4.1. Resumen de rendimiento

El ajuste de código es una forma de mejorar el rendimiento de un programa. A menudo, puede


encontrar otras formas de mejorar el rendimiento más, en menos tiempo y con menos daño al
código, que mediante el ajuste del código. Esta sección describe las opciones.

4.1.1. Características de calidad y rendimiento

Los usuarios están más interesados en las características tangibles del programa que en la
calidad del código. A veces, los usuarios están interesados en el rendimiento en bruto, pero
solo cuando afecta a su trabajo. Los usuarios tienden a estar más interesados en el
rendimiento del programa que en el rendimiento en bruto. La entrega de software a tiempo, la
provisión de una interfaz de usuario limpia y la evitación del tiempo de inactividad suelen ser
más importantes.

4.1.2. Rendimiento y ajuste de código

Una vez que haya elegido la eficiencia como una prioridad, ya sea que se ponga énfasis en la
velocidad o en el tamaño, debe considerar varias opciones antes de elegir mejorar la velocidad
o el tamaño en el nivel de código. Piense en la eficiencia desde cada uno de estos puntos de
vista:
 Requisitos del programa
 Diseño del programa
 Diseño de clase y rutina
 Interacciones del sistema operativo
 Compilación de código
 Hardware
 Ajuste de código

4.1.2.1. Requisitos del programa

El rendimiento se establece como un requisito mucho más a menudo de lo que realmente es


un requisito. Barry Boehm cuenta la historia de un sistema en TRW que inicialmente requería
un tiempo de respuesta de un segundo. Este requisito condujo a un diseño altamente
complejo y un costo estimado de $ 100 millones. Un análisis posterior determinó que los
usuarios estarían satisfechos con las respuestas de cuatro segundos el 90 por ciento de las
veces. La modificación del requisito de tiempo de respuesta redujo el costo general del sistema
en aproximadamente $ 70 millones. (Boehm 2000b).

4.1.2.2. Diseño del programa

El diseño del programa incluye los principales trazos del diseño para un solo programa,
principalmente la forma en que un programa se divide en clases. Algunos diseños de
programas hacen que sea difícil escribir un sistema de alto rendimiento. Otros hacen difícil no
hacerlo.

4.1.2.3. Diseño de clase y rutina

El diseño de los aspectos internos de las clases y las rutinas presenta otra oportunidad para
diseñar para el rendimiento. Una clave de rendimiento que entra en juego a este nivel es la
elección de los tipos de datos y los algoritmos, que generalmente afectan el uso de la memoria
del programa y la velocidad de ejecución. Este es el nivel en el que puede elegir quicksort en
lugar de bubblesort o una búsqueda binaria en lugar de una búsqueda lineal.

4.1.2.4. Interacciones del sistema operativo

Si su programa funciona con archivos externos, memoria dinámica o dispositivos de salida,


probablemente esté interactuando con el sistema operativo. Si el rendimiento no es bueno,
podría ser porque las rutinas del sistema operativo son lentas o pesadas. Es posible que no
sepa que el programa está interactuando con el sistema operativo; a veces su compilador
genera llamadas al sistema o sus bibliotecas invocan llamadas al sistema con las que nunca
soñaría. Más sobre esto más adelante.

4.1.2.5. Compilación de código

Los buenos compiladores convierten el código de lenguaje claro y de alto nivel en un código de
máquina optimizado. Si elige el compilador correcto, es posible que no necesite pensar más en
optimizar la velocidad.
Los resultados de optimización informados en el Capítulo 26 proporcionan numerosos
ejemplos de optimizaciones de compiladores que producen un código más eficiente que el
ajuste manual de códigos.

4.1.2.6. Hardware

A veces, la forma más barata y mejor de mejorar el rendimiento de un programa es comprar


hardware nuevo. Si está distribuyendo un programa para uso en todo el país por cientos de
miles de clientes, comprar hardware nuevo no es una opción realista. Pero si está
desarrollando software personalizado para unos pocos usuarios internos, una actualización de
hardware podría ser la opción más barata. Se ahorra el costo de trabajo de rendimiento inicial.
Ahorra el costo de futuros problemas de mantenimiento causados por el trabajo de
rendimiento. También mejora el rendimiento de todos los demás programas que se ejecutan
en ese hardware.

4.1.2.7. Ajuste de código

El ajuste de código es la práctica de modificar el código correcto de manera que se ejecute de


manera más eficiente, y es el tema del resto de este capítulo. "Ajuste" se refiere a los cambios
a pequeña escala que afectan a una sola clase, una sola rutina o, más comúnmente, unas
pocas líneas de código. “Ajuste” no se refiere a cambios de diseño a gran escala u otros medios
de alto nivel para mejorar el rendimiento.

4.2. Resumen del enfoque para el ajuste de código

Debe seguir los siguientes pasos al considerar si la optimización del código puede ayudarlo a
mejorar el rendimiento de un programa:

 Desarrolle el software utilizando un código bien diseñado que sea fácil de entender y
modificar.
 Si el rendimiento es pobre:
a. Guarde una versión de trabajo del código para que pueda volver al "último estado
bueno".

b. Medir el sistema para encontrar puntos calientes.

c. Determine si el rendimiento débil proviene de un diseño, tipos de datos o algoritmos


inadecuados y si el ajuste del código es apropiado. Si el ajuste de código no es
apropiado, vuelva al paso 1.

d. Afine el cuello de botella identificado en el paso (c).

e. Mida cada mejora una a la vez.

f . Si una mejora no mejora el código, vuelva al código guardado en el paso (a). (Por lo
general, más de la mitad de los intentos de ajuste producirán solo una mejora
insignificante en el rendimiento o degradarán el rendimiento).

4.3. Cuanto más cambian las cosas, más permanecen igual.

En otras formas, los problemas de rendimiento apenas han cambiado. Las personas que
escriben aplicaciones de escritorio pueden no necesitar esta información, pero las personas
que escriben software para sistemas integrados, sistemas en tiempo real y otros sistemas con
estrictas restricciones de velocidad o espacio pueden beneficiarse de ello.

La necesidad de medir el impacto de cada intento de ajuste de código ha sido una constante
desde que Donald Knuth publicó su estudio de los programas Fortran en 1971.

El efecto de cada ajuste de código se ve afectado por el lenguaje de programación, el


compilador, la versión del compilador, las bibliotecas de código, las versiones de la biblioteca y
la configuración del compilador, entre otras cosas.

El ajuste de código invariablemente implica compensaciones entre complejidad, legibilidad,


simplicidad y facilidad de mantenimiento, por un lado, y el deseo de mejorar el rendimiento,
por otro. Introduce un alto grado de sobrecarga de mantenimiento debido a todo el
remodelado que se requiere.

Anda mungkin juga menyukai