Computación paralela en plataforma Windows Luis Guerrero [email protected]

28
Computación paralela en plataforma Windows Luis Guerrero [email protected] http://geeks.ms/blogs/luisguerrero/

Transcript of Computación paralela en plataforma Windows Luis Guerrero [email protected]

Page 1: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Computación paralela en plataforma Windows

Luis [email protected]://geeks.ms/blogs/luisguerrero/

Page 2: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

http://bit.ly/TPLCodeMotion

Page 3: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

3

Agenda

• El porqué de la computación paralela.

• Buscando paralelismo en nuestras aplicaciones.

• Plataforma de computación paralela en Visual Studio 2010 y Windows 8.

• Soporte de depuradores y profilers.

Page 4: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

¿POR QUÉ?Computación paralela

Page 5: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

Cada año hay procesadores más rápidos con más núcleos

Transitors

Clock Speed (MHz)

Power (W)

Perf/Clock (ILP)

Page 6: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

¿Para cuantos cores se está programando?

2007 2008 2009 2010 2011 2012 2013 2014

4000 4000

8000 8000

16000 16000

32000 32000

Page 7: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

¿Qué nivel de concurrencia necesita tu software para explotar sus capacidades?

SC/S

T/C

ASocket Cores / Socket Hardware

Threads / Core

App Concurrency

Page 8: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

BUSCANDO PARALELISMO EN NUESTRAS APLICACIONES

Computación paralela

Page 9: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

Buscando paralelismo• Buscando paralelismo en nuestras

aplicaciones a través de:• Organización por tareas• Organización por datos• Organización por orden

Page 10: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

Organización por Tareas• ¿Linear o recursivo?

• Tareas paralelas

• Divide y vencerás

• ¿Límite en las tareas?• ¿Demasiadas? – Sobrecarga del programador de tareas.

• ¿Pocas? – Infrautilización.

• Dependencias entre las tareas

• Planificar trabajo como tareas.

{}

{}

{}

{}

Page 11: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

Organización por datos• ¿Linear o recursivo?

• Descomposición geométrica• Datos recursivos

• ¿Tamaño del bloque de datos?• Demasiado grande – infrautilización• Demasiado pequeño – Sobrecarga

• Organización de los bloques• Tamaño de la caché de datos

{}

{}

{}

Page 12: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

Patrones• Patrones de código

• Fork / Join• Loop Parallel• Divide y vencerás• Productor / Consumidor• Pipeline• Asynchronous Agents

Page 13: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

Pattern: Fork / Join

Partition Execute Merge

Page 14: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

TASK PARALLEL LIBRARYPresentamos

Page 15: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

Task• Es la nueva unidad mínima de ejecución en

TPL, ya no se utiliza Thread.

• Las tareas (Task) envuelven la ejecución del código, para su ejecución concurrente.

Page 16: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

Creación de Task• Task task = new Task(() => { });• Task<DataItem> taskWithResult = new Task<DataItem>(() => { return new DataItem(); });

• Esto sólo define el objeto Task, no ejecuta el código.

Page 17: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

Creación de Task II• Task.Factory.StartNew(() => { });• Task<int>.Factory.StartNew(() => { return 42; });

• Este código define y pone a ejecutar el objeto Task.

Page 18: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

Trabajando con tareas• task.Start();• task.RunSynchronously();• task.Status == TaskStatus.Running;• task.IsCompleted;• task.IsFaulted;

Page 19: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

Enlazando tareasTask task = new Task(() => { });

task.ContinueWith((previousTask) => { });

Page 20: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

Soporte de cancelación de tareas• La cancelación ha sido uno de los problemas

tradicionales de la programación concurrente.

• No se puede interrumpir la ejecución en cualquier momento, puede ocasionar bloqueos inesperados.

• Se utiliza la clase CancellationToken.

Page 21: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

Uso de bloqueosReaderWriterLockSlim rwls = new ReaderWriterLockSlim();

rwls.EnterReadLock();

try

{

// tu código aquí

}

finally

{

rwls.ExitReadLock();

}

Page 22: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

PARALLEL LINQPLINQ

Page 23: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

PLINQ

var q = from p in people        where p.Name == queryInfo.Name && p.State == queryInfo.State && p.Year >= yearStart && p.Year <= yearEnd        orderby p.Year ascending        select p;

.AsParallel()

Page 24: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

Más opciones de PLINQlist.AsParallel().WithCancellation(new CancellationToken(false));

list.AsParallel().WithDegreeOfParallelism(Environment.ProcessorCount);

list.AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism);

list.AsParallel().WithMergeOptions(ParallelMergeOptions.AutoBuffered);

Page 25: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

ASYNC & AWAITWindows 8 Metro apps

Page 26: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Luis [email protected] – Plain Concepts

Async & await• Async permite especificar que un método es

de ejecución asíncrona. Un método asíncrono siempre devolverá un Task o Task<TResult>.

• Await especifica que el flujo de ejecución debe esperar a ese método asíncrono.

Page 27: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

PROFILER & DEBUGGER

Page 28: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com

Gracias