Algoritmos paralelos eficientes para alguns problemas de processamento de Cadeia de Caracteres...
Transcript of Algoritmos paralelos eficientes para alguns problemas de processamento de Cadeia de Caracteres...
Algoritmos paralelos eficientes para alguns problemas de processamento de
Cadeia de Caracteres
Alunos:Diego Alencar dos Santos MeloFelipe Formagini BrantLeonardo 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
Exemplo
3
15 12
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