Anda di halaman 1dari 15

Programao paralela em Haskell

Ben Hur Bahia do Nascimento


Giovanni Viol Assis
Rodrigo Ferreira dos Santos Gonalves
DCC/UFLA Programao Paralela e Distribuda
Prof.: Marluce Rodrigues Pereira
Haskell
! Linguagem funcional.
! A computao vista como a avaliao de funes matemticas.
! No existe efeitos colaterais, logo a ordem da execuo das funes no importante.
! Avaliao Preguiosa.
! A computao de uma expresso somente ocorre quando o seu valor necessrio.
! Linguagem de alto nvel.
! Linguagem declarativa.
! Descreve O QUE deve ser feito ao invs DE COMO as instrues devem ser
executadas.

Paralelismo em Haskell
! Determinstico:
! Um programa paralelo sempre produz o mesmo resultado, independente de quantos
ncleos de processamento so usados para execut-los.
! Programas paralelizados podem ser depurados (Debugged) sem a necessidade de
execut-los em paralelo.
! No necessrio se preocupar com comunicao e nem com sincronizao.
! O programador indica onde o paralelismo est, deixando os detalhes de como executar
o programa em paralelo para o sistema de execuo (runtime system).
Paralelismo em Haskell
! Por possuir menos detalhes operacionais, programas em Haskell so abstratos,
portanto tem maior probabilidade de funcionar em uma maior variedade de
hardwares paralelos.
! Programas paralelos em Haskell podem tirar vantagem de tecnologias altamente
adaptadas ao sistema de execuo (runtime system), como por exemplo o
Garbage Collection em paralelo.
! A desvantagem: devido a vrios detalhes de execuo estarem escondidos,
problemas de desempenho so difceis de serem entendidos.
Problema escolhido: Sudoku
! Dado um arquivo contendo vrias instncias do problema Sudoku, dizer quantos
deles possuem soluo
! Escolhemos esse problema, pois cada instncia do problema pode ser resolvido
em tempos diferentes
! NP-Completo
Abordagem Sequencial
1. Atribui a f o nome do arquivo
2. L o contedo do arquivo
3. Divide o arquivo em linhas, cada
linha uma instncia do problema
4. Soluciona os problemas
5. Imprime quantos instncias do
problema possuem soluo
Como paralelizar?!
Monad Eval: rpar e rseq
! Paralelismo expressado usando o mnade Eval que vem com 2 operaes: rpar
e rseq.
! rpar: meu argumento pode ser avaliado em paralelo
! rseq: avalie meu argumento e espere pelo resultado
rpar/rpar
rpar/rseq
rpar/rseq/rseq
Abordagem por diviso de conjuntos de
instncias(particionamento esttico)
1. Divide-se a lista de problemas em
duas partes
2. Resolva em paralelo o conjunto as
3. Resolva em paralelo o conjunto bs
4. Aguardando terminar o
processamento paralelo
5. Aguardando terminar o
processamento paralelo
6. Retorna a concatenao das
solues
Particionamento Dinmico
Abordagem por diviso de instncias
1. A funo runEval avalia cada um
dos Evals
Concluso
! Existe paralelismo para linguagens funcionais, logo se seu problema possui uma
natureza funcional, no necessrio adapat-lo para uma linguagem procedural
apenas pelo paralelismo
Referncia
Marlow, Simon. Parallel and Concurrent Programming
in Haskell: Techniques for Multicore and
Multithreaded Programming. OReilly Media, Inc. 2012.