• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Modelos de paralelismo y concurrencia
 

Modelos de paralelismo y concurrencia

on

  • 1,678 views

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

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

Statistics

Views

Total Views
1,678
Views on SlideShare
1,601
Embed Views
77

Actions

Likes
2
Downloads
2
Comments
1

7 Embeds 77

http://www.sg.com.mx 53
http://sg.com.mx 18
http://www.linkedin.com 2
http://us-w1.rockmelt.com 1
http://twitter.com 1
http://paper.li 1
https://www.linkedin.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \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í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í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ía (The Power Wall)\n\n
  • - El Cell fue introducido por Sony, Toshiba e IBM para el Play Station 3.\n- ¿Cómo programar esta máquina explotando todos sus nucleos de procesamiento.\n\n
  • - El Cell fue introducido por Sony, Toshiba e IBM para el Play Station 3.\n- ¿Cómo programar esta máquina explotando todos sus nucleos de procesamiento.\n\n
  • La fujitsu K Computer fue catalogada la computadora má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á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á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á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á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á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á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á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ón monolítica.\nConforme más usuarios, se necesita introducir más hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicación requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicación monolítica.\nConforme más usuarios, se necesita introducir más hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicación requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicación monolítica.\nConforme más usuarios, se necesita introducir más hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicación requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicación monolítica.\nConforme más usuarios, se necesita introducir más hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicación requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicación monolítica.\nConforme más usuarios, se necesita introducir más hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicación requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicación monolítica.\nConforme más usuarios, se necesita introducir más hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicación requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicación monolítica.\nConforme más usuarios, se necesita introducir más hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicación requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicación monolítica.\nConforme más usuarios, se necesita introducir más hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicación requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicación monolítica.\nConforme más usuarios, se necesita introducir más hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicación requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicación monolítica.\nConforme más usuarios, se necesita introducir más hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicación requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Supuesto: una aplicación monolítica.\nConforme más usuarios, se necesita introducir más hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicación requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • Supuesto: una aplicación monolítica.\nConforme más usuarios, se necesita introducir más hardware... \nTope: Ley de Amdahl\npero no todas las sub-funcionalidades de la aplicación requieren escalar de igual manera.\nNo solo aplica a usuarios.\n
  • ¿Por qué no simplemente programamos con hilos?\n
  • ¿Por qué no simplemente programamos con hilos?\n
  • ¿Por qué no simplemente programamos con hilos?\n
  • ¿Por qué no simplemente programamos con hilos?\n
  • ¿Por qué no simplemente programamos con hilos?\n
  • ¿Por qué no simplemente programamos con hilos?\n
  • ¿Por qué no simplemente programamos con hilos?\n
  • ¿Por qué no simplemente programamos con hilos?\n
  • ¿Por qué no simplemente programamos con hilos?\n
  • ¿Por qué no simplemente programamos con hilos?\n
  • Implícito: El sistema se hace cargo de la paralelización.\nExplícito: El programador define y controla los procesos\n
  • Implícito: El sistema se hace cargo de la paralelización.\nExplícito: El programador define y controla los procesos\n
  • Implícito: El sistema se hace cargo de la paralelización.\nExplícito: El programador define y controla los procesos\n
  • Implícito: El sistema se hace cargo de la paralelización.\nExplícito: El programador define y controla los procesos\n
  • Implícito: El sistema se hace cargo de la paralelización.\nExplícito: El programador define y controla los procesos\n
  • Implícito: El sistema se hace cargo de la paralelización.\nExplícito: El programador define y controla los procesos\n
  • Implícito: El sistema se hace cargo de la paralelización.\nExplí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 Modelos de paralelismo y concurrencia Presentation Transcript

  • 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 x 3.2Ghz, 16 Gbytes
  • 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 como horizontalmente.
  • 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ísicamente).
  • Paralelismo vs Concurrencia Paralelismo: Surge cuando al menos dos tareas se ejecutan de manera simultánea (físicamente). Objetivo: optimizar tiempo de ejecución.
  • 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:
  • 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).
  • 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.
  • 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.
  • 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 variables compartidas Manualmente se adquiere / libera
  • 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 lleva a la serialización
  • 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!
  • 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
  • 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.
  • 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.
  • 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, así como valores de retorno.
  • 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).
  • 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.
  • 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
  • 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ámetros, no de algún estado (transparencia referencial).
  • 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.
  • 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: F(v1) -> v2
  • 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:
  • 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
  • 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):
  • 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].
  • 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)
  • 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]
  • 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?
  • 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!
  • 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 ) )
  • 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 ) )
  • 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.
  • 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.
  • 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 programasfuncionales sean paralelizables son dos:
  • Los programas funcionales son implícitamente paralelizables (4/4)Las características que hacen que los programasfuncionales sean paralelizables son dos: Independencia del tiempo.
  • 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.
  • Lenguajes FuncionalesHaskellSchemeErlangEn la JVM Clojure Scala (Híbrido con OO)... Es un estilo, no requiere cambiar de lenguaje.
  • 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 ⊕ (k2, list(v2)) -> list (v3)
  • 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 a⊕b=b⊕a
  • Map-ReducePropiedades deseables en el operador ‘Reduce’Asociatividad a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ cConmutatividad a⊕b=b⊕aAsociatividad y Conmutatividad
  • 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
  • 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 document): for each word w in document: EmitIntermediate(w, "1")
  • 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")
  • 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")
  • 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))
  • 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 ejecución (event loop).
  • 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.
  • 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:
  • 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.
  • 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.
  • Actores
  • 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.
  • 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}
  • ¿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.Cuando se requiere descomponer la aplicación detal manera que se permita escalar de maneradiferente a cada parte de la misma.
  • ¿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.
  • 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.
  • 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))))))
  • 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”.
  • 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 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
  • 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