Task Parallel Library 2014

22
@lluisfranco facebook/lluis.franco [email protected] Programación Paralela… ...y mucho más con Microsoft .NET Framework 4.5 Lluís Franco Microsoft MVP C#

description

Programación Paralela y mucho más con C# y Visual Studio 2013.

Transcript of Task Parallel Library 2014

Page 1: Task Parallel Library 2014

@lluisfrancofacebook/[email protected]

Programación Paralela…...y mucho más con Microsoft .NET Framework 4.5

Lluís FrancoMicrosoft MVP C#

Page 2: Task Parallel Library 2014

@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

Page 3: Task Parallel Library 2014

@lluisfranco

3

¿Que es la programación paralela?¿Esto?

Page 4: Task Parallel Library 2014

@lluisfranco

4

¿Esto?

¿Que es la programación paralela?

Page 5: Task Parallel Library 2014

@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:

Page 6: Task Parallel Library 2014

@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

Page 7: Task Parallel Library 2014

@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!!!

Page 8: Task Parallel Library 2014

@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

Page 9: Task Parallel Library 2014

@lluisfranco

9

Antes de empezar...

Vamos a aclarar algunos conceptos:

Processes ThreadsMultithreading

Asynchronous Parallelism

Page 10: Task Parallel Library 2014

@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.

Page 11: Task Parallel Library 2014

@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.

Page 12: Task Parallel Library 2014

@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:

Page 13: Task Parallel Library 2014

@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:

Page 14: Task Parallel Library 2014

@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.

Page 15: Task Parallel Library 2014

@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.

Page 16: Task Parallel Library 2014

@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?

Page 17: Task Parallel Library 2014

@lluisfranco

17

Esto SI es paralelismo

¿Multithreading vs. Parallelism?

Page 18: Task Parallel Library 2014

@lluisfranco

18

Y más vale que nos preparemos:

¿Multithreading vs. Parallelism?

Page 19: Task Parallel Library 2014

@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.

Page 20: Task Parallel Library 2014

@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

Page 21: Task Parallel Library 2014

@lluisfranco

21

Let’s rock!

{Code Time}

Page 22: Task Parallel Library 2014

@lluisfranco

22

That’s all folks!Dubtes? Dudas? Doubts?

Lluís Franco

@lluisfrancofacebook/[email protected]