Buscar

Paralelismo

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

FATEC-PEL—SERVIÇO NACIONAL DE APRENDIZAGEM COMERCIAL
FACULDADE DE TECNOLOGIA SENAC PELOTAS
Organização e Arquitetura 
De Computadores
Professor: Carlos Vinícius Alves
Alunas: Patricia Das Neves Botelho
Janine Ochoa
PARALELISMO
RESUMO
Neste trabalho, apresentamos os principais conceitos de Paralelismo,
que envolve arquitetura de máquinas paralelas, níveis de paralelismo,
as soluções existentes atualmente e os programas utilizados para a
implementação de computação paralela e sua utilização.
Palavras-chave: Paralelismo, Máquinas Paralelas, Multiprocessadores,
Níveis de paralelismo.
INTRODUÇÃO
Paralelismo é uma técnica que consiste em quebrar tarefas grandes e geralmente complexas, em tarefas menores, para distribuí-las entre outros processadores interligados e executando simultaneamente as instruções a fim de obter resultados mais rápidos. Ele opera em dois níveis: paralelismo de hardware e de software. Paraleliza-se para obter aumento de desempenho, ganhos de performance computacional e diminuição do gasto de processamento.
Paralelismo de hardware visa melhorar o desempenho interno da CPU (memória cache, pipeline e unidades de execução múltiplas) e do sistema multiprocessado (SMP), para a resolução de problemas computacionais de forma paralela.
Paralelismo de software é a habilidade de acelerar a execução de um programa, a grosso modo, dividindo ele em pedaços e destinando cada trecho dessa divisão para ser executado entre os nós, ficando cada nó com um pedaço do código.
O início da década de 80 foi marcado pelo surgimento da filosofia VLSI de projeto de microcomputadores, que significou um fator estimulante para o desenvolvimento da computação, tanto em nível de arquiteturas paralelas quanto arquiteturas baseadas no modelo de von Neumann. Isto é devido à maior facilidade e ao menor custo no projeto de microprocessadores, cada vez mais complexos e menores. 
Na década de 90, as redes de computadores se tornaram mais rápidas e mais confiáveis, o que possibilitou a interligação dos computadores pessoais e estações de trabalho de maneira eficiente formando os sistemas distribuídos. 
Sistemas distribuídos são construídos com o intuito de oferecer uma imagem de sistema único, de maneira que o usuário não perceba que está trabalhando em vários computadores ao mesmo tempo, apesar de seus componentes estarem distribuídos. 
Sistemas distribuídos têm sido utilizados para a execução de programas paralelos, em substituição às arquiteturas paralelas, em virtude de seu menor custo e maior flexibilidade. Nesse sentido, apesar de terem surgido por motivações diferentes, a computação paralela e a computação distribuída têm demonstrado uma certa convergência, visto que ambas possuem características 3
e problemas semelhantes (por exemplo: balanceamento de carga, modularidade 
e tolerância a falhas). 
Dentro desse contexto, pode-se observar que a computação paralela e a computação sequencial de von Neumann, apesar de desenvolverem-se de maneira relativamente independente, atualmente têm apresentado uma relação de interseção significativa. 
O processamento paralelo consiste na divisão de uma determinada aplicação de maneira que ela possa ser executada por vários elementos de processamento, que por sua vez deverão cooperar entre si (comunicação e sincronismo), buscando eficiência através da quebra do paradigma de execução sequencial do fluxo de instruções, ditado pela filosofia de von Neumann 	
A ideia de usar o paralelismo na computação é muito antiga.
As diversas áreas nas quais a computação se aplica, sejam científicas, industriais ou militares, requerem cada vez mais potência computacional, em virtude dos algoritmos complexos que são utilizados e do tamanho do conjunto de dados a ser processado.
Além da busca por mais desempenho, outros fatores motivam o desenvolvimento da computação paralela, entre eles: 
• O desenvolvimento tecnológico (principalmente o surgimento da tecnologia VLSI de projeto de microprocessadores), permitiu a construção de microprocessadores de alto desempenho que, agrupados, possibilitam um ganho significativo de potência computacional. Também possibilitam uma melhor relação custo/desempenho, quando comparadas aos supercomputadores, que apresentam maior custo; 
• Restrições físicas tornam difícil o aumento de velocidade em um único processador. Apesar de a tecnologia de redução do tamanho das pastilhas estar em constante evolução, sabe-se que há um limite físico para essa redução; 
• Vários processadores fornecem uma configuração modular, o que permite o agrupamento desses processadores em módulos, de acordo com as necessidades das aplicações. Além disso, tem-se um meio de extensão do sistema através da inclusão de novos módulos; 
• Tolerância a falhas (por exemplo, através da redundância de 
hardware)
Soluções de processamento de múltiplos CPUs são consideradas como:
*Fortemente acopladas—devido à proximidade das CPUs;
*Fracamente acopladas—devido a distância entre as CPUs.
AS MÁQUINAS PARALELAS
A redução do custo das máquinas paralelas, tanto as multiprocessadas quanto as
multicomputadoras (clusters), possibilitou a sua utilização em aplicações que até pouco tempo eram pouco prováveis, como exemplo nas pequenas empresas, onde o volume de informações aumentou muito, exigindo desta forma um maior poder, em termos de capacidade, de processamento.
Uma realidade atual é utilização das máquinas duais (com dois processadores), e outra possibilidade é a utilização dos clusters baseados em computadores pessoais. Atualmente elas não implicam em um custo tão elevado de hardware, já que os preços dos computadores reduziram bastante nos últimos anos.
Entretanto, o software para estas máquinas não acompanhou esta tendência, pois não estão sendo desenvolvidos softwares paralelos, com exceção de alguns específicos como é o caso dos softwares científicos.
Estes softwares têm um grande interesse por parte da comunidade científica em decorrência da maior necessidade computacional que os algoritmos científicos exigem.
Este fato deve mudar nos próximos anos, pois o mercado das máquinas paralelas está em crescimento e o software deverá atender esta nova tendência. Além disso, cada vez mais necessitamos de poder de processamento que um único computador não consegue mais fornecer, tornando esta migração para o modelo paralelo um caminho certo. 	
Paralelismo e concorrência
Quando dois ou mais processos começam a sua execução ao mesmo instante mas não terminaram, quer dizer que existe a concorrência, que pode acontecer tanto em sistemas com um único processador como com sistemas com multiprocessadores.
Paralelismo ocorre quando há mais de um processador sendo executado ao mesmo tempo.
Existe também o paralelismo lógico ou pseudoparalelismo, que é quando vários processos são executados em um único processador, mas é executado um processo de cada vez.
Ou seja, em um determinado instante, somente um processo está sendo executado, enquanto os outros que já foram iniciados aguardam a liberação do processador para continuarem sua execução.
Baseando-se nas definições apresentadas acima é possível definir três tipos de estilos de programação dentro da computação, que são: 
• Programação sequencial: caracteriza-se pela execução de várias tarefas uma após a outra; 
• Programação concorrente: caracteriza-se pela iniciação de várias tarefas, sem que as anteriores tenham necessariamente terminado 
(sistemas multi ou uni processadores); 
• Programação paralela: caracteriza-se pela iniciação e execução das 
tarefas em paralelo (sistemas multiprocessadores). 
As diferenças entre os três estilos acima:
*Perde-se tempo executando uma tarefa após a outra. O algoritmo é ineficiente, pois gera desperdício de tempo. Mas o problema pode ser resolvido pela adoção de um algoritmo concorrente.
Neste caso, as tarefas são executadas concorrentemente, por um único processador. Evita-se assim o
tempo ocioso, e os resultados são mais satisfatórios.
O estudo do paralelismo está ligado ao fato de que, a limitação de um único processador não pode aumentar indefinidamente seus recursos computacionais, como por exemplo a frequência. 
Níveis de Paralelismo
O Paralelismo pode ser introduzido em vários níveis:
Paralelismo ao nível de CHIP
Um modo de aumentar a produtividade de chip é conseguir que ele faça várias coisas ao mesmo tempo. Duas técnicas são utilizadas: 
*Multithreading;
*Multicore.
Paralelismo em nível de instrução(Pipeline)
O paralelismo em nível de instrução (ILP-Instruction Level Parallelism) é uma família de técnicas de desenvolvimento de processadores e compiladores que aumentam o desempenho dos computadores, fazendo com que operações como leitura e escrita de memória, adição de inteiros, e multiplicações de ponto flutuante sejam executadas em paralelo. No nível de instruções o paralelismo é explorado por arquiteturas de processadores capazes de executar instruções ou operar dados em paralelo. É baseado na busca antecipada das instruções, dividindo a busca e a execução em duas partes distintas.
Pipeline(paralelismo, tubulação) amplia essa estratégia em vários estágios de busca e execução, criando o caminho dos dados.
O processamento paralelo consiste na divisão de uma determinada aplicação de maneira que ela possa ser executada por vários elementos de processamento, que por sua vez deverão cooperar entre si (comunicação e sincronismo), buscando eficiência através da quebra do paradigma de execução sequencial do fluxo de instruções, ditado pela filosofia de von Neumann.
Um Exemplo:
Paralelismo a nível do processador
Esse tipo de paralelismo é uma técnica que busca o ganho de desempenho associando duas ou mais CPUs organizados para executar uma determinada tarefa.
Técnicas utilizadas:
	Computadores matriciais(matriz de processadores delicados);
	Multiprocessadores(conjunto de processadores independentes);
	Multicomputadores.
Paralelismo em nível de Software
É possível executar um programa com capacidade de dividir uma tarefa em pequenas partes e executá-las em paralelo.
Como por exemplos diversos cálculos matemáticos ou ate mesmo atender a requisição de vários clientes sem que seja necessário criar uma fila de processamento.
Técnicas utilizadas:
	Threads;
	Processos filhos(fork);
Paralelismo multinível
O uso das máquinas vetoriais, multiprocessadas de sistemas multi-core tem sido algumas alternativas exploradas para satisfazer a necessidade dos desenvolvedores de software. A solução está baseada no desenvolvimento de arquiteturas paralelas. Chega-se, dessa forma, a composição de plataformas com múltiplos níveis de paralelismo.
Um paralelismo multinível é aquele que no qual existem diversos níveis de abstração de paralelismo. Os diferentes níveis de abstração de paralelismo podem estar nos próprios processadores(multi-core), interno a um computador(multiprocessados) ou entre vários computadores(clusters e grids). O gerenciamento de cada um desses níveis de abstração paralela é feito através de mecanismos específicos em nível de processador, núcleo do sistema operacional e middleware de gerenciamento 
-“Middleware” é um software de “conectividade” que consiste em um conjunto
de serviços que permite a interação, através da rede, de múltiplos processos
executando em uma ou mais máquinas. “Middleware” é essencial para migrar
aplicações de “mainframe” para aplicações cliente/servidor provendo
comunicação através de plataformas heterogêneas (Bray, 1998).-
Considerações Finais 
Nas primeiras décadas de existência da computação, onde memórias e processadores eram recursos caros, a construção de computadores com vários processadores não era uma opção muito viável. 
Atualmente, porém, essas restrições tecnológicas já não apresentam o mesmo peso. 
Mas embora os computadores continuem ficar cada vez mais rápidos, as demandas impostas a eles estão crescendo no mínimo tão rápido quanto.
Para enfrentar problemas cada vez maiores, os arquitetos de computadores estão recorrendo cada vez mais aos computadores paralelos.
Vários autores acreditam que essa potência só pode ser conseguida através do processamento paralelo. Além 
disso, o aumento de velocidade em processadores sequenciais tende a alcançar um valor limite. Segundo Lenatti, o processamento paralelo está rapidamente se tornando uma realidade dentro da comunidade empresarial, sendo a sua ótima relação custo/desempenho o seu fator de impulso comercial. Porém, substituir 
uma filosofia computacional de décadas de existência, como é a de von 
Neumann, não é uma tarefa fácil ou rápida. 
Em nível de hardware, muito já se desenvolveu em computação paralela, e muita experiência já foi adquirida. Porém, em nível de software paralelo, ainda existem muitas lacunas a serem preenchidas e muito ainda deve ser pesquisado até que se encontrem soluções ótimas, que impliquem na utilização dessas arquiteturas paralelas com grande desempenho. Segundo Zaluska, o custo de sistemas computacionais paralelos tende a ser dominado pelo custo de software. 
As características fundamentais que todo software paralelo deve oferecer abrangem: ser facilmente transportado entre plataformas de hardware diferentes, ser facilmente ampliado para acomodar grandes problemas sem dificuldade e ser de uso fácil. 
Pelotas, 29 de setembro de 2014
Fontes:
www.passeidireto.com
www.unicamp.com.br
www.gerds.utp.br.pdf
www.assumpcao.net.br/progrparalela.pdf

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais