A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Haskell# Uma Extensão Paralela Para Haskell

Apresentações semelhantes


Apresentação em tema: "Haskell# Uma Extensão Paralela Para Haskell"— Transcrição da apresentação:

1 Haskell# Uma Extensão Paralela Para Haskell
Universidade Federal de Pernambuco Centro de Informática Pós-Graduação em Ciências da Computação Haskell# Uma Extensão Paralela Para Haskell Dissertação de Mestrado Autor: Francisco Heron de Carvalho Junior Orientador: Prof. Dr. Rafael Dueire Lins

2 Objetivo “Desenvolver uma extensão para a linguagem funcional Haskell, para exploração do paralelismo” Premissas paralelismo eficiente; arquiteturas de memória distribuída; desenvolvimento modular de programas; raciocínio sobre programas paralelos; modelo de paralelismo de OCCAM;

3 Estrutura da Dissertação
Capítulo 1 Introdução Capítulo 2 Haskell# Capítulo 3 Aspectos da Construção de Aplicações Haskell# Capítulo 4 Implementação de Haskell# Capítulo 5 Conclusões e Trabalhos Futuros

4 Estrutura da Dissertação
Capítulo 1 Introdução Capítulo 2 Haskell# Capítulo 3 Aspectos da Construção de Aplicações Haskell# Capítulo 4 Implementação de Haskell# Capítulo 5 Conclusões e Trabalhos Futuros

5 Linguagens Funcionais
Origem LISP, -calculus; Principais características e virtudes; Compilação de programas funcionais avanços obtidos nos últimos anos; Ling. funcionais e processamento paralelo; “linguagens funcionais constituem uma alternativa real para o processamento paralelo”

6 Linguagens Funcionais
Haskell linguagem funcional pura e não-estrita; elaborada por um comitê científico, constituído em 1987 durante a conferência FPCA’87; suporte a funções de alta ordem, polimorfismo ad hoc, polimorfismo paramétrico, sistema de módulos, avaliação lazy, tipos algébricos, casamento de padões, compreensão de listas, rico conjunto de tipos, etc.;

7 Linguagens Funcionais
Haskell (cont.) Haskell tornou-se um padrão para pesquisa e desenvolvimento em linguagens funcionais; Rico conjunto de implementações eficientes (NHC, GHC, Hugs, CMC/Haskell, ...); O padrão Haskell 98; “Haskell está em constante evolução. Um novo comitê tem sido constituído para elaboração de um novo padrão, chamado Haskell II”

8 Processamento Paralelo
Motivações para o processamento paralelo; Modelos e Arquiteturas de Suporte: SIMD - Single Instruction Multiple Data; MIMD - Multiple Instruction Multiple Data; Memória Distribuída X Memória Compartilhada; Transparência do paralelismo: Paralelismo Implícito X Paralelismo Explícito;

9 Processamento Paralelo
Limitações e Desafios Gerenciamento do paralelismo; Granularidade; Inconvenientes do paradigma imperativo; Dificuldade de programação; Portabilidade; Engenharia de programas; Raciocínio sobre programas paralelos;

10 Estrutura da Dissertação
Capítulo 1 Introdução Capítulo 2 Haskell# Capítulo 3 Aspectos da Construção de Aplicações Haskell# Capítulo 4 Implementação de Haskell# Capítulo 5 Conclusões e Trabalhos Futuros

11 Haskell# - Características
Hierarquização entre os sub-conjuntos seqüencial (funcional) e paralelo; Modularidade; Raciocínio e prova de propriedades sobre programas paralelos (redes de Petri); Facilidades para implementação; Paralelismo de grossa granularidade; Arquiteturas de memória distribuída; Alocação estática e explícita de processos; Comunicação estática e explícita entre processos;

12 Haskell# - Características
Haskell# Configuration Language Haskell# Configuration Language HCL Haskell

13 Haskell# - Subconjunto Seqüencial
Linguagem Haskell padrão; Módulos Funcionais constituem módulos Haskell; module Compressor(main) where main :: [FContents] -> IO [FContents] main contents = return (compress contents) (...) constituem unidades de particionamento funcional de aplicações Haskell#;

14 Haskell# - Subconjunto Paralelo
HCL - Haskell# Configuration Language Instanciação de processos funcionais; declarações module; Construção da rede de processos funcionais; declarações connect; Alocação dos processos funcionais aos nós; declarações alloc; Inicialização a aplicação; declarações start;

15 Haskell# - Subconjunto Paralelo
Instanciação de Processos Funcionais A partir do conjunto de módulos funcionais; Portas de comunicação (interface); nome, protocolo e direção; PROCESSO FUNCIONAL função main A1 A2 An V1 V2 Vm INTERFACE DE ENTRADA INTERFACE DE SAÍDA (V1,V2,...Vm)

16 Haskell# - Subconjunto Paralelo
<module_declaration> ::= module M input p1::t1,p2::t2,... pn::tn output q1::u1,q2::u2,... qm::um instances i1,i2,... in M é o nome do módulo funcional; pi e qj são nomes de portas de entrada e saída, respectivamente; ti e uj são tipos Haskell (protocolos); ik são nomes de processos funcionais; OBS.: as declarações input e output são facultativas;

17 Haskell# - Subconjunto Paralelo
Construção da rede de processos funcionais Canais de Comunicação; mapeamento entre duas portas de comunicação de processos distintos; tipados, unidirecionais, ponto-a-ponto e síncronos; Regras para construção de canais: as portas devem ter o mesmo protocolo; as portas devem possuir direções opostas; cada porta deve ser conectada a um único canal;

18 Haskell# - Subconjunto Paralelo
<connect_declaration> ::= connect pfi.opjip to pfk.iplkp ik; pfn é um nome de processo funcional; ipxyz é o nome da x-ésima porta de entrada do processo funcional pfy, com protocolo z; opxyz é o nome da x-ésima porta de saída do processo funcional pfy, com protocolo z.

19 Haskell# - Subconjunto Paralelo
Alocação dos processos funcionais aos nós estática; muitos-para-um; por classes de nós; modelagem de arquiteturas heterogêneas; arquivos nodeclasses e nodeid; estratégia orientada à arquitetura; favorece eficiência; estratégia orientada à aplicação; favorece portabilidade;

20 Haskell# - Subconjunto Paralelo
Nós Virtuais Nós Físicos Nó n3 Nó n1 Nó n2 Nó n4 d h g e f c b a Processos Funcionais

21 Haskell# - Subconjunto Paralelo
nodeclasses nodeid wide,thin fast,slow f1e1.di.ufpe.br wide,fast f1e2.di.ufpe.br wide,fast f1e3.di.ufpe.br thin,fast f1e4.di.ufpe.br thin,fast f1e5.di.ufpe.br wide,slow f1e6.di.ufpe.br thin,slow Exemplo de Classificação de Nós

22 Haskell# - Subconjunto Paralelo
<alloc_declaration> ::= alloc(c1,c2,...cn) pf1,pf2,...pfm ci é o nome de uma classe de nó; pfi é um nome de processo funcional; n0; (é permitido não fazer-se restrição de classe) m1; (pelo menos um processo deve ser alocado a um nó)

23 Haskell# - Subconjunto Paralelo
Execução de uma Aplicação Haskell# Estados de execução de um processo funcional; Executando; bloqueado em leitura; bloqueado em escrita; finalizado; Estado de execução da aplicação; Inicialização da Aplicação; configuração do estado inicial da aplicação; Aplicações finalizáveis e não-finalizáveis;

24 Haskell# - Subconjunto Paralelo
<start_declaration> ::= start pfi arg1 arg2 ... argn pfi é um nome de processo funcional; argj é um argumento para a função main do processo funcional; n0;

25 f a c b d e a b c d e f nó 1 nó 2 tempo bloqueado em leitura
application Ex with final state module C_Example input i1::String, i2 ::Int output o1::[Int] instances c <Declarações dos demais módulos> connect a.o1 to f.i1 connect a.o2 to c.i1 connect b.o1 to c.i2 connect b.o2 to d.i1 connect b.o3 to e.i1 connect c.o1 to f.i2 connect d.o1 to f.i3 connect d.o2 to e.i2 alloc (wide,fast) a, c, f alloc slow b, d, e start a start b f a b c d e o1 i1 o2 i2 i3 i1 nó 1 o1 i2 o1 o2 o2 i1 o3 o2 i1 i2 nó 2 bloqueado em leitura executando bloqueado em escrita finalizado tempo t0 t1 t2 t3 t4 t5 t6 t7 a b c d e f {o1,o2} {o2,o3} {o1} {i1} {o2} {i2} {i3}

26 Estrutura da Dissertação
Capítulo 1 Introdução Capítulo 2 Haskell# Capítulo 3 Aspectos da Construção de Aplicações Haskell# Capítulo 4 Implementação de Haskell# Capítulo 5 Conclusões e Trabalhos Futuros

27 Haskell# - Aspectos da ... Balanceamento de Carga;
Configurações válidas; conectividade da rede de processos; deadlocks; Determinismo; Engenharia de Programas.

28 Haskell# - Aspectos da ... Balanceamento de Carga;
Configurações válidas; conectividade da rede de processos; deadlocks; Determinismo; Engenharia de Programas.

29 Haskell# - Balanc. de Carga
Mecanismos dinâmicos e automáticos (ling. funcionais paralelas em geral) X Mecanismos estáticos e explícitos (proposta para Haskell#) “nossa proposta visa reduzir a sobrecarga do mecanismo de balanceamento sobre o desempenho da aplicação”

30 Haskell# - Balanc. de Carga
Otimizando o Balanceamento de Carga O que queremos... Evitar ociosidade de processadores; Minimizar o custo da comunicação; Ferramentas disponíveis em Haskell# Alocação de processos a um mesmo nó; Classificação de nós;

31 Haskell# - Aplicações Válidas
Definição (Aplicação Válida) “Uma aplicação Haskell# é considerada válida se, e somente se, atinge, durante a execução, o estado final (finalizável) ou entra em um loop inifinito (não-finalizável), com a avaliação cíclica de seu conjunto de processos funcionais”

32 Haskell# - Aplicações Válidas
j P Bloqueado em Leitura na i-ésima porta de entrada P Bloqueado em Escrita na j-ésima porta de saída E S j i j P E S Executando S Valor está sendo transmitido pelo canal Int i j P Bloqueado em Escrita na j-ésima porta de saída E S E i i j P P Bloqueado em Leitura na i-ésima porta de entrada E S Finalizado

33 Haskell# - Aplicações Válidas
compressor_2 write_file_2 write_file_3 compressor_3 write_file_4 compressor_1 write_file_1 compressor_4 read_file E S [FContents] 1 2 [FName] 3 4 5 6 7 8

34 Haskell# - Aplicações Válidas
Deadlocks “Um conjunto de processos está em deadlock se cada processo no conjunto está esperando (bloqueado) por um evento que somente outro processo do conjunto pode causar” Causas de deadlocks em aplicações Haskell# Interdependência de dados entre proc. funcionais; Má ordenação de portas de comunicação; Prevenção estática, em tempo de programação; Proposta de Haskell#; Evitando sobrecarga de tempo e espaço;

35 Haskell# - Aplicações Válidas
C, D, F e G são processos interdependentes A 1 2 S S Ciclo Direto E E 1 1 “Para evitar o deadlock, um dos processos no ciclo deve ser inicializado explicitamente e a aplicação deve ser configurada como não-finalizável” 1 B C 1 D S E 1 2 1 S E S E S E 1 1 1 2 2 E F 1 1 G E S E S

36 Haskell# - Aplicações Válidas
Finalizável Não-finalizável a b c S E a b c S E a b c S E a b c S E a b c S E a b c S E a b c S E APLICAÇÃO BLOQUEADA !!!

37 Haskell# - Aplicações Válidas
B k B B=C E S S i i k i E S S S S S C=D c c c E E S E E E j j l j D A A A=D S E E l l Critério de Ordenação Válida l  j e k  i

38 Haskell# - Aplicações Válidas
Ordenação Válida Ordenação Inválida a b c S E 1 2 a b c S E 1 2 a b c S E 1 2 a b c S E 1 2 a b c S E 1 2 a b c S E 1 2 a b c S E 1 2 DEADLOCK !!!

39 Haskell# - Aplicações Válidas
Regras para construção de aplicações válidas: A rede de processos deve estar conectada; Aplicações que possuem um ou mais conjuntos de processos funcionais interdependentes devem ser configuradas como não-finalizáveis; Pelo menos um processo em cada conjunto de processos interdependentes na aplicação deve ser ativado explicitamente;

40 Haskell# - Aplicações Válidas
Regras para construção de aplicações válidas (continuação) A ordenação das portas deve obedecer o critério de ordenação válida; Os processos raízes devem ser ativados explicitamente; Em uma aplicação finalizável, um processo que não é raiz nunca deve ser ativado explicitamente;

41 Haskell# - Aspectos da ... Balanceamento de Carga;
Configurações válidas; conectividade da rede de processos; deadlocks; Determinismo; Engenharia de Programas.

42 Haskell# - Determinismo
Facilitar o tratamento formal de aplicações; Determinismo em Haskell# a nível seqüencial: determinismo de Haskell; a nível paralelo: canais ponto-a-ponto e síncronos; Importância do não-determinismo para modelagem do comportamento dinâmico da aplicação e da arquitetura alvo; Separação entre os sub-conjuntos determinístico e não-determinístico da linguagem;

43 Haskell# - Aspectos da ... Balanceamento de Carga;
Configurações válidas; conectividade da rede de processos; deadlocks; Determinismo; Engenharia de Programas.

44 Haskell# - Eng. de Programas
Modularidade Importante atributo em Engenharia de Software; Vantagens Redução da complexidade das aplicações; Reuso de componentes; Independência funcional entre os módulos Alto grau de coesão; Baixo grau de acoplamento; Inerente ao modelo de aplicações Haskell#;

45 Problema Mód. Funcionais Implementados Programa de Configuração
Decomposição Funcional Módulos Funcionais Especificação dos Módulos (Interface e Comportamento) Especificação dos Módulos Funcionais Integração Preliminar Rede de Processos Funcionais Preliminar Construção dos Módulos Relatório de Custos de Computação para cada Mód. Funcional Decomposição do Domínio Mód. Funcionais Implementados Rede de Processos Funcionais Final Programa de Configuração Mapeamento dos Processos Funcionais aos nós do Ambiente Paralelo

46 Estrutura da Dissertação
Capítulo 1 Introdução Capítulo 2 Haskell# Capítulo 3 Aspectos da Construção de Aplicações Haskell# Capítulo 4 Implementação de Haskell# Capítulo 5 Conclusões e Trabalhos Futuros

47 Haskell# - Implementação
Objetivo Protótipo para avaliação das decisões de projeto de Haskell#; Ferramentas Arquitetura Alvo: IBM SP2; Compilação de códigos Haskell: GHC (Glasgow Haskell Compiler); Instanciação e Comunicação: MPI (Message Passing Library).

48 Haskell# - Implementação
Ambiente MPI processo funcional M P I S t u b A B E N T C Haskell RTS unpack pack Valores buffer de envio de recepção MPI_Ssend MPI_Recv

49 Haskell# - Implementação
mód. funcionais *.hs mód. auxiliares def. gerais HHash.hs Biblioteca MPI Config. *.hcl Classes de nós nodeclasses nós nodeid Programa Principal GHC mód. funcionais *.o mód. auxiliares *..o comunicação Channels.o instanciação Main.o def. gerais HHash.o pré-processador Haskell HCL mpcc instanciação Main.hs comunicação Channels.hs alocação host.list inicialização <nome_apl> protocolos Protocols..hs Executável

50 Haskell# - Implementação
Módulo Funcional Módulo Funcional Módulo Funcional Instanciação e Controle Main.hs Definições Globais HHash.hs Comunicação Channels.hs

51 Estrutura da Dissertação
Capítulo 1 Introdução Capítulo 2 Haskell# Capítulo 3 Aspectos da Construção de Aplicações Haskell# Capítulo 4 Implementação de Haskell# Capítulo 5 Conclusões e Trabalhos Futuros

52 Haskell# - Conclusões “Haskell# adequa-se a implementação de aplicações de alto-desempenho, tendo em vista sobretudo os aspectos de desempenho, confiabilidade, portabilidade e simplicidade de programação” “Haskell# adequa-se a implementação de aplicações de alto-desempenho, tendo em vista sobretudo os aspectos de desempenho, confiabilidade, portabilidade e simplicidade de programação” “Haskell# adequa-se a implementação de aplicações de alto-desempenho, tendo em vista sobretudo os aspectos de desempenho, confiabilidade, portabilidade e simplicidade de programação” “Haskell# adequa-se a implementação de aplicações de alto-desempenho, tendo em vista sobretudo os aspectos de desempenho, confiabilidade, portabilidade e simplicidade de programação” “Haskell# adequa-se a implementação de aplicações de alto-desempenho, tendo em vista sobretudo os aspectos de desempenho, confiabilidade, portabilidade e simplicidade de programação”

53 Haskell# - Trabalhos Futuros
Implementação sobre o compilador Haskell/CMC; Suporte ao não-determinismo; Relaxamento das condições de sincronia dos canais de comunicação; comunicação de streams (listas infinitas); Possibilidade do reuso de configurações; Facilidade ao suporte do paralelismo de dados; Análise de desempenho com aplicações reais;

54 ?


Carregar ppt "Haskell# Uma Extensão Paralela Para Haskell"

Apresentações semelhantes


Anúncios Google