Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Investigacion Optimizacion de Codigo

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 12

INSTITUTO TECNOLOGICO SUPERIOR DE ALVARADO

Departamento de Ingeniería en
Reporte de Práctica
Sistemas Computacionales.

INSTITUTO TECNOLOGICO
SUPERIOR DE ALVARADO
INGENIERÍA EN SISTEMAS
COMPUTACIONALES

Materia:
Lenguajes y Autómatas ll

Semestre-Grupo:
6YA

Producto Académico:
Trabajo de Investigación

Presenta:
Martínez Cruz Jossue Noé 176Z0707

Docente:
Ing. Gabriela Hernández Cruz

H. Y G. ALVARADO, VER. AGOSTO-DICIEMBRE DEL 2019

1
INSTITUTO TECNOLOGICO SUPERIOR DE ALVARADO
Departamento de Ingeniería en
Reporte de Práctica
Sistemas Computacionales.

Contenido
INTRODUCCIÓN .................................................................................................... 3
OBJETIVO:.............................................................................................................. 4
❖ OPTIMIZACIÓN DE CÓDIGO: ........................................................................ 5
Elimina código innecesario: ............................................................................. 8
Saca código de los bucles: ............................................................................... 8
Pasar objetos por referencia mejor que por valor: ......................................... 9
Minimiza y optimiza el acceso a disco:............................................................ 9
CONCLUSIÓN ...................................................................................................... 11
BIBLIOGRAFÍA ..................................................................................................... 12

2
INSTITUTO TECNOLOGICO SUPERIOR DE ALVARADO
Departamento de Ingeniería en
Reporte de Práctica
Sistemas Computacionales.

INTRODUCCIÓN
En los primeros tiempos de la informática, programar exigía utilizar lenguajes
muy próximos a la plataforma de ejecución.

El código máquina o el lenguaje ensamblador permiten un control muy fino


del proceso de ejecución: cómo se asignan los registros del procesador,
cómo se almacenan los datos y se accede a la memoria, …

Así es posible exprimir la máxima eficiencia de una plataforma, aunque el


precio a pagar es la falta de portabilidad y el mayor coste de desarrollo y
mantenimiento del código.

3
INSTITUTO TECNOLOGICO SUPERIOR DE ALVARADO
Departamento de Ingeniería en
Reporte de Práctica
Sistemas Computacionales.

OBJETIVO:
Realizar Un Trabajo De investigación referente a las nuevas técnicas de
optimización de código.

4
INSTITUTO TECNOLOGICO SUPERIOR DE ALVARADO
Departamento de Ingeniería en
Reporte de Práctica
Sistemas Computacionales.

❖OPTIMIZACIÓN DE CÓDIGO:
En los primeros tiempos de la informática, programar exigía utilizar lenguajes muy
próximos a la plataforma de ejecución.

El código máquina o el lenguaje ensamblador permiten un control muy fino


del proceso de ejecución: cómo se asignan los registros del procesador, cómo se
almacenan los datos y se accede a la memoria, …

Así es posible exprimir la máxima eficiencia de una plataforma, aunque el precio a


pagar es la falta de portabilidad y el mayor coste de desarrollo y mantenimiento del
código.

Afortunadamente, hoy en día podemos utilizar lenguajes de programación de alto


nivel, que abstraen estos detalles de la plataforma y nos permiten ser más
productivos resolviendo problemas más complejos en menos tiempo. Sin embargo,
con esta transición hemos perdido algo de eficiencia… ¿o no?.

Quizás tampoco tanta, porque los compiladores incorporan técnicas que permiten
mejorar el rendimiento del código generado.

Ejemplo de una optimización de bucles: la variable i sólo se utiliza para calcular


la variable t. Modificando el código podemos actualizar el valor de t en cada
iteración, ahorrándonos una multiplicación.

5
INSTITUTO TECNOLOGICO SUPERIOR DE ALVARADO
Departamento de Ingeniería en
Reporte de Práctica
Sistemas Computacionales.

La optimización de código es el conjunto de fases de un compilador que


transforman un fragmento de código en otro fragmento con un comportamiento
equivalente y que se ejecuta de forma más eficiente, es decir, usando menos
recursos de cálculo como memoria o tiempo de ejecución.

Pongamos como ejemplo una instrucción como «x = y / y«. La tentación es substituir


esta expresión por «x =1«, pero es necesario garantizar que la variable y no puede
ser igual a 0, porque entonces el código podría tener un comportamiento diferente
según el lenguaje (p.ej. división por cero).

También es fundamental garantizar que el código no será menos eficiente que antes
de optimizarlo. Por ejemplo, el desenrollado de bucles (loop unrolling, replicar N
veces el código de un bucle) puede reducir el tiempo de ejecución al simplificar
instrucciones innecesarias (p.ej. saltos), aunque al hacerlo puede hacer crecer el
tamaño del código.

Dado que el tamaño del código puede tener consecuencias a nivel de acceso a
caché y a la memoria, podría pasar que el programa optimizado acabara siendo
más lento que el original.

Existen diferentes técnicas para optimizar el código, cada una de las cuales
intenta mejorar un aspecto diferenciado del código. En general pueden clasificarse
en dos categorías, las de flujo de datos (data-flow) y las de flujo de control (control-
flow).

Las optimizaciones del flujo de datos pretenden mejorar la eficiencia de los


diferentes cálculos realizados en el programa: precalculando expresiones con valor
conocido en tiempo de compilación, reaprovechando cálculos ya realizados en otras
partes del código o suprimiendo cálculos innecesarios, …

Por contra, las optimizaciones del flujo de control intentan utilizar las instrucciones
de salto condicional e incondicional de la forma más eficiente posible (ya sea
desplazando código o eliminando saltos innecesarios).

6
INSTITUTO TECNOLOGICO SUPERIOR DE ALVARADO
Departamento de Ingeniería en
Reporte de Práctica
Sistemas Computacionales.

Puede definirse también una tercera categoría, las optimizaciones de bucles (loop
optimization), intenta mejorar el rendimiento de las instrucciones iterativas
como for, while … do o repeat … until. En este caso, los cambios realizados al
código del bucle afectan tanto al flujo de datos como al flujo de control.

La ventaja de todas estas técnicas es que se aplican de forma automática cada vez
que compilamos nuestro código, de forma que podemos centrarnos en hacer
nuestro código legible en lugar de intentar optimizar «a mano». Como dijo Donald
Knuth, «la optimización prematura es la raíz de todos los males».

Dejemos a los compiladores los detalles de bajo nivel y dediquémonos a diseñar un


buen algoritmo, que ya es un trabajo suficientemente complejo.

7
INSTITUTO TECNOLOGICO SUPERIOR DE ALVARADO
Departamento de Ingeniería en
Reporte de Práctica
Sistemas Computacionales.

Las optimizaciones de código en realidad proporcionan mejoras,


pero obviamente no aseguran el éxito de una aplicación.

Clasificación de optimizaciones:
1. Dependientes de la máquina.
* Asignación de registros.
* Instrucciones especiales (“idioms”).
* Reordenación del código.
2. Independientes de la máquina.
* Ejecución en tiempo de compilación.
* Eliminación de redundancias.
* Cambio de orden.
* Reducción de frecuencia de ejecución (invariancias).
* Reducción de fuerza.

Tras esta breve introducción pasemos a ver cuáles son las más
técnicas más destacadas:

Elimina código innecesario:


Si tienes código innecesario elimínalo, parece obvio, pero en muchas ocasiones
esos pequeños trozos de código se mantienen en todas las versiones de la
aplicación, si tienes que reescribir una función, pero no estás del todo seguro y por
lo tanto no quieres perder la versión original, haz una copia de seguridad y de ese
modo no se verá realentizada la ejecución de la aplicación.

Saca código de los bucles:


Es probablemente uno de los errores que puede consumir más CPU, por supuesto
sé más cuidadoso con aquellos bucles que tengan más iteraciones (Iteración
significa repetir un proceso varias veces), con lo de sacar código no se trata de
modificar la función final del bucle sino de optimizar al máximo su rendimiento, con
esto queremos decir no incluir la declaración de una variable, no incluir comentarios,
etc …

8
INSTITUTO TECNOLOGICO SUPERIOR DE ALVARADO
Departamento de Ingeniería en
Reporte de Práctica
Sistemas Computacionales.

Pasar objetos por referencia mejor que por valor:

Ejemplo:
function valores_por_referencia (&$var)
{
$var++;
}
$a=5;
valores_por_referencia ($a);
// $a será 6 aquí

Cómo se puede deducir en el ejemplo al pasar un objeto por referencia damos la


posibilidad a la función de cambiar el valor de la variable pasada, por lo tanto, si
pasamos los objetos por referencia ahorraremos a la máquina de copiar una y otra
vez el valor de un objeto.

Minimiza y optimiza el acceso a disco:


Manipular datos de los discos duros o de las memorias flash es mucho más lento
que manipular datos almacenados en memoria por eso si vas a manejar archivos
ten en cuenta este punto.
Un buen número de útiles consejos más específicos para Php los puedes encontrar
aquí.
1 – Inicializa las variables antes de utilizarlas
2 – Dedica tiempo a estudiar PHP, está en un continuo proceso de crecimiento y
sus características van cambiando con el tiempo.
3 – Incrementar una variable en un método es lo más rápido, del mismo modo que
hacerlo en una función.
4 – Incrementar una variable global es dos veces más lento que una variable local.
5 – Incrementar la propiedad de un objeto (ej. $this->prop++) es 3 veces más lento
que incrementar una variable local.
6 – Incrementar una variable indefinida es 9 ó 10 veces más lento que una ya pre-
declarada.
7 – El hecho de declarar una variable global a pesar de que no la utilices en
ninguna función realentiza tu script, PHP tiene que chequear si la variable existe.
8 – La llamada a una función con un parametro toma aproximadamente el mismo
tiempo que de 7 a 8 operaciones con variables locales, y esa misma llamada a un
método supondrían unas 15 operaciones.

9
INSTITUTO TECNOLOGICO SUPERIOR DE ALVARADO
Departamento de Ingeniería en
Reporte de Práctica
Sistemas Computacionales.

Por último, veamos algunos de los consejos más comunes de optimización (PHP)
que publicamos hace ya algún tiempo.

Código lento (No


Código rápìdo (Recomendado) Explicación
recomendado)
$i++; ++$i; Ninguna razón
$i += 1; ++$i; Ninguna razón
rand($min,$max); mt_rand($min,$max); mt_rand es matemáticamente más veloz
$i = 0;
$i = 0;
$count = count($array); Probar si un array existe es más lento
while($array[$i]){
while($i < $count){ que probar que una variable es menor
++$i;
++$i; que otra
}
}
echo no devuelve nada por el contrario
print ‘algo’; echo ‘algo’;
print si lo hace
ob_start(); ob_start(); echo no devuelve nada, print si lo hace y
echo ‘algo’; print ‘algo’; por lo tanto haciendo el echo se debe de
ob_end_flush(); ob_end_flush(); evaluar dos veces
echo ‘algo (HTML, con etiquetas Php es más lento que la salida directa en
algo (HTML, con etiquetas php)
php)’; HTML
readfile devuelve directamente la salida
de un fichero por el
include(‘output/contain_no_php’); readfile(‘output/contain_no_php’);
contrario include debe de evaluarlo por
dos veces
Las comillas simples no evaluan el
contenido sin embargo
echo “$variable cadena “; echo $variable.’cadena’;
las dobles comillas si lo hacen por lo que
realentiza la ejecución del script
UNA_CONSTANTE; $una_variable; Ninguna razón
constant(‘UNA_CONSTANTE’); UNA_CONSTANTE; Ninguna razón
Php crea una constante más rápido que
el tiempo que tarda en calcular una
pi(); M_PI; función matemática, aplicar a todas
aquellas constantes matemáticas
existentes en Php
if($numero<0){ Siempre utilizar una función existente en
$numero *= -1; abs($numero); Php antes de crearla por nosotros
} mismos
pow($x , $exp) + pow($x , $exp
($x + 1) * pow($x , $exp – 1); Las operaciones en formato expandido
– 1);
$a*($b+$c+$d); son habitualmente más lentas
$a*$b+$a*$c+$a*$d;
La triple = no necesita convertir los tipos
if($a == $b) if($a === $b) de datos
pow($x, 0.5); sqrt($x); Ninguna razón
Php realiza la división entre 1 y 2
mientras por el contrario el segundo caso
1/2; 0.5; es directamente el resultado y no
necesita ser procesado
El segundo caso nos devolverá un error
en caso de que hayamos cometido un
if($a == 30); if(30 == $a); error tipográfico del tipo ‘=’ en vez de ‘==’
, por lo tanto es mejor esta opción ya que
podremos encontrar el error fácilmente

10
INSTITUTO TECNOLOGICO SUPERIOR DE ALVARADO
Departamento de Ingeniería en
Reporte de Práctica
Sistemas Computacionales.

CONCLUSIÓN
En este trabajo de investigación podemos apreciar el origen de la
transformación de lo que fue el código, éste al ser un lenguaje algo extenso
se buscó la manera de optimizar y comprimir dicho código con el fin de
hacerlo más eficiente y más portable a los usuarios que manejaban dicho
lenguaje de programación o también de operaciones para esto utilizaron
técnicas que te permitían optimizar el código relacionando caracteres como
representantes de líneas de código extensas a este se le denomina variable
representante hoy en día la podemos encontrar en cualquier método o
constructor de un lenguaje de alto nivel.

11
INSTITUTO TECNOLOGICO SUPERIOR DE ALVARADO
Departamento de Ingeniería en
Reporte de Práctica
Sistemas Computacionales.

BIBLIOGRAFÍA
robert. (02 de 10 de 2016). http://informatica.blogs.uoc.edu. Obtenido de
informatica.blogs.uoc.edu:
http://informatica.blogs.uoc.edu/2016/05/02/optimizacion-de-codigo-un-
codigo-mas-eficiente/
TuFunción. (18 de 10 de 2017). http://www.tufuncion.com/optimizar-codigo.
Obtenido de tufuncion.com/optimizar-codigo:
http://www.tufuncion.com/optimizar-codigo

12

También podría gustarte