Ferramentas do usuário

Ferramentas do site


p:programacao_paralela

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anteriorRevisão anterior
Próxima revisão
Revisão anterior
p:programacao_paralela [2022/08/29 19:15] – [Grandes Nomes] Marcelo Schreiberp:programacao_paralela [2022/08/30 16:12] (atual) – [Grandes Nomes] Marcelo Schreiber
Linha 1: Linha 1:
 +====== 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 [[m:multiprocessamento|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 ======
 +
 +**[[f:frances_allen|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 [[c:compiladores|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.
 +
 +**[[e:edsger_dijkstra|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