paralelismo en lenguajes de alto nivel
DESCRIPTION
Transparencias para la presentación del trabajo de CMCP.TRANSCRIPT
![Page 1: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/1.jpg)
Paralelismo enlenguajes de alto nivelUn repaso por algunas opciones en .Net y Java
Luis Belloch GómezCMCP Enero 2010
jueves 21 de enero de 2010
![Page 2: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/2.jpg)
Máquina Virtual (jvm\clr)
Librerías Sistema
Sistema Operativo
CPUs \ Memoria
jueves 21 de enero de 2010
![Page 3: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/3.jpg)
void *malloc(size_t size);void free(void *pointer);
jueves 21 de enero de 2010
![Page 4: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/4.jpg)
void *malloc(size_t size);void free(void *pointer);
new Object();
jueves 21 de enero de 2010
![Page 5: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/5.jpg)
La gestión de la memoria es automática
El código es portable entre arquitecturas
jueves 21 de enero de 2010
![Page 6: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/6.jpg)
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
![Page 7: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/7.jpg)
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
![Page 8: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/8.jpg)
Abstracciones
jueves 21 de enero de 2010
![Page 9: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/9.jpg)
Language Integrated QueryParalelismo de datos
Construcciones declarativas
plinq Parallel LINQ
jueves 21 de enero de 2010
![Page 10: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/10.jpg)
IEnumerable<Factura> facturas = ...
var query = from f in facturas where f.Ciudad == ... select f; var suma = query.Sum(f => f.importe);
plinq
jueves 21 de enero de 2010
![Page 11: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/11.jpg)
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);
plinq
jueves 21 de enero de 2010
![Page 12: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/12.jpg)
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);λ λ
plinq
jueves 21 de enero de 2010
![Page 13: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/13.jpg)
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);λ λ
plinq
jueves 21 de enero de 2010
![Page 14: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/14.jpg)
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);λ λ
plinq
jueves 21 de enero de 2010
![Page 15: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/15.jpg)
plinq
var q = from f in facturas.AsParalell()
jueves 21 de enero de 2010
![Page 16: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/16.jpg)
plinq
var q = from f in facturas.AsParalell()
jueves 21 de enero de 2010
![Page 17: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/17.jpg)
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
![Page 18: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/18.jpg)
Actores(paso de mensajes)
jueves 21 de enero de 2010
![Page 19: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/19.jpg)
var actor1 = actor { receive { case x : String => println(x) }}...actor1 ! "hello world!"
scala
jueves 21 de enero de 2010
![Page 20: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/20.jpg)
var actor1 = actor { receive { case x : String => println(x) }}...actor1 ! "hello world!"
scala
jueves 21 de enero de 2010
![Page 21: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/21.jpg)
scala
var actor1 = actor { loop { react { case s : String => println(s) } }}...actor1 ! "hello world!"
jueves 21 de enero de 2010
![Page 22: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/22.jpg)
scala
var actor1 = actor { loop { react { case s : String => println(s) } }}...actor1 ! "hello world!"
jueves 21 de enero de 2010
![Page 23: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/23.jpg)
Clo jure
Memoria Transaccional¿por qué bloquear?
jueves 21 de enero de 2010
![Page 24: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/24.jpg)
(def counter(ref 0))(dosync (alter counter inc))
! !
!"#$$%&'&()$*+,-
!"#$$%&.$,)#&/0(1,2#"34&567$8-,&94&9::;
<7+",7&<2-,,"4&=)7>"?@$,A
clojure
jueves 21 de enero de 2010
![Page 25: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/25.jpg)
(def counter(ref 0))(dosync (alter counter inc))
! !
!"#$$%&'&()$*+,-
!"#$$%&.$,)#&/0(1,2#"34&567$8-,&94&9::;
<7+",7&<2-,,"4&=)7>"?@$,A
clojure
jueves 21 de enero de 2010
![Page 26: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/26.jpg)
(defn run [nvecs nitems nthreads niters] (let [vec-refs (vec (map (comp ref vec) (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.")
! !
!"#$$%&'&()$*+,-
!"#$$%&.$,)#&/0(1,2#"34&567$8-,&94&9::;
<7+",7&<2-,,"4&=)7>"?@$,A
clojure
jueves 21 de enero de 2010
![Page 27: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/27.jpg)
(defn run [nvecs nitems nthreads niters] (let [vec-refs (vec (map (comp ref vec) (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.")
! !
!"#$$%&'&()$*+,-
!"#$$%&.$,)#&/0(1,2#"34&567$8-,&94&9::;
<7+",7&<2-,,"4&=)7>"?@$,A
clojure
jueves 21 de enero de 2010
![Page 28: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/28.jpg)
(defn run [nvecs nitems nthreads niters] (let [vec-refs (vec (map (comp ref vec) (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.")
! !
!"#$$%&'&()$*+,-
!"#$$%&.$,)#&/0(1,2#"34&567$8-,&94&9::;
<7+",7&<2-,,"4&=)7>"?@$,A
clojure
el acceso a vec es transaccional
jueves 21 de enero de 2010
![Page 29: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/29.jpg)
(defn run [nvecs nitems nthreads niters] (let [vec-refs (vec (map (comp ref vec) (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.")
! !
!"#$$%&'&()$*+,-
!"#$$%&.$,)#&/0(1,2#"34&567$8-,&94&9::;
<7+",7&<2-,,"4&=)7>"?@$,A
clojure
el acceso a vec es transaccional
el bloque siguienteva dentro de unatransacción
jueves 21 de enero de 2010
![Page 30: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/30.jpg)
jueves 21 de enero de 2010
![Page 31: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/31.jpg)
Conclusiones
jueves 21 de enero de 2010
![Page 32: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/32.jpg)
Conclusiones
hilos tradicionalesno componen
jueves 21 de enero de 2010
![Page 33: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/33.jpg)
Conclusiones
hilos tradicionalesno componen
plinquso declarativo
jueves 21 de enero de 2010
![Page 34: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/34.jpg)
Conclusiones
actores, mensajesmemoria distribuida
hilos tradicionalesno componen
plinquso declarativo
jueves 21 de enero de 2010
![Page 35: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/35.jpg)
Conclusiones
actores, mensajesmemoria distribuida
hilos tradicionalesno componen
Clo jurestm, sin bloqueos
memoria compartida
plinquso declarativo
jueves 21 de enero de 2010
![Page 36: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/36.jpg)
¿preguntas?
jueves 21 de enero de 2010
![Page 37: Paralelismo en lenguajes de alto nivel](https://reader033.vdocuments.co/reader033/viewer/2022052218/557b5ab3d8b42a8b078b4f09/html5/thumbnails/37.jpg)
¡gracias!
jueves 21 de enero de 2010