61
OPTIMIZACION [email protected] [email protected] Graciela Molina 1-11 Marzo de 2017 FACET -UNT

OPTIMIZACION - wtpc.github.io

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: OPTIMIZACION - wtpc.github.io

OPTIMIZACION

[email protected]@herrera.unt.edu.ar

Graciela Molina

1-11 Marzo de 2017FACET -UNT

Page 2: OPTIMIZACION - wtpc.github.io

PROBLEMA FISICO

MODELO

IMPLEMENTACION

EVALUACION

( validar el método)

( codificación)REFINAR

Cómo es el proceso de escribir software científico?

 

Page 3: OPTIMIZACION - wtpc.github.io

PROBLEMA FISICO

MODELO

IMPLEMENTACION

EVALUACION

( validar el método)

( codificación)REFINAR

Cómo es el proceso de escribir software científico?

 

Un amigo de un amigo dice que … nunca tengo que

hacer XYZ porque el código se será más

lento

Page 4: OPTIMIZACION - wtpc.github.io

Codificamos sin mucha planificación (que tan difícil puede ser???)

La primera versión que “anda” (resultados correctos?!)

Page 5: OPTIMIZACION - wtpc.github.io

OPTIMIZAR !!!

Pero cuando el problema crece ...

Recién notamos que no son soluciones óptimas  

Page 6: OPTIMIZACION - wtpc.github.io

QUE OPTIMIZAMOS ?

Tiempo de ejecución?

Page 7: OPTIMIZACION - wtpc.github.io

QUE OPTIMIZAMOS ?

Debemos pensar en lograr un trade­off entre:

El tiempo de CPU es más económico que el tiempo humano !

Tiempo de desarrolloDebuggingValidaciónportabilidad, etc.

Y claro el tiempo de ejecución

Page 8: OPTIMIZACION - wtpc.github.io

COMO OPTIMIZAMOS ?

Seguramente alguien ya nos resolvió parte del problema !

No vamos a inventar la rueda

Page 9: OPTIMIZACION - wtpc.github.io

COMO OPTIMIZAMOS ?

USAR LIBRERIAS OPTIMIZADAS!!!

http://www.netlib.org/lapack/

LAPACK — Linear Algebra PACKage   

https://www.gnu.org/software/gsl/

GSL - GNU Scientific Library

http://www.boost.org/ C++ Boost

http://pandas.pydata.org/

Pandas

http://www.numpy.org/ Numpy

https://www.scipy.org/

Scipy

Page 10: OPTIMIZACION - wtpc.github.io

QUÉ MÁS PODEMOS HACER ?

APRENDER SKILLS DE GOOGLEO!(EVALUAR LO QUE EXISTE)

Seguramente conseguiremos sw de mejor calidad que si intentamos 

escribirlo nosotros mismos

Ojo! No siempre!

Page 11: OPTIMIZACION - wtpc.github.io

QUÉ MÁS PODEMOS HACER ?

Y SI TENGO QUE PROGRAMAR.“ELEGIR” UN LENGUAJE DE PROGRAMACIÓN(Tener presente qué existe, conocer 

sus fortalezas y debilidades)

Page 12: OPTIMIZACION - wtpc.github.io

Usar aproximaciones cuando sea posible.

Desarrollar algoritmos más eficientes

Utilizar estructuras de datos apropiadas

HAY MÁS PARA OPTIMIZAR

Page 13: OPTIMIZACION - wtpc.github.io

Obtener hardware más veloz

Usar o escribir software optimizado para el hardware que se posee. Por ejemplo: aprovechar bibliotecas ya optimizadas, BLAS (www.netlib.org/blas) , LAPACK (www.netlib.org/lapack),etc­

Paralelizar

AÚN MÁS!

Page 14: OPTIMIZACION - wtpc.github.io

OPTIMIZACION

1. Respecto a los algoritmos

2. Respecto a las estructuras de datos

3. Respecto al hardware 

Page 15: OPTIMIZACION - wtpc.github.io

OPTIMIZACION

1. Respecto a los algoritmos

2. Respecto a las estructuras de datos

3. Respecto al hardware 

Page 16: OPTIMIZACION - wtpc.github.io

ALGORITMOS

¿Cómo elegir el algoritmo adecuado?

Evaluación teórica: Complejidad en tiempo y almacenamiento. (Analizar como se comporta el programa a medida que el tamaño de la entrada crece)

Evaluación práctica: Realizar mediciones (profiling)

Page 17: OPTIMIZACION - wtpc.github.io

Complejidad asintótica y notación O­grande

Estima de qué manera crecerá el tiempo de ejecución a medida que aumente el tamaño de la entrada.

 

ALGORITMOS (evaluación teórica)

Page 18: OPTIMIZACION - wtpc.github.io

ALGORITMOS (evaluación teórica)

O(1)<O(log n)<O(n)<O(n2)<O(n3)<...<O(cn)

Page 19: OPTIMIZACION - wtpc.github.io

Ejemplo: Algoritmos de Ordenación

ALGORITMOS

[9 0 0 4 3 4 1 2]   [0 0 1 2 3 4 4 9]→

[9 0 0 8 3 4 1 2]   [→ 0 9 0 8 3 4 1 2]

[0 0 9 8 3 4 1 2][0 0 8 9 3 4 1 2]

...

 

9>0?

Page 20: OPTIMIZACION - wtpc.github.io

ALGORITMOS

Al cabo de n comparaciones, solo se ubicó un elemento.

Necesitamos ahora comparar los n­1 elementos restantes

 O(n2)

 

Mejor caso: el arreglo ya esta ordenado.

Peor caso: el arreglo esta en el orden inverso.

Page 21: OPTIMIZACION - wtpc.github.io

ALGORITMOS

¿ Como repensar el algoritmo?

Si mantenemos un contador de la cantidad de veces que se mueve:

Mejor caso: el arreglo ya esta ordenado y al finalizar el contador esta en cero y el algoritmo termina. ¿Qué ganamos?

 O(n)

Peor caso: No hay nada que hacer! 

NO ALCANZA!!! A SEGUIR PENSANDO ...

Page 22: OPTIMIZACION - wtpc.github.io

ALGORITMOSEJEMPLO 2: Merge Sort

2 7 5 1 4 3 6 8

2 7 5 1 4 3 6 8

2 7 5 1 4 3 6 8

2 7

5

5 1 4 3 6 8

Page 23: OPTIMIZACION - wtpc.github.io

ALGORITMOSEJEMPLO 2: Merge Sort

2 7 5 1 4 3 6 8

2 7 5 1 4 3 6 8

2 7 5 1 4 3 6 8

2 7

5

5 1 4 3 6 8

Page 24: OPTIMIZACION - wtpc.github.io

ALGORITMOSEJEMPLO 2: Merge Sort

2 7 5 1 4 3 6 8

2 7 5 1 4 3 6 8

2 7 5 1 4 3 6 8

2 7

5

5 1 4 3 6 8

MERGE

Page 25: OPTIMIZACION - wtpc.github.io

ALGORITMOSEJEMPLO 2: Merge Sort

2 7 5 1 4 3 6 8

2 7 5 1 4 3 6 8

2 7 5 5 4 3 6 8

2 7

1

5 1 4 3 6 8

MERGE

Page 26: OPTIMIZACION - wtpc.github.io

ALGORITMOSEJEMPLO 2: Merge Sort

2 7 5 1 4 3 6 8

1 2 5 7 4 3 6 8

2 7 5 5 4 3 6 8

2 7

1

5 1 4 3 6 8

MERGE

Page 27: OPTIMIZACION - wtpc.github.io

ALGORITMOSEJEMPLO 2: Merge Sort

2 7 5 1 4 3 6 8

1 2 5 7 4 3 6 8

2 7 5 5 4 3 6 8

2 7

1

5 1 4 3 6 8

MERGE

Page 28: OPTIMIZACION - wtpc.github.io

ALGORITMOSEJEMPLO 2: Merge Sort

2 7 5 1 4 3 6 8

1 2 5 7 4 3 6 8

2 7 5 5 4 3 6 8

2 7

1

5 1 4 3 6 8

MERGE

Page 29: OPTIMIZACION - wtpc.github.io

ALGORITMOSEJEMPLO 2: Merge Sort

2 7 5 1 4 3 6 8

1 2 5 7 3 4 6 8

2 7 5 5 3 4 6 8

2 7

1

5 1 4 3 6 8

MERGE

Page 30: OPTIMIZACION - wtpc.github.io

ALGORITMOSEJEMPLO 2: Merge Sort

1 2 3 4 5 6 7 8

1 2 5 7 3 4 6 8

2 7 5 5 3 4 6 8

2 7

1

5 1 4 3 6 8

MERGE

Page 31: OPTIMIZACION - wtpc.github.io

http://bigocheatsheet.com/

Page 32: OPTIMIZACION - wtpc.github.io

ALGORITMOS

J. W. Cooley,J. W. Tukey (1965)

¿ Qué tanto importa la elección de un algoritmo?

Costo TDF O(N2) Costo FFT O(N log2 N)

¿ Cual es realmente le beneficio?

N 1000 106 109

N2 106 1012 1018

Nlog2N 104 20x106 30x109

Supongamos que cadaoperación demora 1ns

1018 ns ~ 31.2 años30x109 ns ~30 seg

Page 33: OPTIMIZACION - wtpc.github.io

ALGORITMOShttp://www.fftw.org/speed/

Page 34: OPTIMIZACION - wtpc.github.io

15 Sorting Algorithms in 6 Min.http://youtube/kPRA0W1kECg

Page 35: OPTIMIZACION - wtpc.github.io

Encontrar un mejor algoritmo

Optimizar un 

algoritmo

ALGORITMOS

 Es mejor que

!

Page 36: OPTIMIZACION - wtpc.github.io

ALGORITMOS

 

travel salesman problem

Page 37: OPTIMIZACION - wtpc.github.io

OPTIMIZACION

1. Respecto a los algoritmos

2. Respecto a las estructuras de datos

3. Respecto al hardware 

Page 38: OPTIMIZACION - wtpc.github.io

ESTRUCTURAS DE DATOS

Almacenar información de forma organizada y estructurada y no como datos simples.

Se pueden ver como una colección de datos  que se caracterizan por su organización y las operaciones que se definen en ellos.

Objetivo: tener un fácil acceso y manejo de datos

Page 39: OPTIMIZACION - wtpc.github.io

ESTRUCTURAS DE DATOS

Secuenciales:Datos  organizados consecutivamente.

Asociativas: Los datos no tienen por qué situarse de forma contigua sino que se localizan mediante una clave.

10 2 7 5 1 4 9

5

3

7

alfa

beta

gama

keykey valor

Page 40: OPTIMIZACION - wtpc.github.io

Contenedores secuenciales

Arreglos

ESTRUCTURAS DE DATOS

Listas enlazadas

10 2 7 5 1 4 9 5

Insertar al finalO(1)

...

10 2 7 5 1 4 95

Insertar al principioO(1)

...

10 2 7 5

10 2 7 5

head tail

head tail

Single linked-list

Double linked-list

Page 41: OPTIMIZACION - wtpc.github.io

Contenedores secuenciales

Pila (LIFO)

ESTRUCTURAS DE DATOS

Cola (FIFO)

Page 42: OPTIMIZACION - wtpc.github.io

Contenedores asociativosESTRUCTURAS DE DATOS

+ diccionarios, mapas ordenados, conjuntos

ArreglosMapas no ordenados (hash maps)

Page 43: OPTIMIZACION - wtpc.github.io

OPTIMIZACION

1. Respecto a los algoritmos

2. Respecto a las estructuras de datos

3. Respecto al hardware 

Page 44: OPTIMIZACION - wtpc.github.io

OPTIMIZACION

1. Respecto a los algoritmos

2. Respecto a las estructuras de datos

3. Respecto al hardware 

Page 45: OPTIMIZACION - wtpc.github.io

OPTIMIZACION CON HARDWARE

Cómo hacer más rápido nuestros cálculos?

1. Escribir y leer más rápido (I/O > veloc)

2. Dar vueltas más rápidola manija (> veloc clock)

3. Mejorar la tecnología (mejor CPU) 

Page 46: OPTIMIZACION - wtpc.github.io

OPTIMIZACION CON HARDWARE

1. Escribir y leer más rápido (I/O > veloc)

2. Dar vueltas más rápidola manija (> veloc clock)

3. Mejorar la tecnología (mejor CPU) 

Limita el acceso a memoria no­uniformey multi­core

Arquitecturas multi­cores.Paralelización

 Compiladores que permiten  optimización para aprovechar  la CPU  (pipelining,  unidades vectoriales  y superescalares , etc)

Page 47: OPTIMIZACION - wtpc.github.io

OPTIMIZACION CON HARDWARE

El tipo de operaciones importa!!!

Operaciones económicas (más veloces),0.5x­1x + ­ *

Operaciones velocidad media,5x­10x

/ % sqrt()

Operaciones costosas, muy lentas, >100x

Pow(x,y) x,y reales

Operaciones lentas,    20x­50x

Func. trascendentales

Pipelining   operaciones veloces.→Usar BLAS­LAPACK (álgebra lineal, son + y *)

Page 48: OPTIMIZACION - wtpc.github.io

OPTIMIZACION CON HARDWARETécnicas de optimización (compilador)

Opt. Escalar      Opt. Lazos        InliningCopy propagation

Const folding

Strength reduction

Eliminación subexpresiones comunes

Renombrado vbles

Loop invariant

Loop unrolling

Intercambio orden loop

Fusion/fision loop

Reemplaza una porción de código por otro equivalente + veloz

Page 49: OPTIMIZACION - wtpc.github.io

OPTIMIZACION CON HARDWARE

Copy Propagation

Antes

x=yz=1+x

 ← Hay dependencia

Después

x=yz=1+Y

Page 50: OPTIMIZACION - wtpc.github.io

OPTIMIZACION CON HARDWARE

Const foldingAntes

a=100;b=200;sum=a+b;

Después

sum=300;

El compilador pre­calcula el resultado una única vez en tpo de compilación. Elimina código redundante

Page 51: OPTIMIZACION - wtpc.github.io

OPTIMIZACION CON HARDWARE

Strength Reduction

Antes

x=pow(y,2.0);a=b/2.0;

Después

x=y*y;a=b*0.5;

Si el compilador puede saber que se están realizando la potencia de un num entero pequeño, o el denominador de una división es una constante; entonces puede reemplazar estas operaciones por productos que es menos costoso.

Pow, / operaciones más costosas

Page 52: OPTIMIZACION - wtpc.github.io

OPTIMIZACION CON HARDWARE

Eliminación subexpresiones comunes

Antes

d=c*(a/b);e=(a/b)*2.0;

Después

x=a/b;d=c*x;e=x*2.0;

Solo si la subexpresion es un cálculo costoso o si resulta en la reducción de registros a utilizar

Eliminar el Cálculo doble de la /

Page 53: OPTIMIZACION - wtpc.github.io

OPTIMIZACION CON HARDWARE

Renombrado de variablesAntes

x=y*z;q=r+x*2;x=a+b;

Después

x0=y*z;q=r+x0*2;x=a+b;

El código original tiene una dependencia de salida, el segundo NO (x sigue teniendo el mismo resultado final)

Page 54: OPTIMIZACION - wtpc.github.io

OPTIMIZACION CON HARDWARE

Loop invarianteAntes

Do i=1,na(i)=b(i)+c*de=g(n)

END DO

Después

tempx=c*d;Do i=1,n

a(i)=b(i)+tempEND DOe=g(n)

Loop invariant= código que no cambia dentro de un lazo.

No es necesario que se ejecute iterativamente

Page 55: OPTIMIZACION - wtpc.github.io

OPTIMIZACION CON HARDWARE

Loop unrollingAntes

Do i=1,na(i)=a(i)+b(i)

ENDO

Después

Do i=1,n,4a(i)=a(i)+b(i)a(i+1)=a(i+1)+b(i+1)a(i+2)=a(i+2)+b(i+2)a(i+3)=a(i+3)+b(i+3)

ENDO

X el compilador

Page 56: OPTIMIZACION - wtpc.github.io

OPTIMIZACION CON HARDWARE

Intercambio orden loopAntes

Do i=1,niDo j=1,nj

a(i,j)=b(i,j)END DO

END DO

Después

Do j=1,njDo i=1,ni

a(i,j)=b(i,j)END DO

END DO

Depende : en Fortran (después), 

en C (antes)

Page 57: OPTIMIZACION - wtpc.github.io

OPTIMIZACION CON HARDWARE

Loop fisión/fusiónSeparar

Do i=1,na(i)=b(i)+1

END DODo i=1,n

c(i)=a(i)/2END DODo i=1,n

d(i)=1/c(i)END DO

Unir

Do i=1,na(i)=b(i)+1c(i)=a(i)/2d(i)=1/c(i)

END DO

Fusión

Fisión

Page 58: OPTIMIZACION - wtpc.github.io

OPTIMIZACION CON HARDWARE

Innlining Antes

Do i=1,na(i)=f(i)

END DO…REAL FUNCTION f(x)f=x*3END FUNCTION f

Después

Do i=1,na(i)=i*3

END DO

Elimina overhead del llamado a la funciónEn gral el compilador tiene esta funcionalidad para altos niveles de optimización

Page 59: OPTIMIZACION - wtpc.github.io

1. Hay algún algoritmo más eficiente  para  resolver  el mismo problema? 2.  Cuello  de  botella: estructuras  de  datos  y acceso a memoria eficiente.

3.  Usar  bibliotecas optimizadas! 

En resumen:

Page 60: OPTIMIZACION - wtpc.github.io

 4.  Usar  opciones  de optimización  del compilador.

5.  Aprovechar  las características  del  CPU (vectorial, paralelismo).

6. Re­pensar el código. A veces  pequeños  cambios mejoran  sustancialmente la  performance.  No quedarse  con  la  primera versión que anda!

Page 61: OPTIMIZACION - wtpc.github.io

OPTIMIZACION

[email protected]@herrera.unt.edu.ar

Graciela Molina

1-11 Marzo de 2017FACET -UNT