• Nenhum resultado encontrado

Universidade Federal do Rio de Janeiro. Escola Politécnica. MBA em Engenharia de Computação Avançada (MBCA)

N/A
N/A
Protected

Academic year: 2021

Share "Universidade Federal do Rio de Janeiro. Escola Politécnica. MBA em Engenharia de Computação Avançada (MBCA)"

Copied!
12
0
0

Texto

(1)

1

Universidade Federal do Rio de Janeiro

Escola Politécnica

MBA em Engenharia de Computação Avançada

(MBCA)

Programação Paralela utilizando o .NET Framework 4

Autor:

Martius Eduardo Rodriguez

Disciplina:

Sistemas Avançados de Processamento – Distribuídos, Gridding, Paralelo e Multiagentes

Professor:

Priscila Lima

MBCA Julho de 2011

(2)

Sumário

Capítulo 1: Introdução ... 4

1.1 – Objetivo ... 4

1.2 – Computação Paralela e .NET Framework 4 ... 4

Capítulo 2: Embasamento Prático ... 6

2.1 – Namespace ... 6 2.2 – Parallel.Invoke ... 6 2.3 – Parallel.For ... 8 2.4 – Parallel.ForEach ... 9 2.5 –AsParallel ... 10 Capítulo 3: Conclusão ... 11 3.1 – Conclusão ... 11 Bibliografia ... 12

(3)

Lista de Imagens

1.1 – Arquitetura .NET Framework 4 . . . 5

2.2 – Resultado Parallel.Invoke. . . 8

2.3 – Resultado Parallel.For. . . 9

(4)

Capítulo 1

Introdução

1.1 – Objetivo

O objetivo deste trabalho é fundamentar os conhecimentos sobre programação paralela usando a tecnologia .NET Framework.

A programação paralela em .NET Framework é algo muito recente, pois esta tecnologia foi introduzida pela Microsoft na versão 3.5, porém aprimorada e acrescentada outras extensões na versão 4.0, dando suporte com o Task Parallel Library (TPL) e Parallel LINQ.

1.2 – Computação Paralela e .NET Framework 4

Os processadores estão, hoje, com mais de um núcleo. O que significa que podemos rodar aplicações simultaneamente. Ou seja, podemos paralelizar o código que distribuirá o trabalho para vários núcleos. Cada núcleo de um processador pode somente rodar uma tarefa de cada vez, se temos um processador com 4 núcleos podemos rodar 4 tarefas ao mesmo tempo.

Sistemas distribuídos como clusters, Massively Parallel Processors (MPP) e grades (Grid) usam vários computadores para trabalhar em uma única tarefa. Arquiteturas paralelas são utilizadas para acelerar tarefas específicas, tarefas que um único computador demoraria anos para realizar. Na imagem 1.1 é possível ver a arquitetura no .NET Framework 4.

(5)

Imagem 1.1 – Arquitetura .NET Framework 4.

(6)

Capítulo 2

Embasamento Prático

2.1 – Namespace

Em primeiro lugar, para começar a utilizar as classes que permitem a paralelizar o código é necessário inserir o namespace que contém estas classes. Para isso iremos inserir na primeira linha do código o comando:

Visual Basic

Imports System.Threading.Tasks

C#

using System.Threading.Tasks;

Isso lhe permitirá a utilização dos comandos que iremos explicar nesse trabalho (a partir daqui, iremos focar na linguagem Visual Basic):

Parallel.Invoke() Parallel.For() Parallel.ForEach()

2.2 – Parallel.Invoke

O método Invoke é a maneira mais fácil de chamar as funções em paralelo. Esse método só pode ser usado para chamar métodos que não retornam resultado. Veja o exemplo abaixo:

Imports System.Threading.Tasks

Public Class ClassePP

(7)

Parallel.Invoke(New Action(AddressOf gerarNumeros), New Action(AddressOf

gerarTexto)) End Sub

Public Sub gerarNumeros() Dim i As Integer

For i = 0 To 15

Debug.Print("Gerar números: " & i) Next

End Sub

Private Sub gerarTexto()

Dim texto As String = "gerartexto"

For i = 1 To Len(texto)

Debug.Print("Gerar texto: " & Mid(texto, i, 1)) Next

End Sub

End Class

Criamos uma classe chamada de ClassePP e nela adicionamos três procedimentos: main(), gerarNumeros() e gerarTexto(). Instanciamos uma nova ação para cada procedimento. Depois usamos o AddressOf que cria uma instância de um delegate apontando o procedimento. Podíamos também criar um Array e jogar todas as ações lá e depois colocá-la como parâmetro para o método Invoke. Outra maneira de utilizar o método Invoke é inserir diretamente o procedimento como uma nova ação, veja:

Parallel.Invoke(New Action(Sub()

Dim i As Integer

For i = 0 To 15

Debug.Print("Gerar números: " & i) Next

End Sub), New Action(Sub()

Dim texto As String = "gerartexto"

For i = 1 To Len(texto)

Debug.Print("Gerar texto: " & Mid(texto, i, 1)) Next

End Sub))

(8)

Imagem 2.2 – Resultado Parallel.Invoke

2.3 – Parallel.For

O método For é usado quando a mesma função é utilizada simultaneamente. Veja o exemplo a seguir:

Public Sub main()

Parallel.For(0, 15, Sub(i) gerarNumerosFor(i)) Dim texto As String = "gerartexto"

Parallel.For(1, Len(texto) + 1, Function(i) gerarTextoFor(texto, i)) End Sub

Private Sub gerarNumerosFor(ByVal i As Integer) Debug.Print("Gerar números: " & i)

End Function

Private Function gerarTextoFor(ByVal texto As String, ByVal i As Integer) Debug.Print("Gerar texto: " & Mid(texto, i, 1))

Return "Funcionou"

End Function

(9)

Imagem 2.3 – Resultado Parallel.For

2.4 – Parallel.ForEach

O método ForEach assim como o For é quando a mesma função é utilizada simultaneamente. A diferença é que o ForEach utiliza uma coleção para pecorrer o loop. Veja o exemplo a seguir:

Public Sub main()

Dim textos() As String = {"g", "e", "r", "a", "r", "t", "e", "x", "t",

"o"}

Dim numeros() As Integer = Enumerable.Range(0, 14).ToArray() Parallel.ForEach(numeros, Function(i) gerarNumerosForEach(i)) Parallel.ForEach(textos, Sub(texto) gerarTextoForEach(texto)) End Sub

Private Function gerarNumerosForEach(ByVal i As Integer) Debug.Print("Gerar números: " & i)

Return "Funcionou"

End Function

Private Sub gerarTextoForEach(ByVal texto As String) Debug.Print("Gerar texto: " & texto)

(10)

No caso dos textos, seria o mesmo que o código abaixo, mas sem o paralelismo (sequencial):

For Each texto In textos

Debug.Print("Gerar texto: " & texto) Next

Veja o resultado na imagem 2.4

Imagem 2.4 – Resultado Parallel.ForEach

2.5 –AsParallel

O método AsParallel é utilizado para paralelizar Queries utilizando a Language Integrated Query (LINQ), tornando as consultas aos bancos de dados mais rápidas. A LINQ foi inspirada na Structured Query Language (SQL), uma linguagem padrão para comunicação com o banco de dados relacionais.

(11)

Capítulo 3

Conclusão

3.1 – Conclusão

No capítulo anterior não foi mencionado o tempo, pois a intenção era mostrar como utilizar os métodos de paralelismo do .NET Framework, mas com certeza podemos aprimorar o código e mostrar que na programação paralela ganha-se muito com o tempo e escalabilidade. E quanto mais núcleos ou tarefas paralelas tiver, maior será este ganho.

(12)

Bibliografia

Sites:

http://msdn.microsoft.com/en-us/library/dd460717.aspx - 23/7/2011

Referências

Documentos relacionados

Por fim, na terceira parte, o artigo se propõe a apresentar uma perspectiva para o ensino de agroecologia, com aporte no marco teórico e epistemológico da abordagem

O artigo está organizado em seis seções, nas quais são discutidas as seguintes questões: princípio constitucional da publicidade e prestação de contas, transparência e gestão

intitulado “O Plano de Desenvolvimento da Educação: razões, princípios e programas” (BRASIL, 2007d), o PDE tem a intenção de “ser mais do que a tradução..

Ressalta-se que mesmo que haja uma padronização (determinada por lei) e unidades com estrutura física ideal (física, material e humana), com base nos resultados da

Muito embora, no que diz respeito à visão global da evasão do sistema de ensino superior, o reingresso dos evadidos do BACH em graduações, dentro e fora da

Para Azevedo (2013), o planejamento dos gastos das entidades públicas é de suma importância para que se obtenha a implantação das políticas públicas, mas apenas

3 CONSIDERAÇÕES GERAIS Neste trabalho, objetivou-se avaliar o crescimento vegetativo da planta, o teor, o rendimento e a composição química do óleo essencial de Mentha piperita

4°) Causam confusão no invasor. Uma vez dentro da área da empresa, ele pode ser confundido por suas barreiras de proteção internas. Quando seu sistema de