Upload
comunidade-netponto
View
1.745
Download
8
Tags:
Embed Size (px)
DESCRIPTION
Apresentação sobre Parallel Programming no .NET 4.0 por Jorge Paulino (MVP), no evento de aniversário da comunidade NetPonto
Citation preview
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
Patrocinadores deste evento
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 [email protected]
http://vbtuga.blogspot.comhttp://pontonetpt.com/blogs/jpaulino/default.aspxhttp://twitter.com/vbtuga