jueves, 8 de noviembre de 2012

Paralelismo de datos

El paralelismo de datos hace referencia a los escenarios en los que la misma operación se realiza simultáneamente (es decir, en paralelo) en elementos de una colección o matriz de origen. Varias sobrecargas de los métodos ForEach y For admiten el paralelismo de los datos con sintaxis imperativa en la clase System.Threading.Tasks.Parallel. En las operaciones paralelas de datos, se crean particiones de la colección de origen para que varios subprocesos puedan funcionar simultáneamente en segmentos diferentes. TPL admite el paralelismo de datos a través de la clase System.Threading.Tasks.Parallel. Esta clase proporciona las implementaciones paralelas basadas en método de los bucles for y foreach (For y For Each en Visual Basic). Se escribe la lógica del bucle para un bucle Parallel.For o Parallel.ForEach de forma muy similar a como se escribiría un bucle secuencial. No tiene que crear los subprocesos ni poner en la cola los elementos de trabajo. En bucles básicos, no es preciso tomar bloqueos. TPL administra todo el trabajo de bajo nivel. En el siguiente ejemplo de código se muestra un bucle foreach simple y su equivalente paralelo.



C#
// Version secuencial            
foreach (var item in sourceCollection)
{
   Process(item);
}

// Equivalente paralelo

Parallel.ForEach(sourceCollection, item => Process(item));

Cuando un bucle paralelo se ejecuta, la TPL crea particiones del origen de datos para que el bucle pueda funcionar simultáneamente en varias partes. En segundo plano, el programador de tareas crea particiones de la tarea según los recursos del sistema y la carga de trabajo. Cuando es posible, el programador redistribuye el trabajo entre varios subprocesos y procesadores si se desequilibra la carga de trabajo.




Los métodos Parallel.ForEach y Parallel.For tienen varias sobrecargas que permiten detener o ejecutar la ejecución de bucles, supervisar el estado del bucle en otros subprocesos, mantener el estado de subprocesos locales, finalizar los objetos de subprocesos locales, controlar el grado de simultaneidad, etc. Los tipos de aplicación auxiliar que habilitan esta funcionalidad son ParallelLoopState, ParallelOptions y ParallelLoopResult, CancellationToken y CancellationTokenSource.
Para obtener más información, vea Paralelismo de datos (Task Parallel Library).
PLINQ admite el paralelismo de datos con sintaxis declarativa o de consulta. Para obtener más información, vea Parallel LINQ (PLINQ).