Algoritmos paralelos eficientes para alguns problemas de processamento de Cadeia de Caracteres Alunos: Diego Alencar dos Santos Melo Felipe Formagini Brant Leonardo Gomes de Oliveira
Conteúdo Processamento Paralelo Arquiteturas de Computadores Paralelos Paradigmas de Programação Conclusões
O que é Processamento Paralelo? Execução simultânea (concorrente) de vários programas, em diferentes processadores, visando a solução de um único problema
Por que Usar Programação Paralela? Algumas classes de problemas: Grandes demais para máquinas seqüenciais – tempo de execução muito longo Os resultados somente são úteis se obtidos dentro de um limite máximo de tempo
Vantagens da Computação Paralela Computação mais rápida Melhor relação custo/benefício Escalabilidade: o desempenho de um programa melhora se ele for executado em mais processadores
Validação dos Resultados fornecidos pela Computação Paralela Resultados obtidos devem ser os mesmos: a cada execução do código paralelo quando comparados com aqueles obtidos na versão seqüencial do programa
Por que preciso Programar em Paralelo? Não existem ferramentas de auxílio ao desenvolvimento de programas paralelos que identifiquem automaticamente o paralelismo de aplicações genéricas gerem código eficiente para as mesmas
Por que preciso Programar em Paralelo? (II) A programação paralela pode ser dividida em duas etapas Encontrar o paralelismo Explorar o paralelismo
Determinando Paralelismo É a parte mais difícil Uma dica: como você faria para distribuir sua aplicação entre vários trabalhadores? A sutileza do que você procura é a razão pela qual o compilador não pode fazer a paralelização por você!
Explorando Paralelismo Para explorar o paralelismo, deve-se distribuir a carga computacional entre os diferentes processadores A melhor forma de se fazer isso depende da natureza da aplicação e da arquitetura do computador paralelo usado: mapeamento => eficiência
Forma de um Programa Paralelo Inicialização Tarefa 1 Tarefa 2 Tarefa 3 Divisão das Tarefas Coleta Fim
Rodada de Computação/Comunicação
Controle Explícito do Paralelismo O programador decompõe o problema em tarefas independentes: Decomposição de dados Decomposição de controle O programador codifica explicitamente o controle entre os processos
Decomposição de Dados Os dados do problema são particionados entre os diferentes processadores Cada processador executa basicamente o mesmo código, só que sobre dados diferentes
Exemplos de Decomposição de Dados Cálculo da área sob uma curva Tarefas independentes!
Vantagens da Decomposição de Dados Pode-se dividir o domínio de forma a que todos os processadores realizem a mesma quantidade de computação Muitos problemas exigem comunicação entre as tarefas somente nas fronteiras dos subdomínios de dados
Sincronismo e Comunicação Processos devem cooperar entre si Troca de dados deve ser feita na ordem correta Sincronismo é necessário!
Medindo o Desempenho do Programa Paralelo Quando se desenvolve uma aplicação paralela, é útil sabermos o quanto seu desempenho se aproxima do ótimo Essa valor teórico é função: da fração seqüencial f do código do nº de processadores, n
Medindo o Desempenho do Programa Paralelo (II) A diferença entre o valor ideal e o valor obtido na prática aumenta com o aumento do nº de processadores Para todo programa paralelo, há um valor de n acima do qual não compensa ir
Medindo o Desempenho do Programa Paralelo (III) No mundo real, o overhead causado pela comunicação entre processadores chega até a reduzir o speedup após certos valores de n Speedup: Quantas vezes o código paralelo fica mais rápido (que sua versão seqüencial) com o nº de processadores utilizados
Exemplo Localizar a sequência que possui soma máxima.
Exemplo Divide as tarefas para os n processadores, de forma que apenas o último poderá conter um número diferente dos demais.
Exemplo 3
Conclusões Computação paralela é a forma mais acessível de se resolver problemas que exigem muita computação Está se difundindo cada vez mais pela queda no custo dos componentes eletrônicos