Una mejora local no acelera necesariamente el programa completo en la misma proporción. Este ejemplo usa la ley de Amdahl del formulario para separar la parte que mejora de la que permanece igual.
Enunciado
Un programa tarda 120 segundos en procesar un conjunto de imágenes. De ese tiempo, 90 segundos corresponden a aplicar un filtro y los otros 30 segundos a leer archivos y guardar resultados. Se reemplaza el filtro por una versión que realiza esa misma tarea tres veces más rápido. La lectura y el guardado no cambian.
Pregunta: ¿cuántas veces más rápido será el programa completo?
1. Extraer los datos del enunciado
La fórmula del formulario es:
Antes de sustituir, identifiquemos qué frase proporciona cada dato:
- «120 segundos»: tiempo total antes de la mejora. Lo necesitamos para calcular qué fracción del programa ocupaba el filtro.
- «90 segundos corresponden a aplicar un filtro»: tiempo antes de la mejora de la parte que sí se optimiza. Por tanto, .
- «Los otros 30 segundos»: parte que no cambia. Su fracción es .
- «Tres veces más rápido»: aceleración de solo el filtro, es decir, . No es todavía la aceleración del programa completo, .
¿Por qué dividir 90 entre 120?
representa una fracción del tiempo total original, no una cantidad de segundos ni el porcentaje de instrucciones del programa. Aquí el filtro ocupaba el del tiempo antes de optimizarlo. Si usáramos el tiempo del filtro después de la mejora para calcular , estaríamos mezclando dos situaciones distintas.
2. Sustituir en la ley de Amdahl
Primero, la parte que no cambia ocupa del tiempo original. La parte optimizada pasa de ocupar a ocupar de ese mismo tiempo:
Respuesta: el programa completo será 2 veces más rápido, aunque el filtro aislado sea 3 veces más rápido.
3. Comprobarlo con tiempos reales
La lectura y el guardado siguen tardando 30 segundos. El filtro, que antes tardaba 90 segundos, ahora tarda segundos. Entonces:
La aceleración total es la razón entre el tiempo anterior y el nuevo:
El resultado coincide con la fórmula. El límite está en los 30 segundos que no se optimizaron: por mucho que acelere el filtro, esa parte seguirá consumiendo tiempo.
