Post on 25-Jan-2015
description
@lluisfrancofacebook/lluis.francohello@lluisfranco.com
Programación Paralela…...y mucho más con Microsoft .NET Framework 4.5
Lluís FrancoMicrosoft MVP C#
@lluisfranco
2
Agenda – Programación Paralela
1. Qué es y porque la necesito?2. Bucles con esteroides con la clase Parallel3. Extendiendo LINQ con PLINQ4. Tareas asíncronas con la clase Task5. Solucionar problemas de Concurrencia6. New C#5 Keywords: async & await7. Questions & Answers8. Beer time
@lluisfranco
3
¿Que es la programación paralela?¿Esto?
@lluisfranco
4
¿Esto?
¿Que es la programación paralela?
@lluisfranco
5
“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”.
Wikipedia dixit:
@lluisfranco
6
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
@lluisfranco
Un par de problemas a la vista…10,000
1,000
100
10
1
‘70 ‘80 ‘90 ‘00 ‘10
Pow
er D
ensi
ty (
W/c
m2)
40048008
8080
80858086
286386
486
Pentium® processors
Hot Plate
Nuclear Reactor
Rocket Nozzle
Sun’s SurfaceEvolución del calor (vatios x cm2):Evolución del escalado de frecuencia:
1990 1993 1997 2001 2005 2010
10 GHz
1GHz
400 MHz
600 MHz
2 GHz
3 GHz 3.6 GHz3.8 GHz
1 GHz
1) Cada vez cuesta más esfuerzo hacer un procesador más rápido2) 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!!!
@lluisfranco
8
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 unatecnología diferente
para seguir realizando cálculos a ese nivel».
Stephen Hawking
@lluisfranco
9
Antes de empezar...
Vamos a aclarar algunos conceptos:
Processes ThreadsMultithreading
Asynchronous Parallelism
@lluisfranco
10
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.
@lluisfranco
11
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.
@lluisfranco
12
¿Multithreading vs. Parallelism?
• 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!
Multithreading:
@lluisfranco
13
¿Multithreading vs. Parallelism?
3 1 1 1
Una aplicación puede incrementar el número de threads para producir la sensación de que varias acciones se ejecutan al mismo tiempo.
Multithreading:
@lluisfranco
14
¿Multithreading vs. Parallelism?
1 1 1 1
Multithreading:
11
En términos absolutos, el primer proceso ha tenido mucho más tiempo de CPU que el resto de procesos.Pero si hay un solo core no hay paralelismo real.
@lluisfranco
15
¿Multithreading vs. Parallelism?
1 1 1 1
Parallelism:
11
Es aplicar multithreading en un ordendor con varios cores, de forma que varios threads se pueden ejecutar al mismo tiempo.
@lluisfranco
16
• 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!
¿Multithreading vs. Parallelism?
@lluisfranco
17
Esto SI es paralelismo
¿Multithreading vs. Parallelism?
@lluisfranco
18
Y más vale que nos preparemos:
¿Multithreading vs. Parallelism?
@lluisfranco
19
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.
@lluisfranco
20
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
•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.
Concurrent
•Proporcionan mecanismos para compartir colecciones y elementos entre varios hilos de ejecución (Thread-safe).
Async/Await
•Nuevas Keywords en C# para facilitar el uso de tareas asíncronas sin preocuparse de contextos ni de callbacks.•Syntax sugar
@lluisfranco
21
Let’s rock!
{Code Time}
@lluisfranco
22
That’s all folks!Dubtes? Dudas? Doubts?
Lluís Franco
@lluisfrancofacebook/lluis.francohello@lluisfranco.com