SlideShare una empresa de Scribd logo
1 de 37
Descargar para leer sin conexión
Paralelismo en
            lenguajes de alto nivel
            Un repaso por algunas opciones en .Net y Java
            Luis Belloch Gómez
            CMCP Enero 2010

jueves 21 de enero de 2010
Máquina Virtual (jvmclr)

                             Librerías Sistema

                             Sistema Operativo

                             CPUs  Memoria


jueves 21 de enero de 2010
void *malloc(size_t size);
                      void free(void *pointer);




jueves 21 de enero de 2010
void *malloc(size_t size);
                      void free(void *pointer);




                             new Object();



jueves 21 de enero de 2010
El código es portable
                             entre arquitecturas




                             La gestión de la
                             memoria es automática




jueves 21 de enero de 2010
public class Counter
                  {
                      private int value = 0;
                      public synchronized void incr(){
                          value = value + 1;
                      }
                  }

                  ....

                  Counter counter = new Counter();
                  counter.incr();



jueves 21 de enero de 2010
public class Counter
                  {
                      private int value = 0;
                      public synchronized void incr(){
                          value = value + 1;
                      }
                  }

                  ....

                  Counter counter = new Counter();
                  counter.incr();



jueves 21 de enero de 2010
Abstracciones

jueves 21 de enero de 2010
plinq   Parallel LINQ
                             Language Integrated Query
                                Paralelismo de datos
                             Construcciones declarativas




jueves 21 de enero de 2010
plinq


                 IEnumerable<Factura> facturas = ...

                 var query = from f in facturas
                             where f.Ciudad == ...
                             select f;

                 var suma = query.Sum(f => f.importe);




jueves 21 de enero de 2010
plinq


                 IEnumerable<Factura> facturas = ...

                 var query = from f in facturas
                             where f.Ciudad == ...
                             select f;

                 var suma = query.Sum(f => f.importe);




     facturas.Where(f => f.Ciudad == ...).Select(f => f);




jueves 21 de enero de 2010
plinq


                 IEnumerable<Factura> facturas = ...

                 var query = from f in facturas
                             where f.Ciudad == ...
                             select f;

                 var suma = query.Sum(f => f.importe);



                                         λ               λ
     facturas.Where(f => f.Ciudad == ...).Select(f => f);




jueves 21 de enero de 2010
plinq


                 IEnumerable<Factura> facturas = ...

                 var query = from f in facturas
                             where f.Ciudad == ...
                             select f;

                 var suma = query.Sum(f => f.importe);



                                         λ               λ
     facturas.Where(f => f.Ciudad == ...).Select(f => f);




jueves 21 de enero de 2010
plinq


                 IEnumerable<Factura> facturas = ...

                 var query = from f in facturas
                             where f.Ciudad == ...
                             select f;

                 var suma = query.Sum(f => f.importe);



                                         λ               λ
     facturas.Where(f => f.Ciudad == ...).Select(f => f);




jueves 21 de enero de 2010
plinq




             var q = from f in facturas.AsParalell()




jueves 21 de enero de 2010
plinq




             var q = from f in facturas.AsParalell()




jueves 21 de enero de 2010
plinq




             var q = from f in facturas.AsParalell()


             void PMatMul(...) {
               Parallel.For(0, size,   (i) => {
                 for (int j = 0; j <   size; j++) {
                   result[i, j] = 0;
                   for (int k = 0; k   < size; k++) {
                     result[i, j] +=   m1[i, k] * m2[k, j];
                   }
                 }
               });
             }

jueves 21 de enero de 2010
Actores
                             (paso de mensajes)




jueves 21 de enero de 2010
scala




                             var actor1 = actor {
                                 receive {
                                     case x : String =>
                                         println(x)
                                 }
                             }
                             ...
                             actor1 ! "hello world!"




jueves 21 de enero de 2010
scala




                             var actor1 = actor {
                                 receive {
                                     case x : String =>
                                         println(x)
                                 }
                             }
                             ...
                             actor1 ! "hello world!"




jueves 21 de enero de 2010
scala



                             var actor1 = actor {
                                 loop {
                                    react {
                                      case s : String =>
                                          println(s)
                                    }
                                 }
                             }
                             ...
                             actor1 ! "hello world!"




jueves 21 de enero de 2010
scala



                             var actor1 = actor {
                                 loop {
                                    react {
                                      case s : String =>
                                          println(s)
                                    }
                                 }
                             }
                             ...
                             actor1 ! "hello world!"




jueves 21 de enero de 2010
Clojure

                             Memoria Transaccional
                                  ¿por qué bloquear?




jueves 21 de enero de 2010
cloju
                                                                                    re

                                                   !"#$$%&'&()$*+,-
                                                     !"#$$%&.$,)#&/0(
                                                   1,2#"34&567$8-,&94&9::;

                                                   <7+",7&<2-,,"4&=)7>"?@$,A


                                               !               !




                             (def counter(ref 0))
                             (dosync (alter counter inc))




jueves 21 de enero de 2010
cloju
                                                                                    re

                                                   !"#$$%&'&()$*+,-
                                                     !"#$$%&.$,)#&/0(
                                                   1,2#"34&567$8-,&94&9::;

                                                   <7+",7&<2-,,"4&=)7>"?@$,A


                                               !               !




                             (def counter(ref 0))
                             (dosync (alter counter inc))




jueves 21 de enero de 2010
cloju
                                                                                                       re
                      (defn run [nvecs nitems nthreads niters]
                                                                     !"#$$%&'&()$*+,-
                        (let [vec-refs
                             (vec (map                                  !"#$$%&.$,)#&/0(
                                                                      1,2#"34&567$8-,&94&9::;
                                     (comp ref vec)
                                                                      <7+",7&<2-,,"4&=)7>"?@$,A
                                     (partition nitems (range (* nvecs nitems)))))
                              swap #(let [v1 (rand-int nvecs)
                                           v2 (rand-int nvecs)        !               !




                                           i1 (rand-int nitems)
                                           i2 (rand-int nitems)]
                                       (dosync
                                        (let [temp (nth @(vec-refs v1) i1)]
                                          (alter (vec-refs v1) assoc i1
                                               (nth @(vec-refs v2) i2))
                                          (alter (vec-refs v2) assoc i2 temp))))
                              report #(do
                                        (prn (map deref vec-refs))
                                        (println "Distinct:"
                                            (count (distinct (apply concat
                                                      (map deref vec-refs))))))]
                          (report)
                          (dorun (apply pcalls (repeat nthreads
                                                   #(dotimes [_ niters] (swap)))))
                          (report)))

                      (run 100 10 10 100000)
                      (println "Done.")



jueves 21 de enero de 2010
cloju
                                                                                                       re
                      (defn run [nvecs nitems nthreads niters]
                                                                     !"#$$%&'&()$*+,-
                        (let [vec-refs
                             (vec (map                                  !"#$$%&.$,)#&/0(
                                                                      1,2#"34&567$8-,&94&9::;
                                     (comp ref vec)
                                                                      <7+",7&<2-,,"4&=)7>"?@$,A
                                     (partition nitems (range (* nvecs nitems)))))
                              swap #(let [v1 (rand-int nvecs)
                                           v2 (rand-int nvecs)        !               !




                                           i1 (rand-int nitems)
                                           i2 (rand-int nitems)]
                                       (dosync
                                        (let [temp (nth @(vec-refs v1) i1)]
                                          (alter (vec-refs v1) assoc i1
                                               (nth @(vec-refs v2) i2))
                                          (alter (vec-refs v2) assoc i2 temp))))
                              report #(do
                                        (prn (map deref vec-refs))
                                        (println "Distinct:"
                                            (count (distinct (apply concat
                                                      (map deref vec-refs))))))]
                          (report)
                          (dorun (apply pcalls (repeat nthreads
                                                   #(dotimes [_ niters] (swap)))))
                          (report)))

                      (run 100 10 10 100000)
                      (println "Done.")



jueves 21 de enero de 2010
cloju
                                                                                                       re
                      (defn run [nvecs nitems nthreads niters]
                                                                     !"#$$%&'&()$*+,-
                        (let [vec-refs
                             (vec (map        el acceso a vec es transaccional
                                                                        !"#$$%&.$,)#&/0(
                                                                      1,2#"34&567$8-,&94&9::;
                                     (comp ref vec)
                                                                      <7+",7&<2-,,"4&=)7>"?@$,A
                                     (partition nitems (range (* nvecs nitems)))))
                              swap #(let [v1 (rand-int nvecs)
                                           v2 (rand-int nvecs)        !               !




                                           i1 (rand-int nitems)
                                           i2 (rand-int nitems)]
                                       (dosync
                                        (let [temp (nth @(vec-refs v1) i1)]
                                          (alter (vec-refs v1) assoc i1
                                               (nth @(vec-refs v2) i2))
                                          (alter (vec-refs v2) assoc i2 temp))))
                              report #(do
                                        (prn (map deref vec-refs))
                                        (println "Distinct:"
                                            (count (distinct (apply concat
                                                      (map deref vec-refs))))))]
                          (report)
                          (dorun (apply pcalls (repeat nthreads
                                                   #(dotimes [_ niters] (swap)))))
                          (report)))

                      (run 100 10 10 100000)
                      (println "Done.")



jueves 21 de enero de 2010
cloju
                                                                                                       re
                      (defn run [nvecs nitems nthreads niters]
                                                                     !"#$$%&'&()$*+,-
                        (let [vec-refs
                             (vec (map        el acceso a vec es transaccional
                                                                        !"#$$%&.$,)#&/0(
                                                                      1,2#"34&567$8-,&94&9::;
                                     (comp ref vec)
                                                                      <7+",7&<2-,,"4&=)7>"?@$,A
                                     (partition nitems (range (* nvecs nitems)))))
                              swap #(let [v1 (rand-int nvecs)
                                           v2 (rand-int nvecs)        !               !




                                           i1 (rand-int nitems)
    el bloque siguiente                    i2 (rand-int nitems)]
                                       (dosync
    va dentro de una                    (let [temp (nth @(vec-refs v1) i1)]
                                          (alter (vec-refs v1) assoc i1
    transacción                                (nth @(vec-refs v2) i2))
                                          (alter (vec-refs v2) assoc i2 temp))))
                              report #(do
                                        (prn (map deref vec-refs))
                                        (println "Distinct:"
                                            (count (distinct (apply concat
                                                      (map deref vec-refs))))))]
                          (report)
                          (dorun (apply pcalls (repeat nthreads
                                                   #(dotimes [_ niters] (swap)))))
                          (report)))

                      (run 100 10 10 100000)
                      (println "Done.")



jueves 21 de enero de 2010
jueves 21 de enero de 2010
Conclusiones




jueves 21 de enero de 2010
Conclusiones

                         hilos tradicionales
                         no componen




jueves 21 de enero de 2010
Conclusiones

                         hilos tradicionales   plinq
                         no componen           uso declarativo




jueves 21 de enero de 2010
Conclusiones

                         hilos tradicionales   plinq
                         no componen           uso declarativo



            actores, mensajes
            memoria distribuida


jueves 21 de enero de 2010
Conclusiones

                         hilos tradicionales    plinq
                         no componen            uso declarativo


                                                  Clojure
            actores, mensajes                  stm, sin bloqueos
            memoria distribuida                memoria compartida


jueves 21 de enero de 2010
¿preguntas?

jueves 21 de enero de 2010
¡gracias!

jueves 21 de enero de 2010

Más contenido relacionado

La actualidad más candente (20)

Paralela4
Paralela4Paralela4
Paralela4
 
Paralela5
Paralela5Paralela5
Paralela5
 
Cap6
Cap6Cap6
Cap6
 
Paralela8
Paralela8Paralela8
Paralela8
 
Derivación
DerivaciónDerivación
Derivación
 
Paralela1
Paralela1Paralela1
Paralela1
 
P1
P1P1
P1
 
clase de matlab
clase  de   matlabclase  de   matlab
clase de matlab
 
Java ArrayList Iterator
Java ArrayList IteratorJava ArrayList Iterator
Java ArrayList Iterator
 
Vectors
VectorsVectors
Vectors
 
Tutorial rapido de octave
Tutorial rapido de octaveTutorial rapido de octave
Tutorial rapido de octave
 
4 varible aleatoriadiscreta (1)
4 varible aleatoriadiscreta (1)4 varible aleatoriadiscreta (1)
4 varible aleatoriadiscreta (1)
 
Estructura de datos I Primera Parte
Estructura de datos I Primera ParteEstructura de datos I Primera Parte
Estructura de datos I Primera Parte
 
Estadistica 2
Estadistica 2Estadistica 2
Estadistica 2
 
Calcular taller 1
Calcular taller 1Calcular taller 1
Calcular taller 1
 
Introduccion a la metodologia bootstrap
Introduccion a la metodologia bootstrapIntroduccion a la metodologia bootstrap
Introduccion a la metodologia bootstrap
 
Clase3 asignaciones
Clase3 asignacionesClase3 asignaciones
Clase3 asignaciones
 
11funciones 1231096290787715-2
11funciones 1231096290787715-211funciones 1231096290787715-2
11funciones 1231096290787715-2
 
Parte2
Parte2Parte2
Parte2
 
Convolucion Tiempo Discreto
Convolucion Tiempo DiscretoConvolucion Tiempo Discreto
Convolucion Tiempo Discreto
 

Destacado

Kerberos and its application in cross realm operations
Kerberos and its application in cross realm operationsKerberos and its application in cross realm operations
Kerberos and its application in cross realm operationsArunangshu Bhakta
 
Kerberos, Token and Hadoop
Kerberos, Token and HadoopKerberos, Token and Hadoop
Kerberos, Token and HadoopKai Zheng
 
An Introduction to Kerberos
An Introduction to KerberosAn Introduction to Kerberos
An Introduction to KerberosShumon Huque
 
Kerberos presentation
Kerberos presentationKerberos presentation
Kerberos presentationChris Geier
 
CRYPTOGRAPHY AND NETWORK SECURITY
CRYPTOGRAPHY AND NETWORK SECURITYCRYPTOGRAPHY AND NETWORK SECURITY
CRYPTOGRAPHY AND NETWORK SECURITYKathirvel Ayyaswamy
 
Kerberos : An Authentication Application
Kerberos : An Authentication ApplicationKerberos : An Authentication Application
Kerberos : An Authentication ApplicationVidulatiwari
 
Kerberos Authentication Protocol
Kerberos Authentication ProtocolKerberos Authentication Protocol
Kerberos Authentication ProtocolBibek Subedi
 

Destacado (13)

Kerberos
KerberosKerberos
Kerberos
 
Kerberos and its application in cross realm operations
Kerberos and its application in cross realm operationsKerberos and its application in cross realm operations
Kerberos and its application in cross realm operations
 
Ch14
Ch14Ch14
Ch14
 
Kerberos, Token and Hadoop
Kerberos, Token and HadoopKerberos, Token and Hadoop
Kerberos, Token and Hadoop
 
An Introduction to Kerberos
An Introduction to KerberosAn Introduction to Kerberos
An Introduction to Kerberos
 
Kerberos presentation
Kerberos presentationKerberos presentation
Kerberos presentation
 
Kerberos protocol
Kerberos protocolKerberos protocol
Kerberos protocol
 
CRYPTOGRAPHY AND NETWORK SECURITY
CRYPTOGRAPHY AND NETWORK SECURITYCRYPTOGRAPHY AND NETWORK SECURITY
CRYPTOGRAPHY AND NETWORK SECURITY
 
Kerberos
KerberosKerberos
Kerberos
 
Kerberos : An Authentication Application
Kerberos : An Authentication ApplicationKerberos : An Authentication Application
Kerberos : An Authentication Application
 
Kerberos Authentication Protocol
Kerberos Authentication ProtocolKerberos Authentication Protocol
Kerberos Authentication Protocol
 
kerberos
kerberoskerberos
kerberos
 
Kerberos
KerberosKerberos
Kerberos
 

Último

La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadEduardoSantiagoSegov
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxkimontey
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Marketing BRANDING
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 

Último (20)

La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedad
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 

Paralelismo en lenguajes de alto nivel

  • 1. Paralelismo en lenguajes de alto nivel Un repaso por algunas opciones en .Net y Java Luis Belloch Gómez CMCP Enero 2010 jueves 21 de enero de 2010
  • 2. Máquina Virtual (jvmclr) Librerías Sistema Sistema Operativo CPUs Memoria jueves 21 de enero de 2010
  • 3. void *malloc(size_t size); void free(void *pointer); jueves 21 de enero de 2010
  • 4. void *malloc(size_t size); void free(void *pointer); new Object(); jueves 21 de enero de 2010
  • 5. El código es portable entre arquitecturas La gestión de la memoria es automática jueves 21 de enero de 2010
  • 6. public class Counter { private int value = 0; public synchronized void incr(){ value = value + 1; } } .... Counter counter = new Counter(); counter.incr(); jueves 21 de enero de 2010
  • 7. public class Counter { private int value = 0; public synchronized void incr(){ value = value + 1; } } .... Counter counter = new Counter(); counter.incr(); jueves 21 de enero de 2010
  • 9. plinq Parallel LINQ Language Integrated Query Paralelismo de datos Construcciones declarativas jueves 21 de enero de 2010
  • 10. plinq IEnumerable<Factura> facturas = ... var query = from f in facturas where f.Ciudad == ... select f; var suma = query.Sum(f => f.importe); jueves 21 de enero de 2010
  • 11. plinq IEnumerable<Factura> facturas = ... var query = from f in facturas where f.Ciudad == ... select f; var suma = query.Sum(f => f.importe); facturas.Where(f => f.Ciudad == ...).Select(f => f); jueves 21 de enero de 2010
  • 12. plinq IEnumerable<Factura> facturas = ... var query = from f in facturas where f.Ciudad == ... select f; var suma = query.Sum(f => f.importe); λ λ facturas.Where(f => f.Ciudad == ...).Select(f => f); jueves 21 de enero de 2010
  • 13. plinq IEnumerable<Factura> facturas = ... var query = from f in facturas where f.Ciudad == ... select f; var suma = query.Sum(f => f.importe); λ λ facturas.Where(f => f.Ciudad == ...).Select(f => f); jueves 21 de enero de 2010
  • 14. plinq IEnumerable<Factura> facturas = ... var query = from f in facturas where f.Ciudad == ... select f; var suma = query.Sum(f => f.importe); λ λ facturas.Where(f => f.Ciudad == ...).Select(f => f); jueves 21 de enero de 2010
  • 15. plinq var q = from f in facturas.AsParalell() jueves 21 de enero de 2010
  • 16. plinq var q = from f in facturas.AsParalell() jueves 21 de enero de 2010
  • 17. plinq var q = from f in facturas.AsParalell() void PMatMul(...) { Parallel.For(0, size, (i) => { for (int j = 0; j < size; j++) { result[i, j] = 0; for (int k = 0; k < size; k++) { result[i, j] += m1[i, k] * m2[k, j]; } } }); } jueves 21 de enero de 2010
  • 18. Actores (paso de mensajes) jueves 21 de enero de 2010
  • 19. scala var actor1 = actor { receive { case x : String => println(x) } } ... actor1 ! "hello world!" jueves 21 de enero de 2010
  • 20. scala var actor1 = actor { receive { case x : String => println(x) } } ... actor1 ! "hello world!" jueves 21 de enero de 2010
  • 21. scala var actor1 = actor { loop { react { case s : String => println(s) } } } ... actor1 ! "hello world!" jueves 21 de enero de 2010
  • 22. scala var actor1 = actor { loop { react { case s : String => println(s) } } } ... actor1 ! "hello world!" jueves 21 de enero de 2010
  • 23. Clojure Memoria Transaccional ¿por qué bloquear? jueves 21 de enero de 2010
  • 24. cloju re !"#$$%&'&()$*+,- !"#$$%&.$,)#&/0( 1,2#"34&567$8-,&94&9::; <7+",7&<2-,,"4&=)7>"?@$,A ! ! (def counter(ref 0)) (dosync (alter counter inc)) jueves 21 de enero de 2010
  • 25. cloju re !"#$$%&'&()$*+,- !"#$$%&.$,)#&/0( 1,2#"34&567$8-,&94&9::; <7+",7&<2-,,"4&=)7>"?@$,A ! ! (def counter(ref 0)) (dosync (alter counter inc)) jueves 21 de enero de 2010
  • 26. cloju re (defn run [nvecs nitems nthreads niters] !"#$$%&'&()$*+,- (let [vec-refs (vec (map !"#$$%&.$,)#&/0( 1,2#"34&567$8-,&94&9::; (comp ref vec) <7+",7&<2-,,"4&=)7>"?@$,A (partition nitems (range (* nvecs nitems))))) swap #(let [v1 (rand-int nvecs) v2 (rand-int nvecs) ! ! i1 (rand-int nitems) i2 (rand-int nitems)] (dosync (let [temp (nth @(vec-refs v1) i1)] (alter (vec-refs v1) assoc i1 (nth @(vec-refs v2) i2)) (alter (vec-refs v2) assoc i2 temp)))) report #(do (prn (map deref vec-refs)) (println "Distinct:" (count (distinct (apply concat (map deref vec-refs))))))] (report) (dorun (apply pcalls (repeat nthreads #(dotimes [_ niters] (swap))))) (report))) (run 100 10 10 100000) (println "Done.") jueves 21 de enero de 2010
  • 27. cloju re (defn run [nvecs nitems nthreads niters] !"#$$%&'&()$*+,- (let [vec-refs (vec (map !"#$$%&.$,)#&/0( 1,2#"34&567$8-,&94&9::; (comp ref vec) <7+",7&<2-,,"4&=)7>"?@$,A (partition nitems (range (* nvecs nitems))))) swap #(let [v1 (rand-int nvecs) v2 (rand-int nvecs) ! ! i1 (rand-int nitems) i2 (rand-int nitems)] (dosync (let [temp (nth @(vec-refs v1) i1)] (alter (vec-refs v1) assoc i1 (nth @(vec-refs v2) i2)) (alter (vec-refs v2) assoc i2 temp)))) report #(do (prn (map deref vec-refs)) (println "Distinct:" (count (distinct (apply concat (map deref vec-refs))))))] (report) (dorun (apply pcalls (repeat nthreads #(dotimes [_ niters] (swap))))) (report))) (run 100 10 10 100000) (println "Done.") jueves 21 de enero de 2010
  • 28. cloju re (defn run [nvecs nitems nthreads niters] !"#$$%&'&()$*+,- (let [vec-refs (vec (map el acceso a vec es transaccional !"#$$%&.$,)#&/0( 1,2#"34&567$8-,&94&9::; (comp ref vec) <7+",7&<2-,,"4&=)7>"?@$,A (partition nitems (range (* nvecs nitems))))) swap #(let [v1 (rand-int nvecs) v2 (rand-int nvecs) ! ! i1 (rand-int nitems) i2 (rand-int nitems)] (dosync (let [temp (nth @(vec-refs v1) i1)] (alter (vec-refs v1) assoc i1 (nth @(vec-refs v2) i2)) (alter (vec-refs v2) assoc i2 temp)))) report #(do (prn (map deref vec-refs)) (println "Distinct:" (count (distinct (apply concat (map deref vec-refs))))))] (report) (dorun (apply pcalls (repeat nthreads #(dotimes [_ niters] (swap))))) (report))) (run 100 10 10 100000) (println "Done.") jueves 21 de enero de 2010
  • 29. cloju re (defn run [nvecs nitems nthreads niters] !"#$$%&'&()$*+,- (let [vec-refs (vec (map el acceso a vec es transaccional !"#$$%&.$,)#&/0( 1,2#"34&567$8-,&94&9::; (comp ref vec) <7+",7&<2-,,"4&=)7>"?@$,A (partition nitems (range (* nvecs nitems))))) swap #(let [v1 (rand-int nvecs) v2 (rand-int nvecs) ! ! i1 (rand-int nitems) el bloque siguiente i2 (rand-int nitems)] (dosync va dentro de una (let [temp (nth @(vec-refs v1) i1)] (alter (vec-refs v1) assoc i1 transacción (nth @(vec-refs v2) i2)) (alter (vec-refs v2) assoc i2 temp)))) report #(do (prn (map deref vec-refs)) (println "Distinct:" (count (distinct (apply concat (map deref vec-refs))))))] (report) (dorun (apply pcalls (repeat nthreads #(dotimes [_ niters] (swap))))) (report))) (run 100 10 10 100000) (println "Done.") jueves 21 de enero de 2010
  • 30. jueves 21 de enero de 2010
  • 31. Conclusiones jueves 21 de enero de 2010
  • 32. Conclusiones hilos tradicionales no componen jueves 21 de enero de 2010
  • 33. Conclusiones hilos tradicionales plinq no componen uso declarativo jueves 21 de enero de 2010
  • 34. Conclusiones hilos tradicionales plinq no componen uso declarativo actores, mensajes memoria distribuida jueves 21 de enero de 2010
  • 35. Conclusiones hilos tradicionales plinq no componen uso declarativo Clojure actores, mensajes stm, sin bloqueos memoria distribuida memoria compartida jueves 21 de enero de 2010
  • 36. ¿preguntas? jueves 21 de enero de 2010
  • 37. ¡gracias! jueves 21 de enero de 2010