18

Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

Embed Size (px)

Citation preview

Page 1: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán
Page 2: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

Andrés IturraldeConsultor [email protected]://aiturralde.com

Page 3: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

¿Porqué debería importarme el paralelismo?

• Los computadores están cambiando– La ley de Moore está tomando un giro

importante– Tecnologías SMP y Multi Core

CPU

Memoria

CPU CPU

Core

Memoria

Core

• Los usuarios están cambiando– Esperan aplicaciones rápidas y responsivas

Page 4: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

¿A qué se refería Moore?

Dual-Core Itanium 2

Tendencias de CPU’s Intel (Fuentes: Intel, Wikipedia, K. Olukotun)

Pentium

386

Pentium 4

Page 5: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

¿Qué debo hacer para esto?

• Paralelizar!

Thread B Thread C

QuantumExpirado

Acceso a Memoria

OperaciónI/O

Thread A

“Estado Wait”

Page 6: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

DEMO

Page 7: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

Como nos ayuda el paralelismo

Secuencial

Paralela Op1 Op2 Op3 Op4

Tiempo

Op5

CPU1

CPU1

CPU2

CPU3

CPU4

Page 8: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

DEMO

Page 9: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

• Programación en multiples hilos es “dificil” hoy– Realizable por ciertos subgrupos de especialistas senior– Patrones paralelos no son frecuentes, bien conocidos, ni

fáciles de implementar– Muchos problemas potenciales

Estoy convencido… ¿ahora qué?

• Las empresas tienen pocos deseos de ir “hacia la médula” del asunto– Los mejores desarrolladores deben enfocarse en valor de

negocio, no en concurrencia– Se necesitan simples maneras de permitir a todos los

desarrolladores escribir código concurrente

Page 10: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

Soporte de paralelismo en .NET 4 y VS2010

Visual Studio IDE

Herramientas

.NET Framework 4

Parallel Debugger

Concurrency Visualizer

Thread Pool

Task Scheduler

Task Parallel Library

Parallel LINQ

Sync Primitives

Concurrent Collections

Runtime Concurrencia Manejada y Modelos de Programación

CLR

Page 11: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

Extensiones Paralelas

• Nuevas API’s de paralelismos en .NET 4– Loops Paralelos– Parallel LINQ– Paralelismo fino (basado en Tareas)– Nuevos primitivos de sincronización y colecciones

concurrentes• Mejoras en el ThreadPool

Page 12: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

Metas del TPL

• Hacer el paralelismo Simple– Implementando escenarios comunes– Pasando data de entrada y de salida de las operaciones paralelas– Manejando errores en operaciones paralelas– Interrumpiendo trabajos en progreso

• Haciendo el paralelismo Eficiente– Robando trabajos y tamaño variable de pedazos de trabajos– Auto ajustando el tamaño del ThreadPool para soportar cargas

variables– Reduciendo gastos generales para el trabajo paralelo

• Dando a los desarrolladores Control, si así lo desean– Opciones de creación y continuidad– Agendamiento de tareas fuera del ThreadPool

Page 13: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

¿Qué es una Tarea?

• Representación de una operación asíncrona– Bloque ligero de paralelismo– Una forma de obtener un valor (o error) que existirá

en el futuro

• Un consistente set de abstracciones sobre el cual programar– Una manera sencilla de utilizar el ThreadPool para

paralelismo– Eficiente para paralelismo «rápido»– También eficiente para actividades de larga duración

Page 14: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

DEMO

Page 15: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

Tareas y Colas

Cola Global Colas Locales

Worker Thread #1

Worker Thread #2

Thread App.

Worker Thread #n

Task #1

Task #5Task #4Task #3

Task #2

Page 16: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

DEMO

Page 17: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán

Recursos

• Visual Studio 2010– http://www.microsoft.com/visualstudio/en-us/download

• Guía para programación paralela– http://parallelpatterns.codeplex.com/

• Parallel Programming with .NET– http://blogs.msdn.com/b/pfxteam/

• Blog Andrés Iturralde– http://aiturralde.com

Page 18: Como hacer que tus aplicaciones saquen mejor provecho a los procesadores disponibles hoy y a los que vendrán