Concurrency or "Hard Computing"

31
U.Cádiz U.Cádiz 23.03.2012 23.03.2012 Concurrencia o "Hardcomputing" Concurrencia o "Hardcomputing" 1 Manuel I. Capel Tuñón Manuel I. Capel Tuñón Departmento Lenguajes y Departmento Lenguajes y Sistemas, Universidad de Sistemas, Universidad de Granada, Granada, ETSIIT - Aynadamar Campus, ETSIIT - Aynadamar Campus, 18071 Granada. 18071 Granada. [email protected] [email protected] Quincena Ingeniería Quincena Ingeniería 2012 2012 Concurrencia o Concurrencia o “Hardcomputing” “Hardcomputing”

description

New addresses to HPCS programming. Threads and locks are "dead". Conferencia.uca.23.03.2012. Concurrency or Hard Computing of today meets High Productivity Computing Systems.

Transcript of Concurrency or "Hard Computing"

Page 1: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 11

Manuel I. Capel TuñónManuel I. Capel TuñónDepartmento Lenguajes y Departmento Lenguajes y Sistemas, Universidad de Sistemas, Universidad de

Granada,Granada,ETSIIT - Aynadamar Campus, ETSIIT - Aynadamar Campus,

18071 Granada.18071 Granada.

[email protected]@ugr.es

Quincena Quincena Ingeniería 2012Ingeniería 2012

Concurrencia o Concurrencia o “Hardcomputing”“Hardcomputing”

Page 2: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 22

Historia de la ConcurrenciaHistoria de la Concurrencia

””To Thread or Not to Thread”To Thread or Not to Thread”

Decálogo para programar multinúcleosDecálogo para programar multinúcleos

Paralelismo, Sincronización y Máximo Rendimiento Paralelismo, Sincronización y Máximo Rendimiento

ConclusionesConclusiones

Memoria Compartida, Paso de Mensajes y CoordinaciónMemoria Compartida, Paso de Mensajes y Coordinación

Una Solución de CompromisoUna Solución de Compromiso

Computación de Alta ProductividadComputación de Alta Productividad

Paralelismo Dirigido por TareasParalelismo Dirigido por Tareas

ÍndiceÍndice

Page 3: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 33

I. Historia de la I. Historia de la ConcurrenciaConcurrencia

HistoriaHistoria

ABSTRACCIÓN

1993

WWW (Berners-Lee, Caillau, 1991)

Java (Goslin et al. 1994)

Objetos y Concurrencia

1968

THE (Dijkstra 1968)

Diseño sistemas operativos

multiprogramación

“Proceso” (Wulf 1969)

RC4000 (Brinch-Hansen 1970)

…1980

Modelos de “Monitores”

Concurrent Pascal (Brinch-Hansen 1982)Mesa (Lampson, Redell 1980)Modula 2, Modula 3 (Wirth 1980)

… 1970

Época dorada de los “programadores de

sistemas”

Actor Model (Hewitt 1970)

Erlang (Eriksson 1986)Occam (May 1983)Ada (DoD 1980, 1995)

…1985

Mezcla de paradigmas: funcional, concurrente,

Evolución de los lenguajes de la

Prog. Concurrente

Evolución de los lenguajes de la

Prog. Concurrente

2001Orca (Easdown, 1995 )

Python (Tanembaum 2001)

Amoeba (Tanembaum, 2000)

Page 4: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 44

Procesadores Procesadores MultinúcleoMultinúcleoEl computador puede obtener con varias El computador puede obtener con varias

tareas a la vez la misma eficiencia que con tareas a la vez la misma eficiencia que con 1 tarea 1 tarea

Ley Amdahl (1967):Ley Amdahl (1967):

HistoriaHistoria

)()1(

1),(

Sff

SfA

Page 5: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 55

Procesadores Procesadores Multinúcleo IIMultinúcleo IILey Amdahl no sirve para arquitecturas Ley Amdahl no sirve para arquitecturas

masivas- paralelas sobre grandes masivas- paralelas sobre grandes conjuntos de datosconjuntos de datos

Ley Gustafson-Barsis:Ley Gustafson-Barsis:

HistoriaHistoria

)'('),( npsSfA

Page 6: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 66

II. Paralelismo, Sincronización y II. Paralelismo, Sincronización y Máximo RendimientoMáximo Rendimiento

Reducción de latencia: creación Reducción de latencia: creación

dinámica de hebras de ejecución en dinámica de hebras de ejecución en

servidores servidores

Impedir condiciones de carrera en Impedir condiciones de carrera en

acceso a datos comunes: paso de acceso a datos comunes: paso de

mensajesmensajes““We cannot longer count on the We cannot longer count on the

speed of processors increasing speed of processors increasing exponentially…we have to find ways exponentially…we have to find ways to take advantage of increasingly to take advantage of increasingly abundant number of cores”abundant number of cores”

Paralelismo, Sincron..Paralelismo, Sincron..

¿Se puede obtener el máximo

rendimiento paralelo sin

utilizar hebras ni paso de

mensajes?

Page 7: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 77

Programación paralela con múltiples Programación paralela con múltiples hebras no escala con el número de hebras no escala con el número de núcleosnúcleos

Se puede adoptar un estilo SPMD o Se puede adoptar un estilo SPMD o SIMD, que escala mejor SIMD, que escala mejor

Problemas adicionales:Problemas adicionales:No siempre el código susceptible de No siempre el código susceptible de

paralelización posee la misma granularidadparalelización posee la misma granularidadDifícil programación: crear Difícil programación: crear poolpools de s de

hebras, asignarles tareas, equilibrar la hebras, asignarles tareas, equilibrar la carga … carga …

III. III. “To Thread or Not to Thread”“To Thread or Not to Thread”

MultithreadingMultithreading

El esfuerzo del programador tendría que

centrarse más en identificar el potencial de paralelización del

programa que en programar un complejo

protocolo para gestionar los hebras, equilibrar la

carga de los núcleos, etc.

Page 8: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 88

IV.Memoria Compartida, Paso de Mensajes IV.Memoria Compartida, Paso de Mensajes y Coordinacióny Coordinación

Comunicación a través de la memoria de los procesos Comunicación a través de la memoria de los procesos produce “condiciones de carrera”produce “condiciones de carrera”

Se pueden sincronizar los accesos (semáforos…), pero Se pueden sincronizar los accesos (semáforos…), pero aparecen bloqueos vivos e interbloqueosaparecen bloqueos vivos e interbloqueos

Resultado previsible: muy baja productividadResultado previsible: muy baja productividadSustituir secciones críticas y sus protocolos por colas Sustituir secciones críticas y sus protocolos por colas

de mensajes (fifos, ...)de mensajes (fifos, ...)Tipo de comunicación que escala bien en Tipo de comunicación que escala bien en

multinúcleosmultinúcleos

Memoria, mensajes…Memoria, mensajes…

Page 9: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 99

¿Considerando el paso de mensajes ¿Considerando el paso de mensajes pernicioso para PP? pernicioso para PP?

Comunicación con Paso de Mensajes (CPM) , Comunicación con Paso de Mensajes (CPM) , inadecuada con paralelismo dirigido por los datos y inadecuada con paralelismo dirigido por los datos y puede producir inversión de controlpuede producir inversión de control

El programa puede degenerar en un conjunto de El programa puede degenerar en un conjunto de manejadores de hebras de activación imprevisiblemanejadores de hebras de activación imprevisible

Similar a programar con saltos incondicionales de Similar a programar con saltos incondicionales de control: el flujo de mensajes deviene incontrolable!control: el flujo de mensajes deviene incontrolable!

El esfuerzo de escribir un programa es muy altoEl esfuerzo de escribir un programa es muy alto

“message passing is harmful to parallel programming as

the goto is harmful to sequential programming”

(Gorlatch)

Memoria, mensajes…Memoria, mensajes…

Page 10: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 1010

V. Una Solución de CompromisoV. Una Solución de Compromiso

Una Solución…Una Solución…

Software Transactional Memory (TSM), Software Transactional Memory (TSM), nuevo modelo de nuevo modelo de comunicación/sincronización de Haskellcomunicación/sincronización de Haskell

Concepto de bloque atómico:Concepto de bloque atómico:Similar a las RCC del lenguaje Edison, Similar a las RCC del lenguaje Edison, Sin condiciones de carrera entre hebrasSin condiciones de carrera entre hebrasSTM escala bien con núcleosSTM escala bien con núcleosNo más “locks” (cerrojos)No más “locks” (cerrojos)

Memoria, mensajes…Memoria, mensajes…

Page 11: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 1111

Transacciones vs cerrojosTransacciones vs cerrojos

Una Solución…Una Solución…

Series de operaciones sobre memoria Series de operaciones sobre memoria compartida, de principio a fin, valores compartida, de principio a fin, valores intermedios vars. no son visibles intermedios vars. no son visibles

STM es una primitiva concurrente STM es una primitiva concurrente optimistaoptimistaNo se comprueba la consistencia antes de No se comprueba la consistencia antes de

escribirescribirSino, si van a Sino, si van a comprometer comprometer los cambios los cambios

realizadosrealizadosSiempre se puede abortar una transición, Siempre se puede abortar una transición,

antes de comprometer los cambiosantes de comprometer los cambiosAumentan la concurrencia: diferentes tareas Aumentan la concurrencia: diferentes tareas

pueden modificar simultáneamente regiones pueden modificar simultáneamente regiones de memoriade memoria

Memoria, mensajes…Memoria, mensajes…

Page 12: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 1212

Problema de las Transacciones Problema de las Transacciones BancariasBancarias

Una Solución…Una Solución…

int a[1..n];

{TOT==a[1]+...+a[n]== cte}

Thread P1::

A1:{a[x]==X,a[y]== Y}

S1:< a[x] = a[x] − K;

a[y] = a[y] + K >

A2:{a[x]== X − K, a[y]==y+K}

Memoria, mensajes…Memoria, mensajes…

Thread P2::var Suma=0; i=1; Error:= false;{Suma= a[1]+a[2]+ ... a[i-1]}while (i <= n) {B1 : {Suma== a[1]+...a[i−1],i< n}S2 : Suma = Suma + a[i]; B2 : {Suma== a[1]+...a[i−1]+a[i]} i= i+1;B3 : {Suma== a[1]+ ...a[i−1]}}{Suma ==a[1] + a[2] + ...a[n]}if S<>TOT then Error=true

El estado intermedio no debe ser visible a

P2

Page 13: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 1313

Problema de las Transacciones Problema de las Transacciones Bancarias IIBancarias II

Una Solución…Una Solución…Memoria, mensajes…Memoria, mensajes…

Solución con Solución con cerrojos :cerrojos :

x

a[]

y1 2 y+1 NParte con posibles

problemas de lectura no consistente

Lock() Unlock()

Page 14: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 1414

Problema de las Transacciones Problema de las Transacciones Bancarias IIBancarias II

Una Solución…Una Solución…Memoria, mensajes…Memoria, mensajes…

Solución con Solución con transacciones transacciones (Haskell)(Haskell) : :

x

a[]

y1 2 y+1 N

Log file

previo atomic{ if ( a[i]≠ a[x], a[y] “consistent(log_file)==true”){

a[x] = a[x] − K;a[y] = a[y] + K

} else retry

}

La sobrecarga se reduce a copiar el array original,

pero ahora las tareas pueden acceder

simultáneamente

Page 15: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 1515

Transacciones vs cerrojos IITransacciones vs cerrojos II

Una Solución…Una Solución…

Evitan la Evitan la inversión de prioridadinversión de prioridad que que los que que los cerrojos causan en las hebras: siempre se puede cerrojos causan en las hebras: siempre se puede abortar una transacción menos prioritaria abortar una transacción menos prioritaria

Es compatible programarlas con los Es compatible programarlas con los objetosobjetos Interbloqueos y bloqueos vivos evitados Interbloqueos y bloqueos vivos evitados

externamenteexternamenteTablas hash con operaciones Tablas hash con operaciones transaccionables: transaccionables:

inimplementables con cerrojos salvo que el inimplementables con cerrojos salvo que el proveedeor de la tabla hash prevea métodos proveedeor de la tabla hash prevea métodos específicos específicos

Memoria, mensajes…Memoria, mensajes…

Page 16: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 1616

VI. Computación de Alta VI. Computación de Alta ProductividadProductividad

Computación Computación Alta Product.Alta Product.

““Los supercomputadores de ayer son los Los supercomputadores de ayer son los computadores de sobremesa de hoy y computadores de sobremesa de hoy y serán los teléfonos de mañana”serán los teléfonos de mañana”

HPCS es un programa DARPA para los HPCS es un programa DARPA para los futuros Sistemas Concurrentes:futuros Sistemas Concurrentes:Cray propone Cray propone ChapelChapel como lenguaje de como lenguaje de

HPCSHPCSIBM con el lenguaje IBM con el lenguaje X10 X10 Sun está desarrollando Sun está desarrollando FortressFortress

Page 17: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 1717

Nuevos Lenguajes para HPCSNuevos Lenguajes para HPCS

Computación Computación Alta Product.Alta Product.

ChapelChapel, , X10X10 y y FortressFortress son muy parecidos: son muy parecidos:Abstracción de Espacio Direcciones Compartido Abstracción de Espacio Direcciones Compartido

(PGAS)(PGAS)Libera al programador de escribir protocolos Libera al programador de escribir protocolos

tediosostediososAplicaciones para un amplio rango de Aplicaciones para un amplio rango de

configuraciones: desde 1 multinúcleo hasta configuraciones: desde 1 multinúcleo hasta granjas de servidoresgranjas de servidores

Configuración adaptable basada en localesConfiguración adaptable basada en localesSólo descripción local de los algoritmosSólo descripción local de los algoritmosSimplificación programando, ganancia de Simplificación programando, ganancia de

productividadproductividad..

Page 18: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 1818

Paralelismo de Datos vs Paralelismo de Datos vs ControlControl

Computación Computación Alta Product.Alta Product.

Problema de la configuración de un Problema de la configuración de un multicomputador:multicomputador:

Global work queue

Koblenz

Köln Dortmund

Kasel

Frankfurt

D1

D2

D3

D4

D5D6

D7

BSBest solution

found

Global work queue

Koblenz

Köln Dortmund

Kasel

Frankfurt

D1

D2

D3

D4

D5D6

D7

BSBest solution

found

Paralelización Paralelización dirigida dirigida por controlpor control : : Asignación Asignación automática en buclesautomática en bucles

Paralelización dirigida Paralelización dirigida por datos: por datos: Distribución de datos Distribución de datos globales a “locales”globales a “locales”

La configuración no La configuración no es completamente es completamente automatizable!automatizable!

Page 19: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 1919

““Mapeando” DominiosMapeando” Dominios

Computación Computación Alta Product.Alta Product.

Distribución 1 bloque de datos entre Distribución 1 bloque de datos entre “locales”:“locales”:

const Dist = new dmap(new const Dist = new dmap(new Block(boundingBox=[1..4,1..8]));Block(boundingBox=[1..4,1..8]));

Se pasa como argumento a un Se pasa como argumento a un constructor de dominio:constructor de dominio:

var Dom: domain(2) dmapped var Dom: domain(2) dmapped Dist=[1..4,1..8];Dist=[1..4,1..8];

““Mapped Domain”: conjunto 2D de índices Mapped Domain”: conjunto 2D de índices en correspondencia con Dist en correspondencia con Dist

Si hay 8 “locales”, cada uno se encargará Si hay 8 “locales”, cada uno se encargará de procesar una región 2x2de procesar una región 2x2

Page 20: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 2020

VII. Paralelismo Dirigido por VII. Paralelismo Dirigido por TareasTareas

Propicia la óptima paralelización Propicia la óptima paralelización de código del tipo de código del tipo dirigida por dirigida por controlcontrol

El sistema de tiempo de ejecución es quien El sistema de tiempo de ejecución es quien se encarga de hacer corresponder tareas a se encarga de hacer corresponder tareas a hebras:hebras:Grupos tareas con poca carga, asignados a 1 Grupos tareas con poca carga, asignados a 1

hebrahebraLos hebras se ocultan a los programadores, Los hebras se ocultan a los programadores,

pero no la definición de las tareaspero no la definición de las tareas Ahora las estructuras de datos y los flujos Ahora las estructuras de datos y los flujos

de control se programan de forma de control se programan de forma monolíticamonolítica

Dirigido por TareasDirigido por Tareas

Page 21: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 2121

Arquitectura de programación Arquitectura de programación paralela en .NET Framework 4paralela en .NET Framework 4

Dirigido por TareasDirigido por TareasAgrega capacidades de consulta a C# y VB.

Divide el origen de datos en segmentos y lanza

consultas en cada segmento por hebras

independientesAsignar tareas a las hebras , administrar detalle de bajo nivel,

evita que la paralelización sea

ineficiente

Incluye clases colección simultáneas, primitivas de

sincronización ligeras y tipos de incialización

diferida

Page 22: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 2222

Task Parallel Library Task Parallel Library

Dirigido por TareasDirigido por Tareas

Creación y cancelación implícita de tareasCreación y cancelación implícita de tareasInvocación paralela mediante Invocación paralela mediante delegadosdelegados

definidos como definidos como lambda expresioneslambda expresionesEl número de tareas que se crea en 2do El número de tareas que se crea en 2do

plano con plano con Parallel.invoke()≠ num. Parallel.invoke()≠ num. hebrashebras

Creación y ejecución explícita de tareas:Creación y ejecución explícita de tareas:Los objetos-tareas exponen su estado a los Los objetos-tareas exponen su estado a los

usuariosusuariosSe pasan en el constructor Se pasan en el constructor delegados de delegados de

usuariousuario: métodos, anónimos y expresiones : métodos, anónimos y expresiones lambda lambda

Page 23: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 2323

Delegados y lambda Delegados y lambda expresiones expresiones

Dirigido por TareasDirigido por Tareas

Las lambda expresiones proporcionan el soporte Las lambda expresiones proporcionan el soporte formal para definir funciones anónimasformal para definir funciones anónimas

Sintaxis de lambda expresión que devuelve Sintaxis de lambda expresión que devuelve resultado:resultado:[captura](argumentos)->devuelve-tipo{cuerpo}[captura](argumentos)->devuelve-tipo{cuerpo}

Función que calcula una suma de 5 términos:Función que calcula una suma de 5 términos:std::vector<int> una_lista;std::vector<int> una_lista;int total=0;int total=0;for(int i=0;i<5;i++)una_lista.push.back(i);for(int i=0;i<5;i++)una_lista.push.back(i);std::for_each(begin(una_lista),std::for_each(begin(una_lista), end(una_lista),end(una_lista), [&total](int x){total += x;}[&total](int x){total += x;}););

Objeto de estado

Page 24: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 2424

Creación-inicio de tareas Creación-inicio de tareas

Dirigido por TareasDirigido por Tareas

Capturan sólo el valor final de las variables en los Capturan sólo el valor final de las variables en los bucles. Se soluciona definiendo 1 bucles. Se soluciona definiendo 1 objeto de estadoobjeto de estado a a en el constructor:en el constructor:

for(int= for(int= ii=0;i<arrayTareas.Length;i++){=0;i<arrayTareas.Length;i++){

arrayTareas[arrayTareas[ii]= new Task]= new Task((obj)=>((obj)=>

{ { DatosUsuarioDatosUsuario misDatos ( misDatos (DatosUsuarioDatosUsuario) obj;) obj;

misDatos.N_Hebra=Thread.Current.Thread.ManagerThreadId;misDatos.N_Hebra=Thread.Current.Thread.ManagerThreadId;

Console.Write(misDatos.Nombre,misDatos.Tiempo, Console.Write(misDatos.Nombre,misDatos.Tiempo, misDatos.N_Hebra);}//lambda expresiónmisDatos.N_Hebra);}//lambda expresión

new new DatosUsuarioDatosUsuario(){Nombre=(){Nombre=ii,Tiempo=DateTime.Ticks();},Tiempo=DateTime.Ticks();}

);//tarea creada);//tarea creada

arrayTareas[i].start();arrayTareas[i].start();

}}

Page 25: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 2525

Colecciones y estructuras Colecciones y estructuras para coordinaciónpara coordinación

Dirigido por TareasDirigido por Tareas

Clases de colección seguras, tipos de Clases de colección seguras, tipos de sincronización ligeros y tipos para la sincronización ligeros y tipos para la inicialización diferida:inicialización diferida:Clases Clases contenedorescontenedores con acceso sin bloqueos y con acceso sin bloqueos y

escalables en multinúcleos:escalables en multinúcleos: System.Collections.Concurrent.XXXSystem.Collections.Concurrent.XXX

Nuevos tipos de sincronización evitan los Nuevos tipos de sincronización evitan los bloqueos indiscriminados de las primitivas bloqueos indiscriminados de las primitivas para hebras:para hebras:SemaphoreSlim, Barriers, EventSlim, SemaphoreSlim, Barriers, EventSlim, SpinLock, SpinWait..SpinLock, SpinWait..

Page 26: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 2626

Programación asíncrona Programación asíncrona en .NET framework 4en .NET framework 4

Dirigido por TareasDirigido por Tareas

Utiliza operaciones asíncronas estructuradas Utiliza operaciones asíncronas estructuradas (APM):(APM): FileStream.BeginRead, FileStream.BeginRead, FileStream.EndRead …FileStream.EndRead …

Modelos basados en pares método/evento Modelos basados en pares método/evento (EAP):(EAP):WebClient.DownloadString.Async, WebClient.DownloadString.Async, WebClient.Download.Completed, …WebClient.Download.Completed, …

Las operaciones APM y EAP pueden hacerse Las operaciones APM y EAP pueden hacerse accesibles a los usuarios de TPL o bien se accesibles a los usuarios de TPL o bien se pueden implementar con objetos tareapueden implementar con objetos tarea

InstrucciónInstrucción FromAsync:FromAsync:crea un objeto tarea crea un objeto tarea para representar un parpara representar un par Begin/EndBegin/End

Page 27: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 2727

Comparativa lenguajes para Comparativa lenguajes para HPCSHPCS

Lenguaje

para HPCSPropietario

Modelo de Memoria

Concurrencia

multiresolución

Fortress Sun Systems Transaccional NO

Chapel CRAY TransaccionalSI

(forall, Begin/End)

X10 IBM TransaccionalSI

(Async)

Dirigido por TareasDirigido por Tareas

Page 28: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 2828

VIII. Decálogo para Programar VIII. Decálogo para Programar multinúcleosmultinúcleos

DecálogoDecálogo

Pensarás en ParaleloPensarás en ParaleloProgramarás con tareas, Programarás con tareas,

no con hebras no con hebrasDepurarás lo secuencial antesDepurarás lo secuencial antesNo utilizarás cerrojosNo utilizarás cerrojosTendrás el control de tu memoriaTendrás el control de tu memoriaEn lo antiguo no hay “salvación” En lo antiguo no hay “salvación” Diseñarás deseando tener más Diseñarás deseando tener más

núcleosnúcleos

Page 29: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 2929

La programación multihebra está en decadencia, se usa La programación multihebra está en decadencia, se usa sólo para controlar la latencia en la respuesta a peticiones sólo para controlar la latencia en la respuesta a peticiones en servidoresen servidores

La programación paralela dirigida por tareas y el La programación paralela dirigida por tareas y el paralelismo semi-implícito concitan actualmente la paralelismo semi-implícito concitan actualmente la máxima atenciónmáxima atención

El paso de mensajes (MPI, etc.) también ha entrado en El paso de mensajes (MPI, etc.) también ha entrado en decadencia, debido a que propicia un estilo de decadencia, debido a que propicia un estilo de programación demasiado tediosoprogramación demasiado tedioso

El espacio de direcciones compartido (PGAS) es El espacio de direcciones compartido (PGAS) es considerado de máxima actualidadconsiderado de máxima actualidad

Programar con cerrojos (locks) tiende a la obsolescencia, Programar con cerrojos (locks) tiende a la obsolescencia, debido a que suponen un estilo de programación de debido a que suponen un estilo de programación de demasiado bajo niveldemasiado bajo nivel

La memoria transaccional (STM) , de actualidad en HPCSLa memoria transaccional (STM) , de actualidad en HPCS

IX. ConclusionesIX. Conclusiones

ConclusionesConclusiones

Page 30: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 3030

-The Chapel Parallel Programming Language ( http://chapel.cray.com/ )

-X10: Performance and Productivity at Scale ( http://x10-lang.org/ )

-Project Fortress ( http://projectfortress.sun.com/ )

-“Unified Parallel C”. The High Performance Computing Laboratory – George Washington University ( http://upc.gwu.edu/ )

-“Task Parallel Library”. Microsoft ( http://msdn.microsoft.com/es-es/library/dd460717.aspx )

-Intel Threading Building Blocks for Open Source ( http://threadingbuildingblocks.org/ )

-“Scalable Software Transactional Memory for Global Address Space Architectures”. Sridharan,S.,Vetter,J.S.,Kogge,P.M. Future Technologies Group (2009)

-“Designing an Effective Hybrid Transactional Memory System” PhD Dissertation, Stanford (USA), Chí Chao Minh (2008)

-“Concurrency in the D Programming Language”. A. Alexandrescu (2010)

ReferenciasReferencias

Page 31: Concurrency or "Hard Computing"

U.Cádiz 23.03.2012 U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing"Concurrencia o "Hardcomputing" 3131

Gracias por la atención !

¿Preguntas?