280 likes | 413 Views
Computación paralela en plataforma Windows. Luis Guerrero lguerrero@plainconcepts.com http://geeks.ms/blogs/luisguerrero/. http://bit.ly/ TPLCodeMotion. Agenda. El porqué de la computación paralela. Buscando paralelismo en nuestras aplicaciones.
E N D
Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com http://geeks.ms/blogs/luisguerrero/
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.
Computación paralela ¿Por qué?
Cada año hay procesadores más rápidos con más núcleos • Transitors • Clock Speed (MHz) • Power (W) • Perf/Clock (ILP)
¿Qué nivel de concurrencia necesita tu software para explotar sus capacidades? C/S S T/C A App Concurrency Cores / Socket Socket Hardware Threads / Core
Computación paralela Buscando paralelismo en nuestras aplicaciones
Buscando paralelismo • Buscando paralelismo en nuestras aplicaciones a través de: • Organización por tareas • Organización por datos • Organización por orden
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.
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
Patrones • Patrones de código • Fork / Join • LoopParallel • Divide y vencerás • Productor / Consumidor • Pipeline • AsynchronousAgents
Presentamos TaskParallel Library
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.
Creación de Task • Tasktask = newTask(() => { }); • Task<DataItem> taskWithResult = newTask<DataItem>(() => { returnnewDataItem(); }); • Esto sólo define el objeto Task, no ejecuta el código.
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.
Trabajando con tareas • task.Start(); • task.RunSynchronously(); • task.Status== TaskStatus.Running; • task.IsCompleted; • task.IsFaulted;
Enlazando tareas • Tasktask = newTask(() => { }); • task.ContinueWith((previousTask) => { });
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.
Uso de bloqueos • ReaderWriterLockSlimrwls = newReaderWriterLockSlim(); • rwls.EnterReadLock(); • try • { • // tucódigoaquí • } • finally • { • rwls.ExitReadLock(); • }
PLINQ Parallel LINQ
PLINQ var q = from p in people where p.Name == queryInfo.Name && p.State == queryInfo.State && p.Year >= yearStart && p.Year <= yearEnd orderbyp.Year ascending select p; .AsParallel()
Más opciones de PLINQ • list.AsParallel().WithCancellation(newCancellationToken(false)); • list.AsParallel().WithDegreeOfParallelism(Environment.ProcessorCount); • list.AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism); • list.AsParallel().WithMergeOptions(ParallelMergeOptions.AutoBuffered);
Windows 8 Metro apps Async & await
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.