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