Está en la página 1de 26

OPTIMIZACIÓN

• RAMÓN ANTONIO ESTRADA


TORRES
• MARTHA ELIZABETH INDA
OLVERA
• ERICK OCTAVIO NOLASCO
MACHUCA
• PAULINA ALEJANDRA NOVA
RAMÍREZ
• ALFONSO ALDAIR RANGEL
CANTABRANA
• Existen diversas técnicas de optimización que se
aplican al código generado para un programa
sencillo. Por programa sencillo se entiende aquel
Tipos de que se reduce a un sólo procedimiento o subrutina.
• Existen 4 tipos de optimización
optimizació • Locales
n • Ciclos
• Globales
• De mirilla
Locales

La optimización local se realiza sobre


módulos del programa. En la mayoría de
las ocasiones a través de funciones,
métodos, procedimientos, clases, etc.

Las características de las


optimizaciones locales es que solo se
ven reflejados en dichas secciones. La
optimización local sirve cuando un
bloque de programa o sección es crítico.
Optimizaciones
locales
• Folding o ensamblamiento
• Reducción de potencia
• Reducción de subexpresiones
comunes
Folding en
CoMic
Reducción de
potencia en
CoMic
Reducción de
subexpresiones
comunes en
CoMic
Ciclos
Los ciclos son una de las partes más esenciales
en el rendimiento de un programa dado que
realizan acciones repetitivas, y si dichas acciones
están mal realizadas, el problema se hace N
veces más grandes. La mayoría de las
optimizaciones sobre ciclos tratan de encontrar
elementos que no deben repetirse en un ciclo

El problema de la optimización en ciclos y en


general radica en que es muy difícil saber el uso
exacto de algunas instrucciones. Así que no todo
código de proceso puede ser optimizado. Otro
uso de la optimización puede ser el
ejemplo en
CoMic
Ejemplo en
CoMic
Optimizaciones
globales
Características:
• La optimización global se da con respecto a todo el código.
• Este tipo de optimización es más lenta pero mejora el desempeño
general de todo programa.
• Las optimizaciones globales pueden depender de la arquitectura de la
máquina.
Grafo flujo de ejecución
OPTIMIZACIÓN
i=1 i Entero = 1;
r=1
r Entero = 1;
n=27
n Entero = 27;
GiroCompleto Entero (angulo, vuelta)
{
Mientras (i<=n) Mientras (i<=n) {
r=r*i;
i++;
r=r*I }
angulo*vuelta Girar
i++ agulo*vuelta Girar;
}
Optimizaciones
de mirilla
Ideas básicas:
Se hace un recorrido en el código
Se utiliza una ventana de instrucciones
Nuevas instrucciones
EJEMPLOS
• Eliminar cargas inecesarias
angulo Entero = 27;
vuelta Entero = 44; • Eliminar instrucciones inútiles
i Entero = angulo;
angulo = angulo*1;
n Entero = vuelta;
vuelta = vuelta+0;
Si (i<n){ … }
• Utilizar instrucciones específicas
Esto puede ser sustituido por:
angulo = Angulo +1;
angulo Entero = 27;
Esto puede ser sustituido por:
vuelta Entero = 44;
Si (angulo<vuelta){ … }
Incremento angulo;
Costo de ejecución (memoria,
registros, pilas)
• Microcontrolador RISC
• Memoria de 32KB flash
• Memoria SRAM de 2KB (2048 bytes
de 8bits)
• Velocidad del reloj de 16MHz

T = 1,000 * x / 16,000,000

T -> ms
x -> ciclos de reloj
T = 1,000 * x / 16,000,000
Ejemplo en CoMic T -> ms
Código Fuente Instrucció Operador Operando Operando x -> ciclos
Resultado de reloj
# Ciclos Bytes
n 1 2
Entero a = 10;
Si( a < 50 ) { 1 = 10 a 2 2
Ciclo( Entero b=1; Salir 2 < a 50 R1 3
b==100 ) {
3 Si -> (==) R1 Falso JMP (11) 3
a = a + 1;
} 4 = 1 b 2 2
} 5 == B 100 R2 3
Sino { a = 7 * a; } 6 Ciclo R2 True JMP (10) 3
7 + A 1 R3 1
Tiempo aproximado 8 = R3 A 2
X=2+3+3+2+ 9 } -> (ciclo) JMP (5) 3
( (3+3+1+2+3) * 100 ) + 3
X = 1,213 ciclos 10 } -> (if) JMP (13) 3
11 * 7 a R4 2
T = 1,000 * (1,213) / 12 = R4 a 2
16,000,000
13 …
T = 0.075 ms
Consideraciones
Un microcontrolador
puede ejecutar una o
más instrucciones por
ciclo de reloj
Si un Arduino se queda
sin memoria SRAM, el
sketch compilará bien y
se cargará en el Arduino
Incluir librerías, sin problema, pero se
aumentará el uso de producirán efectos
memoria SRAM y flash inesperados
Criterios para mejorar el código

Hacer ver a los programadores que
optimicen su código desde el inicio.


Los criterios de optimización siempre
están definidos por el compilador.
Sugerir al programador

El primer ejemplo no está mal.


El compilador probablemente
considera que hacer su transformación
es mejor para el resultado final.
Ejemplo en CoMic


Permitir el Folding.


Recortar tiempos a largo plazo.


Dependiendo de la salida podría ser
beneficioso.
Algunas otras consideraciones


Evitar el código muerto.


Revisar los tiempos de evaluación de
cada bloque.


Tomar en cuenta la salida final de
código.
Herramientas para el
análisis del flujo de
datos.
• Depuradores
• Desensamblador
• Diagramas de flujo
• Diccionario de Datos
Depurador
• Permite correr otros programas, permitiendo al usuario ejercer cierto control
sobre los mismos a medida que los estos se ejecutan, y examinar el estado del
sistema (variables, registros, banderas, etc.) en el momento en que se presente
algún problema.
• El depurador permite detener el programa en:

• Punto de ruptura.

DEPURADOR • Punto de ruptura condicional.

• Un momento determinado a petición del usuario.


• Durante esa interrupción, el usuario puede:

• Examinar y modificar la memoria y las variables del programa.

• Examinar el contenido de los registros del procesador.

• Cambiar el punto de ejecución.

• Ejecutar instrucción a instrucción.

• Ejecutar partes determinadas del código


Desemblador
o desensamblador
• Es un programa de computadora que traduce el
lenguaje de máquina a lenguaje ensamblador, la
operación inversa de la que hace el ensamblador.
Diagrama de flujo
de Datos
• Es una herramienta de modelización que
permite describir, de un sistema,
la transformación de entradas en salidas.
Diccionario de
Elimina posibles ambigüedades.
Programadores

datos
Ayuda a mantener sincronizado el trabajo de
Diseñadores.

Campo Tamaño Tipo de Dato Descripción


• Es la colección central de
información sobre los datos. Sensor1 18 Pin Almacena la configuración de
Almacena el significado y el entrada Pin 1
origen de los datos, su Sensor2 18 Pin Almacena la configuración de
entrada Pin 2
relación con otros datos, su
Motor1 24 Pin Almacena la configuración de salida
formato de uso etc. El Pin 4
diccionario de datos tiene Motor2 24 Pin Almacena la configuración de salida
rigurosas definiciones de Pin 5
todos los nombres para a 16 Entero Variable para operaciones
aritméticas.
facilitar al Usuario y a los
condicion 24 Booleano Variable de condición para
diseñadores de software. sentencia Si. Flujo de datos
controlado a partir de condición.

También podría gustarte