Você está na página 1de 12

Existem aplicações que processam grande quantidade de dados, tais aplicações

necessitam de computadores com alto poder computacional. Computação paralela e


distribuída é uma alternativa para aumentar o ganho no processamento de uma aplicação,
com computação paralela e distribuída, podemos realizar computação de alto
desempenho.

Computação paralela visa distribuir o processamento de uma aplicação entre os


diversos núcleos de um processador. No desenvolvimento tradicional, as aplicações são
desenvolvidas para serem executadas por uma única unidade de processamento, core.
Uma forma de se obter desempenho é paralelizar o processamento da aplicação entre os
diversos cores de um processamento. Assim, o processamento da aplicação será muito
mais rápido do que o convencional. Compartilhar o processamento entre os n cores do
processamento é “praticamente ter n unidades de processamentos trabalhando em
conjunto.

Na referência [1] na página 13 é apresentado a definição de computação


paralelo. Nesta referência você pode encontrar uma clara definição de “Computação
Paralela”.

Podemos encontrar outra definição de Computação Paralela na referência [3]


página 5. Segundo [3], “Computação Paralela: procura desenvolver algoritmos que são
capazes de ser executados em vários computadores ao mesmo tempo.” Ainda podemos
encontrar boas definições de Computação Paralela na referência [2] na página 275.

Computação paralela visa realizar distribuir o processamento da aplicação entre


os n cores do processador. Correto? Entretanto, como é realizado essa distribuição de
processamento? Essa distribuição de processamento é realizada pela criação de um
Algoritmo Paralelo. Um algoritmo Paralelo dividi uma tarefa entre n unidades de
processamento.

A Figura 1 ilustra a execução de uma tarefa por uma única unidade de


processamento e também, e o mesmo processamento realizado por 4 unidades de
processamento do processador. Como é possível observar em 1.a o processamento
convencional de uma tarefa é realizado por apenas 1 core do processador. Computação
Paralela visa aproveitar de forma eficiente o processador, utilizando todos os cores do
processamento na execução da tarefa, como é possível observar na Figura 1.b
Figura 1: Processamento Sequencial e Processamento Paralelo

Fonte: Próprio Autor

A Referência [4] consiste em um vídeo do Youtube, onde você pode encontrar mais
exemplos de Computação Paralela.

Para paralelizar uma tarefa, ou aplicação é necessário criar Threads. Quando uma
aplicação é escalonada para ser executada no processador, ela recebe a denominação de
processo, isto é, um processo é um programa em execução no processador. Threads são
linhas de execução dentro de um processo. A Figura 2 ilustra um processo composto por
3 Threads. Você pode encontrar boas informações sobre Threads e processos na
Referência [1], entre as páginas 23 a 28. É importante ressaltar que, a computação
distribuída utiliza processos, enquanto que a computação paralela utiliza Threads. Você
pode encontrar mais informações sobre Threads também, na Referência [2] na página
286.
Figura 2: Threads

Fonte: Próprio Autor.

Na Referência [8] você também pode encontrar mais detalhes sobre Threads. No
processamento paralelo, é muito comum as Threads compartilharem dados, na verdade,
em Computação Paralela há uma forte troca de mensagem entre as Threads. A Referência
[8] também traz um estudo sobre a Comunicação de Threads. Faça uma Leitura da
Seção “Comunicação entre Threads” da Referência [8].

Cada Thread executa em um core do processador de forma independente.


Todavia, muitas vezes, pelo fato das Threads compartilhar a mês tarefa, pode ocorrer
concorrência no processamento. As Threads podem disputar o acesso ao mesmo dado e
fazerem leitura e escrita na mesma região de memória. Quando falamos em Computação
Paralela, Concorrência é o maior desafio em na criação de programas paralelos. A
Referência [8] também traz um estudo sobre Concorrência de Threads. Faça uma leitura
da Seção: “Concorrência entre Processos”.

Existem API, Frameworks e plataformas de desenvolvimentos que permitem criar


Threads de forma fácil e eficiente. Ainda, muitas linguagens de programação possuem
bibliotecas que possibilitam a criação de Threads para realizar o processamento paralelo.
Uma biblioteca muito utilizada no mercado é o OpenMP.

OpenMP é uma biblioteca pertencente as linguagens de programação C e C++ que


permite a criação de Threads de forma fácil. A programação paralela é baseada em
diretivas. Muitas vezes, uma aplicação não é totalmente paralelizada, isto é, a aplicação
pode possui partes que podem ser paralelizadas e partes que devem ser exclusivamente
executadas sequencialmente, por uma única Threads. Assim, para paralelizar uma
aplicação, bastar colocar as diretivas do OpenMP nos trechos de códigos que queremos
paralelizar. A Figura 3 ilustra um trecho de código paralelizado utilizando OpenMP.
Neste trecho de código, são criadas 4 Threads que irão compartilhar o processamento de
um laço. OpenMP facilita a paralelização de laços através das diretivas #pragma omp
for.

Figura 3. Trecho de código em OpenMP.


Fonte: Próprio Autor.
Você pode encontrar mais informações sobre OpenMP na Referência [1] na
página 25. E no site oficial do OpenMP [6]. Na Referência [7] você encontra um vídeo
do YouTube sobre OpenMP.

Para finalizar o estudo sobre Computação Paralela, faça uma leitura da Seção:
Computação Paralela que se encontra na página 102 da Referência [12].

Agora, vamos falar um pouco sobre Computação Distribuída. Assim como a


Computação Paralela, a Computação Distribuída faz parte da Computação de Alto
Desempenho e visa o ganho de desempenho no processamento de aplicações que
processam grandes quantidades de dados. A diferença básica entre Computação Paralela
e Computação Distribuída é que a Computação Paralela visa compartilhar o
processamento da aplicação entre todos os cores do processador de uma única máquina.
Já a Computação Distribuída visa compartilhar o processamento da aplicação entre
diversos computadores.

Na Computação Distribuída, cada computador é encarado como uma unidade de


processamento. Já na Computação Paralela, cada core é considerado como uma unidade
de processamento. É importante observar que, é possível utilizar Computação Paralela e
Computação Distribuída ao mesmo tempo, você pode distribuir o processamento da
aplicação entre vários computadores, e também, utilizar todos os cores de cada
processador para processar a aplicação.

Na Referência [1] entre as páginas 13 a 15 é apresentada uma clara definição de


Sistemas Distribuídos. Ambas computações visa realizar computação de alto
desempenho.

Na Referência [8] também encontramos uma boa definição sobre Sistemas


Distribuídos, bem como, suas principais características, que corresponde:

• Compartilhamento de recursos; está é a principal características de um


Sistema Distribuído, “deve especificar quais recursos estão disponíveis
para serem acessados, como eles devem ser acessados e modificados,
como o seu compartilhamento deve ser realizado dentro da rede e a
implementação da interface de interação com o recurso e/ou servidor” [8]
• Abertura; “um sistema distribuído aberto oferece serviços com base em
regras e padrões conhecidos pela comunidade, permitindo que outros
sistemas que também conheçam esses padrões possam se comunicar com
ele” [8].
• Concorrência; “o termo “concorrente” se dá como uma característica dos
sistemas distribuídos que permitem que diversos usuários/computadores
possam acessar os recursos que estão sendo compartilhados de forma
simultânea, garantindo consistência na leitura e modificação dos dados.
Imagine um sistema distribuído de um banco de dados que recebe pedidos
de modificação dos dados de diversos usuários diferentes e, enquanto isso,
há diversos outros fazendo a leitura desses mesmos dados” [8].
• Escalabilidade; “a escalabilidade reflete o quão rápido um sistema
distribuído pode ser expandido” [8].
• Tolerância a falhas; “o sistema distribuído deve apresentar a característica
de ser tolerante a falhas, ou seja, ao entrar em estado de falha, deve se
recuperar de forma transparente, não permitindo que o usuário saiba que
ela aconteceu” [8].
• Disponibilidade; a disponibilidade é outra importante característica dos
sistemas distribuídos. A disponibilidade é o tempo em que o sistema está
disponível, operando de forma correta.
• Transparência: a transparência é uma meta importante dos sistemas
distribuídos, visto que é a habilidade de esconder o fato de que os
processos e recursos do sistema distribuído estão fisicamente separados
em vários computadores que integram o sistema distribuído.

Faça uma leitura da Referência [8] para compreender melhor tais características.

Quando falamos em Computação Distribuída, temos que falar sobre 3 plataformas de


processamento

• Cluster
• Grid
• Cluster Alocado na Nuvem

Cluster: Segundo algumas definições Cluster consiste em um aglomerado de


computadores, isto é, um conjunto de computadores conectados por uma rede local que
compartilham o processamento de uma aplicação. Habitualmente, apesar de um Cluster
ser um conjunto de computadores, ele ser mostra para o usuário como um único
computador, assim, o usuário pensa que esta lidando com apenas um único computador
e não sabe que por trás dele, há um conjunto de computadores que trabalham em conjunto.

Você pode encontrar claras definições sobre Sistemas Distribuídos na Referência [9] na
página 13.

A Figura 4 ilustra um Cluster composto por 6 máquinas. Habitualmente, as máquinas que


compõem o Cluster recebem o nome de Node, Nó, Estações de Processamento, ou ainda,
Unidade de Processamento. A formação de um Cluster pode ser máquinas do mesmo tipo,
isto é, máquinas que contém as mesmas configurações, ou por máquinas que contém
configurações diferentes. Quando um Cluster é composto por máquinas do mesmo tipo,
dizemos que é um Cluster Homogêneo. Já quando o Cluster é composto por máquinas
diferentes, dizemos que ele é um Cluster Heterogêneo.

Também é possível encontrar mais detalhes sobre Cluster na Referência [10] na página
22. Já na Referência [11], faça uma leitura das paginas 35 e 36 onde é detalhado o
Cluster Local e Cluster Remoto. Ainda na sobre a Referência [11], faça uma leitura
das páginas 33 e 34. Na página 33 é apresentado a arquitetura de um Cluster e na página
34 é apresentado um estudo sobre o balanceamento de carga em Cluster.
Figura 4. Sistema distribuído.
Fonte: Próprio Autor

Grid:

Assim como um Cluster um Grid também é um aglomerado de computadores


trabalhando em conjunto conectados por uma rede. Todavia, a principal diferença entre
Grid e Cluster é que Grid utiliza a internet para conectar os computadores, já um Cluster
utiliza uma rede local para conectar seus Nodes. A Figura 5 ilustra um Grid.
Figura 5: Grid

Fonte: Próprio Autor

Para finalizar o estudo sobre Computação Distribuída, faça uma leitura da Seção
“Sistemas Distribuídos” que se encontra na Referência [13] página 115.

Medida de Desempenho

É importante falamos um pouco sobre medidas de desempenhos. Já foi


mencionado que tanto o objetivo da computação paralela, como da computação
distribuída, é o ganho de desempenho, mas como saber se ao paralelizar a aplicação foi
possível ganhar desempenho? Uma forma para se mensurar o quanto de desempenho que
foi obtido no processamento paralelo da aplicação é a utilização do Speedup. Secundo
[5], “Speedup é uma forma de avaliar ou fazer um comparativo entre o tempo que se
gastava em uma transação com configurações em situações normais em comparação com
o tempo gasto com a capacidade adicional vinda do particionamento de dados”.
A formula para calcular o Speedup é,

𝑡𝑠
𝑆𝑝𝑒𝑒𝑑𝑢𝑝 =
𝑡𝑝

Onde, ts é o tempo gasto na execução com 1 processador, e tp é o tempo gasto


com p processadores.

Você pode encontrar mais detalhes sobre Speedup na Referência [5], na página
18. Também é possível obter mais informações na Referência [1] nas páginas 163 e 164.

Referências

[1] - BORDIN, Maycon. V.; SERPA, Matheus.da. S.; BRANDÃO, Daniel.dos. S.; AL.,
et. Processamento Paralelo e Distribuído. [Digite o Local da Editora]: Grupo A, 2021.
9786556901084. Disponível em:
https://integrada.minhabiblioteca.com.br/#/books/9786556901084/. Acesso em: 27 dez.
2021.

[2] - Coulouris, George, et al. Sistemas Distribuídos. Disponível em: Minha Biblioteca,
(5th edição). Grupo A, 2013. Disponível em:
https://integrada.minhabiblioteca.com.br/books/9788582600542

Acessado em: 06/01/2022

[3] - Soares, Flavio. Introdução À Ciência da Computação Com Jogos - Aprendendo a


Programar com Entretenimento. Disponível em: Minha Biblioteca, Grupo GEN, 2009.

Disponível em: https://integrada.minhabiblioteca.com.br/books/9788595154940

Acessado em 06/01/2022

[4] Computação Paralela: https://www.youtube.com/watch?v=9Wpo37vqqt8


Acessado em 06/01/2022

[5] - Pereira, Mariana, A. et al. Framework de Big Data. Disponível em: Minha
Biblioteca, Grupo A, 2020. Disponível em:
https://integrada.minhabiblioteca.com.br/books/9786556900803

Acessado em 06/01/2022

[6] – OpenMP https://www.openmp.org/ Acessado em 07/01/2022

[7] – Carlos Thomas - Introdução a Programação Paralela OpenMP -


https://www.youtube.com/watch?v=1JU931jZP2s Acessado em 07/01/2022

[8] Carvalho; S. A. L. Conceitos Iniciais de Sistemas Distribuídos – Disponível em:


https://laureatebrasil.blackboard.com/bbcswebdav/institution/laureate/conteudos/CTI_S
ISDIS_20/unidade_1/ebook/index.html Acessado em: 07/01/2022

[9] Paulo, MAIA, L. Arquitetura de Redes de Computadores, 2ª edição. Disponível em:


Minha Biblioteca, Grupo GEN, 2013.

Disponível em: https://integrada.minhabiblioteca.com.br/books/978-85-216-2436

Acessado em 07/01/2022

[10] SILVA, F.R.; SOARES, J.A.; SERPA, M.D.S.; AL., E. Cloud Computing. [Digite o
Local da Editora]: Grupo A, 2020. 9786556900193. Disponível em:
https://integrada.minhabiblioteca.com.br/#/books/9786556900193/

Acesso em: 07 Jan 2022

[11] PEREIRA, M.A.; NEUMANN, F.B.; MILANI, A.M.P.; AL., E. Framework de Big
Data. [Digite o Local da Editora]: Grupo A, 2020. 9786556900803. Disponível em:
https://integrada.minhabiblioteca.com.br/#/books/9786556900803/

Acesso em: 07 Jan 2022

[12] NELL, D.; JOHN, L. Ciência da Computação, 4ª edição. [Digite o Local da Editora]:
Grupo GEN, 2010. 9788521635215. Disponível em:
https://integrada.minhabiblioteca.com.br/#/books/9788521635215/

Acesso em: 08 Jan 2022


[13] Brookshear, J. G. Ciência da Computação. [Digite o Local da Editora]: Grupo A,
2013. 9788582600313. Disponível em:
https://integrada.minhabiblioteca.com.br/#/books/9788582600313/

Acesso em: 08 Jan 2022

Você também pode gostar