SlideShare une entreprise Scribd logo
1  sur  142
Modelos
de
Paralelismo
y

           Concurrencia
      Agus4n
Ramos
Fonseca
             @MachinesAreUs
1a Parte

Cuando el Futuro nos
      Alcance
“The Free Lunch is Over”
“The Free Lunch is Over”




     Herb Sutter, Dr. Dobbs, 2005
Introducción de Procesadores
Multicore en Mercado Masivo
Introducción de Procesadores
Multicore 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
          Vertical


10K
Escalabilidad
          Vertical


10K              1 x 3.2Ghz, 4 Gbytes
Escalabilidad
          Vertical


10K              1 x 3.2Ghz, 4 Gbytes


20K             2 x 3.2Ghz, 8 Gbytes
Escalabilidad
          Vertical


10K              1 x 3.2Ghz, 4 Gbytes


20K             2 x 3.2Ghz, 8 Gbytes


30K             4 x 3.2Ghz, 16 Gbytes
Escalabilidad
   Horizontal
Escalabilidad
         Horizontal


10K
Escalabilidad
         Horizontal


10K


20K
Escalabilidad
         Horizontal


10K


20K


30K
Big Data




   2010.03.17




                2010.03.17
Escalabilidad
Escalabilidad


Es conveniente contar con modelos de
programación que permitan escalar de
 manera transparente tanto vertical
       como horizontalmente.
2a Parte

Modelos 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, 1967

La máxima mejora en desempeño que puede
obtenerse al paralelizar un programa, está dada
por:




        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 Funcional

Las funciones son abstracciones de 1er nivel.
Programación Funcional

Las funciones son abstracciones de 1er nivel.

  Se pueden usar funciones como parámetros de
  otras, así como valores de retorno.
Programación Funcional

Las 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 Funcional

Las 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 Funcional

Las 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 Funcional

Las funciones son puras
Programación Funcional

Las funciones son puras

  Sin efectos colaterales.
Programación Funcional

Las 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 Funcional

Las 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 la
función ‘esCursoDeAlgunaMateria’ a cada elemento
                       de la lista.
Los programas funcionales son implícitamente
            paralelizables (3/4)




  Al ser expresiones, los programas funcionales no
imponen 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 programas
funcionales sean paralelizables son dos:
Los programas funcionales son implícitamente
             paralelizables (4/4)




Las características que hacen que los programas
funcionales sean paralelizables son dos:

    Independencia del tiempo.
Los programas funcionales son implícitamente
             paralelizables (4/4)




Las características que hacen que los programas
funcionales sean paralelizables son dos:

    Independencia del tiempo.

    No existencia de variables mutables.
Lenguajes Funcionales
Haskell

Scheme

Erlang

En la JVM

  Clojure

  Scala (Híbrido con OO)

... Es un estilo, no requiere cambiar de lenguaje.
Map-Reduce
Map-Reduce

Procesamiento de grandes conjuntos de datos.
Map-Reduce

Procesamiento de grandes conjuntos de datos.
Map-Reduce

Procesamiento de grandes conjuntos de datos.



Función Map
Map-Reduce

Procesamiento de grandes conjuntos de datos.



Función Map

        map(k1,v1) -> lista de (k2,v2)
Map-Reduce

Procesamiento de grandes conjuntos de datos.



Función Map

        map(k1,v1) -> lista de (k2,v2)

Función Reduce
Map-Reduce

Procesamiento 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-Reduce
map
Map-Reduce
map   ⊕
Map-Reduce
map   ⊕
Map-Reduce
Map-Reduce
Propiedades deseables en el operador ‘Reduce’
Map-Reduce
Propiedades deseables en el operador ‘Reduce’

Asociatividad
Map-Reduce
Propiedades deseables en el operador ‘Reduce’

Asociatividad

           a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ c
Map-Reduce
Propiedades deseables en el operador ‘Reduce’

Asociatividad

           a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ c

Conmutatividad
Map-Reduce
Propiedades deseables en el operador ‘Reduce’

Asociatividad

           a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ c

Conmutatividad

                 a⊕b=b⊕a
Map-Reduce
Propiedades deseables en el operador ‘Reduce’

Asociatividad

           a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ c

Conmutatividad

                  a⊕b=b⊕a

Asociatividad y Conmutatividad
Map-Reduce
Propiedades deseables en el operador ‘Reduce’

Asociatividad

           a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ c

Conmutatividad

                  a⊕b=b⊕a

Asociatividad y Conmutatividad

           a ⊕ ( b ⊕ c ) = (c ⊕ a) ⊕ b
Ejemplo de Map-Reduce
Ejemplo de Map-Reduce
Problema: contar el número de veces que
aparece una palabra en un documento.
Ejemplo de Map-Reduce
Problema: contar el número de veces que
aparece una palabra en un documento.
Ejemplo de Map-Reduce
Problema: contar el número de veces que
aparece una palabra en un documento.

map(String name, String document):
   for each word w in document:
       EmitIntermediate(w, "1")
Ejemplo de Map-Reduce
Problema: contar el número de veces que
aparece una palabra en un documento.

map(String name, String document):
   for each word w in document:
       EmitIntermediate(w, "1")
Ejemplo de Map-Reduce
Problema: contar el número de veces que
aparece una palabra en un documento.

map(String name, String document):
   for each word w in document:
       EmitIntermediate(w, "1")
Ejemplo de Map-Reduce
Problema: contar el número de veces que
aparece 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
Actores
Modelo de programación concurrente
Actores
Modelo de programación concurrente

Un actor:
Actores
Modelo de programación concurrente

Un actor:

  Tiene un estado interno, no compartido.
Actores
Modelo de programación concurrente

Un actor:

  Tiene un estado interno, no compartido.

  Tiene su propio hilo de ejecución (event loop).
Actores
Modelo de programación concurrente

Un 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.
Actores
Modelo de programación concurrente

Un 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:
Actores
Modelo de programación concurrente

Un 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.
Actores
Modelo de programación concurrente

Un 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.
Actores


1> Pid = spawn(fun area_server1:loop/0).
<0.36.0>
2> Pid ! {rectangle,6,8}).
48
3> Pid ! {circle,6}).
113.097
4> Pid, socks).
{error,socks}
¿Cuándo utilizar Actores?
¿Cuándo utilizar Actores?

Cuando el problema se preste de manera natural a
descomposición de diferentes tareas concurrentes.
¿Cuándo utilizar Actores?

Cuando el problema se preste de manera natural a
descomposición de diferentes tareas concurrentes.

Cuando se requiere descomponer la aplicación de
tal manera que se permita escalar de manera
diferente a cada parte de la misma.
¿Cuándo utilizar Actores?

Cuando el problema se preste de manera natural a
descomposición de diferentes tareas concurrentes.

Cuando se requiere descomponer la aplicación de
tal manera que se permita escalar de manera
diferente a cada parte de la misma.

Cuando se quiere tener transparencia al escalar
aplicaciones entre un CPU de varios cores a un
cluster de máquinas.
Software Transactional
      Memory
Ok, es imposible evitar al 100% el estado
mutable.

¿Cómo manejar el estado mutable en
concurrencia 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 modelos

Colecciones paralelas

listOfFiles.par foreach(file => sendToS3(file))

Data Flow

“Cambiar el valor de 1 variable,
automáticamente debería forzar el recálculo
de valores que dependen de dicha variable”.
Futuro
Futuro


Investigación
Futuro


                Experiencia
Investigación
                 con HPC
Futuro


                 Experiencia
Investigación
                  con HPC


        Necesidades
       de la Industria
"My thesis is that the best way to write parallel
applications is not to have to think about
parallelism, just as the best way to deal with
memory and it's management is not to have to
worry about this management. You have this
garbage collector... let it deal with that"

                                Guy Steele, 2011
Referencias
The Free Lunch is Over. http://j.mp/mL1PMf

How to Think About Parallel Programming: Not!
http://j.mp/jXYNeH

Introduction to Parallel Programming and
MapReduce http:/  /j.mp/pLFVZA

Actors in Scala http://j.mp/plti66

Concepts, Techniques and Models of Computer
Programming. Van Roy & Haridi, 2004. http://
j.mp/m7gYbi

Contenu connexe

Tendances (20)

CSS
CSSCSS
CSS
 
Network programming
Network programmingNetwork programming
Network programming
 
Nakov - .NET Framework Overview - English
Nakov - .NET Framework Overview - EnglishNakov - .NET Framework Overview - English
Nakov - .NET Framework Overview - English
 
Class and Objects in PHP
Class and Objects in PHPClass and Objects in PHP
Class and Objects in PHP
 
Php Framework
Php FrameworkPhp Framework
Php Framework
 
Top web development tools
Top web development toolsTop web development tools
Top web development tools
 
Flutter workshop
Flutter workshopFlutter workshop
Flutter workshop
 
iOS platform
iOS platformiOS platform
iOS platform
 
CSS3, Media Queries, and Responsive Design
CSS3, Media Queries, and Responsive DesignCSS3, Media Queries, and Responsive Design
CSS3, Media Queries, and Responsive Design
 
Swift Introduction
Swift IntroductionSwift Introduction
Swift Introduction
 
Introduction to Android Fragments
Introduction to Android FragmentsIntroduction to Android Fragments
Introduction to Android Fragments
 
Deep linking
Deep linkingDeep linking
Deep linking
 
Dotnet basics
Dotnet basicsDotnet basics
Dotnet basics
 
DOT Net overview
DOT Net overviewDOT Net overview
DOT Net overview
 
PowerShell 101
PowerShell 101PowerShell 101
PowerShell 101
 
Introduction to Objective - C
Introduction to Objective - CIntroduction to Objective - C
Introduction to Objective - C
 
PHP.ppt
PHP.pptPHP.ppt
PHP.ppt
 
Building beautiful apps using google flutter
Building beautiful apps using google flutterBuilding beautiful apps using google flutter
Building beautiful apps using google flutter
 
Introduction to C# Programming
Introduction to C# ProgrammingIntroduction to C# Programming
Introduction to C# Programming
 
Hello Flutter
Hello FlutterHello Flutter
Hello Flutter
 

Similaire à Modelos de paralelismo y concurrencia

Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)
Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)
Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)Marco Antonio Ordoñez Valverde
 
Introduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfIntroduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfcursosrams
 
FdP_Diapositivas_2018
FdP_Diapositivas_2018FdP_Diapositivas_2018
FdP_Diapositivas_2018ead1943
 
Trabajo práctico sobre Clojure, Evaluación de un Lenguaje de Programación
Trabajo práctico sobre Clojure, Evaluación de un Lenguaje de ProgramaciónTrabajo práctico sobre Clojure, Evaluación de un Lenguaje de Programación
Trabajo práctico sobre Clojure, Evaluación de un Lenguaje de ProgramaciónEmmanuel Fontán
 
Conceptos fundmentales
Conceptos fundmentalesConceptos fundmentales
Conceptos fundmentalesalondrashare
 
Funciones en lenguage c
Funciones en lenguage cFunciones en lenguage c
Funciones en lenguage cLorena Sanchez
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de stringyimfer1
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de stringcyberleon95
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de stringJuan Camilo
 
Presentación de matlab electromagnetismo ...
Presentación de matlab electromagnetismo                                     ...Presentación de matlab electromagnetismo                                     ...
Presentación de matlab electromagnetismo ...SimonCaceres4
 

Similaire à Modelos de paralelismo y concurrencia (20)

Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)
Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)
Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)
 
Programación Funcional con Scheme
Programación Funcional con SchemeProgramación Funcional con Scheme
Programación Funcional con Scheme
 
Actividad 4
Actividad 4 Actividad 4
Actividad 4
 
Apuntes scilab
Apuntes scilabApuntes scilab
Apuntes scilab
 
Apuntes scilab
Apuntes scilabApuntes scilab
Apuntes scilab
 
Introduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfIntroduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdf
 
Presentación y políticas del curso
Presentación y políticas del cursoPresentación y políticas del curso
Presentación y políticas del curso
 
FdP_Diapositivas_2018
FdP_Diapositivas_2018FdP_Diapositivas_2018
FdP_Diapositivas_2018
 
Trabajo práctico sobre Clojure, Evaluación de un Lenguaje de Programación
Trabajo práctico sobre Clojure, Evaluación de un Lenguaje de ProgramaciónTrabajo práctico sobre Clojure, Evaluación de un Lenguaje de Programación
Trabajo práctico sobre Clojure, Evaluación de un Lenguaje de Programación
 
Introducción a la programación funcional
Introducción a la programación funcionalIntroducción a la programación funcional
Introducción a la programación funcional
 
Conceptos fundmentales
Conceptos fundmentalesConceptos fundmentales
Conceptos fundmentales
 
Master vba
Master vbaMaster vba
Master vba
 
11funciones 1231096290787715-2
11funciones 1231096290787715-211funciones 1231096290787715-2
11funciones 1231096290787715-2
 
Programacion en matlab
Programacion en matlabProgramacion en matlab
Programacion en matlab
 
Funciones en lenguage c
Funciones en lenguage cFunciones en lenguage c
Funciones en lenguage c
 
Funciones
FuncionesFunciones
Funciones
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de string
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de string
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de string
 
Presentación de matlab electromagnetismo ...
Presentación de matlab electromagnetismo                                     ...Presentación de matlab electromagnetismo                                     ...
Presentación de matlab electromagnetismo ...
 

Plus de Agustin Ramos

Exploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with ArcheometerExploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with ArcheometerAgustin Ramos
 
From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017Agustin Ramos
 
Pairwise and property based testing
Pairwise and property based testingPairwise and property based testing
Pairwise and property based testingAgustin Ramos
 
Sistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasSistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasAgustin Ramos
 
¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?Agustin Ramos
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskellAgustin Ramos
 
Técnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseñoTécnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseñoAgustin Ramos
 
Acercándose a la entrega continua
Acercándose a la entrega continuaAcercándose a la entrega continua
Acercándose a la entrega continuaAgustin Ramos
 
Arquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que noArquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que noAgustin Ramos
 
Arqueología de software
Arqueología de softwareArqueología de software
Arqueología de softwareAgustin Ramos
 
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Agustin Ramos
 
BDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoBDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoAgustin Ramos
 
La nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingenieroLa nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingenieroAgustin Ramos
 
Modularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidraModularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidraAgustin Ramos
 

Plus de Agustin Ramos (15)

Exploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with ArcheometerExploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with Archeometer
 
From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017
 
Pairwise and property based testing
Pairwise and property based testingPairwise and property based testing
Pairwise and property based testing
 
Sistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasSistemas Tolerantes a Fallas
Sistemas Tolerantes a Fallas
 
¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskell
 
Técnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseñoTécnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseño
 
Acercándose a la entrega continua
Acercándose a la entrega continuaAcercándose a la entrega continua
Acercándose a la entrega continua
 
Arquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que noArquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que no
 
Arqueología de software
Arqueología de softwareArqueología de software
Arqueología de software
 
Hola OSGi
Hola OSGiHola OSGi
Hola OSGi
 
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
 
BDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoBDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamiento
 
La nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingenieroLa nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingeniero
 
Modularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidraModularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidra
 

Dernier

Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 

Dernier (16)

Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 

Modelos de paralelismo y concurrencia

  • 1. Modelos
de
Paralelismo
y
 Concurrencia Agus4n
Ramos
Fonseca @MachinesAreUs
  • 2. 1a Parte Cuando el Futuro nos Alcance
  • 3. “The Free Lunch is Over”
  • 4. “The Free Lunch is Over” Herb Sutter, Dr. Dobbs, 2005
  • 6. Introducción de Procesadores Multicore en Mercado Masivo Microprocesador “Cell”
  • 7. No es Tema Nuevo
  • 8. No es Tema Nuevo
  • 9. No es Tema Nuevo Cray 1 (1975)
  • 10. No es Tema Nuevo Cray 1 Blue Gene/P (1975) (2007)
  • 11. No es Tema Nuevo Cray 1 Blue Gene/P (1975) (2007) Fujitsu K (2011)
  • 12. No es Tema Nuevo Cray 1 Blue Gene/P (1975) (2007) Fujitsu K (2011)
  • 13. No es Tema Nuevo
  • 14. No es Tema Nuevo
  • 15. Esta plática no es sobre “High Performance Computing”
  • 16. ¿Por qué es relavante en las aplicaciones de industria?
  • 18. Escalabilidad Vertical
  • 19. Escalabilidad Vertical 10K
  • 20. Escalabilidad Vertical 10K 1 x 3.2Ghz, 4 Gbytes
  • 21. Escalabilidad Vertical 10K 1 x 3.2Ghz, 4 Gbytes 20K 2 x 3.2Ghz, 8 Gbytes
  • 22. Escalabilidad Vertical 10K 1 x 3.2Ghz, 4 Gbytes 20K 2 x 3.2Ghz, 8 Gbytes 30K 4 x 3.2Ghz, 16 Gbytes
  • 23. Escalabilidad Horizontal
  • 24. Escalabilidad Horizontal 10K
  • 25. Escalabilidad Horizontal 10K 20K
  • 26. Escalabilidad Horizontal 10K 20K 30K
  • 27. Big Data 2010.03.17 2010.03.17
  • 29. Escalabilidad Es conveniente contar con modelos de programación que permitan escalar de manera transparente tanto vertical como horizontalmente.
  • 30. 2a Parte Modelos de Paralelismo y Concurrencia
  • 33. Paralelismo vs Concurrencia Paralelismo: Surge cuando al menos dos tareas se ejecutan de manera simultánea (físicamente).
  • 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. 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. 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. 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. Ley de Amdahl Gene Amdahl, 1967 La máxima mejora en desempeño que puede obtenerse al paralelizar un programa, está dada por: P = Porción paralelizable [0, 1]. N = Número de procesadores.
  • 41. Modelo más tradicional Hilos (Threads) c/u con Stack propio Memoria (estado) compartida
  • 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
  • 44. Problemas del Modelo de Hilos Muy sensible a el orden de ejecución
  • 45. Problemas del Modelo de Hilos Muy sensible a el orden de ejecución Condiciones de competencia.
  • 46. Problemas del Modelo de Hilos Muy sensible a el orden de ejecución Condiciones de competencia. Deadlocks
  • 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. 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. 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. 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. 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.
  • 54. Clasificación de Modelos Implícito Programación funcional
  • 55. Clasificación de Modelos Implícito Programación funcional Map-Reduce
  • 56. Clasificación de Modelos Implícito Programación funcional Map-Reduce Explícito
  • 57. Clasificación de Modelos Implícito Programación funcional Map-Reduce Explícito Hilos
  • 58. Clasificación de Modelos Implícito Programación funcional Map-Reduce Explícito Hilos Actores
  • 59. Clasificación de Modelos Implícito Programación funcional Map-Reduce Explícito Hilos Actores Data Flow
  • 61. Programación Funcional Las funciones son abstracciones de 1er nivel.
  • 62. Programación Funcional Las funciones son abstracciones de 1er nivel. Se pueden usar funciones como parámetros de otras, así como valores de retorno.
  • 63. Programación Funcional Las 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. Programación Funcional Las 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. Programación Funcional Las 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
  • 68. Programación Funcional Las funciones son puras Sin efectos colaterales.
  • 69. Programación Funcional Las funciones son puras Sin efectos colaterales. El resultado es función solamente de los parámetros, no de algún estado (transparencia referencial).
  • 70. Programación Funcional Las 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. Los programas funcionales son implícitamente paralelizables (1/4)
  • 72. Los programas funcionales son implícitamente paralelizables (1/4) Función F que transforma valores:
  • 73. Los programas funcionales son implícitamente paralelizables (1/4) Función F que transforma valores: F(v1) -> v2
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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 la función ‘esCursoDeAlgunaMateria’ a cada elemento de la lista.
  • 85. Los programas funcionales son implícitamente paralelizables (3/4) Al ser expresiones, los programas funcionales no imponen 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. Los programas funcionales son implícitamente paralelizables (4/4)
  • 87. Los programas funcionales son implícitamente paralelizables (4/4) Las características que hacen que los programas funcionales sean paralelizables son dos:
  • 88. Los programas funcionales son implícitamente paralelizables (4/4) Las características que hacen que los programas funcionales sean paralelizables son dos: Independencia del tiempo.
  • 89. Los programas funcionales son implícitamente paralelizables (4/4) Las características que hacen que los programas funcionales sean paralelizables son dos: Independencia del tiempo. No existencia de variables mutables.
  • 90. Lenguajes Funcionales Haskell Scheme Erlang En la JVM Clojure Scala (Híbrido con OO) ... Es un estilo, no requiere cambiar de lenguaje.
  • 92. Map-Reduce Procesamiento de grandes conjuntos de datos.
  • 93. Map-Reduce Procesamiento de grandes conjuntos de datos.
  • 94. Map-Reduce Procesamiento de grandes conjuntos de datos. Función Map
  • 95. Map-Reduce Procesamiento de grandes conjuntos de datos. Función Map map(k1,v1) -> lista de (k2,v2)
  • 96. Map-Reduce Procesamiento de grandes conjuntos de datos. Función Map map(k1,v1) -> lista de (k2,v2) Función Reduce
  • 97. Map-Reduce Procesamiento de grandes conjuntos de datos. Función Map map(k1,v1) -> lista de (k2,v2) Función Reduce ⊕ (k2, list(v2)) -> list (v3)
  • 104. Map-Reduce Propiedades deseables en el operador ‘Reduce’
  • 105. Map-Reduce Propiedades deseables en el operador ‘Reduce’ Asociatividad
  • 106. Map-Reduce Propiedades deseables en el operador ‘Reduce’ Asociatividad a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ c
  • 107. Map-Reduce Propiedades deseables en el operador ‘Reduce’ Asociatividad a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ c Conmutatividad
  • 108. Map-Reduce Propiedades deseables en el operador ‘Reduce’ Asociatividad a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ c Conmutatividad a⊕b=b⊕a
  • 109. Map-Reduce Propiedades deseables en el operador ‘Reduce’ Asociatividad a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ c Conmutatividad a⊕b=b⊕a Asociatividad y Conmutatividad
  • 110. Map-Reduce Propiedades deseables en el operador ‘Reduce’ Asociatividad a ⊕ ( b ⊕ c ) = (a ⊕ b) ⊕ c Conmutatividad a⊕b=b⊕a Asociatividad y Conmutatividad a ⊕ ( b ⊕ c ) = (c ⊕ a) ⊕ b
  • 112. Ejemplo de Map-Reduce Problema: contar el número de veces que aparece una palabra en un documento.
  • 113. Ejemplo de Map-Reduce Problema: contar el número de veces que aparece una palabra en un documento.
  • 114. Ejemplo de Map-Reduce Problema: contar el número de veces que aparece una palabra en un documento. map(String name, String document): for each word w in document: EmitIntermediate(w, "1")
  • 115. Ejemplo de Map-Reduce Problema: contar el número de veces que aparece una palabra en un documento. map(String name, String document): for each word w in document: EmitIntermediate(w, "1")
  • 116. Ejemplo de Map-Reduce Problema: contar el número de veces que aparece una palabra en un documento. map(String name, String document): for each word w in document: EmitIntermediate(w, "1")
  • 117. Ejemplo de Map-Reduce Problema: contar el número de veces que aparece 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))
  • 120. Actores Modelo de programación concurrente Un actor:
  • 121. Actores Modelo de programación concurrente Un actor: Tiene un estado interno, no compartido.
  • 122. Actores Modelo de programación concurrente Un actor: Tiene un estado interno, no compartido. Tiene su propio hilo de ejecución (event loop).
  • 123. Actores Modelo de programación concurrente Un 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. Actores Modelo de programación concurrente Un 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. Actores Modelo de programación concurrente Un 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. Actores Modelo de programación concurrente Un 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.
  • 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. Actores 1> Pid = spawn(fun area_server1:loop/0). <0.36.0> 2> Pid ! {rectangle,6,8}). 48 3> Pid ! {circle,6}). 113.097 4> Pid, socks). {error,socks}
  • 131. ¿Cuándo utilizar Actores? Cuando el problema se preste de manera natural a descomposición de diferentes tareas concurrentes.
  • 132. ¿Cuándo utilizar Actores? Cuando el problema se preste de manera natural a descomposición de diferentes tareas concurrentes. Cuando se requiere descomponer la aplicación de tal manera que se permita escalar de manera diferente a cada parte de la misma.
  • 133. ¿Cuándo utilizar Actores? Cuando el problema se preste de manera natural a descomposición de diferentes tareas concurrentes. Cuando se requiere descomponer la aplicación de tal manera que se permita escalar de manera diferente a cada parte de la misma. Cuando se quiere tener transparencia al escalar aplicaciones entre un CPU de varios cores a un cluster de máquinas.
  • 134. Software Transactional Memory Ok, es imposible evitar al 100% el estado mutable. ¿Cómo manejar el estado mutable en concurrencia de manera segura? Usar transacciones en memoria para modificar las referencias mutables.
  • 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. Otros modelos Colecciones paralelas listOfFiles.par foreach(file => sendToS3(file)) Data Flow “Cambiar el valor de 1 variable, automáticamente debería forzar el recálculo de valores que dependen de dicha variable”.
  • 137. Futuro
  • 139. Futuro Experiencia Investigación con HPC
  • 140. Futuro Experiencia Investigación con HPC Necesidades de la Industria
  • 141. "My thesis is that the best way to write parallel applications is not to have to think about parallelism, just as the best way to deal with memory and it's management is not to have to worry about this management. You have this garbage collector... let it deal with that" Guy Steele, 2011
  • 142. Referencias The Free Lunch is Over. http://j.mp/mL1PMf How to Think About Parallel Programming: Not! http://j.mp/jXYNeH Introduction to Parallel Programming and MapReduce http:/ /j.mp/pLFVZA Actors in Scala http://j.mp/plti66 Concepts, Techniques and Models of Computer Programming. Van Roy & Haridi, 2004. http:// j.mp/m7gYbi

Notes de l'éditeur

  1. \n
  2. \n
  3. - 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
  4. - 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
  5. - 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
  6. - 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
  7. - 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  55. 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
  56. 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
  57. 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
  58. 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
  59. 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
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. 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
  68. 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
  69. &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  70. &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  71. &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  72. &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  73. &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  74. &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  75. &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  76. &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  77. &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  78. &amp;#xBF;Por qu&amp;#xE9; no simplemente programamos con hilos?\n
  79. 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
  80. 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
  81. 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
  82. 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
  83. 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
  84. 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
  85. 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
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n
  144. \n
  145. \n
  146. \n
  147. \n
  148. \n
  149. \n
  150. \n
  151. \n
  152. \n
  153. \n
  154. \n
  155. \n
  156. \n