![Page 2: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/2.jpg)
http://bit.ly/TPLCodeMotion
![Page 3: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/4.jpg)
¿POR QUÉ?Computación paralela
![Page 5: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/8.jpg)
BUSCANDO PARALELISMO EN NUESTRAS APLICACIONES
Computación paralela
![Page 9: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/12.jpg)
Luis [email protected] – Plain Concepts
Patrones• Patrones de código
• Fork / Join• Loop Parallel• Divide y vencerás• Productor / Consumidor• Pipeline• Asynchronous Agents
![Page 14: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/14.jpg)
TASK PARALLEL LIBRARYPresentamos
![Page 15: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/22.jpg)
PARALLEL LINQPLINQ
![Page 23: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/25.jpg)
ASYNC & AWAITWindows 8 Metro apps
![Page 26: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/27.jpg)
PROFILER & DEBUGGER
![Page 28: Computación paralela en plataforma Windows Luis Guerrero lguerrero@plainconcepts.com](https://reader033.vdocuments.co/reader033/viewer/2022051400/54d6357d497959bd1d8b4cbe/html5/thumbnails/28.jpg)
Gracias