Uso de Paralelismo de Dados em Algoritmos de Processamento de Imagens Utilizando Haskell

Documentos relacionados
USO DE PARALELISMO DE DADOS PARA MAIOR EFICIÊNCIA DE ALGORITMOS DE PROCESSAMENTO DE IMAGENS

USO DE PARALELISMO DE DADOS EM ALGORITMOS DE PROCESSAMENTO DE IMAGENS UTILIZANDO HASKELL

Linguagens para Programação Paralela. October 26, 2010

AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS

Programação Funcional

Uma proposta de implementação de árvores rubro-negras em Haskell de forma concorrente

OpenMP: Variáveis de Ambiente

Bibliografia em processamento paralelo

Sistemas Distribuídos e Paralelos

iversidade Federal do Rio Grande do Sul PARALELISMO NA LINGUAGEM HASKELL Vagner Franco Pereira Rodrigo Machado Lucas Mello Schnorr

Paralelismo em Computadores com Tecnologia Multicore

MAC Introdução à programação paralela e distribuída

Ruby e JRuby em... Paralelos e Distribuídos. Felipe Barden Lucas Fialho Zawacki

Paradigmas de Computação Paralela

Funções de Ordem Superior

Carlos Eduardo Batista Centro de Informática - UFPB

Curso de Programação Distribuída e Paralela 29/09/2008. Informática UFRGS. Sistemas Operacionais II (C. Geyer) Sincronização 1. Pg.

Aluno de Pós-Graduação em Engenharia de Software para Dispositivos Móveis pela UNINTER

Paradigmas de Programação

Memória Transacional de Software

Computadores e Programação (DCC/UFRJ)

Intel Thread Building Blocks (TBB)

MINISTÉRIO DA EDUCAÇÃO CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS DIRETORIA DE GRADUAÇÃO

Linguagem Funcional Haskell

Programação de Alto Desempenho - 2. Prof: Carla Osthoff

Avaliação de Desempenho

Programação concorrente (processos e threads)

Comparação dos algoritmos sequencial e paralelo para contagem de palavras e contexto

Concorrência em Processos

Introdução à Computação: Sistemas de Computação

Universidade Federal do Rio de Janeiro Informática DCC/IM. Arquitetura de Computadores II. Arquiteturas MIMD. Arquiteturas MIMD

Modelagem e implementação de programas concorrentes

Programação Funcional Aulas 5 & 6

Introdução OpenMP. Nielsen Castelo Damasceno

Uma introdução ao Apache Hama

Programação Funcional

DESENVOLVIMENTO DE UM ALGORITMO PARALELO PARA APLICAÇÃO EM CLUSTER DE COMPUTADORES

Computação Paralela e Distribuída. Heucles Jr

Técnicas de Processamento Paralelo na Geração do Fractal de Mandelbrot

Programação Funcional

Aspectos preliminares

VAMOS FALAR SOBRE CONCORRÊNCIA

Paralelização do Método de Jacobi em Memória Compartilhada 1

Paradigmas de Linguagens Computacionais (PLC) (Apresentação da disciplina)

Organização de Computadores II. Arquiteturas MIMD

SSC510 Arquitetura de Computadores. 6ª aula

PARALELIZAÇÃO DE ALGORITMO DE INSPEÇÃO DE ROTAS UTILIZANDO PERMUTAÇÃO LEXICOGRÁFICA 1

Introdução à Computação: Sistemas de Computação

Introdução aos Conceitos de Computação Paralela através da estimativa de Pi

Uma Arquitetura de Tutor Inteligente que Provê Suporte ao Diálogo com o Aluno Iniciante em Linguagem de Programação

Bibliografia. OpenMP. Disponibilidade de OpenMP. Abordagem SPMD. Nicolas Maillard

Processos Concorrentes

Universidade Federal do Rio de Janeiro Pós-Graduação em Informática. Introdução. Gabriel P. Silva. Gabriel P. Silva

Análise de Desempenho de Aplicações Paralelas do Padrão Pipeline em Processadores com Múltiplos Núcleos

30/5/2011. Sistemas computacionais para processamento paralelo e distribuído

Estrutura da Apresentação. Introdução ao Processamento Paralelo e Distribuído. Conceitos em PPD. Conceitos em PPD 4/26/09.

Árvore Binária de Busca Ótima - Uma Implementação Distribuída

Ferramentas para Programação em Processadores Multi-Core

Programação Concorrente e Paralela

Programação Paralela e Distribuída

Medida de desempenho

COMPARAÇÃO DE DESEMPENHO ENTRE IMPLEMENTAÇÕES DO ALGORITMO JOGO DA VIDA COM PTHREAD E OPEMMP 1

Palavras-chave: Memórias Transacionais, Haskell, Linguagem Funcional, Estrutura de Dados Concorrentes

Universidade Estadual de Maringá/Departamento de Informática Maringá, PR. Ciências Exatas e da Terra / Metodologia e Técnicas da Computação.

Introdução à Computação Parte 2

SSC PROGRAMAÇÃO CONCORRENTE. Aula 06 Modelos de Programação Prof. Jó Ueyama e Julio Cezar Estrella

Sistemas Distribuídos

SSC0611 Arquitetura de Computadores

Parallel Computing Paradigms

Programação Concorrente e Paralela. Noemi Rodriguez

Popularidade das Linguagens

INE 5645 Programação Paralela e Distribuída. Prof. João Bosco M. Sobral INE-UFSC

Programação Concorrente

Paralelismo na linguagem Haskell

EXECUÇÃO DE SISTEMAS DE EQUAÇÕES LINEARES EM PROCESSADORES MULTI-CORE 1

1.1 Descrição do problema A programação genética (PG) é uma meta-heurística utilizada para gerar programas de computadores, de modo que o computador

Programação Concorrente e Paralela

Informática UFRGS. Programação com Objetos Distribuídos (C. Geyer) Java Comunicação 1

Paralelização de Algoritmos de CFD em Clusters Multi-Core MC7. Escola de Verão Arquiteturas Multi-Core

UM ESTUDO COMPARATIVO DE DESEMPENHO UTILIZANDO PROGRAMAÇÃO SEQUENCIAL VS PARALELA APLICADO EM ALGORITMOS GENÉTICOS 1

Implementação da Especificação de Tempo Real Java para o EPOS

UNIVERSIDADE FEDERAL DE PERNAMBUCO CENTRO DE INFORMÁTICA GRADUAÇÃO EM ENGENHARIA DA COMPUTAÇÃO

XV ESCOLA REGIONAL DE ALTO DESEMPENHO ERAD 2015

Pedro Vasconcelos DCC/FCUP. Programação Funcional 7 a Aula Funções de ordem superior

Desenvolvendo aplicações com LabVIEW FPGA. Rogério Rodrigues Engenheiro de Marketing Técnico Marcos Cardoso Engenheiro de Vendas

What is? Eduardo Viola Nicola Disciplina de IPPD

Organização de Computadores

Fundamentos de Sistemas Operacionais

Sistemas Operacionais. Prof. Pedro Luís Antonelli Anhanguera Educacional

CAP-387(2016) Tópicos Especiais em

de petróleo. Um novo domínio chamado computação de propósito geral em processadores gráficos (GPGPU) surgiu quando os pipelines de gráficos de

AULA 03: PROCESSAMENTO PARALELO: MULTIPROCESSADORES

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2012.

Layout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs

Análise de Desempenho de Estratégias de Particionamento de Grafos

Sistemas de Tipos. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Características de Sistemas Distribuídos

Sistemas Distribuídos Aula 3

Linguagens de Programação. Introdução. Carlos Bazilio

Expressões Lambda. Programação Funcional. Capítulo 7. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Transcrição:

1/32 Uso de Paralelismo de Dados em Algoritmos de Processamento de Imagens Utilizando Haskell Pedro R. Mendes Júnior Lucília Figueiredo David Menotti Departamento de Computação Universidade Federal de Ouro Preto 26 de outubro de 2012

2/32 Organização Introdução Revisão da Literatura Desenvolvimento Cálculo da Árvore de Componentes Conectados Data Parallel Haskell Concurrent Haskell Experimentos Conclusões

Introdução 3/32

4/32 Introdução Objetivos: Capacidade processamento paralelo; Linguagem funcional (Haskell); Data Parallel Haskell (DPH); Concurrent Haskell (CH); Algoritmos de Processamento Digital de Imagens (PDI); [Matas et al., 2008]; Eficiência das implementações; comparações; implementações em outras linguagens;

5/32 Introdução Formas de paralelismo: Paralelismo de controle; criação expĺıcita de threads; sincronização por meio de mensagens e locks; Paralelismo de dados; conjunto de instruções em um conjunto de dados; emprego de um grande número de processadores.

6/32 Introdução Trabalho de Blelloch em NESL (NESted-parallel Language): Paralelismo de Dados Aninhados (NDP Nested Data Parallelism); modelo flexível; Paralelismo Plano de Dados (FDP Flat Data Parallelism); execução eficiente; grande escalabilidade; Data Parallel Haskell (DPH); extensão do compilador GHC.

7/32 Introdução Então, Área de PDI parece ser fértil; existem exemplos de sucesso; smoothing; segmentação; abordagens tradicionais; Duas das principais extensões Haskell; DPH; CH; Algoritmos não tradicionais de PDI; saída não corresponde a uma imagem; Árvore de Componentes Conectados (CCT Connected Component Tree); algoritmo de [Matas et al., 2008].

Revisão da Literatura 8/32

9/32 Revisão da Literatura Paralelismo e concorrência: Programação paralela; modelo determinístico; aproveitar os recursos; eficiência; facilidade de realizar testes; código puro; paralelismo de dados; Programação concorrente; modelo não determinístico; estrutura do programa; interagir com agentes externos; paralelismo de controle. Grande diferenciação entre programação paralela e programação concorrente; diferenciação nem tão evidenciada em outras linguagens; Observação: o modelo de programação determinístico não é suficiente para expressar todos os tipos de algoritmos paralelos [Marlow, 2012].

10/32 Revisão da Literatura Data Parallel Haskell (DPH): Biblioteca que mais nos chamou a atenção; modelo de NDP; sintaxe semelhante à sintaxe de códigos sequenciais; Paralelismo com base no array paralelo; substitui o tipo List de Haskell; pequenas diferenças na notação.

11/32 Revisão da Literatura Diferenças de notação com o tipo List de Haskell: Denotação do array paralelo; lista de elementos do tipo e: [e]; array paralelo de elementos do tipo e: [:e:]; Funções de ordem superior; adiciona-se o sufixo P; map mapp; filter filterp; unzip unzipp; Array comprehension; list comprehension: [x y x < list, y < [1, 2, 3]] parallel array comprehension: [ : x y x < parray, y < [:1, 2, 3 : ] : ]

12/32 Revisão da Literatura Concurrent Haskell (CH): Programação com threads expĺıcitas; mônada MVar para abstrair a comunicação de baixo nível; operações atômicas; quatro primitivas que permitem seu uso; newemptymvar : : IO (MVar a) takemvar : : MVar a > IO a putmvar : : MVar a > a > IO () forkio : : IO () > IO ThreadId Utilizamos a estrutura MVector; estrutura não persistente; representação da point-tree.

Desenvolvimento 13/32

14/32 Desenvolvimento Objetivos durante o desenvolvimento: Estudar a capacidade de paralelismo em Haskell; avaliar vantagens e desvantagens; encontrar pontos para possível desenvolvimento; Algoritmos de PDI; cálculo da CCT; algoritmo não tradicional. (a) (b)

15/32 Cálculo da Árvore de Componentes Conectados

16/32 Cálculo da Árvore de Componentes Conectados Representação da CCT: Matriz point-tree; mesma dimensão que a imagem; os elementos são as coordenadas do pai; raiz possui coordenada não válida; Representação apropriada; verificação e atualização O(1); evitamos a utilização de árvores; Cálculos parciais sobre uma dimensão; paralelamente; junções dos resultados parciais; vários níveis de junções; cada nível possui junções paralelas.

17/32 Cálculo da Árvore de Componentes Conectados (c) (d)

18/32 Cálculo da Árvore de Componentes Conectados (e) (f) (g) (h)

Data Parallel Haskell 19/32

20/32 Data Parallel Haskell Características: Extensão que mais nos chamou a atenção; NDP; área de PDI aparentou ser fértil; representação da imagem como array de arrays; Código semelhante ao código sequencial; paralelismo automático; arrays paralelos.

21/32 Revisão da Literatura Etapa de vetorização [Jones et al., 2008]:

22/32 Data Parallel Haskell Limitações: API limitada; diferente da API sobre listas; sem as funções foldl e foldr; etapas sequenciais não podem ser realizadas por dentro do DPH; Impossibilidade de uso de código não vetorizável ; exemplo do prelude próprio; etapas sequenciais não podem ser realizadas por fora do DPH. Observação: A etapa de cálculo da CCT sobre uma dimensão não é possível de ser paralelizada.

Concurrent Haskell 23/32

24/32 Concurrent Haskell Características: Concorrência; sem garantia de determinismo; uso de uma mônada de estados; Apropriado a utilização de MVector; alterações não sequenciais na point-tree; dependentes do fluxo de execução.

25/32 Concurrent Haskell Implementação: Semelhante a uma implementação imperativa; objetivamos a simples comparação de tempo; Semelhante a uma implementação sequencial; definição da função mapm P; mesmo tipo que a função mapm.

26/32 Concurrent Haskell mapm P : : Monad m => (a > m b) > [a] > m () mapm P f xs = do mvars < myreplicate (length xs) newemptymvar mapm ( forkio. fthread) $ zip mvars xs mapm takemvar mvars where fthread (mvar, l ) = f l >> putmvar mvar () myreplicate : : Int > IO a > IO [a] myreplicate n x = sequence $ replicate n x mapm P matas1d [0.. height 1]

Resultados e Experimentos 27/32

28/32 Resultados e Experimentos Implementações do algoritmo de [Matas et al., 2008]: Haskell; Concurrent Haskell; C++; PThreads; MATLAB; Parallel Computing Toolbox.

29/32 Resultados e Experimentos 7 imagens; 10 execuções em cada imagem; Intel Pentium i3; 4 processadores. Haskell MATLAB Seq. 7,72 ± 0,11 7200 1 thread 7,71 ± 0,15 7200 2 threads 5,14 ± 0,23 7200 4 threads 5,12 ± 0,19 7200 C++ Seq. 2,17 ± 0,06 Par. 0,83 ± 0,02 Haskell speedup: C++ speedup: 7, 72 = 1, 51 5, 12 2, 17 = 2, 61 0, 83

Conclusões 30/32

31/32 Conclusões Paralelismo em Haskell; Data Parallel Haskell; Concurrent Haskell; Árvore de Componentes Conectados; Insucesso com o DPH; limitação na API; impossibilidade de mesclar código não paralelo; Avaliação com o CH; semelhante a uma linguagem imperativa; perda da pureza ; utilização de MVector; Comparações; Haskell (CH); C++ (PThreads); MATLAB (inviável); Matrizes em Haskell; Haskell persistente; atualizações em matrizes; Trabalho futuro; possibilidade de incremento na API do DPH.

Obrigado! 32/32

Jones, S. P., Leshchinskiy, R., Keller, G., and Chakravarty, M. M. T. (2008). Harnessing the multicores: Nested data parallelism in haskell. In Hariharan, R., Mukund, M., and Vinay, V., editors, IARCS Annual Conference on Foundations of Software Technology and Theoretical Computer Science (FSTTCS 2008), volume 2 of Leibniz International Proceedings in Informatics (LIPIcs), pages 383 414, Dagstuhl, Germany. Schloss Dagstuhl Leibniz-Zentrum fuer Informatik. Marlow, S. (2012). Parallel and concurrent programming in haskell. In Zsók, V., Horváth, Z., and Plasmeijer, R., editors, Central European Functional Programming School, volume 7241 of Lecture Notes in Computer Science, pages 339 401. Springer Berlin / Heidelberg. 10.1007/978-3-642-32096-5 7. Matas, P., Dokládalová, E., Akil, M., Grandpierre, T., Najman, L., Poupa, M., and Georgiev, V. (2008). 32/32

Parallel algorithm for concurrent computation of connected component tree. In Blanc-Talon, J., Bourennane, S., Philips, W., Popescu, D., and Scheunders, P., editors, Advanced Concepts for Intelligent Vision Systems, volume 5259 of Lecture Notes in Computer Science, pages 230 241. Springer Berlin / Heidelberg. 10.1007/978-3-540-88458-3 21. 32/32