parallel programming no .net 4.0
Post on 06-May-2015
1.742 Views
Preview:
DESCRIPTION
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
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 Paulinojorgemiguel.paulino@gmail.com
http://vbtuga.blogspot.comhttp://pontonetpt.com/blogs/jpaulino/default.aspxhttp://twitter.com/vbtuga
top related