parallel programming no .net 4.0

Post on 06-May-2015

1.742 Views

Category:

Technology

8 Downloads

Preview:

Click to see full reader

DESCRIPTION

Apresentação sobre Parallel Programming no .NET 4.0 por Jorge Paulino (MVP), no evento de aniversário da comunidade NetPonto

TRANSCRIPT

Parallel Programming no .NET 4.0Jorge Paulino

http://netponto.org14ª Reunião Presencial - 18/09/2010

Jorge Paulino

http://vbtuga.blogspot.comhttp://pontonetpt.com/blogs/jpaulino/default.aspxhttp://twitter.com/vbtuga

Administrador Comunidade Portugal-a-Programar

Programador VW Autoeuropa– VB.NET, .NET Framework 2.0, SQL Server, VBA– Automação Industrial (Siemens, Allen Bradley e HMI)

Microsoft Visual Basic MVP 2009, 2010

Membro de diversas comunidades como: NetPonto, PontoNetPT, MSDN, Experts-Exchange, CodeProject, etc.

Agenda• Introdução• Novidades .NET Framework 4.0• Task Parallel Library (TPL)

– Parallel Class– Melhorias na ThreadPool– Tasks & Futures

• Parallel LINQ (PLINQ)• Data Structures for Coordination (DSC) • Ferramentas Diagnóstico

Introdução – Evolução dos Processadores

Moore’s Law“The number of transistors incorporated in a chip will approximately double every 24 months.”

Gordon Moore, Intel Co-founder (1965)

Introdução – Evolução dos Processadores

Moore’s Law“The number of transistors incorporated in a chip will approximately double every 24 months.”

Gordon Moore, Intel Co-founder (1965)

“Moore’s Law scaling should easily let us hit the 80-core mark in mainstream processors within the next ten years and quite possibly even less.”

Justin Rattner, Intel Vice-President and CTO (February 2007)

Introdução – Evolução dos Processadores

Intel® Xeon® Processor 7000 (8 cores)

Pentium

386

Pentium 4

Intel CPU Trends (sources: Intel, Wikipedia, K. Olukotun)

MulticoresMultiplos núcleos idênticos num só processador

Symmetric Multiprocessors (SMP’s) Arquitectura com dois ou mais processadores idênticos ligados a uma só memória principal partilhada

Introdução – ConceitoParalelismo consiste na decomposição de uma tarefa/dados em tarefas mais pequenas para permitir a execução em simultâneo ou em paralelo.

Introdução – ConceitoParalelismo consiste na decomposição de uma tarefa/dados em tarefas mais pequenas para permitir a execução em simultâneo ou em paralelo.

Paralelismo é diferente de multithreading!

Processo A

SEQUENCIAL

Core1

Introdução – ConceitoParalelismo consiste na decomposição de uma tarefa/dados em tarefas mais pequenas para permitir a execução em simultâneo ou em paralelo.

Paralelismo é diferente de multithreading!

Processo A

SEQUENCIAL

Core1 Processo A Processo B Processo C Processo D

Introdução – ConceitoParalelismo consiste na decomposição de uma tarefa/dados em tarefas mais pequenas para permitir a execução em simultâneo ou em paralelo.

Paralelismo é diferente de multithreading!

Processo A

SEQUENCIAL

Core1

PARALELO

Core1

Core2

Core3

Core4

Processo A

Processo B

Processo C

Processo D

Introdução – ConceitoParalelismo consiste na decomposição de uma tarefa/dados em tarefas mais pequenas para permitir a execução em simultâneo ou em paralelo.

Paralelismo é diferente de multithreading!

Processo A

SEQUENCIAL

Core1

PARALELO

Core1

Core2

Core3

Core4

Processo A

Processo B

Processo C

Processo D

Introdução – ConceitoParalelismo consiste na decomposição de uma tarefa/dados em tarefas mais pequenas para permitir a execução em simultâneo ou em paralelo.

Paralelismo é diferente de multithreading!

Optimização

• Hardware mudou ( +núcleos, -velocidade)• Utilizadores são mais exigentes• Exigências do mercado mudam• Com as Parallel Extensions é simples e fácil implementar

Introdução – Porque usar paralelismo?

• Hardware mudou ( +núcleos, -velocidade)• Utilizadores são mais exigentes• Exigências do mercado mudam• Com as Parallel Extensions é simples e fácil implementar

Introdução – Porque usar paralelismo?

“Porque não utilizar apenas Threads ?”• Pesadas (1MB memória virtual)• Não estão optimizadas para paralelismo rápido• Difíceis de controlar/coordenar (parar, cancelar, começar

uma a seguir a outra, esperar pelo fim de várias, etc.)• Passar informação entre threads é complicado• Diagnóstico não é fácil

Novidades .NET Framework 4.0

Parallel Class

Task ParallelismTask

Par

alle

l Lib

rary

(TPL

)

Novidades .NET Framework 4.0

Parallel Class

Task Parallelism

PLINQ

Data Structures for Coordination (DSC)Task

Par

alle

l Lib

rary

(TPL

)

Novidades .NET Framework 4.0

Parallel Class

Task Parallelism

PLINQ

Data Structures for Coordination (DSC)

CLR ThreadPool

Threads

Task

Par

alle

l Lib

rary

(TPL

)

Structured Data Parallelism

Novidades .NET Framework 4.0

Parallel Class

Task Parallelism

PLINQ

Data Structures for Coordination (DSC)

CLR ThreadPool

Threads

Task

Par

alle

l Lib

rary

(TPL

)

Conjunto de API’s disponíveis nos namespaces System.Threading e System.Threading.Tasks da .NET Framework 4.0, que tem como objectivo simplificar o processo de paralelismo.

Task Parallel Library (TPL)

Conjunto de API’s disponíveis nos namespaces System.Threading e System.Threading.Tasks da .NET Framework 4.0, que tem como objectivo simplificar o processo de paralelismo.

Task Parallel Library (TPL)

Existem 2 tipos de paralelismo que podemos usar com a TPL:

Data Parallelism

Conjunto de API’s disponíveis nos namespaces System.Threading e System.Threading.Tasks da .NET Framework 4.0, que tem como objectivo simplificar o processo de paralelismo.

Task Parallel Library (TPL)

Existem 2 tipos de paralelismo que podemos usar com a TPL:

Task ParallelismParallel.For() e Parallel.ForEach() Parallel.Invoke() e Factory.Task()

Task Parallel Library (TPL) – Data Parallelism

' Ciclo sequencialFor Each item In itemCollection Process(item) Next

VB.NET// Ciclo sequencialforeach (var item in itemCollection){ Process(item);}

C#

' Ciclo sequencialFor x As Integer = 0 To 100 Process(x) Next

VB.NET// Ciclo sequencial for (int x = 0; x < 100;x++) { Process(x);}

C#

Parallel.For (fromInclusive, toExclusive, delegate)

Parallel.ForEach(item, source, delegate)

' Ciclo paraleloParallel.For(0, 100, Sub(x) Process(x))

// Ciclo paraleloParallel.For(0, 100, x => Process (x));

' Ciclo paraleloParallel.ForEach(itemCollection, Sub(item) Process(item))

// Ciclo paraleloParallel.ForEach(itemCollection, item => Process(item));

Task Parallel Library (TPL) - Task Parallelism

Parallel.Invoke(Action1, Action2, …)

OU

‘ Usando um Action Delegate Dim actions As Action() = {AddressOf Action1, AddressOf Action2}Parallel.Invoke(actions)

VB.NETParallel.Invoke(Action1, Action2, ...);

OU

// Usando um Action DelegateAction[] actions = new Action[] {Action1, Action2};Parallel.Invoke(actions);

C#Parallel.Invoke(…)

Task Parallel Library (TPL) – Data Parallelism• Escalabilidade• Particionamento dinâmico ou manual• Métodos para parar, cancelar, sair, etc. (12/20 overloads)

Não há no entanto garantias da ordem de execução!

Parallel.For(), Parallel.ForEach() e Parallel.Invoke()

ParallelFor_ConsoleApplication (VB.NET) ParallelInvoke_ConsoleApplication (C#)

RayTracer (VB.NET)

demonstração

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 1

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

WorkItem 1

WorkItem 2

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

WorkItem 1

WorkItem 2

WorkItem 3

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 1

WorkItem 2

WorkItem 3

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 1 WorkItem 2

WorkItem 3

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 1 WorkItem 2

WorkItem 4

WorkItem 3

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 1 WorkItem 2

WorkItem 3

WorkItem 4

WorkItem 5

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 2

WorkItem 3

WorkItem 4

WorkItem 5

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 3 WorkItem 2

WorkItem 4

WorkItem 5

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 3

WorkItem 4

WorkItem 5

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 3 WorkItem 4

WorkItem 5

ThreadPool - .NET Framework 3.5

GlobalQueue

WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento

…WorkItem 3 WorkItem 4

WorkItem 5

WorkItem 6

Overheads• Todas as threads a aceder à Global Queue• Problemas de sincronização/locks

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2Task 1

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2

Task 1

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2

Task 1

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2Task 1

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2Task 1

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2Task 1

Task 3

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2Task 1

Task 4

Task 3

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2Task 1

Task 5

Task 4

Task 3

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2

Task 5

Task 4

Task 3

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

Task 2

Task 4

Task 3

Task 5

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

…Task 4

Task 3

Task 5

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

…Task 4

Task 3Task 5

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

…Task 4

Task 3Task 5 Task 6

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

…Task 4

Task 3Task 5

Task 6

ThreadPool - .NET Framework 4.0

GlobalQueue

(lock free)WorkerThread 1 WorkerThread 2

ProgramThread

Esquema geral de funcionamento com optimizações

Local Queue 1 Local Queue 2

…Task 4

Task 3Task 5

Task 6

Optimização aproximada:• Dual-core = 2x• Quad-core = 5x

Tasks & Futures

TaskTask é uma nova abstracção do .NET Framework 4.0 que representa unidades de trabalho assíncrono

FutureTask que retorna algum resultado

Geridos pelo .NET CLR Parallel Extensions• Automaticamente distribui as Tasks pelos CPU’s/Cores• Gere a carga de trabalho

Construídas sobre ThreadPool com gestão automática

Tasks e FuturesTask1_ConsoleApplication (VB.NET)

Task2_WindowsFormsApplication (C#)

demonstração

Tasks & Futures

São uma forma simples de efectuar paralelismo e permitem, ao contrário das ThreadPools.QueueUserWorkItem(), controlar o fluxo das threads e efectuar inúmeras acções como:

– Esperar– Cancelar– Continuar– Combinar– Relações (Parent – Child)– Controlar Fluxo– Tratamento de Erros (Exceptions)– Debug– …

Parallel LINQ (PLINQ)Executa queries LINQ (LINQ to Objects) efectuando os cálculos em paralelo e está disponível no namespace System.Linq.Parallel • É declarativa (diz o que quer e não como quer)• Suporta todos os .NET Standard Query Operators• Disponível para qualquer IEnumerable<T>

Parallel LINQ (PLINQ)Executa queries LINQ (LINQ to Objects) efectuando os cálculos em paralelo e está disponível no namespace System.Linq.Parallel • É declarativa (diz o que quer e não como quer)• Suporta todos os .NET Standard Query Operators• Disponível para qualquer IEnumerable<T>

Parallel LINQ (PLINQ)Executa queries LINQ (LINQ to Objects) efectuando os cálculos em paralelo e está disponível no namespace System.Linq.Parallel

.AsOrdered() Preserva a ordem inicial da sequência de à entrada

• É declarativa (diz o que quer e não como quer)• Suporta todos os .NET Standard Query Operators• Disponível para qualquer IEnumerable<T>

Parallel LINQ (PLINQ)Executa queries LINQ (LINQ to Objects) efectuando os cálculos em paralelo e está disponível no namespace System.Linq.Parallel

.AsOrdered() Preserva a ordem inicial da sequência de à entrada

.OrderBy() Faz o sort à saida

• É declarativa (diz o que quer e não como quer)• Suporta todos os .NET Standard Query Operators• Disponível para qualquer IEnumerable<T>

Parallel LINQ (PLINQ)

ParallelEnumerable Operators• AsParallel, AsSequential, AsOrdered, AsUnordered• WithCancellation, WithDegreeOfParallelism, WithExecutionMode,

WithMergeOptions

Método ForAll()

PLINQPLINQ (VB.NET)BabyNames(C#)

demonstração

Coordination Data Structures

Concurrent collections• BlockingCollection<T>• ConcurrentBag<T>• ConcurrentDictionary<TKey,TValue>• ConcurrentQueue<T>• ConcurrentStack<T>• IProducerConsumerCollection<T>• Partitioner, Partitioner<T>,

OrderablePartitioner<T>

Synchronization Primitives• Barrier• CountdownEvent• ManualResetEventSlim• SemaphoreSlim• SpinLock, SpinWait

Cancellation Primitives• CancellationToken• CancellationTokenSource

Initialization Primitives• Lazy<T>, LazyInitializer• ThreadLocal<T>

Exception Handling• AggregateException

Cancellation Model

Modelo unificado para cancelamento corporativo através de um CancellationToken e CancellationTokenSource

‘ Declaração do TokenDim cts As New CancellationTokenSourceDim ct As CancellationToken = cts.Token

VB.NET// Declaração do Tokenvar cts = new CancellationTokenSource();CancellationToken ct = cts.Token;

C#

‘ Ordem para cancelarcts.Cancel()

// Ordem para cancelarcts.Cancel();

‘ Verifica se existe ordem de cancelamentoIf cts.IsCancellationRequested Then ‘ Cancela execuçãoEnd If

// Verifica se existe ordem de cancelamentoif (cts.IsCancellationRequested) { // Cancela execução }

Existe ainda uma exception - OperationCanceledException

CancellationTokenSourceCancellationToken_WpfApplication (C#) ParallelFor_ConsoleApplication (VB.NET)

demonstração

AggregateException

Representa um ou mais erros que ocorrem durante a execução da aplicação

AggregateException AggregateException (VB.NET)

demonstração

CountdownEvent, Barrier, Partitioner

CoordinationDataStructures_ConsoleApplication (C#)ParallelFor_ConsoleApplication (VB.NET)

demonstração

Ferramentas de Diagnóstico

Parallel Tasks WindowLista todas as tasks/threads que estão activas e o seu estado

Ferramentas de Diagnóstico

Parallel Tasks WindowLista todas as tasks/threads que estão activas e o seu estado

Mostra as tasks/threads activas e as suas dependênciasParallel Stacks Window

Ferramentas de Diagnóstico

Performance Analysis - Concurrency VisualizerPermitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador.

Ferramentas de Diagnóstico

Performance Analysis - Concurrency VisualizerPermitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador.

CPU Utilization View

Visualização da utilização do CPU, indicando a utilização dos cores disponíveis

Ferramentas de Diagnóstico

Performance Analysis - Concurrency VisualizerPermitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador.

CPU Utilization View

Visualização da utilização do CPU, indicando a utilização dos cores disponíveis

Threads View (Parallel Performance)

Mostra a evolução de cada thread ao longo da execução, incluindo call stacks (1ms)

Ferramentas de Diagnóstico

Performance Analysis - Concurrency VisualizerPermitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador.

CPU Utilization View

Visualização da utilização do CPU, indicando a utilização dos cores disponíveis

Threads View (Parallel Performance)

Mostra a evolução de cada thread ao longo da execução, incluindo call stacks (1ms)

Cores View

Mostra a actividade por core, separando as threads em diferentes cores

Parallel Tasks, Parallel Stacks e Performance Analysis

Debug_ConsoleApplication (VB.NET)PLINQ (VB.NET)

demonstração

Questões?

ReferênciasParallel Programming Developer Center

http://msdn.microsoft.com/en-us/concurrency/default.aspx

Parallel Programming with Microsoft .NEThttp://parallelpatterns.codeplex.com/

A Tour Through the Parallel Programming Samples for .NET 4http://blogs.msdn.com/b/pfxteam/archive/2009/12/09/9934811.aspx

Reactive Extensions (Rx) for .NET 3.5 SP1http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx

Using Parallel Extensions for .NET 4 in ASP.NEThttp://blogs.msdn.com/b/pfxteam/archive/2010/02/08/9960003.aspx

Próximas reuniões presenciais

• 18/09/2010 - Setembro• 23/10/2010 - Outubro• 20/11/2010 - Novembro• 11/12/2010 - Dezembro

Reserva estes dias na agenda! :)

Obrigado!

Jorge Paulinojorgemiguel.paulino@gmail.com

http://vbtuga.blogspot.comhttp://pontonetpt.com/blogs/jpaulino/default.aspxhttp://twitter.com/vbtuga

top related