400 likes | 513 Views
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.
E N D
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ão-paralelizá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
Programas não-determinísticos podem passar a ilusão de determinismo
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) • Proverregras e mecanismosparacompartilharrecursos de processamentodispersosrede entre todososprocessos.
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çãointerprocesso e eficientesprotocolos de transportequesuportemessasprimitivas
Resumindo.... Concorrente: atividades simultâneas que colaboram entre si Paralela: atividades simultâneas independentes
Alguns problemas comuns em programas concorrentes • Erros de consistência de memória • Deadlock (impasse) • Starvation • Depuração e teste • (entre outros...)
Deadlocks (impasses) • Situação onde um sistema não pode progredir • Dependência circular entre processos que precisam reservar certos recursos
Starvation • Decorre de políticas injustas de escalonamento • Consequência: alguns processos nunca têm acesso aos recursos desejados