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.
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
Concurrency or "Hard Computing"
1. Quincena
Ingeniería 2012
Concurrencia o
“Hardcomputing”
Manuel I. Capel Tuñón
Departmento Lenguajes y Sistemas,
Universidad de Granada,
ETSIIT - Aynadamar Campus,
18071 Granada.
manuelcapel@ugr.es
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 1
2. Índice
Historia de la Concurrencia
Paralelismo, Sincronización y Máximo Rendimiento
”To Thread or Not to Thread”
Memoria Compartida, Paso de Mensajes y Coordinación
Una Solución de Compromiso
Computación de Alta Productividad
Paralelismo Dirigido por Tareas
Decálogo para programar multinúcleos
Conclusiones
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 2
3. I. Historia de la Historia
Concurrencia Objetos y Concurrencia
Modelos de “Monitores”
Mezcla de paradigmas:
funcional, concurrente,
2001
Orca (Easdown, 1995 )
Época dorada de los 1993 Python (Tanembaum A
2001) B
“programadores de
sistemas” Amoeba (Tanembaum, S
…1985 WWW (Berners-Lee, 2000) T
Caillau, 1991) R
Java (Goslin et al. 1994) A
Diseño sistemas Erlang (Eriksson 1986) C
operativos Occam (May 1983) C
multiprogramación …1980 I
Ada (DoD 1980, 1995)
Ó
… 1970 Concurrent Pascal (Brinch-Hansen 1982) N
Mesa (Lampson, Redell 1980)
Modula 2, Modula 3 (Wirth 1980)
Actor Model (Hewitt 1970)
RC4000 (Brinch-Hansen 1970) Evolución de los
196
8 “Proceso” (Wulf 1969) lenguajes de la
THE (Dijkstra 1968) Prog. Concurrente
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 3
4. Historia
Procesadores Multinúcleo
El computador puede obtener con varias tareas a
la vez la misma eficiencia que con 1 tarea
Ley Amdahl (1967):
1
A( f , S) =
(1 − f ) + ( f )
S
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 4
5. Historia
Procesadores Multinúcleo II
Ley Amdahl no sirve para arquitecturas masivas-
paralelas sobre grandes conjuntos de datos
Ley Gustafson-Barsis: A ( f , S ) = s ' + ( p ' × n)
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 5
6. Paralelismo, Sincron..
II. Paralelismo, Sincronización y
Máximo Rendimiento
¿Se puede
obtener el Reducción de latencia: creación dinámica
máximo
rendimiento
paralelo sin de hebras de ejecución en servidores
utilizar hebras
ni paso de
mensajes? Impedir condiciones de carrera en acceso
a datos comunes: paso de mensajes
“We cannot longer count on the speed of
processors increasing exponentially…we
have to find ways to take advantage of
increasingly abundant number of cores”
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 6
7. Multithreading
El esfuerzo del programador
tendría que centrarse más
III. “To Thread or Not to Thread”
en identificar el potencial de
paralelización del programa
que en programar un
Programación paralela con múltiples hebras
complejo protocolo para
no escala con el número degestionar los hebras,
núcleos
equilibrar la carga de los
Se puede adoptar un estilo SPMD o SIMD, que
núcleos, etc.
escala mejor
Problemas adicionales:
No siempre el código susceptible de
paralelización posee la misma granularidad
Difícil programación: crear pools de hebras,
asignarles tareas, equilibrar la carga …
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 7
8. Memoria, mensajes…
IV.Memoria Compartida, Paso de Mensaj
y Coordinación
Comunicación a través de la memoria de los procesos
produce “condiciones de carrera”
Se pueden sincronizar los accesos (semáforos…), pero
aparecen bloqueos vivos e interbloqueos
Resultado previsible: muy baja productividad
Sustituir secciones críticas y sus protocolos por colas de
mensajes (fifos, ...)
Tipo de comunicación que escala bien en multinúcleos
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 8
9. Memoria, mensajes…
“message passing is harmful to
parallel programming as the goto
¿Considerando el paso de mensajes
is harmful to sequential
programming” (Gorlatch)
pernicioso para PP?
Comunicación con Paso de Mensajes (CPM) ,
inadecuada con paralelismo dirigido por los datos y
puede producir inversión de control
El programa puede degenerar en un conjunto de
manejadores de hebras de activación imprevisible
Similar a programar con saltos incondicionales de
control: el flujo de mensajes deviene incontrolable!
El esfuerzo de escribir un programa es muy alto
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 9
10. Memoria, Solución…
Una mensajes…
V. Una Solución de Compromiso
Software Transactional Memory (TSM), nuevo
modelo de comunicación/sincronización de Haskell
Concepto de bloque atómico:
Similar a las RCC del lenguaje Edison,
Sin condiciones de carrera entre hebras
STM escala bien con núcleos
No más “locks” (cerrojos)
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 10
11. Memoria, Solución…
Una mensajes…
Transacciones vs cerrojos
Series de operaciones sobre memoria compartida, de
principio a fin, valores intermedios vars. no son visibles
STM es una primitiva concurrente optimista
No se comprueba la consistencia antes de escribir
Sino, si van a comprometer los cambios realizados
Siempre se puede abortar una transición, antes de
comprometer los cambios
Aumentan la concurrencia: diferentes tareas pueden
modificar simultáneamente regiones de memoria
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 11
12. Memoria, Solución…
Una mensajes…
Problema de las Transacciones
Bancarias
Thread P2::
var Suma=0; i=1; Error:= false;
int a[1..n];
{Suma= a[1]+a[2]+ ... a[i-1]}
{TOT==a[1]+...+a[n]== while (i <= n) {
cte} B1 : {Suma== a[1]+...a[i−1],i< n}
Thread P1:: S2 : Suma = Suma + a[i];
A1:{a[x]==X,a[y]== Y} B2 : {Suma== a[1]+...a[i−1]+a[i]}
i= i+1;
S1:< a[x] = a[x] − K;
B3 : {Suma== a[1]+ ...a[i−1]}
a[y] = a[y] + K > }
A2:{a[x]== X − K, {Suma ==a[1] + a[2] + ...a[n]}
a[y]==y+K} if S<>TOT then Error=true
El estado intermedio no
debe ser visible a P2
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 12
13. Memoria, Solución…
Una mensajes…
Problema de las Transacciones
Bancarias II
Solución con cerrojos :
a[]
1 2 x y y+1 N
Parte con posibles problemas
Lock() de lectura no consistente
Unlock()
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 13
14. Memoria, Solución…
Una mensajes…
Problema de las Transacciones
Bancarias II
La sobrecarga se reduce a
copiar el array original, pero
Solución con transacciones (Haskell) :
ahora las tareas pueden
acceder simultáneamente
a[]
1 2 x y 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
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 14
}
15. Memoria, Solución…
Una mensajes…
Transacciones vs cerrojos II
Evitan la inversión de prioridad que que los cerrojos
causan en las hebras: siempre se puede abortar una
transacción menos prioritaria
Es compatible programarlas con los objetos
Interbloqueos y bloqueos vivos evitados externamente
Tablas hash con operaciones transaccionables:
inimplementables con cerrojos salvo que el proveedeor
de la tabla hash prevea métodos específicos
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 15
16. Computación
Alta Product.
VI. Computación de Alta
Productividad
“Los supercomputadores de ayer son los
computadores de sobremesa de hoy y serán los
teléfonos de mañana”
HPCS es un programa DARPA para los futuros
Sistemas Concurrentes:
Cray propone Chapel como lenguaje de HPCS
IBM con el lenguaje X10
Sun está desarrollando Fortress
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 16
17. Computación
Alta Product.
Nuevos Lenguajes para HPCS
Chapel, X10 y Fortress son muy parecidos:
Abstracción de Espacio Direcciones Compartido (PGAS)
Libera al programador de escribir protocolos tediosos
Aplicaciones para un amplio rango de configuraciones:
desde 1 multinúcleo hasta granjas de servidores
Configuración adaptable basada en locales
Sólo descripción local de los algoritmos
Simplificación programando, ganancia de productividad.
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 17
18. Computación
Alta Product.
Paralelismo de Datos vs
Control
Problema de la configuración de un multicomputador:
D2 Dortmund
Köln
Paralelización dirigida por D1 D4
D7
control : Asignación Koblenz
D3 Kasel
automática en bucles D6 D5
Frankfurt
Paralelización dirigida por Global work queue
BS
datos: Distribución de Best solution
datos globales a “locales” found
La configuración no es
completamente
automatizable!
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 18
19. Computación
Alta Product.
“Mapeando” Dominios
Distribución 1 bloque de datos entre “locales”:
const Dist = new dmap(new
Block(boundingBox=[1..4,1..8]));
Se pasa como argumento a un constructor de
dominio:
var Dom: domain(2) dmapped
Dist=[1..4,1..8];
“Mapped Domain”: conjunto 2D de índices en
correspondencia con Dist
Si hay 8 “locales”, cada uno se encargará de
procesar una región 2x2
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 19
20. Dirigido por Tareas
VII. Paralelismo Dirigido por
Tareas
Propicia la óptima paralelización
de código del tipo dirigida por control
El sistema de tiempo de ejecución es quien se
encarga de hacer corresponder tareas a hebras:
Grupos tareas con poca carga, asignados a 1 hebra
Los hebras se ocultan a los programadores, pero
no la definición de las tareas
Ahora las estructuras de datos y los flujos de
control se programan de forma monolítica
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 20
21. Agrega capacidades de Dirigido por Tareas
Arquitectura de programación
consulta a C# y VB.
Divide el origen de datos en
paralela en .NET Framework 4
segmentos y lanza consultas
en cada segmento por hebras
independientes
Asignar tareas a las
hebras , administrar detalle Incluye clases colección
de bajo nivel, evita que lasimultáneas, primitivas de
paralelización sea sincronización ligeras y tipos
ineficiente de incialización diferida
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 21
22. Dirigido por Tareas
Task Parallel Library
Creación y cancelación implícita de tareas
Invocación paralela mediante delegados definidos
como lambda expresiones
El número de tareas que se crea en 2do plano
con Parallel.invoke()≠ num. hebras
Creación y ejecución explícita de tareas:
Los objetos-tareas exponen su estado a los usuarios
Se pasan en el constructor delegados de usuario:
métodos, anónimos y expresiones lambda
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 22
23. Dirigido por Tareas
Delegados y lambda
expresiones
Las lambda expresiones proporcionan el soporte formal
para definir funciones anónimas
Sintaxis de lambda expresión que devuelve resultado:
Objeto de estado
[captura](argumentos)->devuelve-tipo{cuerpo}
Función que calcula una suma de 5 términos:
std::vector<int> una_lista;
int total=0;
for(int i=0;i<5;i++)una_lista.push.back(i);
std::for_each(begin(una_lista),
end(una_lista),
[&total](int x){total += x;});
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 23
24. Dirigido por Tareas
Creación-inicio de tareas
Capturan sólo el valor final de las variables en los bucles. Se
soluciona definiendo 1 objeto de estado a en el constructor:
for(int= i=0;i<arrayTareas.Length;i++){
arrayTareas[i]= new Task((obj)=>
{ DatosUsuario misDatos (DatosUsuario) obj;
misDatos.N_Hebra=Thread.Current.Thread.ManagerThreadId;
Console.Write(misDatos.Nombre,misDatos.Tiempo,
misDatos.N_Hebra);}//lambda expresión
new DatosUsuario(){Nombre=i,Tiempo=DateTime.Ticks();}
);//tarea creada
arrayTareas[i].start();
}
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 24
25. Dirigido por Tareas
Colecciones y estructuras
para coordinación
Clases de colección seguras, tipos de sincronización
ligeros y tipos para la inicialización diferida:
Clases contenedores con acceso sin bloqueos y
escalables en multinúcleos:
System.Collections.Concurrent.XXX
Nuevos tipos de sincronización evitan los bloqueos
indiscriminados de las primitivas para hebras:
SemaphoreSlim, Barriers, EventSlim,
SpinLock, SpinWait..
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 25
26. Dirigido por Tareas
Programación asíncrona
en .NET framework 4
Utiliza operaciones asíncronas estructuradas (APM):
FileStream.BeginRead, FileStream.EndRead …
Modelos basados en pares método/evento (EAP):
WebClient.DownloadString.Async,
WebClient.Download.Completed, …
Las operaciones APM y EAP pueden hacerse
accesibles a los usuarios de TPL o bien se pueden
implementar con objetos tarea
Instrucción FromAsync:crea un objeto tarea para
representar un par Begin/End
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 26
27. Dirigido por Tareas
Comparativa lenguajes para
HPCS
Lenguaje Modelo de Concurrencia
Propietario Memoria
para HPCS multiresolución
Fortress Sun Systems Transaccional NO
SI
Chapel CRAY Transaccional (forall,
Begin/End)
SI
X10 IBM Transaccional (Async)
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 27
28. Decálogo
VIII. Decálogo para Programar
multinúcleos
Pensarás en Paralelo
Programarás con tareas,
no con hebras
Depurarás lo secuencial antes
No utilizarás cerrojos
Tendrás el control de tu memoria
En lo antiguo no hay “salvación”
Diseñarás deseando tener más núcleos
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 28
29. Conclusiones
IX. Conclusiones
La programación multihebra está en decadencia, se usa sólo para
controlar la latencia en la respuesta a peticiones en servidores
La programación paralela dirigida por tareas y el paralelismo semi-
implícito concitan actualmente la máxima atención
El paso de mensajes (MPI, etc.) también ha entrado en
decadencia, debido a que propicia un estilo de programación
demasiado tedioso
El espacio de direcciones compartido (PGAS) es considerado de
máxima actualidad
Programar con cerrojos (locks) tiende a la obsolescencia, debido a
que suponen un estilo de programación de demasiado bajo nivel
La memoria transaccional (STM) , de actualidad en HPCS
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 29
30. Referencias
-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)
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 30
31. Gracias por la atención !
¿Preguntas?
U.Cádiz 23.03.2012 Concurrencia o "Hardcomputing" 31
Notes de l'éditeur
Gustafson's law (also known as Gustafson-Barsis' law) follows the argument that Amdahl's law did not adequately represent massively parallel architectures that operate on very large data sets, where smaller scales of parallelism would not provide solutions in tractable amounts of time . Here, the computation problem size changes dramatically with the dramatic increase in processors (núcleos); it is not assumed that the computation problem size will remain constant. Instead, the ratio of parallelized work to serialized work approaches one [ Gustafson88 ]. The law is described by the equation in Figure 6 below, where s' is the serial time spent on the parallel system, p' is the parallel time spent on the parallel system, and n is the number of processors