Tabela de conteúdos
Visão geral
A programação paralela é uma forma de realizar muitos cálculos em simultâneo, operando com base de que grandes problemas podem ser frequentemente ser divididos em problemas menores e independentes, que são então resolvidos. Há diferentes tipos de computação paralela: bit, instrução, dados ou tarefa. Assim, evita-se a programação sequencial, a qual pode ser muito ineficiente.
Principais Marcos
Na década de 1950, começa-se a trabalhar em maneiras de tornar os programas mais eficientes. Diante disso, cria-se o conceito de “context switching”: salva-se o contexto (estado) de um processo antigo (suspenso) e o carregando para um novo processo, ou seja, guarda um processo para executá-lo mais tardiamente.
Além disso, também foi introduzido a ideia de “swapping”: um processo é trocado da memória RAM (rápida) para a memória de disco (lenta), durante essa comutação, muito tempo é perdido só para a transferência da informação (cresce linearmente), isto tudo é um “swap-in”, um “swap-out” seria o oposto (do disco para a RAM).
Alguns anos depois, na decáda de 60, já havia algumas implementações de ordens hierárquica de processos sequenciais. Assim, tornou-se realizável, a partir da ampliação de sistemas operacionais multi-tarefa, multi-thread e paralelos, como o “THE multiprogramming system” (1968).
Outrossim, outro grande marco foi 10 anos depois (1978), com o surgimento da Lógica de Hoare, a qual, com uma abordagem axiomática, aborda um conjunto de regras lógicas para argumentar rigorosamente pela correção na computação paralela, definindo claramente as interações entre processos concorrentes, possibilita-se, então, a criação de compiladores multi tarefa.
Por fim, é importante ressaltar que o primeiro processador multi-core (dual-core) para desktop, só foi surgir ao final de 2006, com a introdução do Pentium D pela intel. Portanto, estes dois núcleos eram responsáveis por dividir as tarefas entre si.
Grandes Nomes
Frances Elizabeth Allen - Liderou o desenvolvimento do PTRAN, um projeto que automatizou a execução em paralelo da linguagem FORTRAN, sua equipe PTRAN desenvolveu novos esquemas de detecção de paralelismo e criou o conceito de grafo de dependência de programa, o principal método de estruturação usado pela maioria dos compiladores de paralelização. Além disso, Allen foi a primeira IBM Fellow e em 2006 tornou-se a primeira mulher a ganhar o Prêmio Turing.
Edsger W. Dijkstra - O principal responsável pela criação da ordem hierárquica de processos sequenciais, sistemas de “garbage collection” em cooperação, além de ser o criador do sistema operacional “THE multiprogramming system”.
Gene Myron Amdahl - Projetista de computadores que formulou a lei de Amdahl, que afirma uma limitação fundamental da computação paralela.
Aplicações
Na computação paralela pode-se destacar, dentre várias, estas seguintes aplicações:
- Na bioinformática para o enovelamento de proteínas (algorítmo para visualização do arranjo tridimensional da proteína);
- Na velocidade de um algorítmo com programação dinâmica (resposta realizada com recursividade);
- Método de Monte Carlo (MMC), método estatístico que se baseia em amostragem aleatória em larga escala para obter resultados numéricos. Ou seja, ele usa a aleatoriedade dos dados para gerar resultados determinísticos do problema.
Impacto Social
A programação paralela principalmente impacta na velocidade de processos que antes seriam inviáveis. Mesmo que dificulte a implementação de determinado programa, quase todas as linguagens de programação, atualmente, possuem algum suporte a esse tipo de cooperação. Sendo assim, com o advento dos processadores multi-core, algumas vantagens como: melhor poder de processamento, mais desempenho, compartilhamento de dados, reutilização de funções, escalabilidade de aplicações, foram concebíveis. Aumentando a velocidade de processamento exponencialmente.
Desafios
Ainda existem algumas desvantagens nesta área. Softwares paralelos são mais difíceis de programar do que programas seriais, porque a simultaneidade introduz bugs em potencial, como condições de corrida. A comunicação e sincronização entre diferentes subtarefas é frequentemente um dos principais obstáculos para alcançar alta eficiência em programas paralelos. Olhando de outro ângulo, também podemos ver que nem todas as linhas paralelas levam a um aumento na velocidade. Como a tarefa é dividida em vários encadeamentos, esses encadeamentos normalmente passam algum tempo comunicando entre si. Em última análise, a sobrecarga de comunicação domina quando se trata do tempo necessário para resolver um problema. Nesse caso, quanto mais paralela for a execução, mais lento será o tempo total de execução. Este é um efeito chamado lentidão paralela.
Referências
1. Gene M. Amdahl | IEEE Computer Society, disponível em: https://www.computer.org/profiles/gene-amdahl
2. Charles Antony Richard Hoare – Wikipédia, a enciclopédia livre, disponível em: https://pt.wikipedia.org/wiki/Charles_Antony_Richard_Hoare
3. Concorrência e Paralelismo (Parte 1) | Entendendo Back-End para Iniciantes (Parte 3), disponível em: https://www.akitaonrails.com/2019/03/13/akitando-43-concorrencia-e-paralelismo-parte-1-entendendo-back-end-para-iniciantes-parte-3
4. Frances Allen - Wikipedia, disponível em: https://en.wikipedia.org/wiki/Frances_Allen
5. Edsger W. Dijkstra - Wikipedia, disponível em: https://en.wikipedia.org/wiki/Edsger_W._Dijkstra
6. Difference between Swapping and Context Switching, disponível em: https://www.geeksforgeeks.org/difference-between-swapping-and-context-switching
7. INE 5645 Programação Paralela e Distribuída, disponível em: http://www.inf.ufsc.br/~bosco.sobral/ensino/ine5645/Unidade1.pdf
8. Computação paralela – Wikipédia, a enciclopédia livre, disponível em: https://pt.wikipedia.org/wiki/Computa%C3%A7%C3%A3o_paralela