Sem resumo de edição
Sem resumo de edição
 
(10 revisões intermediárias por 3 usuários não estão sendo mostradas)
Linha 1: Linha 1:
''''''Computação Paralela'''
= Conceito =
         
Computação paralela é uma forma de computação que opera sob o princípio de que grande problemas geralmente podem ser divididos em problemas menores, que então são resolvidos concorrentemente (em paralelo), em uma mesma máquina com multinúcleos ou multiprocesadores ou usando múltiplos computadores em rede para trabalhar em uma única tarefa. Isso é feito em busca maior desempenho, podendo realizar determinado número de tarefas em menor tempo. Também é utilizada para resolver problemas mais complexos e de maior dimensão. Outros motivos para se usar o paralelismo são: tirar partido de recursos computacionais não disponíveis localmente ou subaproveitados, ultrapassar limitações de memória quando a memória disponível num único computador  
Uma computação diz - se paralela quando um programa e executado sobre uma maquina multiprocessador em que todos os processadores partilham o acesso a memoria disponível. Assim e a forma de computação que vários cálculos são realizados ao mesmo tempo, isso nos permite operar sob o principio  de que grande problemas geralmente podem ser divididos em problemas menores, que então são resolvidos em paralelo. Existem diferentes formas de computação paralela: em bit, instrução, de dado ou de tarefa. A técnica de paralelismo já é empregada por vários anos, principalmente na computação que exige alto desempenho ente o interesse no tema cresceu devido às limitações físicas que previnem o aumento de frequência de processamento.
é insuficiente para a resolução do problema e ultrapassar os limites físicos de velocidade e de miniaturização que atualmente
Computadores paralelos podem ser classificados de acordo com o nível em que o hardware suporta paralelismo. Computadores com multinúcleos ou multiprocessadores possuem múltiplos elementos de processamento em somente uma máquina, enquanto clusters, MPP e grades usam múltiplos computadores para trabalhar em uma única tarefa. Arquiteturas paralelas especializadas às vezes são usadas junto com processadores tradicionais, para acelerar tarefas específicas.
começam a restringir a possibilidade de construção de computadores sequenciais cada vez mais rápidos.
Programas de computador paralelos são mais difíceis de programar que sequenciais, pois a concorrência introduz diversas novas classes de defeitos potenciais, como a condição de corrida. A comunicação e a sincronização entre diferentes subtarefas é tipicamente uma das maiores barreiras para atingir grande desempenho em programas paralelos.
Tradicionalmente, o software tem sido escrito para ser executado sequencialmente. Para resolver um problema, um algoritmo é construído e implementado como um fluxo serial de instruções. Tais instruções são então executadas por uma unidade central de processamento de um computador. Somente uma instrução pode ser executada por vez; após sua execução, a próxima então é executada.
Por outro lado, a computação paralela faz uso de múltiplos elementos de processamento simultaneamente para resolver um problema. Isso é possível ao quebrar um problema em partes independentes de forma que cada elemento de processamento pode executar sua parte do algoritmo simultaneamente com outros. Os elementos de processamento podem ser diversos e incluir recursos como um único computador com múltiplos processadores, diversos computadores em rede, hardware especializado ou qualquer combinação dos anteriores.
O aumento da frequência de processamento foi o principal motivo para melhorar o desempenho dos computadores de meados da década de 1980 a 2004. Em termos gerais, o tempo de execução de um programa corresponde ao número de instruções multiplicado pelo tempo médio de execução por instrução. Mantendo todo o resto constante, aumentar a frequência de processamento de um computador reduz o tempo médio para executar uma instrução, reduzindo então o tempo de execução para todos os programas que exigem alta taxa de processamento (em oposição à operações em memória.)
BENEFÍCIOS
Busca por maior desempenho, aplicações intrinsecamente paralelas, alto custo dos supercomputadores tradicionais, desenvolvimento de redes de computadores de alta velocidade e  desenvolvimento tecnológico na construção de microprocessadores.  




Bibliografia
= Concorrência =
http://www.dcc.fc.up.pt/~ricroc/aulas/0607/cp/apontamentos/parteI.pdf
Concorrência ou paralelismo potencial diz-se quando um programa possui tarefas que podem ser executadas em qualquer ordem sem alterar o resultado final. Assim, muitas delas podem ser processadas simultaneamente, reduzindo o tempo de execução dos programas.
 
 
= Comunicação e Sincronização =
A comunicação e a sincronização entre diferentes subtarefas é tipicamente uma das maiores barreiras para atingir grande desempenho em programas paralelos, pois a execução de determinada tarefa pode envolver o acesso a dados calculados por outras tarefas, sendo necessário que haja uma comunicação eficiente entre os núcleos de processamento. A comunicação dos processadores entre si e com as memórias pode ser implementada em hardware de várias formas, incluindo por memória compartilhada, barramento compartilhado ou uma rede interconectada.
 
 
= Linguagens de programação =
Linguagens de programação de memória compartilhada se comunicam ao manipularem variáveis de memória compartilhada. Exemplos de uso do modelo incluem POSIX Threads e OpenMP. Já a memória distribuída faz uso de troca de mensagens. Exemplos de uso do modelo incluem Message Passing Interface. Um conceito usado na programação paralela é o valor futuro, quando uma parte do programa promete processar dados para outra parte de um programa em um momento futuro.
 
 
= Aplicações =
Tradicionalmente, a programação paralela foi motivada pela resolução/simulação de
problemas fundamentais da ciência/engenharia de grande relevância científica e
econômica, denominados como Grand Challenge Problems (GCPs). Tipicamente, os GCPs simulam fenômenos que não podem ser medidos por experimentação, tais como: Fenômenos climáticos (movimento das placas tectônicas), Fenômenos físicos (órbita dos planetas), Fenômenos químicos (reações nucleares), Fenômenos biológicos (genoma humano), Fenômenos geológicos (atividade sísmica), Componentes mecânicos (aerodinâmica/resistência de materiais em naves espaciais), Circuitos eletrônicos (verificação de placas de computador).
 
Atualmente, as aplicações que exigem o desenvolvimento de computadores cada vez mais rápidos estão por todo o lado. Estas aplicações ou requerem um grande poder de computação ou requerem o processamento de grandes quantidades de informação. Alguns exemplos são: Bases de dados paralelas, Mineração de dados (data mining), Serviços de procura baseados na web, Serviços associados a tecnologias multimédia e telecomunicações, Computação gráfica e realidade virtual, Diagnóstico médico assistido por computador e Gestão de grandes industrias/corporações.
 
 
= Referências =
http://www.dcc.fc.up.pt/~ricroc/aulas/0708/ppd/apontamentos/fundamentos.pdf
 
http://www.slideshare.net/adrianots/computao-paralela-introduo
 
http://pt.wikipedia.org/wiki/Computa%C3%A7%C3%A3o_paralela#Mem.C3.B3ria_e_comunica.C3.A7.C3.A3o
 
http://weblogs.asp.net/andrenobre/archive/2010/04/03/programa-231-227-o-paralela-no-net-framework-4-parte-i.aspx

Edição atual tal como às 01h41min de 14 de novembro de 2013

Conceito

Computação paralela é uma forma de computação que opera sob o princípio de que grande problemas geralmente podem ser divididos em problemas menores, que então são resolvidos concorrentemente (em paralelo), em uma mesma máquina com multinúcleos ou multiprocesadores ou usando múltiplos computadores em rede para trabalhar em uma única tarefa. Isso é feito em busca maior desempenho, podendo realizar determinado número de tarefas em menor tempo. Também é utilizada para resolver problemas mais complexos e de maior dimensão. Outros motivos para se usar o paralelismo são: tirar partido de recursos computacionais não disponíveis localmente ou subaproveitados, ultrapassar limitações de memória quando a memória disponível num único computador é insuficiente para a resolução do problema e ultrapassar os limites físicos de velocidade e de miniaturização que atualmente começam a restringir a possibilidade de construção de computadores sequenciais cada vez mais rápidos.


Concorrência

Concorrência ou paralelismo potencial diz-se quando um programa possui tarefas que podem ser executadas em qualquer ordem sem alterar o resultado final. Assim, muitas delas podem ser processadas simultaneamente, reduzindo o tempo de execução dos programas.


Comunicação e Sincronização

A comunicação e a sincronização entre diferentes subtarefas é tipicamente uma das maiores barreiras para atingir grande desempenho em programas paralelos, pois a execução de determinada tarefa pode envolver o acesso a dados calculados por outras tarefas, sendo necessário que haja uma comunicação eficiente entre os núcleos de processamento. A comunicação dos processadores entre si e com as memórias pode ser implementada em hardware de várias formas, incluindo por memória compartilhada, barramento compartilhado ou uma rede interconectada.


Linguagens de programação

Linguagens de programação de memória compartilhada se comunicam ao manipularem variáveis de memória compartilhada. Exemplos de uso do modelo incluem POSIX Threads e OpenMP. Já a memória distribuída faz uso de troca de mensagens. Exemplos de uso do modelo incluem Message Passing Interface. Um conceito usado na programação paralela é o valor futuro, quando uma parte do programa promete processar dados para outra parte de um programa em um momento futuro.


Aplicações

Tradicionalmente, a programação paralela foi motivada pela resolução/simulação de problemas fundamentais da ciência/engenharia de grande relevância científica e econômica, denominados como Grand Challenge Problems (GCPs). Tipicamente, os GCPs simulam fenômenos que não podem ser medidos por experimentação, tais como: Fenômenos climáticos (movimento das placas tectônicas), Fenômenos físicos (órbita dos planetas), Fenômenos químicos (reações nucleares), Fenômenos biológicos (genoma humano), Fenômenos geológicos (atividade sísmica), Componentes mecânicos (aerodinâmica/resistência de materiais em naves espaciais), Circuitos eletrônicos (verificação de placas de computador).

Atualmente, as aplicações que exigem o desenvolvimento de computadores cada vez mais rápidos estão por todo o lado. Estas aplicações ou requerem um grande poder de computação ou requerem o processamento de grandes quantidades de informação. Alguns exemplos são: Bases de dados paralelas, Mineração de dados (data mining), Serviços de procura baseados na web, Serviços associados a tecnologias multimédia e telecomunicações, Computação gráfica e realidade virtual, Diagnóstico médico assistido por computador e Gestão de grandes industrias/corporações.


Referências

http://www.dcc.fc.up.pt/~ricroc/aulas/0708/ppd/apontamentos/fundamentos.pdf

http://www.slideshare.net/adrianots/computao-paralela-introduo

http://pt.wikipedia.org/wiki/Computa%C3%A7%C3%A3o_paralela#Mem.C3.B3ria_e_comunica.C3.A7.C3.A3o

http://weblogs.asp.net/andrenobre/archive/2010/04/03/programa-231-227-o-paralela-no-net-framework-4-parte-i.aspx