computación paralela en plataforma windows luis guerrero [email protected]
TRANSCRIPT
Computación paralela en plataforma Windows
Luis [email protected]://geeks.ms/blogs/luisguerrero/
http://bit.ly/TPLCodeMotion
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.
¿POR QUÉ?Computación paralela
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)
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
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
BUSCANDO PARALELISMO EN NUESTRAS APLICACIONES
Computación paralela
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
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.
{}
{}
{}
{}
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
{}
{}
{}
Luis [email protected] – Plain Concepts
Patrones• Patrones de código
• Fork / Join• Loop Parallel• Divide y vencerás• Productor / Consumidor• Pipeline• Asynchronous Agents
TASK PARALLEL LIBRARYPresentamos
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.
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.
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.
Luis [email protected] – Plain Concepts
Trabajando con tareas• task.Start();• task.RunSynchronously();• task.Status == TaskStatus.Running;• task.IsCompleted;• task.IsFaulted;
Luis [email protected] – Plain Concepts
Enlazando tareasTask task = new Task(() => { });
task.ContinueWith((previousTask) => { });
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.
Luis [email protected] – Plain Concepts
Uso de bloqueosReaderWriterLockSlim rwls = new ReaderWriterLockSlim();
rwls.EnterReadLock();
try
{
// tu código aquí
}
finally
{
rwls.ExitReadLock();
}
PARALLEL LINQPLINQ
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()
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);
ASYNC & AWAITWindows 8 Metro apps
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.
PROFILER & DEBUGGER
Gracias