3. Automação Industrial (Siemens, Allen Bradley e HMI)Microsoft Visual Basic MVP 2009, 2010 Administrador Comunidade Portugal-a-Programar Membro de diversas comunidades como: NetPonto, PontoNetPT, MSDN, Experts-Exchange, CodeProject, etc. http://vbtuga.blogspot.com http://pontonetpt.com/blogs/jpaulino/default.aspx http://twitter.com/vbtuga
4. Agenda Introdução Novidades .NET Framework 4.0 TaskParallelLibrary (TPL) ParallelClass Melhorias na ThreadPool Tasks & Futures Parallel LINQ (PLINQ) Data Structures for Coordination (DSC) Ferramentas Diagnóstico
5. Introdução – Evolução dos Processadores Moore’sLaw “The number of transistors incorporated in a chip will approximately double every 24 months.” Gordon Moore, Intel Co-founder (1965)
6. Introdução – Evolução dos Processadores Moore’sLaw “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)
7. Introdução – Evolução dos Processadores Multicores Multiplos núcleos idênticos num só processador Intel® Xeon® Processor 7000 (8 cores) Symmetric Multiprocessors (SMP’s) Arquitectura com dois ou mais processadores idênticos ligados a uma só memória principal partilhada Pentium 4 Pentium 386 Intel CPU Trends (sources: Intel, Wikipedia, K. Olukotun)
8. Introdução – Conceito Paralelismo consiste na decomposição de uma tarefa/dados em tarefas mais pequenas para permitir a execução em simultâneo ou em paralelo.
9. Introdução – Conceito Paralelismo 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!
10. Introdução – Conceito Paralelismo 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! SEQUENCIAL Processo A Core1
11. Introdução – Conceito Paralelismo 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! SEQUENCIAL Processo A Core1 Processo C Processo D Processo A Processo B
12. Introdução – Conceito Paralelismo 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! SEQUENCIAL Processo A Core1 PARALELO Core1 Processo A Core2 Processo B Core3 Processo C Core4 Processo D
13. Introdução – Conceito Paralelismo 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! SEQUENCIAL Optimização Processo A Core1 PARALELO Core1 Processo A Core2 Processo B Core3 Processo C Core4 Processo D
14. 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
20. Novidades .NET Framework 4.0 Parallel Class PLINQ Task Parallel Library (TPL) Task Parallelism Data Structures for Coordination (DSC)
21. Novidades .NET Framework 4.0 Parallel Class PLINQ Task Parallel Library (TPL) Task Parallelism Data Structures for Coordination (DSC) CLR ThreadPool Threads
22. Novidades .NET Framework 4.0 Structured Data Parallelism Parallel Class PLINQ Task Parallel Library (TPL) Task Parallelism Data Structures for Coordination (DSC) CLR ThreadPool Threads
23. TaskParallelLibrary (TPL) Conjunto de API’s disponíveis nos namespacesSystem.Threading e System.Threading.Tasksda .NET Framework 4.0, que tem como objectivo simplificar o processo de paralelismo.
24. TaskParallelLibrary (TPL) Conjunto de API’s disponíveis nos namespacesSystem.Threading e System.Threading.Tasksda .NET Framework 4.0, que tem como objectivo simplificar o processo de paralelismo. Existem 2 tipos de paralelismo que podemos usar com a TPL:
25. TaskParallelLibrary (TPL) Conjunto de API’s disponíveis nos namespacesSystem.Threading e System.Threading.Tasksda .NET Framework 4.0, que tem como objectivo simplificar o processo de paralelismo. Existem 2 tipos de paralelismo que podemos usar com a TPL: Data Parallelism Task Parallelism Parallel.For() e Parallel.ForEach() Parallel.Invoke() e Factory.Task()
26. TaskParallelLibrary (TPL) – Data Parallelism Parallel.For (fromInclusive, toExclusive, delegate) ' Cicloparalelo Parallel.For(0, 100, Sub(x) Process(x)) // Cicloparalelo Parallel.For(0, 100, x => Process (x)); VB.NET C# VB.NET C# ' Ciclosequencial For Each item InitemCollection Process(item) Next // Ciclosequencial foreach(varitem initemCollection) { Process(item); } ' Ciclosequencial For x As Integer = 0 To 100 Process(x) Next // Ciclosequencial for (int x = 0; x < 100;x++) { Process(x); } Parallel.ForEach(item, source, delegate) ' Cicloparalelo Parallel.ForEach(itemCollection, Sub(item) Process(item)) // Cicloparalelo Parallel.ForEach(itemCollection, item => Process(item));
29. Métodos para parar, cancelar, sair, etc. (12/20 overloads)Não há no entanto garantias da ordem de execução! TaskParallelLibrary (TPL) - Task Parallelism Parallel.Invoke(…) VB.NET C# Parallel.Invoke(Action1, Action2, …) OU ‘ Usando um Action Delegate Dim actions As Action() = {AddressOfAction1, AddressOfAction2} Parallel.Invoke(actions) Parallel.Invoke(Action1, Action2, ...); OU // Usando um Action Delegate Action[] actions = newAction[] {Action1, Action2}; Parallel.Invoke(actions);
30. Parallel.For(), Parallel.ForEach() e Parallel.Invoke()ParallelFor_ConsoleApplication(VB.NET) ParallelInvoke_ConsoleApplication (C#)RayTracer (VB.NET) demonstração
31. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkerThread 1 WorkerThread 2 … Program Thread
32. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkerThread 1 WorkerThread 2 … WorkItem 1 Program Thread
33. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem 1 WorkerThread 1 WorkerThread 2 … WorkItem2 Program Thread
34. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem 1 WorkItem2 WorkerThread 1 WorkerThread 2 … WorkItem 3 Program Thread
35. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem2 WorkerThread 1 WorkerThread 2 … WorkItem 3 WorkItem 1 Program Thread
36. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkerThread 1 WorkerThread 2 … WorkItem 3 WorkItem 1 WorkItem2 Program Thread
37. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem3 WorkerThread 1 WorkerThread 2 … WorkItem4 WorkItem 1 WorkItem2 Program Thread
38. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem3 WorkItem4 WorkerThread 1 WorkerThread 2 … WorkItem5 WorkItem 1 WorkItem2 Program Thread
39. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem3 WorkItem4 WorkerThread 1 WorkerThread 2 … WorkItem5 WorkItem2 Program Thread
40. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem4 WorkItem5 WorkerThread 1 WorkerThread 2 … WorkItem3 WorkItem2 Program Thread
41. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem4 WorkItem5 WorkerThread 1 WorkerThread 2 … WorkItem3 Program Thread
42. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem 5 WorkerThread 1 WorkerThread 2 … WorkItem3 WorkItem4 Program Thread
43. ThreadPool - .NET Framework 3.5 Esquema geral de funcionamento Global Queue WorkItem 5 WorkItem6 WorkerThread 1 WorkerThread 2 … WorkItem3 WorkItem4 Program Thread Overheads Todas as threads a aceder à Global Queue Problemas de sincronização/locks
44. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … WorkerThread 1 WorkerThread 2 … Program Thread
45. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … WorkerThread 1 WorkerThread 2 … Program Thread Task 2 Task 1
46. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … Task 1 WorkerThread 1 WorkerThread 2 … Program Thread Task 2
47. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … Task 1 WorkerThread 1 WorkerThread 2 Task 2 … Program Thread
48. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … WorkerThread 1 WorkerThread 2 Task 2 … Task 1 Program Thread
49. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 … WorkerThread 1 WorkerThread 2 … Task 2 Task 1 Program Thread
50. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 3 … WorkerThread 1 WorkerThread 2 … Task 2 Task 1 Program Thread
51. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 3 Task 4 … WorkerThread 1 WorkerThread 2 … Task 2 Task 1 Program Thread
52. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Task 3 Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 Task 5 … WorkerThread 1 WorkerThread 2 … Task 2 Task 1 Program Thread
53. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Task 3 Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 Task 5 … WorkerThread 1 WorkerThread 2 … Task 2 Program Thread
54. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 3 Task 4 … WorkerThread 1 WorkerThread 2 … Task 2 Task 5 Program Thread
55. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 3 Task 4 … WorkerThread 1 WorkerThread 2 … Task 5 Program Thread
56. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 … WorkerThread 1 WorkerThread 2 … Task 5 Task 3 Program Thread
57. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 … WorkerThread 1 WorkerThread 2 … Task 6 Task 5 Task 3 Program Thread
58. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 Task 6 … WorkerThread 1 WorkerThread 2 … Task 5 Task 3 Program Thread
59. ThreadPool - .NET Framework 4.0 Esquema geral de funcionamento com optimizações Global Queue (lock free) Local Queue 1 Local Queue 2 Task 4 Task 6 … WorkerThread 1 WorkerThread 2 … Task 5 Task 3 Program Thread Optimização aproximada: Dual-core = 2x Quad-core = 5x
60. Tasks & Futures Task Task é uma nova abstracção do .NET Framework 4.0 que representa unidades de trabalho assíncrono Future Task que retorna algum resultado Geridos pelo .NET CLR ParallelExtensions Automaticamente distribui as Tasks pelos CPU’s/Cores Gere a carga de trabalho Construídas sobre ThreadPool com gestão automática
102. Ferramentas de Diagnóstico Parallel Tasks Window Listatodas as tasks/threads queestãoactivas e o seuestado
103. Ferramentas de Diagnóstico Parallel Tasks Window Listatodas as tasks/threads queestãoactivas e o seuestado Parallel Stacks Window Mostra as tasks/threads activas e as suasdependências
104. Ferramentas de Diagnóstico Performance Analysis - Concurrency Visualizer Permitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador.
105. Ferramentas de Diagnóstico Performance Analysis - Concurrency Visualizer Permitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador. CPU UtilizationView Visualização da utilização do CPU, indicando a utilização dos cores disponíveis
106. Ferramentas de Diagnóstico Performance Analysis - Concurrency Visualizer Permitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador. CPU UtilizationView Visualização da utilização do CPU, indicando a utilização dos cores disponíveis ThreadsView (Parallel Performance) Mostra a evolução de cada thread ao longo da execução, incluindo callstacks(1ms)
107. Ferramentas de Diagnóstico Performance Analysis - Concurrency Visualizer Permitir ver como a aplicação interage com ela própria, com o hardware, sistema operativo e outros processos no computador. CPU UtilizationView Visualização da utilização do CPU, indicando a utilização dos cores disponíveis ThreadsView (Parallel Performance) Mostra a evolução de cada thread ao longo da execução, incluindo callstacks(1ms) Cores View Mostra a actividade por core, separando as threadsem diferentes cores
110. Referências ParallelProgrammingDeveloperCenter http://msdn.microsoft.com/en-us/concurrency/default.aspx ParallelProgrammingwith Microsoft .NET http://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.5SP1 http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx Using Parallel Extensions for .NET 4 in ASP.NET http://blogs.msdn.com/b/pfxteam/archive/2010/02/08/9960003.aspx
112. Próximas reuniões presenciais 18/09/2010 - Setembro 23/10/2010 - Outubro 20/11/2010 - Novembro 11/12/2010 - DezembroReserva estes dias na agenda! :)