Proyecto integrador. Las TIC en la sociedad S4.pptx
Task Parallel Library 2014
1. Lluís Franco
Microsoft MVP C#
Programación Paralela…
...y mucho más con Microsoft .NET Framework 4.5
@lluisfranco
facebook/lluis.franco
hello@lluisfranco.com
2. @lluisfranco
Agenda – Programación Paralela
1.
2.
3.
4.
5.
6.
7.
8.
Qué es y porque la necesito?
Bucles con esteroides con la clase Parallel
Extendiendo LINQ con PLINQ
Tareas asíncronas con la clase Task
Solucionar problemas de Concurrencia
New C#5 Keywords: async & await
Questions & Answers
Beer time
2
5. @lluisfranco
Wikipedia dixit:
“La computación paralela es una técnica de programación en la que
muchas instrucciones se ejecutan simultáneamente. Se basa en el
principio de que los problemas grandes se pueden dividir en partes
más pequeñas que pueden resolverse de forma concurrente”.
“Existen varios tipos de computación paralela: paralelismo a nivel de
bit, paralelismo a nivel de instrucción, paralelismo de datos y
paralelismo de tareas”.
“Durante muchos años, la computación paralela se ha aplicado en la
computación de altas prestaciones, pero el interés en ella ha
aumentado en los últimos años debido a las restricciones físicas que
impiden el escalado en frecuencia”.
5
6. @lluisfranco
Ley de Moore:
Cada 2 años se duplica el número de componentes en un circuito integrado.
Gordon E. Moore el 19/04/1965, Co-fundador de Intel
6
7. @lluisfranco
Un par de problemas a la vista…
Evolución del calor (vatios x cm 2):
Evolución del escalado de frecuencia:
Sun’s Surface
10 GHz
3 GHz
3.6 GHz
3.8 GHz
2 GHz
1GHz
1 GHz
Power Density (W/cm2)
10,000
Rocket Nozzle
1,000
Nuclear Reactor
100
10
4004
8008
600 MHz
‘70
1990
1993
1997
2001
2005
286
Hot Plate
Pentium® processors
386
486
8080
1
400 MHz
8086
8085
‘80
‘90
‘00
‘10
2010
1) Cada vez cuesta más esfuerzo hacer un procesador más rápido
2) El calor generado empieza a ser un verdadero problema
Incrementar la frecuencia un 5% o un 10% cada año tiene un coste de casi doblar
la temperatura.
El aumento de temperatura disminuye la velocidad del transistor.
El aumento de temperatura aumenta las fugas en los transistores.
Batería!!!
8. @lluisfranco
Conclusión:
• La ley de Moore ha muerto:
– Tecnología actual 14 nanómetros
– Límite 7-5 nanómetros (físico!)
– Se alcanzará entre 2016-2018
• Solución:
– Más núcleos
– Computación en paralelo
– INTEL / AMD / NVIDIA (CUDA)
«La materia presenta
efectos cuánticos que
harían necesaria una
tecnología diferente
para seguir realizando
cálculos a ese nivel».
Stephen Hawking
8
10. @lluisfranco
Sobre procesos e hilos…
Procesos (processes) en un sistema operativo
• Un proceso proporciona los recursos
necesarios para ejecutar un programa.
• Contiene un espacio de memoria
virtual, código ejecutable, un contexto
de seguridad, un identificador de
proceso único, variables de entorno, y
al menos un thread de ejecución.
• Cada proceso se inicia con un único
thread, a menudo llamado thread
principal, pero puede crear threads
adicionales.
10
11. @lluisfranco
Sobre procesos e hilos…
Hilos (threads) en un sistema operativo
• Un thread es la entidad dentro de un
proceso que realmente ejecuta el código.
• Todos los threads de un proceso
comparten los recursos y memoria virtual
de proceso.
• Además, cada thread mantiene
controladores de excepciones, una
prioridad de
programación, almacenamiento local, y
un identificador de thread único.
• A más threads, más tiempo de CPU.
11
12. @lluisfranco
¿Multithreading vs. Parallelism?
Multithreading:
• Es crear varios threads en una aplicación (proceso)
• Permite realizar tareas asíncronas al ‘mismo tiempo’
(aunque realmente no es así siempre).
• No es trivial:
–
–
–
–
Más complejidad del desarrollo
Depuración caótica
Acceso prohibido a la interfaz de usuario.
Jamás en días de resaca!
12
16. @lluisfranco
¿Multithreading vs. Parallelism?
• Conclusión: Se parece pero no es lo mismo
• Podemos tener multithreading en una estación
con un solo core, pero sólo podemos tener
paralelismo real en una estación multi-core.
• Error clásico: Como desarrolladores, utilizar
paralelismo en una máquina virtual (con un
solo core), y nos pensamos que estamos
haciendo paralelismo ->NOR!
16
19. @lluisfranco
Ok vale, soy tuyo
Las ventajas son claras. Peeeeeeero…
• La programación paralela ha estado tradicionalmente
asociada a desarrolladores de perfil técnico muy alto
(cuatro zumbaos).
• Las empresas de desarrollo prefieren centrarse en la
lógica de su negocio, no en éstos detalles técnicos.
Pues la buena noticia es que…
• La versión 4.5 del .NET Framework proviene de ciertas
herramientas para que la computación paralela no sea
algo reservado a estos 4 frikazos.
19
20. @lluisfranco
Las demos de hoy…
Parallel
• Optimizado para
situaciones en las
que se realiza la
misma operación
sobre los
elementos de un
origen de
colección o
matriz.
LINQ - PLINQ
• Proporciona
extensiones del
lenguaje para
poder utilizar
paralelismo en
nuestras
consultas LINQ.
Sencillo y muy
potente.
TASKS - Task
Concurrent
Async/Await
• Una tarea
representa una
operación
asíncrona, se
asemeja a la
creación de un
Thread o un
ThreadPool, pero
a un nivel más
alto de
abstracción.
• Proporcionan
mecanismos para
compartir
colecciones y
elementos entre
varios hilos de
ejecución
(Thread-safe).
• Nuevas Keywords
en C# para
facilitar el uso de
tareas asíncronas
sin preocuparse
de contextos ni
de callbacks.
• Syntax sugar
20