OPTIMIZACIÓN DE CICLOS
TÉCNICAS DE OPTIMIZACIÓN
ANALISIS DE CILOS CRITICO
Identifica los ciclos más
costosos en terminos de tiempo
de ejecución
DESENROLLADO COMBINACIÓN REDUCCIÓN DE FUERZA Y FRECUENCIA RASLADO DE CODIGO
Combinar dos bucles que inicializan diferentes arrays Remplaza operaciones costosas(Exponenciación, multiplicacion, etc.)por Mover cálculos constantes fuera del ciclo y guardarlos en
REACOMODO
Desenrollar un bucle para sumar los elementos de Reorganizar "(a+b)+c" como "a+(b+c)" para reducir el
con el mismo valor. También, fusionar un bucle que otras más eficientes x^2 = x*x variables temporales. Por ejemplo, calcular "x*y" fuera de un
ELIMINACIÓN REDUNDANTE un array pequeño, otro para inicializar una matriz
con valores constantes, y un tercero para repetir
suma y otro que multiplica los elementos de un array. a*10=a<<3 + a<<1 bucle si "x" y "y" son constantes. Calcular "max-3" antes del bucle
número de operaciones. Reacomodar "a*(b+c)" como
"ab + ac" para aprovechar resultados previos.
Optimizar el rendimiento al remover el cálculo Asimismo, combinar bucles anidados que recorren la x/2=x>>1 y almacenarlo en una variable temporal. Asimismo, mover el
una operación simple varias veces. Reorganizar "a && b | c" como "(a && b) | c" para
de "a+0" dentro de un bucle, así como la misma matriz. cálculo "j-k" fuera del bucle y guardar el resultado en una
disminuir la cantidad de evaluaciones necesarias.
subexpresión "j*k" si se calcula repetidamente en
dicho bucle. Además, eliminar cualquier porción
de código que nunca se ejecute debido a una
condición que siempre sea falsa.
EJEMPLOS
EJEMPLOS
EJEMPLOS EJEMPLOS EJEMPLOS Antes: Calcular "(a+b)+c". Después: Reorganizar
EJEMPLOS Antes: Sumar cada número del array uno por Antes: Usar dos bucles separados para ntes: Calcular "x^2" utilizando la operación de
Antes: Calcular "xy" dentro de un bucle
repetitivo, incluso si "x" y "y" son constantes.
como "a+(b+c)" para reducir el número de
operaciones necesarias.
uno. Después: Sumar todos los números del inicializar cada array con el mismo valor. exponenciación. Después: Calcular "x*x", que es
Antes: Calcular "10 + 0". Después: Utilizar array en una sola operación. Después: Calcular "xy" una vez fuera del bucle y
Después: Utilizar un solo bucle para inicializar más eficiente que la exponenciación.
simplemente el número 10. guardar el resultado en una variable temporal. Antes: Calcular "a*(b+c)". Después: Reacomodar
ambos arrays con el mismo valor.
como "ab + ac" para aprovechar resultados
Antes: Usar un bucle para asignar el mismo Antes: Multiplicar "a" por 10. Después: Calcular
Antes: Calcular "6 * 1". Después: Utilizar Antes: Calcular "max-3" en cada iteración del previos y evitar duplicar cálculos.
valor a cada elemento de la matriz. Después: Antes: Tener un bucle para sumar los elementos "a<<3 + a<<1", que es equivalente a multiplicar
simplemente el número 6. Definir la matriz con los valores constantes bucle. Después: Calcular "max-3" una vez antes
de un array y otro bucle para multiplicarlos. por 10 pero más eficiente.
del bucle y almacenarlo en una variable Antes: Evaluar "a && b | c". Después: Reorganizar
directamente. Después: Fusionar ambos bucles en uno solo
Antes: Concatenar una cadena con una cadena temporal. como "(a && b) | c" para disminuir la cantidad de
para realizar ambas operaciones en un solo Antes: Dividir "x" por 2. Después: Calcular "x>>1",
vacía, como en "mensaje + ''". Después: Utilizar evaluaciones necesarias y mejorar la eficiencia
ntes: Repetir la misma operación en un bucle. recorrido. que es más eficiente que la división.
simplemente la cadena original. Antes: Calcular "j-k" repetidamente dentro de un del código.
Después: Calcular el resultado de la operación
para cada repetición y sumarlos. bucle. Después: Calcular "j-k" una vez fuera del
Antes: Utilizar dos bucles anidados separados
bucle y guardar el resultado en una variable
para recorrer la misma matriz. Después:
temporal.
Combinar los dos bucles anidados en uno solo
para recorrer la matriz de manera más eficiente.