Modelos
de
Paralelismo
y
           Concurrencia      Agus4n
Ramos
Fonseca             @MachinesAreUs
1a ParteCuando el Futuro nos      Alcance
“The Free Lunch is Over”
“The Free Lunch is Over”     Herb Sutter, Dr. Dobbs, 2005
Introducción de ProcesadoresMulticore en Mercado Masivo
Introducción de ProcesadoresMulticore en Mercado Masivo       Microprocesador “Cell”
No es Tema Nuevo
No es Tema Nuevo
No es Tema Nuevo  Cray 1  (1975)
No es Tema Nuevo  Cray 1           Blue Gene/P  (1975)              (2007)
No es Tema Nuevo  Cray 1           Blue Gene/P  (1975)              (2007)              Fujitsu K               (2011)
No es Tema Nuevo  Cray 1           Blue Gene/P  (1975)              (2007)              Fujitsu K               (2011)
No es Tema Nuevo
No es Tema Nuevo
Esta plática no es sobre“High Performance Computing”
¿Por qué es relavante en las aplicaciones de industria?
Escalabilidad
Escalabilidad    Vertical
Escalabilidad          Vertical10K
Escalabilidad          Vertical10K              1 x 3.2Ghz, 4 Gbytes
Escalabilidad          Vertical10K              1 x 3.2Ghz, 4 Gbytes20K             2 x 3.2Ghz, 8 Gbytes
Escalabilidad          Vertical10K              1 x 3.2Ghz, 4 Gbytes20K             2 x 3.2Ghz, 8 Gbytes30K             4 ...
Escalabilidad   Horizontal
Escalabilidad         Horizontal10K
Escalabilidad         Horizontal10K20K
Escalabilidad         Horizontal10K20K30K
Big Data   2010.03.17                2010.03.17
Escalabilidad
EscalabilidadEs conveniente contar con modelos deprogramación que permitan escalar de manera transparente tanto vertical  ...
2a ParteModelos de Paralelismo y     Concurrencia
Paralelismo vs Concurrencia
Paralelismo vs Concurrencia Paralelismo:
Paralelismo vs Concurrencia Paralelismo:   Surge cuando al menos dos tareas se ejecutan   de manera simultánea (físicament...
Paralelismo vs Concurrencia Paralelismo:   Surge cuando al menos dos tareas se ejecutan   de manera simultánea (físicament...
Paralelismo vs Concurrencia Paralelismo:   Surge cuando al menos dos tareas se ejecutan   de manera simultánea (físicament...
Paralelismo vs Concurrencia Paralelismo:   Surge cuando al menos dos tareas se ejecutan   de manera simultánea (físicament...
Paralelismo vs Concurrencia Paralelismo:   Surge cuando al menos dos tareas se ejecutan   de manera simultánea (físicament...
Ley de Amdahl                Gene Amdahl, 1967La máxima mejora en desempeño que puedeobtenerse al paralelizar un programa,...
Ley de Amdahl
Modelo más tradicional
Modelo más tradicional Hilos (Threads)   c/u con Stack propio   Memoria (estado) compartida
Modelo más tradicional Hilos (Threads)   c/u con Stack propio   Memoria (estado) compartida Locks para el acceso a variabl...
Problemas del Modelo de Hilos
Problemas del Modelo de Hilos  Muy sensible a el orden de ejecución
Problemas del Modelo de Hilos  Muy sensible a el orden de ejecución  Condiciones de competencia.
Problemas del Modelo de Hilos  Muy sensible a el orden de ejecución  Condiciones de competencia.  Deadlocks
Problemas del Modelo de Hilos  Muy sensible a el orden de ejecución  Condiciones de competencia.  Deadlocks  El pánico lle...
Problemas del Modelo de Hilos  Muy sensible a el orden de ejecución  Condiciones de competencia.  Deadlocks  El pánico lle...
Problemas del Modelo de Hilos  Muy sensible a el orden de ejecución  Condiciones de competencia.  Deadlocks  El pánico lle...
Problemas del Modelo de Hilos  Muy sensible a el orden de ejecución  Condiciones de competencia.  Deadlocks  El pánico lle...
Problemas del Modelo de Hilos  Muy sensible a el orden de ejecución  Condiciones de competencia.  Deadlocks  El pánico lle...
Clasificación de Modelos
Clasificación de Modelos Implícito
Clasificación de Modelos Implícito   Programación funcional
Clasificación de Modelos Implícito   Programación funcional   Map-Reduce
Clasificación de Modelos Implícito   Programación funcional   Map-Reduce Explícito
Clasificación de Modelos Implícito   Programación funcional   Map-Reduce Explícito   Hilos
Clasificación de Modelos Implícito   Programación funcional   Map-Reduce Explícito   Hilos   Actores
Clasificación de Modelos Implícito   Programación funcional   Map-Reduce Explícito   Hilos   Actores   Data Flow
Programación Funcional
Programación FuncionalLas funciones son abstracciones de 1er nivel.
Programación FuncionalLas funciones son abstracciones de 1er nivel.  Se pueden usar funciones como parámetros de  otras, a...
Programación FuncionalLas funciones son abstracciones de 1er nivel.  Se pueden usar funciones como parámetros de  otras, a...
Programación FuncionalLas funciones son abstracciones de 1er nivel.  Se pueden usar funciones como parámetros de  otras, a...
Programación FuncionalLas funciones son abstracciones de 1er nivel.  Se pueden usar funciones como parámetros de  otras, a...
Programación Funcional
Programación FuncionalLas funciones son puras
Programación FuncionalLas funciones son puras  Sin efectos colaterales.
Programación FuncionalLas funciones son puras  Sin efectos colaterales.  El resultado es función solamente de los  parámet...
Programación FuncionalLas funciones son puras  Sin efectos colaterales.  El resultado es función solamente de los  parámet...
Los programas funcionales son implícitamente            paralelizables (1/4)
Los programas funcionales son implícitamente            paralelizables (1/4) Función F que transforma valores:
Los programas funcionales son implícitamente            paralelizables (1/4) Función F que transforma valores:            ...
Los programas funcionales son implícitamente            paralelizables (1/4) Función F que transforma valores:            ...
Los programas funcionales son implícitamente            paralelizables (1/4) Función F que transforma valores:            ...
Los programas funcionales son implícitamente            paralelizables (1/4) Función F que transforma valores:            ...
Los programas funcionales son implícitamente            paralelizables (1/4) Función F que transforma valores:            ...
Los programas funcionales son implícitamente            paralelizables (1/4) Función F que transforma valores:            ...
Los programas funcionales son implícitamente            paralelizables (1/4) Función F que transforma valores:            ...
Los programas funcionales son implícitamente            paralelizables (1/4) Función F que transforma valores:            ...
Los programas funcionales son implícitamente            paralelizables (1/4) Función F que transforma valores:            ...
Los programas funcionales son implícitamente              paralelizables (2/4)Ejemplo 2. ¿Cuántas paralelizaciones son pos...
Los programas funcionales son implícitamente              paralelizables (2/4)Ejemplo 2. ¿Cuántas paralelizaciones son pos...
Los programas funcionales son implícitamente                  paralelizables (2/4)   Ejemplo 2. ¿Cuántas paralelizaciones ...
Los programas funcionales son implícitamente            paralelizables (3/4)  Al ser expresiones, los programas funcionale...
Los programas funcionales son implícitamente            paralelizables (4/4)
Los programas funcionales son implícitamente             paralelizables (4/4)Las características que hacen que los program...
Los programas funcionales son implícitamente             paralelizables (4/4)Las características que hacen que los program...
Los programas funcionales son implícitamente             paralelizables (4/4)Las características que hacen que los program...
Lenguajes FuncionalesHaskellSchemeErlangEn la JVM  Clojure  Scala (Híbrido con OO)... Es un estilo, no requiere cambiar de...
Map-Reduce
Map-ReduceProcesamiento de grandes conjuntos de datos.
Map-ReduceProcesamiento de grandes conjuntos de datos.
Map-ReduceProcesamiento de grandes conjuntos de datos.Función Map
Map-ReduceProcesamiento de grandes conjuntos de datos.Función Map        map(k1,v1) -> lista de (k2,v2)
Map-ReduceProcesamiento de grandes conjuntos de datos.Función Map        map(k1,v1) -> lista de (k2,v2)Función Reduce
Map-ReduceProcesamiento de grandes conjuntos de datos.Función Map        map(k1,v1) -> lista de (k2,v2)Función Reduce     ...
Map-Reduce
Map-Reduce
Map-Reducemap
Map-Reducemap   ⊕
Map-Reducemap   ⊕
Map-Reduce
Map-ReducePropiedades deseables en el operador ‘Reduce’
Map-ReducePropiedades deseables en el operador ‘Reduce’Asociatividad
Map-ReducePropiedades deseables en el operador ‘Reduce’Asociatividad           a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ c
Map-ReducePropiedades deseables en el operador ‘Reduce’Asociatividad           a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ cConmutatividad
Map-ReducePropiedades deseables en el operador ‘Reduce’Asociatividad           a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ cConmutatividad  ...
Map-ReducePropiedades deseables en el operador ‘Reduce’Asociatividad           a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ cConmutatividad  ...
Map-ReducePropiedades deseables en el operador ‘Reduce’Asociatividad           a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ cConmutatividad  ...
Ejemplo de Map-Reduce
Ejemplo de Map-ReduceProblema: contar el número de veces queaparece una palabra en un documento.
Ejemplo de Map-ReduceProblema: contar el número de veces queaparece una palabra en un documento.
Ejemplo de Map-ReduceProblema: contar el número de veces queaparece una palabra en un documento.map(String name, String do...
Ejemplo de Map-ReduceProblema: contar el número de veces queaparece una palabra en un documento.map(String name, String do...
Ejemplo de Map-ReduceProblema: contar el número de veces queaparece una palabra en un documento.map(String name, String do...
Ejemplo de Map-ReduceProblema: contar el número de veces queaparece una palabra en un documento.map(String name, String do...
Actores
ActoresModelo de programación concurrente
ActoresModelo de programación concurrenteUn actor:
ActoresModelo de programación concurrenteUn actor:  Tiene un estado interno, no compartido.
ActoresModelo de programación concurrenteUn actor:  Tiene un estado interno, no compartido.  Tiene su propio hilo de ejecu...
ActoresModelo de programación concurrenteUn actor:  Tiene un estado interno, no compartido.  Tiene su propio hilo de ejecu...
ActoresModelo de programación concurrenteUn actor:  Tiene un estado interno, no compartido.  Tiene su propio hilo de ejecu...
ActoresModelo de programación concurrenteUn actor:  Tiene un estado interno, no compartido.  Tiene su propio hilo de ejecu...
ActoresModelo de programación concurrenteUn actor:  Tiene un estado interno, no compartido.  Tiene su propio hilo de ejecu...
Actores
Actores-module(area_server).-export([loop/0]).loop() ->  receive    {From, {rectangle, Width, Ht}} ->      From ! Width * ...
Actores1> Pid = spawn(fun area_server1:loop/0).<0.36.0>2> Pid ! {rectangle,6,8}).483> Pid ! {circle,6}).113.0974> Pid, soc...
¿Cuándo utilizar Actores?
¿Cuándo utilizar Actores?Cuando el problema se preste de manera natural adescomposición de diferentes tareas concurrentes.
¿Cuándo utilizar Actores?Cuando el problema se preste de manera natural adescomposición de diferentes tareas concurrentes....
¿Cuándo utilizar Actores?Cuando el problema se preste de manera natural adescomposición de diferentes tareas concurrentes....
Software Transactional      MemoryOk, es imposible evitar al 100% el estadomutable.¿Cómo manejar el estado mutable enconcu...
Software Transactional         Memory(defn deposit [account amount]  (dosync     (let [owner (account :owner)           ba...
Otros modelosColecciones paralelaslistOfFiles.par foreach(file => sendToS3(file))Data Flow“Cambiar el valor de 1 variable,au...
Futuro
FuturoInvestigación
Futuro                ExperienciaInvestigación                 con HPC
Futuro                 ExperienciaInvestigación                  con HPC        Necesidades       de la Industria
"My thesis is that the best way to write parallelapplications is not to have to think aboutparallelism, just as the best w...
ReferenciasThe Free Lunch is Over. http://j.mp/mL1PMfHow to Think About Parallel Programming: Not!http://j.mp/jXYNeHIntrod...
Próxima SlideShare
Cargando en…5
×

Modelos de paralelismo y concurrencia

2.367 visualizaciones

Publicado el

Material de la plática dada en el marco de Software Gurú Conferencia y Expo 2011

Publicado en: Tecnología
1 comentario
4 recomendaciones
Estadísticas
Notas
Sin descargas
Visualizaciones
Visualizaciones totales
2.367
En SlideShare
0
De insertados
0
Número de insertados
87
Acciones
Compartido
0
Descargas
2
Comentarios
1
Recomendaciones
4
Insertados 0
No insertados

No hay notas en la diapositiva.
  • \n
  • \n
  • - La densidad de transistores se duplica cada 18 meses.\n- La velocidad de los transistores se duplica cada 18 meses.\n- La pared de la energ&amp;#xED;a (The Power Wall)\n\n
  • - La densidad de transistores se duplica cada 18 meses.\n- La velocidad de los transistores se duplica cada 18 meses.\n- La pared de la energ&amp;#xED;a (The Power Wall)\n\n
  • - La densidad de transistores se duplica cada 18 meses.\n- La velocidad de los transistores se duplica cada 18 meses.\n- La pared de la energ&amp;#xED;a (The Power Wall)\n\n
  • - El Cell fue introducido por Sony, Toshiba e IBM para el Play Station 3.\n- &amp;#xBF;C&amp;#xF3;mo programar esta m&amp;#xE1;quina explotando todos sus nucleos de procesamiento.\n\n
  • - El Cell fue introducido por Sony, Toshiba e IBM para el Play Station 3.\n- &amp;#xBF;C&amp;#xF3;mo programar esta m&amp;#xE1;quina explotando todos sus nucleos de procesamiento.\n\n
  • La fujitsu K Computer fue catalogada la computadora m&amp;#xE1;s potente del mundo (Junio 2011)\nEl poder de las supercomputadoras se ha duplicado cada 14 meses!\n
  • La fujitsu K Computer fue catalogada la computadora m&amp;#xE1;s potente del mundo (Junio 2011)\nEl poder de las supercomputadoras se ha duplicado cada 14 meses!\n
  • La fujitsu K Computer fue catalogada la computadora m&amp;#xE1;s potente del mundo (Junio 2011)\nEl poder de las supercomputadoras se ha duplicado cada 14 meses!\n
  • La fujitsu K Computer fue catalogada la computadora m&amp;#xE1;s potente del mundo (Junio 2011)\nEl poder de las supercomputadoras se ha duplicado cada 14 meses!\n
  • La fujitsu K Computer fue catalogada la computadora m&amp;#xE1;s potente del mundo (Junio 2011)\nEl poder de las supercomputadoras se ha duplicado cada 14 meses!\n
  • La fujitsu K Computer fue catalogada la computadora m&amp;#xE1;s potente del mundo (Junio 2011)\nEl poder de las supercomputadoras se ha duplicado cada 14 meses!\n
  • La fujitsu K Computer fue catalogada la computadora m&amp;#xE1;s potente del mundo (Junio 2011)\nEl poder de las supercomputadoras se ha duplicado cada 14 meses!\n
  • La fujitsu K Computer fue catalogada la computadora m&amp;#xE1;s potente del mundo (Junio 2011)\nEl poder de las supercomputadoras se ha duplicado cada 14 meses!\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Supuesto: una aplicaci&amp;#xF3;n monol&amp;#xED;tica.\nConforme m&amp;#xE1;s usuarios, se necesita introducir m&amp;#xE1;s hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicaci&amp;#xF3;n requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicaci&amp;#xF3;n monol&amp;#xED;tica.\nConforme m&amp;#xE1;s usuarios, se necesita introducir m&amp;#xE1;s hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicaci&amp;#xF3;n requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicaci&amp;#xF3;n monol&amp;#xED;tica.\nConforme m&amp;#xE1;s usuarios, se necesita introducir m&amp;#xE1;s hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicaci&amp;#xF3;n requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicaci&amp;#xF3;n monol&amp;#xED;tica.\nConforme m&amp;#xE1;s usuarios, se necesita introducir m&amp;#xE1;s hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicaci&amp;#xF3;n requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicaci&amp;#xF3;n monol&amp;#xED;tica.\nConforme m&amp;#xE1;s usuarios, se necesita introducir m&amp;#xE1;s hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicaci&amp;#xF3;n requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicaci&amp;#xF3;n monol&amp;#xED;tica.\nConforme m&amp;#xE1;s usuarios, se necesita introducir m&amp;#xE1;s hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicaci&amp;#xF3;n requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicaci&amp;#xF3;n monol&amp;#xED;tica.\nConforme m&amp;#xE1;s usuarios, se necesita introducir m&amp;#xE1;s hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicaci&amp;#xF3;n requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicaci&amp;#xF3;n monol&amp;#xED;tica.\nConforme m&amp;#xE1;s usuarios, se necesita introducir m&amp;#xE1;s hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicaci&amp;#xF3;n requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicaci&amp;#xF3;n monol&amp;#xED;tica.\nConforme m&amp;#xE1;s usuarios, se necesita introducir m&amp;#xE1;s hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicaci&amp;#xF3;n requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicaci&amp;#xF3;n monol&amp;#xED;tica.\nConforme m&amp;#xE1;s usuarios, se necesita introducir m&amp;#xE1;s hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicaci&amp;#xF3;n requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Supuesto: una aplicaci&amp;#xF3;n monol&amp;#xED;tica.\nConforme m&amp;#xE1;s usuarios, se necesita introducir m&amp;#xE1;s hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicaci&amp;#xF3;n requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicaci&amp;#xF3;n monol&amp;#xED;tica.\nConforme m&amp;#xE1;s usuarios, se necesita introducir m&amp;#xE1;s hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicaci&amp;#xF3;n requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  • &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  • &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  • &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  • &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  • &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  • &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  • &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  • &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  • &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  • Impl&amp;#xED;cito: El sistema se hace cargo de la paralelizaci&amp;#xF3;n.\nExpl&amp;#xED;cito: El programador define y controla los procesos\n
  • Impl&amp;#xED;cito: El sistema se hace cargo de la paralelizaci&amp;#xF3;n.\nExpl&amp;#xED;cito: El programador define y controla los procesos\n
  • Impl&amp;#xED;cito: El sistema se hace cargo de la paralelizaci&amp;#xF3;n.\nExpl&amp;#xED;cito: El programador define y controla los procesos\n
  • Impl&amp;#xED;cito: El sistema se hace cargo de la paralelizaci&amp;#xF3;n.\nExpl&amp;#xED;cito: El programador define y controla los procesos\n
  • Impl&amp;#xED;cito: El sistema se hace cargo de la paralelizaci&amp;#xF3;n.\nExpl&amp;#xED;cito: El programador define y controla los procesos\n
  • Impl&amp;#xED;cito: El sistema se hace cargo de la paralelizaci&amp;#xF3;n.\nExpl&amp;#xED;cito: El programador define y controla los procesos\n
  • Impl&amp;#xED;cito: El sistema se hace cargo de la paralelizaci&amp;#xF3;n.\nExpl&amp;#xED;cito: El programador define y controla los procesos\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Modelos de paralelismo y concurrencia

    1. 1. Modelos
de
Paralelismo
y
 Concurrencia Agus4n
Ramos
Fonseca @MachinesAreUs
    2. 2. 1a ParteCuando el Futuro nos Alcance
    3. 3. “The Free Lunch is Over”
    4. 4. “The Free Lunch is Over” Herb Sutter, Dr. Dobbs, 2005
    5. 5. Introducción de ProcesadoresMulticore en Mercado Masivo
    6. 6. Introducción de ProcesadoresMulticore en Mercado Masivo Microprocesador “Cell”
    7. 7. No es Tema Nuevo
    8. 8. No es Tema Nuevo
    9. 9. No es Tema Nuevo Cray 1 (1975)
    10. 10. No es Tema Nuevo Cray 1 Blue Gene/P (1975) (2007)
    11. 11. No es Tema Nuevo Cray 1 Blue Gene/P (1975) (2007) Fujitsu K (2011)
    12. 12. No es Tema Nuevo Cray 1 Blue Gene/P (1975) (2007) Fujitsu K (2011)
    13. 13. No es Tema Nuevo
    14. 14. No es Tema Nuevo
    15. 15. Esta plática no es sobre“High Performance Computing”
    16. 16. ¿Por qué es relavante en las aplicaciones de industria?
    17. 17. Escalabilidad
    18. 18. Escalabilidad Vertical
    19. 19. Escalabilidad Vertical10K
    20. 20. Escalabilidad Vertical10K 1 x 3.2Ghz, 4 Gbytes
    21. 21. Escalabilidad Vertical10K 1 x 3.2Ghz, 4 Gbytes20K 2 x 3.2Ghz, 8 Gbytes
    22. 22. Escalabilidad Vertical10K 1 x 3.2Ghz, 4 Gbytes20K 2 x 3.2Ghz, 8 Gbytes30K 4 x 3.2Ghz, 16 Gbytes
    23. 23. Escalabilidad Horizontal
    24. 24. Escalabilidad Horizontal10K
    25. 25. Escalabilidad Horizontal10K20K
    26. 26. Escalabilidad Horizontal10K20K30K
    27. 27. Big Data 2010.03.17 2010.03.17
    28. 28. Escalabilidad
    29. 29. EscalabilidadEs conveniente contar con modelos deprogramación que permitan escalar de manera transparente tanto vertical como horizontalmente.
    30. 30. 2a ParteModelos de Paralelismo y Concurrencia
    31. 31. Paralelismo vs Concurrencia
    32. 32. Paralelismo vs Concurrencia Paralelismo:
    33. 33. Paralelismo vs Concurrencia Paralelismo: Surge cuando al menos dos tareas se ejecutan de manera simultánea (físicamente).
    34. 34. Paralelismo vs Concurrencia Paralelismo: Surge cuando al menos dos tareas se ejecutan de manera simultánea (físicamente). Objetivo: optimizar tiempo de ejecución.
    35. 35. Paralelismo vs Concurrencia Paralelismo: Surge cuando al menos dos tareas se ejecutan de manera simultánea (físicamente). Objetivo: optimizar tiempo de ejecución. Concurrencia:
    36. 36. Paralelismo vs Concurrencia Paralelismo: Surge cuando al menos dos tareas se ejecutan de manera simultánea (físicamente). Objetivo: optimizar tiempo de ejecución. Concurrencia: Surge cuando al menos dos tareas están realizando progreso (e.g. time sharing).
    37. 37. Paralelismo vs Concurrencia Paralelismo: Surge cuando al menos dos tareas se ejecutan de manera simultánea (físicamente). Objetivo: optimizar tiempo de ejecución. Concurrencia: Surge cuando al menos dos tareas están realizando progreso (e.g. time sharing). Objetivo: tareas colaborativas.
    38. 38. Ley de Amdahl Gene Amdahl, 1967La máxima mejora en desempeño que puedeobtenerse al paralelizar un programa, está dadapor: P = Porción paralelizable [0, 1]. N = Número de procesadores.
    39. 39. Ley de Amdahl
    40. 40. Modelo más tradicional
    41. 41. Modelo más tradicional Hilos (Threads) c/u con Stack propio Memoria (estado) compartida
    42. 42. Modelo más tradicional Hilos (Threads) c/u con Stack propio Memoria (estado) compartida Locks para el acceso a variables compartidas Manualmente se adquiere / libera
    43. 43. Problemas del Modelo de Hilos
    44. 44. Problemas del Modelo de Hilos Muy sensible a el orden de ejecución
    45. 45. Problemas del Modelo de Hilos Muy sensible a el orden de ejecución Condiciones de competencia.
    46. 46. Problemas del Modelo de Hilos Muy sensible a el orden de ejecución Condiciones de competencia. Deadlocks
    47. 47. Problemas del Modelo de Hilos Muy sensible a el orden de ejecución Condiciones de competencia. Deadlocks El pánico lleva a la serialización
    48. 48. Problemas del Modelo de Hilos Muy sensible a el orden de ejecución Condiciones de competencia. Deadlocks El pánico lleva a la serialización Bloquea / serializa todo!
    49. 49. Problemas del Modelo de Hilos Muy sensible a el orden de ejecución Condiciones de competencia. Deadlocks El pánico lleva a la serialización Bloquea / serializa todo! Adiós concurrencia
    50. 50. Problemas del Modelo de Hilos Muy sensible a el orden de ejecución Condiciones de competencia. Deadlocks El pánico lleva a la serialización Bloquea / serializa todo! Adiós concurrencia Muy propenso a errores.
    51. 51. Problemas del Modelo de Hilos Muy sensible a el orden de ejecución Condiciones de competencia. Deadlocks El pánico lleva a la serialización Bloquea / serializa todo! Adiós concurrencia Muy propenso a errores.
    52. 52. Clasificación de Modelos
    53. 53. Clasificación de Modelos Implícito
    54. 54. Clasificación de Modelos Implícito Programación funcional
    55. 55. Clasificación de Modelos Implícito Programación funcional Map-Reduce
    56. 56. Clasificación de Modelos Implícito Programación funcional Map-Reduce Explícito
    57. 57. Clasificación de Modelos Implícito Programación funcional Map-Reduce Explícito Hilos
    58. 58. Clasificación de Modelos Implícito Programación funcional Map-Reduce Explícito Hilos Actores
    59. 59. Clasificación de Modelos Implícito Programación funcional Map-Reduce Explícito Hilos Actores Data Flow
    60. 60. Programación Funcional
    61. 61. Programación FuncionalLas funciones son abstracciones de 1er nivel.
    62. 62. Programación FuncionalLas funciones son abstracciones de 1er nivel. Se pueden usar funciones como parámetros de otras, así como valores de retorno.
    63. 63. Programación FuncionalLas funciones son abstracciones de 1er nivel. Se pueden usar funciones como parámetros de otras, así como valores de retorno. Funciones de funciones (Higher Order Functions).
    64. 64. Programación FuncionalLas funciones son abstracciones de 1er nivel. Se pueden usar funciones como parámetros de otras, así como valores de retorno. Funciones de funciones (Higher Order Functions).Los programas se ejecutan evaluando expresiones.
    65. 65. Programación FuncionalLas funciones son abstracciones de 1er nivel. Se pueden usar funciones como parámetros de otras, así como valores de retorno. Funciones de funciones (Higher Order Functions).Los programas se ejecutan evaluando expresiones. A diferencia de secuencias de sentencias
    66. 66. Programación Funcional
    67. 67. Programación FuncionalLas funciones son puras
    68. 68. Programación FuncionalLas funciones son puras Sin efectos colaterales.
    69. 69. Programación FuncionalLas funciones son puras Sin efectos colaterales. El resultado es función solamente de los parámetros, no de algún estado (transparencia referencial).
    70. 70. Programación FuncionalLas funciones son puras Sin efectos colaterales. El resultado es función solamente de los parámetros, no de algún estado (transparencia referencial).Típicamente, se evita mantener estado mutable.
    71. 71. Los programas funcionales son implícitamente paralelizables (1/4)
    72. 72. Los programas funcionales son implícitamente paralelizables (1/4) Función F que transforma valores:
    73. 73. Los programas funcionales son implícitamente paralelizables (1/4) Función F que transforma valores: F(v1) -> v2
    74. 74. Los programas funcionales son implícitamente paralelizables (1/4) Función F que transforma valores: F(v1) -> v2 Función ‘map’ sobre listas que utiliza F sobre cada elemento de la lista, para formar otra lista:
    75. 75. Los programas funcionales son implícitamente paralelizables (1/4) Función F que transforma valores: F(v1) -> v2 Función ‘map’ sobre listas que utiliza F sobre cada elemento de la lista, para formar otra lista: map( F, list1 ) -> list2
    76. 76. Los programas funcionales son implícitamente paralelizables (1/4) Función F que transforma valores: F(v1) -> v2 Función ‘map’ sobre listas que utiliza F sobre cada elemento de la lista, para formar otra lista: map( F, list1 ) -> list2 Ejemplo 1 (Erlang):
    77. 77. Los programas funcionales son implícitamente paralelizables (1/4) Función F que transforma valores: F(v1) -> v2 Función ‘map’ sobre listas que utiliza F sobre cada elemento de la lista, para formar otra lista: map( F, list1 ) -> list2 Ejemplo 1 (Erlang): L = [ 1, 2, 3, 4, 5].
    78. 78. Los programas funcionales son implícitamente paralelizables (1/4) Función F que transforma valores: F(v1) -> v2 Función ‘map’ sobre listas que utiliza F sobre cada elemento de la lista, para formar otra lista: map( F, list1 ) -> list2 Ejemplo 1 (Erlang): L = [ 1, 2, 3, 4, 5]. lists:map (fun(X) -> 2*X end, L)
    79. 79. Los programas funcionales son implícitamente paralelizables (1/4) Función F que transforma valores: F(v1) -> v2 Función ‘map’ sobre listas que utiliza F sobre cada elemento de la lista, para formar otra lista: map( F, list1 ) -> list2 Ejemplo 1 (Erlang): L = [ 1, 2, 3, 4, 5]. lists:map (fun(X) -> 2*X end, L) Resultado: [2, 4, 6, 8, 10]
    80. 80. Los programas funcionales son implícitamente paralelizables (1/4) Función F que transforma valores: F(v1) -> v2 Función ‘map’ sobre listas que utiliza F sobre cada elemento de la lista, para formar otra lista: map( F, list1 ) -> list2 Ejemplo 1 (Erlang): L = [ 1, 2, 3, 4, 5]. lists:map (fun(X) -> 2*X end, L) Resultado: [2, 4, 6, 8, 10] ¿Importa el orden en que se aplicó F?
    81. 81. Los programas funcionales son implícitamente paralelizables (1/4) Función F que transforma valores: F(v1) -> v2 Función ‘map’ sobre listas que utiliza F sobre cada elemento de la lista, para formar otra lista: map( F, list1 ) -> list2 Ejemplo 1 (Erlang): L = [ 1, 2, 3, 4, 5]. lists:map (fun(X) -> 2*X end, L) Resultado: [2, 4, 6, 8, 10] ¿Importa el orden en que se aplicó F? No. Por tanto ¡es paralelizable!
    82. 82. Los programas funcionales son implícitamente paralelizables (2/4)Ejemplo 2. ¿Cuántas paralelizaciones son posibles? List obtenerCursosSugeridos(idAlumno) -> Lists.filter ( cursosDePeriodoActivo(), esCursoDeAlgunaMateria( materiasPorAprobarDeAlumno( idAlumno ) )
    83. 83. Los programas funcionales son implícitamente paralelizables (2/4)Ejemplo 2. ¿Cuántas paralelizaciones son posibles? Pueden evaluarse en paralelo porque no hay dependencias List obtenerCursosSugeridos(idAlumno) -> Lists.filter ( cursosDePeriodoActivo(), esCursoDeAlgunaMateria( materiasPorAprobarDeAlumno( idAlumno ) )
    84. 84. Los programas funcionales son implícitamente paralelizables (2/4) Ejemplo 2. ¿Cuántas paralelizaciones son posibles? Pueden evaluarse en paralelo porque no hay dependencias List obtenerCursosSugeridos(idAlumno) -> Lists.filter ( cursosDePeriodoActivo(), esCursoDeAlgunaMateria( materiasPorAprobarDeAlumno( idAlumno ) ) La función ‘filter’ puede aplicar en paralelo lafunción ‘esCursoDeAlgunaMateria’ a cada elemento de la lista.
    85. 85. Los programas funcionales son implícitamente paralelizables (3/4) Al ser expresiones, los programas funcionales noimponen un orden estricto de ejecución, por lo que partes del programa (sub-expresiones) pueden ser evaluadas en paralelo, delegando a la plataforma esta tarea.
    86. 86. Los programas funcionales son implícitamente paralelizables (4/4)
    87. 87. Los programas funcionales son implícitamente paralelizables (4/4)Las características que hacen que los programasfuncionales sean paralelizables son dos:
    88. 88. Los programas funcionales son implícitamente paralelizables (4/4)Las características que hacen que los programasfuncionales sean paralelizables son dos: Independencia del tiempo.
    89. 89. Los programas funcionales son implícitamente paralelizables (4/4)Las características que hacen que los programasfuncionales sean paralelizables son dos: Independencia del tiempo. No existencia de variables mutables.
    90. 90. Lenguajes FuncionalesHaskellSchemeErlangEn la JVM Clojure Scala (Híbrido con OO)... Es un estilo, no requiere cambiar de lenguaje.
    91. 91. Map-Reduce
    92. 92. Map-ReduceProcesamiento de grandes conjuntos de datos.
    93. 93. Map-ReduceProcesamiento de grandes conjuntos de datos.
    94. 94. Map-ReduceProcesamiento de grandes conjuntos de datos.Función Map
    95. 95. Map-ReduceProcesamiento de grandes conjuntos de datos.Función Map map(k1,v1) -> lista de (k2,v2)
    96. 96. Map-ReduceProcesamiento de grandes conjuntos de datos.Función Map map(k1,v1) -> lista de (k2,v2)Función Reduce
    97. 97. Map-ReduceProcesamiento de grandes conjuntos de datos.Función Map map(k1,v1) -> lista de (k2,v2)Función Reduce ⊕ (k2, list(v2)) -> list (v3)
    98. 98. Map-Reduce
    99. 99. Map-Reduce
    100. 100. Map-Reducemap
    101. 101. Map-Reducemap ⊕
    102. 102. Map-Reducemap ⊕
    103. 103. Map-Reduce
    104. 104. Map-ReducePropiedades deseables en el operador ‘Reduce’
    105. 105. Map-ReducePropiedades deseables en el operador ‘Reduce’Asociatividad
    106. 106. Map-ReducePropiedades deseables en el operador ‘Reduce’Asociatividad a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ c
    107. 107. Map-ReducePropiedades deseables en el operador ‘Reduce’Asociatividad a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ cConmutatividad
    108. 108. Map-ReducePropiedades deseables en el operador ‘Reduce’Asociatividad a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ cConmutatividad a⊕b=b⊕a
    109. 109. Map-ReducePropiedades deseables en el operador ‘Reduce’Asociatividad a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ cConmutatividad a⊕b=b⊕aAsociatividad y Conmutatividad
    110. 110. Map-ReducePropiedades deseables en el operador ‘Reduce’Asociatividad a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ cConmutatividad a⊕b=b⊕aAsociatividad y Conmutatividad a ⊕ ( b ⊕ c ) = (c ⊕ a) ⊕ b
    111. 111. Ejemplo de Map-Reduce
    112. 112. Ejemplo de Map-ReduceProblema: contar el número de veces queaparece una palabra en un documento.
    113. 113. Ejemplo de Map-ReduceProblema: contar el número de veces queaparece una palabra en un documento.
    114. 114. Ejemplo de Map-ReduceProblema: contar el número de veces queaparece una palabra en un documento.map(String name, String document): for each word w in document: EmitIntermediate(w, "1")
    115. 115. Ejemplo de Map-ReduceProblema: contar el número de veces queaparece una palabra en un documento.map(String name, String document): for each word w in document: EmitIntermediate(w, "1")
    116. 116. Ejemplo de Map-ReduceProblema: contar el número de veces queaparece una palabra en un documento.map(String name, String document): for each word w in document: EmitIntermediate(w, "1")
    117. 117. Ejemplo de Map-ReduceProblema: contar el número de veces queaparece una palabra en un documento.map(String name, String document): for each word w in document: EmitIntermediate(w, "1")reduce(String word, Iterator partialCounts): int sum = 0; for each count in partialCounts: sum += parseInt(count) Emit(word, AsString(sum))
    118. 118. Actores
    119. 119. ActoresModelo de programación concurrente
    120. 120. ActoresModelo de programación concurrenteUn actor:
    121. 121. ActoresModelo de programación concurrenteUn actor: Tiene un estado interno, no compartido.
    122. 122. ActoresModelo de programación concurrenteUn actor: Tiene un estado interno, no compartido. Tiene su propio hilo de ejecución (event loop).
    123. 123. ActoresModelo de programación concurrenteUn actor: Tiene un estado interno, no compartido. Tiene su propio hilo de ejecución (event loop). Puede enviar y recibir mensajes a otros actores, de manera asíncrona.
    124. 124. ActoresModelo de programación concurrenteUn actor: Tiene un estado interno, no compartido. Tiene su propio hilo de ejecución (event loop). Puede enviar y recibir mensajes a otros actores, de manera asíncrona. En respuesta a un mensaje, puede:
    125. 125. ActoresModelo de programación concurrenteUn actor: Tiene un estado interno, no compartido. Tiene su propio hilo de ejecución (event loop). Puede enviar y recibir mensajes a otros actores, de manera asíncrona. En respuesta a un mensaje, puede: Cambiar su estado interno.
    126. 126. ActoresModelo de programación concurrenteUn actor: Tiene un estado interno, no compartido. Tiene su propio hilo de ejecución (event loop). Puede enviar y recibir mensajes a otros actores, de manera asíncrona. En respuesta a un mensaje, puede: Cambiar su estado interno. Enviar mensajes a otros actores.
    127. 127. Actores
    128. 128. Actores-module(area_server).-export([loop/0]).loop() -> receive {From, {rectangle, Width, Ht}} -> From ! Width * Ht, loop(); {From, {circle, R}} -> From ! 3.14159 * R * R, loop(); Other -> From ! {error, Other}, loop()end.
    129. 129. Actores1> Pid = spawn(fun area_server1:loop/0).<0.36.0>2> Pid ! {rectangle,6,8}).483> Pid ! {circle,6}).113.0974> Pid, socks).{error,socks}
    130. 130. ¿Cuándo utilizar Actores?
    131. 131. ¿Cuándo utilizar Actores?Cuando el problema se preste de manera natural adescomposición de diferentes tareas concurrentes.
    132. 132. ¿Cuándo utilizar Actores?Cuando el problema se preste de manera natural adescomposición de diferentes tareas concurrentes.Cuando se requiere descomponer la aplicación detal manera que se permita escalar de maneradiferente a cada parte de la misma.
    133. 133. ¿Cuándo utilizar Actores?Cuando el problema se preste de manera natural adescomposición de diferentes tareas concurrentes.Cuando se requiere descomponer la aplicación detal manera que se permita escalar de maneradiferente a cada parte de la misma.Cuando se quiere tener transparencia al escalaraplicaciones entre un CPU de varios cores a uncluster de máquinas.
    134. 134. Software Transactional MemoryOk, es imposible evitar al 100% el estadomutable.¿Cómo manejar el estado mutable enconcurrencia de manera segura? Usar transacciones en memoria para modificar las referencias mutables.
    135. 135. Software Transactional Memory(defn deposit [account amount] (dosync (let [owner (account :owner) balance-ref (account :balance-ref)] (do (alter balance-ref + amount) (println “depositing” amount (account :owner))))))
    136. 136. Otros modelosColecciones paralelaslistOfFiles.par foreach(file => sendToS3(file))Data Flow“Cambiar el valor de 1 variable,automáticamente debería forzar el recálculode valores que dependen de dicha variable”.
    137. 137. Futuro
    138. 138. FuturoInvestigación
    139. 139. Futuro ExperienciaInvestigación con HPC
    140. 140. Futuro ExperienciaInvestigación con HPC Necesidades de la Industria
    141. 141. "My thesis is that the best way to write parallelapplications is not to have to think aboutparallelism, just as the best way to deal withmemory and its management is not to have toworry about this management. You have thisgarbage collector... let it deal with that" Guy Steele, 2011
    142. 142. ReferenciasThe Free Lunch is Over. http://j.mp/mL1PMfHow to Think About Parallel Programming: Not!http://j.mp/jXYNeHIntroduction to Parallel Programming andMapReduce http:/ /j.mp/pLFVZAActors in Scala http://j.mp/plti66Concepts, Techniques and Models of ComputerProgramming. Van Roy & Haridi, 2004. http://j.mp/m7gYbi

    ×