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

GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
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
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 

Último (20)

GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.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
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 

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