SlideShare una empresa de Scribd logo
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

Más contenido relacionado

La actualidad más candente

Paradigmas de la programación
Paradigmas de la programación Paradigmas de la programación
Paradigmas de la programación
Daniel Gomez Jaramillo
 
Cuadro comparativo algoritmos de ordenamiento
Cuadro comparativo algoritmos de ordenamientoCuadro comparativo algoritmos de ordenamiento
Cuadro comparativo algoritmos de ordenamiento
Lutzo Guzmán
 
3. Representación del conocimiento y razonamiento.
3. Representación del conocimiento y razonamiento.3. Representación del conocimiento y razonamiento.
3. Representación del conocimiento y razonamiento.
Humberto Chalate Jorge
 
Interprete vs compilador
Interprete vs compiladorInterprete vs compilador
Interprete vs compilador
Elba Sepúlveda
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador Sintáctico
Pablo Guerra
 
Lenguajes autómatas.
Lenguajes autómatas.Lenguajes autómatas.
Lenguajes autómatas.
LuiS YmAY
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en Java
Angel Vázquez Patiño
 
Ordenamiento con árbol binario
Ordenamiento con árbol binarioOrdenamiento con árbol binario
Ordenamiento con árbol binarioedwinosuna
 
Principios fundamentales de la programación orientado a objetos
 Principios fundamentales de la programación orientado a objetos  Principios fundamentales de la programación orientado a objetos
Principios fundamentales de la programación orientado a objetos
mellcv
 
Presentacion algoritmos
Presentacion algoritmosPresentacion algoritmos
Presentacion algoritmos
aralylopez88
 
Fundamentos de BD - Unidad 2 Modelo Entidad Relacion
Fundamentos de BD - Unidad 2 Modelo Entidad RelacionFundamentos de BD - Unidad 2 Modelo Entidad Relacion
Fundamentos de BD - Unidad 2 Modelo Entidad Relacion
José Antonio Sandoval Acosta
 
Lenguajes regulares
Lenguajes regularesLenguajes regulares
Lenguajes regularesKenia Adams
 
Métodos de Búsquedas en Inteligencia Artificial
Métodos de Búsquedas en Inteligencia ArtificialMétodos de Búsquedas en Inteligencia Artificial
Métodos de Búsquedas en Inteligencia Artificial
Gregorys Gimenez
 
Las estructuras de control en la programación
Las estructuras de control en la programaciónLas estructuras de control en la programación
Las estructuras de control en la programación
alexandermoreno91
 
Estructuras no-lineales
Estructuras no-linealesEstructuras no-lineales
Estructuras no-lineales
karlalopezbello
 
Español estructurado
Español estructuradoEspañol estructurado
Español estructuradoJorge Garcia
 
Modelo relacional
Modelo relacionalModelo relacional
Modelo relacional
miranda271999
 
JDBC MONOGRAFIA
JDBC MONOGRAFIAJDBC MONOGRAFIA
JDBC MONOGRAFIA
Sefira111
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
José Antonio Sandoval Acosta
 
Sentencias de repetición en Java
Sentencias de repetición en JavaSentencias de repetición en Java
Sentencias de repetición en JavaJdcaste
 

La actualidad más candente (20)

Paradigmas de la programación
Paradigmas de la programación Paradigmas de la programación
Paradigmas de la programación
 
Cuadro comparativo algoritmos de ordenamiento
Cuadro comparativo algoritmos de ordenamientoCuadro comparativo algoritmos de ordenamiento
Cuadro comparativo algoritmos de ordenamiento
 
3. Representación del conocimiento y razonamiento.
3. Representación del conocimiento y razonamiento.3. Representación del conocimiento y razonamiento.
3. Representación del conocimiento y razonamiento.
 
Interprete vs compilador
Interprete vs compiladorInterprete vs compilador
Interprete vs compilador
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador Sintáctico
 
Lenguajes autómatas.
Lenguajes autómatas.Lenguajes autómatas.
Lenguajes autómatas.
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en Java
 
Ordenamiento con árbol binario
Ordenamiento con árbol binarioOrdenamiento con árbol binario
Ordenamiento con árbol binario
 
Principios fundamentales de la programación orientado a objetos
 Principios fundamentales de la programación orientado a objetos  Principios fundamentales de la programación orientado a objetos
Principios fundamentales de la programación orientado a objetos
 
Presentacion algoritmos
Presentacion algoritmosPresentacion algoritmos
Presentacion algoritmos
 
Fundamentos de BD - Unidad 2 Modelo Entidad Relacion
Fundamentos de BD - Unidad 2 Modelo Entidad RelacionFundamentos de BD - Unidad 2 Modelo Entidad Relacion
Fundamentos de BD - Unidad 2 Modelo Entidad Relacion
 
Lenguajes regulares
Lenguajes regularesLenguajes regulares
Lenguajes regulares
 
Métodos de Búsquedas en Inteligencia Artificial
Métodos de Búsquedas en Inteligencia ArtificialMétodos de Búsquedas en Inteligencia Artificial
Métodos de Búsquedas en Inteligencia Artificial
 
Las estructuras de control en la programación
Las estructuras de control en la programaciónLas estructuras de control en la programación
Las estructuras de control en la programación
 
Estructuras no-lineales
Estructuras no-linealesEstructuras no-lineales
Estructuras no-lineales
 
Español estructurado
Español estructuradoEspañol estructurado
Español estructurado
 
Modelo relacional
Modelo relacionalModelo relacional
Modelo relacional
 
JDBC MONOGRAFIA
JDBC MONOGRAFIAJDBC MONOGRAFIA
JDBC MONOGRAFIA
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
 
Sentencias de repetición en Java
Sentencias de repetición en JavaSentencias de repetición en Java
Sentencias de repetición en Java
 

Similar a 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
 
Programación Funcional con Scheme
Programación Funcional con SchemeProgramación Funcional con Scheme
Programación Funcional con Scheme
Óscar Andrés López
 
Apuntes scilab
Apuntes scilabApuntes scilab
Apuntes scilab
AbelRodrguez9
 
Introduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfIntroduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdf
cursosrams
 
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
Daniel Bruno Pesantes Anchundia
 
FdP_Diapositivas_2018
FdP_Diapositivas_2018FdP_Diapositivas_2018
FdP_Diapositivas_2018
ead1943
 
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
Emmanuel Fontá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
Marco Antonio Ordoñez Valverde
 
Conceptos fundmentales
Conceptos fundmentalesConceptos fundmentales
Conceptos fundmentalesalondrashare
 
11funciones 1231096290787715-2
11funciones 1231096290787715-211funciones 1231096290787715-2
11funciones 1231096290787715-2
Jose Rodrigo Morera Torres
 
Programacion en matlab
Programacion en matlabProgramacion en matlab
Programacion en matlab
Nicolas Pinilla
 
Funciones en lenguage c
Funciones en lenguage cFunciones en lenguage c
Funciones en lenguage c
Lorena Sanchez
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de string
Juan Camilo
 
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
 
Presentación de matlab electromagnetismo ...
Presentación de matlab electromagnetismo                                     ...Presentación de matlab electromagnetismo                                     ...
Presentación de matlab electromagnetismo ...
SimonCaceres4
 

Similar a 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 ...
 

Más de Agustin Ramos

Exploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with ArcheometerExploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with Archeometer
Agustin 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 2017
Agustin Ramos
 
Pairwise and property based testing
Pairwise and property based testingPairwise and property based testing
Pairwise and property based testing
Agustin Ramos
 
Sistemas Tolerantes a Fallas
Sistemas Tolerantes a FallasSistemas Tolerantes a Fallas
Sistemas Tolerantes a Fallas
Agustin 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 haskell
Agustin 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ño
Agustin Ramos
 
Acercándose a la entrega continua
Acercándose a la entrega continuaAcercándose a la entrega continua
Acercándose a la entrega continua
Agustin 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 no
Agustin Ramos
 
Arqueología de software
Arqueología de softwareArqueología de software
Arqueología de software
Agustin Ramos
 
Hola OSGi
Hola OSGiHola OSGi
Hola OSGi
Agustin 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 ingeniero
Agustin 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 hidra
Agustin Ramos
 

Más 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
 

Último

Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
cj3806354
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
Emilio Casbas
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Telefónica
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
Leidyfuentes19
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
DiegoCampos433849
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
DanielErazoMedina
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
Fernando Villares
 
Robótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptxRobótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptx
44652726
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
rafaelsalazar0615
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
Luis Enrique Zafra Haro
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
cdraco
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
jjfch3110
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
cristianrb0324
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
ManuelCampos464987
 

Último (20)

Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
 
Robótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptxRobótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptx
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
 

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

Notas del editor

  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