Linguagem de Programação IV
Introdução
Professor: M.Sc. Carlos Oberdan Rolim
Introdução ao processamento paralelo e
distribuido
*baseado no material de:
- Prof. Gerson Cavalheiro / Unisinos
- Benito Fernandes et al - UFPE
Processadores multi-núcleo
• Incluem vários núcleos em
uma única pastilha
– Número de instruções
simultâneas = número de
núcleos
• Cache compatilhada ou não
• Memória compartilhada ou
passagem de mensagens
Por que multi-núcleo?
• Antigamente, apenas aumentar o número de
transistores era suficiente
– Juntamente com o aumentos de cache
– E aumento da frequência de clock
• Hoje em dia, não é mais o caso
– Número de transistores continua crescendo
– Mas a frequência de clock está estagnada
– Consumo de energia e aquecimento são os fatores
limitantes
Por que multi-núcleo (cont.)?
• Novas abordagens tornaram-se necessárias
• Solução encontrada: paralelismo
– Diversos núcleos em uma mesma pastilha
– Memória única
• Reaproveitamento de outros componentes
• Localidade propicia melhor desempenho
• Alternativa: diversos processadores
– Supercomputadores usam essa abordagem
– Mais cara
Paralelismo funciona!
• Programa não paralelo
Paralelismo funciona!
• Programa paralelo
Paralelismo: O Bom, o Mau e o
Feio
• Processadores multi-núcleo podem propiciar
grandes aumentos de desempenho
– Melhor caso: aplicações N vezes mais rápidas,
onde N é o número de núcleos
• Entretanto, o aumento costuma ser menor
que isso
– Lei de Amdahl
• Aumento de desempenho é limitado pela porção nãoparalelizável da aplicação
Paralelismo: O Bom, o Mau e o
Feio (cont.)
• Faltou o Feio:
– Responder a pergunta do slide anterior não é o
suficiente
– É necessário saber tornar paralela a aplicação
• Criar aplicações paralelas é difícil
– Exige técnicas específicas
• Pois tem problemas específicos
– Alguns tipos de aplicação se prestam melhor à
paralelização do que outros
Ok....
Mas e a programação
concorrente ?!?!?
Sistemas concorrentes
• Execução particionada em unidades de
computação
– Independentes ou inter-dependentes
– Executadas simultaneamente ou sequencialmente
– Ilusão de simultaneidade
• Exemplos:
– Sistemas operacionais, servidores (web, de
aplicação, de DNS, etc.), simuladores
Sistemas paralelos
• Sistemas concorrentes desenvolvidos para ser
executados em hardware paralelo
– Supercomputadores
– Máquinas multi-núcleo
– Aglomerados (clusters)
• Técnicas para construir sistemas concorrentes
frequentemente aplicam-se aos paralelos
– Exceto quando a alocação de processos de
software aos elementos de hardware é
importante
Sistemas distribuídos
• Sistemas paralelos executados em uma rede
de processadores autônomos que não
compartilham memória
– Normalmente dispersos geograficamente
– Redes não tão rápidas
• E não tão confiáveis
• Técnicas mais específicas são necessárias
Concorrência
 Concorrência:
 Tradicionalmente: disputa por recursos;
 Dicionário: juntar-se para uma ação ou fim comum; contribuir;
cooperar;
 Outra abordagem: independência temporal
 Programação concorrente:
 Técnica de programação que explora a interação de atividades
concorrentes (simultâneas) definidas por uma aplicação
 Objetiva compartilhamento de dados ou cooperação para evolução
da execução.
Concorrência
Técnica de programação que explora a
independência temporal (simultaneidade) de
atividades definidas por uma aplicação.
Compartilhamento
de dados
Cooperação
Para execução
Concorrência
 Disciplinas envolvidas:





Arquiteturas de Computadores
Sistemas Operacionais
Paradigmas de Programação
Programação Paralela e Distribuída
Sistemas Distribuídos
Programação concorrente e paralela
representam a mesma coisa ?
Em que os sistemas concorrentes
são diferentes?
• Não-determinismo
• Interação entre processos (ou processadores ou
threads ou atores ou tarefas ...)
– Comunicação
– Sincronização
– Controle de acesso a recursos compartilhados
(gerenciamento)
• E os sistemas paralelos?
– Alocação de elementos de processamento a unidades de
hardware
• Infraestrutura de execução frequentemente cuida disso
Não-determinismo
• Programas sequenciais produzem as mesmas
saídas quando executados com as mesmas
entradas
– Dado que não realizam escolhas aleatórias
– Esta característica os torna determinísticos
• Um programa não-determinístico pode
produzir saídas diferentes para uma mesma
entrada
– Em execuções subsequentes
Não-determinismo (cont.)
• Programas paralelos e concorrentes são
intrinsecamente não-determinísticos
– São necessárias técnicas para torná-los
determinísticos
– Dependendo de quais ações são relevantes
• Fontes possíveis:
– Escalonamento
– Interação com o usuário
– Acesso a recursos
Um programa determinístico...
Um programa não determinístico...
Programas não-determinísticos podem
passar a ilusão de determinismo
Entrelaçamento (interleaving) de execuções
Interação entre processos
 Aspectos decorrentes da interação entre processos que
devem ser tratados na programação concorrente:
 Controle de acesso a recursos compartilhados (gerenciamento)
 Sincronização;
 Comunicação.
Interação entre processos
 Controle de acesso a recursos compartilhados
(gerenciamento)
Prover regras e mecanismos para
compartilhar recursos de processamento
dispersos rede entre todos os processos.
Interação entre processos
 Sincronização
 Para compartilharem recursos os processos concorrentes devem
ser sincronizados
Troca de informações entre duas tarefas
Mecanismo que permite controlar o
compartilhamento de dados entre tarefas
Comunicação
• Implícita na programação sequencial.
• Explícita na programação concorrente.
Interação entre processos
 Comunicação
Troca de dados através de primitivas de
comunicação interprocesso e eficientes
protocolos de transporte que suportem
essas primitivas
Resumindo....
Concorrente: atividades simultâneas que colaboram entre si
Paralela: atividades simultâneas independentes
Programar concorrente é diferente
de programar sequencial ?
Alguns problemas comuns em
programas concorrentes
•
•
•
•
•
Erros de consistência de memória
Deadlock (impasse)
Starvation
Depuração e teste
(entre outros...)
Erros de consistência de memória
Deadlocks (impasses)
• Situação onde um sistema não pode progredir
• Dependência circular entre processos que
precisam reservar certos recursos
Deadlocks (cont.)
Starvation
• Decorre de políticas
injustas de
escalonamento
• Consequência: alguns
processos nunca têm
acesso aos recursos
desejados
Download

Concorrência