tese de doutorado francisco heron de carvalho junior rafael dueire lins orientador programação...
TRANSCRIPT
Tese de DoutoradoTese de Doutorado
Francisco Heron de Carvalho JuniorFrancisco Heron de Carvalho Junior
Rafael Dueire LinsRafael Dueire LinsOrientadorOrientador
Programação Paralela Eficiente e de Alto Nível Programação Paralela Eficiente e de Alto Nível sobre Arquiteturas Distribuídassobre Arquiteturas Distribuídas
AntecedentesAntecedentes
• Idéias de Idéias de LinsLins (a partir do final da década de 80); (a partir do final da década de 80);– Linguagens funcionais Linguagens funcionais paralelasparalelas;;
– Hierarquia de processos;Hierarquia de processos;
– Integração à Integração à ambienteambiente dede provaprova (redes de Petri); (redes de Petri);
– PrototipaçãoPrototipação rápida e rápida e simulaçãosimulação de programas; de programas;
– Incorporação de Incorporação de bibliotecasbibliotecas encapsuladasencapsuladas;;
• Desenvolvimentos anteriores:Desenvolvimentos anteriores:– Haskell#:Haskell#:
• Lima, 2000 (tese de doutorado);Lima, 2000 (tese de doutorado);
• Carvalho, 2000 (dissertação de mestrado);Carvalho, 2000 (dissertação de mestrado);
Motivações e Estado-da-ArteMotivações e Estado-da-ArteComputação de Alto DesempenhoComputação de Alto Desempenho
• Consolidação da Consolidação da supercomputação distribuídasupercomputação distribuída; ;
• MPP’s (MPP’s (Massive Parallel ProcessorsMassive Parallel Processors););– SupercomputadoresSupercomputadores propriamente ditos; propriamente ditos;
• ClusterCluster computingcomputing;;– Supercomputação com Supercomputação com equipamento de prateleiraequipamento de prateleira ( (commoditiescommodities););
– Excelente Excelente relação custo / benefíciorelação custo / benefício frente à MPP’s; frente à MPP’s;
– Evolução do Evolução do hardwarehardware e e softwaresoftware;;
– Aumento na Aumento na escala de usuáriosescala de usuários (supercomputação para todos); (supercomputação para todos);
• Grid computingGrid computing;;– Supercomputação Supercomputação geograficamente distribuídageograficamente distribuída;;
– Aplicações paralelas de Aplicações paralelas de grande escalagrande escala e e complexidadecomplexidade;;
• Novas aplicações extrapolam Novas aplicações extrapolam computação científicacomputação científica;;
Motivações e Estado-da-ArteMotivações e Estado-da-Arte Ferramentas de Programação ParalelaFerramentas de Programação Paralela
• Paralelismo implícitoParalelismo implícito é ineficiente e pouco escalável; é ineficiente e pouco escalável;
• Programação paralela distribuída (Programação paralela distribuída (explícitaexplícita););
• Passagem de mensagens:Passagem de mensagens:
– Parallel Virtual MachineParallel Virtual Machine (PVM): ambientes heterogêneos; (PVM): ambientes heterogêneos;
– Message Passing InterfaceMessage Passing Interface (MPI): ambientes homogêneos ( (MPI): ambientes homogêneos (clustersclusters atuais); atuais);
Eficiência, portabilidade e escalabilidade Eficiência, portabilidade e escalabilidade ::
– Primitivas de Primitivas de baixo nívelbaixo nível como funções de bibilotecas; como funções de bibilotecas;
Modularidade, abstração, tratamento formal, etc.Modularidade, abstração, tratamento formal, etc.::
– Inadequação ao desenvolvimento de Inadequação ao desenvolvimento de programas de grande escalaprogramas de grande escala;;
– Entrelaçamento de código;Entrelaçamento de código;
– Inadequação às modernas técnicas de desenvolvimento de Inadequação às modernas técnicas de desenvolvimento de softwaresoftware;;
– Simplicidade relativa !!! Simplicidade relativa !!!
ObjetivoObjetivo
Desenvolvimento do modelo # para programação paralela Desenvolvimento do modelo # para programação paralela distribuída como uma evolução à Haskell#, assumindo-se distribuída como uma evolução à Haskell#, assumindo-se premissas advindas no panorama tecnológico emergente premissas advindas no panorama tecnológico emergente
para computação de alto desempenhopara computação de alto desempenho
• Tópicos Específicos:Tópicos Específicos:
– Concepção do modelo #;Concepção do modelo #;• Análise das deficiências de Haskell# original, proposição e avaliação de Análise das deficiências de Haskell# original, proposição e avaliação de
soluções, implementação de protótipos;soluções, implementação de protótipos;
– Uso de Redes de Petri para tratamento formal de programas #;Uso de Redes de Petri para tratamento formal de programas #;
– Implementar nova versão para Haskell# baseado no modelo #;Implementar nova versão para Haskell# baseado no modelo #;
– Implementar aplicações e avaliar desempenho;Implementar aplicações e avaliar desempenho;
– Prototipação do ambiente # de desenvolvimento (VHT);Prototipação do ambiente # de desenvolvimento (VHT);
EstruturaEstrutura
• Motivações e Objetivos;Motivações e Objetivos;• O modelo #;O modelo #;• Análise de programas # com redes de Petri;Análise de programas # com redes de Petri;• Implementação (Haskell#);Implementação (Haskell#);• Avaliação de desempenho;Avaliação de desempenho;• Conclusões;Conclusões;• Propostas de trabalhos futuros.Propostas de trabalhos futuros.
EstruturaEstrutura
• Motivações e objetivos;Motivações e objetivos;• O modelo #;O modelo #;• Análise de programas # com redes de Petri;Análise de programas # com redes de Petri;• Implementação de Haskell#;Implementação de Haskell#;• Avaliação de desempenho;Avaliação de desempenho;• Conclusões;Conclusões;• Propostas de trabalhos futuros.Propostas de trabalhos futuros.
O Modelo #O Modelo #
• A premissa básica: A premissa básica: Hierarquia de ProcessosHierarquia de Processos– Programação em dois níveis hierarquicamente distingüidos:Programação em dois níveis hierarquicamente distingüidos:
– Paradigma de coodenação;Paradigma de coodenação;
Nível de Coordenação
Nível de Computação
Interface via lazy streams
(“não invasiva”)
Linguagem Sequencial (Haskell)
Linguagem # (Configuração)
Conceito Primitivo:Conceito Primitivo: ComponentesComponentes
• Entidades que caracterizam Entidades que caracterizam funcionalidadesfuncionalidades;;
• Podem ser classificados em:Podem ser classificados em:– SimplesSimples: Computações : Computações sequenciais;sequenciais;
• Conjunto de componentes simples = Meio de computaçãoConjunto de componentes simples = Meio de computação
• Programados na linguagem Programados na linguagem host host (Haskell, no caso de Haskell#)(Haskell, no caso de Haskell#) ;;
– CompostosCompostos: Computações : Computações paralelasparalelas;;• Conjunto de componentes compostos = Meio de coordenaçãoConjunto de componentes compostos = Meio de coordenação
• Programados na linguagem #, pela composição de outros componentes;Programados na linguagem #, pela composição de outros componentes;
#
Argumentos Pontos de Retorno
Programa # = Coleção Programa # = Coleção de Componentesde Componentes
#
#
#
#
Hierarquia de ProcessosHierarquia de Processos
Nível de Coordenação (#)
#
#
# #
#
Nível de Computação ()
Componente de Aplicação (raiz)
• Em nível de Em nível de computaçãocomputação::– Programação sequencial Programação sequencial convencionalconvencional;;
– Em Haskell# = Em Haskell# = HaskellHaskell;;
• Em nível de Em nível de coordenaçãocoordenação– Linguagem #:Linguagem #: configuração de componentes; configuração de componentes;
– Descrição de topologias de processos;Descrição de topologias de processos;
– Composição de componentes:Composição de componentes:• AninhamentoAninhamento de componentes; de componentes;
• SobreposiçãoSobreposição de componentes; de componentes;
• Suporte a noção de Suporte a noção de esqueletos topológicos parciaisesqueletos topológicos parciais;;
Estruturando Programas #Estruturando Programas #
Próximos Slides!!
Nível de Coordenação
Capturando a Essência da Programação Paralela
Distribuída(passagem de mensagens)
A Linguagem # A Linguagem # (abstrações)(abstrações)Nível de CoordenaçãoNível de Coordenação
Especificando ComponentesEspecificando ComponentesConfiguração #Configuração #
Processos interagem por troca explícita de mensagens
recv a 1
x:=x+1
0
1
3
2
4
send a 0
send buf 2
print a
0
1
3
2
4
Especificando ComponentesEspecificando ComponentesConfiguração #Configuração #
Portas e UnidadesPortas e Unidades
unidade… …
Portas de Saída
Portas de Entrada
Unidades e Unidades e InterfacesInterfaces
• Componentes compostos descrevem redes de Componentes compostos descrevem redes de unidadesunidades, que , que interagem por meio de interagem por meio de canais de comunicaçãocanais de comunicação;;
• Unidades Unidades (peças básicas)(peças básicas)::
– Abstração para Abstração para entidades executáveisentidades executáveis (generalização de processos); (generalização de processos);
• InterfaceInterface
– Classe de unidades que compartilham Classe de unidades que compartilham comportamento análogocomportamento análogo;;
– Analogia: Analogia: InterfacesInterfaces estão para estão para unidadesunidades, assim como:, assim como:
• TiposTipos de dadosde dados estão para estão para variáveisvariáveis, em programas;, em programas;
• ClassesClasses estão para estão para objetosobjetos em modelos orientados a objetos; em modelos orientados a objetos;
– Entidades primtivasEntidades primtivas, a partir das quais , a partir das quais unidadesunidades são são instanciadasinstanciadas;;
InterfaceInterface
• Uma Uma interfaceinterface é descrita por: é descrita por:– Uma coleção de Uma coleção de portasportas ( (entradaentrada ou ou saídasaída););
– Uma expressão de ativação (comportamento):Uma expressão de ativação (comportamento):• Formalismo: Formalismo: Expressão regular controlada por semáforos;Expressão regular controlada por semáforos;
• Equivalência com Equivalência com redes de Petri rotuladas terminaisredes de Petri rotuladas terminais;;
• Descreve as Descreve as sequências válidassequências válidas de ativação das portas; de ativação das portas;
… …
Comportamento de UnidadesComportamento de UnidadesCombinadores da Expressão de AtivaçãoCombinadores da Expressão de Ativação
• parpar aa11 a a22 …a …ann :: concorrência; concorrência;
• seqseq aa11 a a22 …a …ann : : sequência;sequência;
• altalt aa11 a a22 …a …ann : : alternativa;alternativa;
• repeatrepeat aa :: repetição; repetição;– until : until : condição de terminação (finalização de condição de terminação (finalização de streamsstreams););
– counter : counter : número de repetições pré-fixadonúmero de repetições pré-fixado;;
– forever : forever : infinito;infinito;
• !! pidpid :: ativação de ativação de portaporta de saída; de saída;
• ?? pidpid : : ativação de ativação de portaporta de entrada; de entrada;
• signalsignal ss :: incremento de incremento de semáforosemáforo
• waitwait ss :: decremento de decremento de semáforosemáforo
Comunicação via Comunicação via LazyLazy StreamsStreams
• Sequências de dados com informação de mesma natureza;Sequências de dados com informação de mesma natureza;
vv11, , vv22, …, , …, vvnn;;
– Ao final, acompanha um Ao final, acompanha um terminador de terminador de stream stream ((EOSEOS));;
• Portas Portas streamstream::
– Sempre ativadas no contexto de combinadores Sempre ativadas no contexto de combinadores repeatrepeat;;
– Terminador de Terminador de streamstream e e condição de terminação de repetiçãocondição de terminação de repetição;;
• Múltiplos Múltiplos níveis de aninhamentoníveis de aninhamento ( (flagflag *): *):
– EOSEOS é acompanhado do aninhamento da é acompanhado do aninhamento da streamstream terminada; terminada;
– Transmissão de Transmissão de <<<<<<11>,<>,<22,,33>>,<<>>,<<33,,44>,<>,<55,,66,,77>>>>>>::
• [Val [Val 11, , Eos Eos 33, Val , Val 22, Val , Val 33, , Eos Eos 33, , Eos Eos 22, Val , Val 33, Val , Val 44, , Eos Eos 33, Val , Val 55,,
Val Val 66, Val , Val 77, , Eos Eos 33, , Eos Eos 22, , Eos Eos 11];];
Comunicação viaComunicação via Lazy Streams Lazy Streams
interface NestingExample t # (x*, y**::t) -> (z***::t) behavior: repeat seq {x?; z! repeat seq { y?; z!; repeat seq {x?; y?; z!} until z } until <y & z> } until <x & y & z>
zx
y
*
**
***[t]
[[t]][[[t]]]
• Em Haskell#:Em Haskell#:– Portas Portas streamstream são associadas à listas nos são associadas à listas nos argumentosargumentos e e pontos pontos
de retornode retorno do módulo funcional associado à unidade; do módulo funcional associado à unidade;
– Daí o conceito de Daí o conceito de LazyLazy streamsstreams;;
– Intercalação entre computação e comunicaçãoIntercalação entre computação e comunicação sem sem comprometimento da hierarquia de processos;comprometimento da hierarquia de processos;
Especificação de UnidadesEspecificação de Unidades
Agrupamento
de PortasPorta Individual
Função de LigaçãoFunção de Ligação
g f
Função de Ligação
+
Função de LigaçãoFunção de LigaçãoAgrupamentos Agrupamentos choicechoice
f!
+
f!+ …
…
f!!!
Função de LigaçãoFunção de LigaçãoAgrupamentos não-Agrupamentos não-choicechoice
f!
…
!
!…
UnidadesUnidades VirtuaisVirtuais
• Unidade Unidade parametrizadaparametrizada por sua por sua funcionalidadefuncionalidade::
– Não associada a um Não associada a um componentecomponente;;
• Operação Operação assignassign::
– Substituindo uma Substituindo uma unidade virtualunidade virtual por uma por uma unidade não-virtualunidade não-virtual;;
– Preservação comportamental;Preservação comportamental;
• Esqueletos topológicos parciaisEsqueletos topológicos parciais ou ou componente abstratoscomponente abstratos::
– Pelo menos uma Pelo menos uma unidade virtualunidade virtual em sua composição; em sua composição;
– Composição por Composição por sobreposiçãosobreposição e e aninhamentoaninhamento;;
– Descrições topológicas de alto nível:Descrições topológicas de alto nível:
• Geração de código otimizado (uso de bibliotecas);Geração de código otimizado (uso de bibliotecas);
• Mapeamento de processos aos processadores;Mapeamento de processos aos processadores;
• Melhora capacidade de raciocínio sobre programas;Melhora capacidade de raciocínio sobre programas;
Configurando Componentes Configurando Componentes AbstratosAbstratos
… …assign cell # (s,l) -> (n,o) to pipeline.stage # l -> o
pipe_line
stage
assigncell
Sobrepondo Componentes Sobrepondo Componentes AbstratosAbstratos
… …
pipe_linemesh
stage
… … assigncell
assign mesh.cell # (s,l) -> (n,o) to pipeline.stage # l -> o
Sobrepondo Componentes Sobrepondo Componentes AbstratosAbstratos
…… …
meshpipe_line
Operações sobre Operações sobre Unidades VirtuaisUnidades Virtuais
• Mecanismo de abstração;Mecanismo de abstração;
• Operações suportadas:Operações suportadas:– UnificaçãoUnificação: : nn unidades unidades 11 unidade; unidade;
– FatoraçãoFatoração: : 11 unidade unidade nn unidades; unidades;
– ReplicaçãoReplicação: : kk unidades unidades kk**nn unidades; unidades;
• Unidades Unidades à direitaà direita em em qualquerqualquer nível de aninhamento; nível de aninhamento;
• Preservação comportamental:Preservação comportamental:– Sequências de ativação válidasSequências de ativação válidas na interface das na interface das unidades unidades
resultantesresultantes deve ser um sub-conjunto das sequências válidas nas deve ser um sub-conjunto das sequências válidas nas unidades originaisunidades originais..
• Agrupamentos aninhados de portas;Agrupamentos aninhados de portas;– Semântica de ativação em redes de Petri;Semântica de ativação em redes de Petri;
Unificação de UnidadesUnificação de Unidades
wA
wB
cell
wa<-a e cell<-a conectadas à portas distintas
i
j
i j
i
wb<-b e cell<-b conectadas à mesma porta
i
a
mmb
c
d
res
choice
unify
c
d
res
res
b
b
a
a
unit wA # FarmWorker unit wB # FarmWorkerunit cell # GridElem…interface FarmWorker # in -> out behavior: seq {in?; out!}…interface GridElem # (l,u) -> (r,d) behavior: repeat seq { par {r!; d!}; par {l?; t?} }
interface MatrixMult # FarmWorker a -> res, # FarmWorker b -> res, # interact like GridElem behavior: seq {a?;b?; do interact; res!}unify wA # a -> res,
wB # b -> res, cell # interact to mm # MatrixMult connections a<>: choice
Fatoração de UnidadesFatoração de Unidades
someStrategy
factorize
pipe[1]
pipe[2]
pipe[3]
s1s4
s4
s4
s2
s3
index i range [1,3]…factorize merge3 # [/s[i]/] -> o to [/pipe[i] # Pipe s[i] -> o/] connections o<>: someStrategy
unit merge3 # Merge3…interface Merge3 # Pipe s1 -> s4 # Pipe s2 -> s4 # Pipe s3 -> s4 behavior: repeat seq {par {s1?; s2?; s3?}; s4!} until <s1 & s2 & s3 & s4>
merge3
s2s1 s3
s4
Replicação de UnidadesReplicação de Unidades
u2
u1
broadcast choice
someStrategy1 someStrategy2
replicate
replicate 3 u1 # a -> (b,_), u2 # (_,c) -> d connections a<>: someStrategy1, b<>: someStrategy2, c<>: broadcast, d<>: choice
a
d
b
c
x
y
u2[1]
u1[1]
u2[2]
u1[2]
u2[3]
u1[3]
a a ab b b
dc dc dc
x
y
x
y
x
y
Esqueleto Esqueleto FarmFarm
distributor collector
worker[1]
worker[2]
worker[N]
? ?
Esqueleto Esqueleto Pipe-LinePipe-Line
…
interface Pipe # in -> out behavior: repeat seq {in? -> out!} until <in & out>
pipe[1] pipe[2] pipe[N]
Esqueleto Esqueleto MeshMesh
…
…
…
… … …
interface GridElem # Pipe l -> r # Pipe u -> d behaving as: repeat seq {par {r!;d!}; par {l?;t?}} until <r & d & l & t>
Esqueleto Esqueleto TorusTorus
…
…
…
… … …
par
titi
on b
y D
istr
ibu
teM
atri
x
com
bin
e by
C
omb
ineM
atri
x
partition by ?
par
titi
on b
y ?
com
bine b
y ?
index i,j range [1,N]…[/ assign matrix_mult[i][j] # (al,bt) -> (ar,bd,res) to mm_grid[i][j] # (al,bt) -> (ar,bd,res)
/]
assign mA to farmA.distributor
assign mB to farmB.distributor
assign mC to collector
index i,j range [1,N]…[/ assign matrix_mult[i][j] to mm_grid[i][j] /]
Esqueletos MPIEsqueletos MPI
• Abstração das primitivas de Abstração das primitivas de comunicação coletivacomunicação coletiva de MPI; de MPI;
– Tradução direta realizada pelo compilador;Tradução direta realizada pelo compilador;
• 13 esqueletos: 13 esqueletos: BcastBcast, , ScatterScatter, , ScattervScatterv, , Reduce_scatterReduce_scatter, ,
ScanScan, , GatherGather, , GathervGatherv, , ReduceReduce, , AllgatherAllgather, , AllgathervAllgatherv, ,
AlltoallAlltoall, , AlltoallvAlltoallv, , AllreduceAllreduce;;
• Esqueletos podem informar ao compilador informações de Esqueletos podem informar ao compilador informações de
alto nível sobre topologia da rede;alto nível sobre topologia da rede;
– Geração de código otimizado;Geração de código otimizado;
– Otimização da alocação de processadores;Otimização da alocação de processadores;
– Simplicicação da rede de Petri equivalente;Simplicicação da rede de Petri equivalente;
Implementação de NPBImplementação de NPB
• NAS = NAS NAS = NAS Parallel BenchmarksParallel Benchmarks
– NASA Research at Ames, EUANASA Research at Ames, EUA;;
• Kernels: Kernels: EPEP, , ISIS, , CGCG;;
– Extensivo uso de Extensivo uso de comunicação coletivacomunicação coletiva;;
– Usadas nos Usadas nos benchmarksbenchmarks mostrados adiante; mostrados adiante;
• Aplicações Simuladas: Aplicações Simuladas: LULU, , SPSP e e BTBT;;
• Padrão SPMD:Padrão SPMD:
– Derivação de programas # a partir de programas MPI;Derivação de programas # a partir de programas MPI;
Implementação de ISImplementação de IS
MPI_Alltoallv(key_buff1, send_count, send_displ, MPI_INT, key_buff2, recv_count, recv_displ, MPI_INT, MPI_COMM_WORLD );
MPI_Allreduce(bucket_size, bucket_size_totals, NUM_BUCKETS+TEST_ARRAY_SIZE, MPI_INT, MPI_SUM, MPI_COMM_WORLD );
MPI_Send(&key_array[total_local_keys-1], 1, MPI_INT, my_rank+1, 1000, MPI_COMM_WORLD );
MPI_Irecv(&k, 1, MPI_INT, my_rank-1, 1000, MPI_COMM_WORLD, &request );
kb2 kb1 bst bs
klkr IIS
Declaração de InterfaceDeclaração de Interface
interface IIS # bs* like IAllReduce # kb* like IAllToAllv # k like RShift behaviour: seq {repeat seq {do bs; do kb} until <bs & kb>; do k}
kRShift
IAllReduceIAllToAllvkb bs
Implementação de ISImplementação de ISp[4]
p[1]
p[2]
p[3]
AllReduce
Topology
unit bs_comm
unit bs_comm as AllReduce(4, MPI_SUM, MPI_INTEGER)
AlltoAllv
Topology
p[4]
p[1]
p[2]
p[3]
unit kb_comm
unit kb_comm as AllToAllv(4)
Implementação de ISImplementação de IS
p[4]
p[1]
p[2]
p[3]
k_shift
unit k_shift as RShift(4)
Implementação de ISImplementação de IS
AlltoAllv
Topology
is_unit[4]
is_unit[1]
is_unit[2]
is_unit[3]
AllReduce
Topology
Implementação de ISImplementação de IS
… …… …
is_unit[i]
kb_comm.p[i] bs_comm.p[i]
k_shift.p[i]
unify bs_comm.p[i] # bs, kb_comm.p[i] # kb, k_shift.p[i] # k to is_unit[i] # IIS
Implementação de ISImplementação de IS
AlltoAllv
Topology
is_unit[4]
is_unit[1]
is_unit[2]
is_unit[3]
AllReduce
Topology
IS
IS
IS
IS
Implementação de ISImplementação de IS
IS
IS
IS
IS
Haskell Programming
Implementação de ISImplementação de IS
Implementation of ISImplementation of ISconfiguration IS<PROBLEM_CLASS, NUM_PROCS, MAX_KEY_LOG2, NUM_BUCKETS_LOG2, TOTAL_KEYS_LOG2, MAX_ITERATIONS, MAX_PROCS, TEST_ARRAY_SIZE> with
use ISuse Skeletons.Collective.AllReduceuse Skeletons.Collective.AllToAllvuse Skeletons.Misc.RShift
index i range [1..NUM_PROCS]
interface IIS # bs* like IAllReduce # kb* like IAllToAllv # k like RShift behaviour: seq {repeat seq {do bs; do kb} until <bs & kb>; do k}
unit bs_comm as AllReduce(NUM_PROCS, MPI_SUM, MPI_INTEGER)unit kb_comm as AllToAllv(NUM_PROCS) unit k_shift as RShift(NUM_PROCS)
[/ unify bs_comm.p[i] # bs, kb_comm.p[i] # kb, k_shift.p[i] # k to is_unit[i] # IIS as IS(PROBLEM_CLASS, NUM_PROCS, MAX_KEY_LOG2, NUM_BUCKETS_LOG2, TOTAL_KEYS_LOG2, MAX_ITERATIONS, MAX_PROCS, TEST_ARRAY_SIZE, bs.in, kb.in,k.in) -> (bs.out, kb.out, k.out)/]
Implementation of ISImplementation of ISconfiguration CG<DIM, COL_FACTOR, NA, NONZER, SHIFT, NITER, RCOND, ZVV> # () -> (zeta, x) with
use CGuse Transposeuse Skeletons.Collective.AllReduce
index i range [1..DIM]index j range [1..COL_FACTOR]
interface ICG # q** like ITranspose # r* like ITranspose # rho* like IAllReduce # aux* like IAllReduce # rnorm* like IAllReduce # norm_temp_1* like IAllReduce # norm_temp_2* like IAllReduce behaviour: seq {repeat seq {do bs; do kb} until <bs & kb>; do k}
unit q_comm as Transpose(DIM, COL_FACTOR)unit r_comm as Transpose(DIM, COL_FACTOR)unit rho_comm as AllReduce(NUM_PROCS, MPI_SUM, MPI_DOUBLE)unit aux_comm as AllReduce(NUM_PROCS, MPI_SUM, MPI_DOUBLE)unit rnorm_comm as AllReduce(NUM_PROCS, MPI_SUM, MPI_DOUBLE)unit norm_temp_1_comm as AllReduce(NUM_PROCS, MPI_SUM, MPI_DOUBLE)unit norm_temp_2_comm as AllReduce(NUM_PROCS, MPI_SUM, MPI_DOUBLE)
Implementation of ISImplementation of IS[/ unify q_comm.u[i] # q, r_comm.u[i] # r, rho_comm.p[i] # rho, aux_comm.p[i] # aux, rnorm_comm.p[i] # rnorm, norm_temp_1_comm.p[i] # norm_temp_1, norm_temp_2_comm.p[i] # norm_temp_2 to cg_unit[i] # ICG as CG(DIM, COL_FACTOR, NA, NONZER, SHIFT, NITER, RCOND, ZVV, q.x, r.x, rho.in, aux.in, rnorm.in, norm_temp_1.in, norm_temp_2.in) -> (q.w, r.w, rho.out, aux.out, rnorm.out, norm_temp_1.out, norm_temp_2.out)/]configuration Transpose(DIM, COL_FACTOR)
index i,j range [1..DIM]index k range [1..COL_FACTOR]
interface ITranspose (x::UDVector) -> (w::UDVector) behaviour: seq {w!; x?}
[/ unit trans[i][j] # ITranspose groups (x<DIM>, w<DIM>:broadcast) /]
[/ connect trans[i][j]->w[k] to trans[k][i]->x[j] /]
[/ factorize trans[i][j] # w -> x to [/ u[(.i-1)*COL_FACTOR + k[.j]] # w -> x /] connections w<>:sum_arrays, x<>:split_vector/]
EstruturaEstrutura
• Motivações e objetivos;Motivações e objetivos;• O modelo #;O modelo #;• Análise de programas # com redes de Petri;Análise de programas # com redes de Petri;• Implementação de Haskell#;Implementação de Haskell#;• Avaliação de desempenho;Avaliação de desempenho;• Conclusões;Conclusões;• Propostas de trabalhos futuros.Propostas de trabalhos futuros.
Modelo # e Redes de PetriModelo # e Redes de Petri
• Tradução da rede de processos para redes de Petri;Tradução da rede de processos para redes de Petri;
• Análise de propriedades formais de programas:Análise de propriedades formais de programas:
– INA (INA (Integrated Net AnalyserIntegrated Net Analyser) e PEP;) e PEP;
• Avaliação de desempenho de programas:Avaliação de desempenho de programas:
– Redes de Petri estocásticas;Redes de Petri estocásticas;
– SPNL e TimeNET;SPNL e TimeNET;
• Antecedentes:Antecedentes:
– Tradução OCCAM Tradução OCCAM redes de Petri (Lins & Maciel); redes de Petri (Lins & Maciel);
– Tracução Haskell# Tracução Haskell# redes de Petri (Lima); redes de Petri (Lima);
• Versão anterior de Haskell#;Versão anterior de Haskell#;
Modelando Comportamento de Modelando Comportamento de UnidadesUnidades
… …… ………
…
Expressão de Ativação Rede de Petri
Modelando o Comportamento Modelando o Comportamento de Unidadesde Unidades
• Regras de tradução para os Regras de tradução para os combinadorescombinadores;;
– Redes de Petri hierárquicas;Redes de Petri hierárquicas;
• Modelagem da Modelagem da ativação de portasativação de portas::
– Porta individual;Porta individual;
– Agrupamentos de Portas (Agrupamentos de Portas (choicechoice e não- e não-choicechoice););
• Semântica da escolha entre portas Semântica da escolha entre portas choicechoice;;
• Modelagem de Modelagem de agrupamentos aninhadosagrupamentos aninhados;;
• Condição de terminação do combinador Condição de terminação do combinador repeatrepeat;;
– Natureza valor mais recente transmitido por uma porta Natureza valor mais recente transmitido por uma porta streamstream; ;
– Dependente do Protocolo de finalização sincronizada de Dependente do Protocolo de finalização sincronizada de streamsstreams;;
Modelagem de Canais de Modelagem de Canais de ComunicaçãoComunicação
synchronous
Modelagem de Canais de Modelagem de Canais de ComunicaçãoComunicação
buffered
Modelagem de Canais de Modelagem de Canais de ComunicaçãoComunicação
ready
Modelagem da Natureza do Modelagem da Natureza do Valor Transmitido em StreamsValor Transmitido em Streams
• Natureza do valor transmitido em uma Natureza do valor transmitido em uma streamstream::
– Valor de dados;Valor de dados;
– Terminador de Terminador de stream stream em aninhamento em aninhamento k k ((EOSEOS k k););
• Necessário para modelagem de Necessário para modelagem de repeat … untilrepeat … until; ;
• Em um Em um canalcanal, a natureza do valor , a natureza do valor enviadoenviado deve coincidir com a deve coincidir com a
natureza do valor natureza do valor recebidorecebido;;
• Restrições na ordem de transmissão de terminadores de Restrições na ordem de transmissão de terminadores de streamsstreams;;
• Protocolo de finalização de Protocolo de finalização de streamsstreams é inserido para cada canal; é inserido para cada canal;
– LugaresLugares e e transiçõestransições adicionais que modelam às restrições de adicionais que modelam às restrições de streamsstreams;;
Modelagem de EsqueletosModelagem de Esqueletos
• A tradução direta de esqueletos pode ser usada para A tradução direta de esqueletos pode ser usada para
simplificar a rede de Petri gerada;simplificar a rede de Petri gerada;
• ExemploExemplo: Modelagem de esqueletos MPI:: Modelagem de esqueletos MPI:
– Cada componente de interface derivada de um esqueleto MPI é Cada componente de interface derivada de um esqueleto MPI é
modelada por uma única porta cuja direção é indiferente modelada por uma única porta cuja direção é indiferente
– Uma Uma interação coletivainteração coletiva é modelada como uma sincronização entre é modelada como uma sincronização entre
as porta de cada processo envolvidas na comunicação coletiva;as porta de cada processo envolvidas na comunicação coletiva;
• Essa informcão é obtida a partir do aglomerado associado ao Essa informcão é obtida a partir do aglomerado associado ao
esqueleto MPI em questão;esqueleto MPI em questão;
• Estudos de Caso:Estudos de Caso:– Jantar dos FilósofosJantar dos Filósofos; (2 soluções); (2 soluções)– Simulação do Simulação do Protocolo do Protocolo do BitBit Alternado Alternado;;
• Ferramentas: Ferramentas: INAINA e e PEPPEP;;• Técnicas:Técnicas:
– Propriedades Propriedades comportamentaiscomportamentais e e estrututuraisestrututurais;;– Computação (parcial) de Computação (parcial) de grafo de estadosgrafo de estados e e grafo de coberturagrafo de cobertura;;– Teste de alcançabilidade de marcações;Teste de alcançabilidade de marcações;– Teste de Teste de livenessliveness;;– Computação e teste de invariantes;Computação e teste de invariantes;
• Verificação de propriedades:Verificação de propriedades:– deadlocksdeadlocks;;– Justiça;Justiça;– Grau de Grau de paralelismoparalelismo ou concorrência; ou concorrência;
Análise de Propriedades Formais Análise de Propriedades Formais de Programas #de Programas #
Padrões comportamentais
regulares
Jantar dos FilósofosJantar dos Filósofos Solução 1 Solução 1
• Situação geral;Situação geral;
• Presença de Presença de agrupamentos de portasagrupamentos de portas;;
• Filósofos disputam talheres Filósofos disputam talheres arbitrariamentearbitrariamente::
– Ocorrência de Ocorrência de deadlocksdeadlocks;;
– Solução assíncrona (canais “Solução assíncrona (canais “bufferizados”bufferizados”););
– Justiça Justiça condicionalcondicional (escalonamento fortemente justo); (escalonamento fortemente justo);
• Modelagem com redes de Petri:Modelagem com redes de Petri:
– Modelando um processo filósofo;Modelando um processo filósofo;
– Introduzindo protocolo de finalização de streams;Introduzindo protocolo de finalização de streams;
– Conectando redes de Petri dos processos filósofos;Conectando redes de Petri dos processos filósofos;
Jantar dos FilósofosJantar dos Filósofos Solução 2 Solução 2
• Filósofos estabelecem Filósofos estabelecem protocoloprotocolo::
– Máximo paralelismo;Máximo paralelismo;
– Justiça incondicional;Justiça incondicional;
– Ausência de Ausência de deadlocksdeadlocks;;
– Comunicação Comunicação síncronasíncrona (canais síncronos); (canais síncronos);
– Não emprega agrupamentos de portas (Não emprega agrupamentos de portas (simplicidadesimplicidade))
• Modelagem com redes de Petri:Modelagem com redes de Petri:
– Modelando um processo filósofo;Modelando um processo filósofo;
– Introduzindo protocolo de finalização de streams;Introduzindo protocolo de finalização de streams;
– Conectando redes de Petri dos procConectando redes de Petri dos processos filósofosessos filósofos;;
Protocolo do Bit Alternado Protocolo do Bit Alternado Solução ÚnicaSolução Única
• Pode ser visto como um esqueleto (não-total):Pode ser visto como um esqueleto (não-total):
– Modelagem de protocolos de comunicação de canais;Modelagem de protocolos de comunicação de canais;
• Unidades heterogêneas;Unidades heterogêneas;
• Presença de Presença de streamsstreams com aninhamento > 1; com aninhamento > 1;
• Modelagem com redes de Petri;Modelagem com redes de Petri;
• Verificação de Verificação de deadlocksdeadlocks;;
– Empregando o teste de Empregando o teste de alcançabilidade marcações mortasalcançabilidade marcações mortas a partir a partir
do grafo de estados não foram encontrados do grafo de estados não foram encontrados deadlocksdeadlocks;;
EstruturaEstrutura
• Motivações e objetivos;Motivações e objetivos;• O modelo #;O modelo #;• Análise de programas # com redes de Petri;Análise de programas # com redes de Petri;• Implementação de Haskell#;Implementação de Haskell#;• Avaliação de desempenho;Avaliação de desempenho;• Conclusões;Conclusões;• Propostas de trabalhos futuros.Propostas de trabalhos futuros.
Compilador #Compilador #
• Implementado em Haskell:Implementado em Haskell:
– Gerador de Gerador de analisador léxicoanalisador léxico: : Alex 2.0;Alex 2.0;
– Gerador de Gerador de parserparser : : Happy 1.11;Happy 1.11;
• Geração de código Haskell com chamadas à Geração de código Haskell com chamadas à MPIMPI via via FFIFFI
((Foreign Function InterfaceForeign Function Interface););
• Processos # implementados como Processos # implementados como funções de alta ordemfunções de alta ordem;;
– Entrada: Entrada: autômato de validação do processoautômato de validação do processo..
• Induzido pelo comportamento de cada processo;Induzido pelo comportamento de cada processo;
– Tipos de processos suportados:Tipos de processos suportados:
• Assícronos (fluxo de controle): Assícronos (fluxo de controle): CC, , FortranFortran;;
• Orientado a demanda pela saída: Orientado a demanda pela saída: HaskellHaskell;;
• Controlado pelo fluxo de entrada: Controlado pelo fluxo de entrada: IdId;;
VHT (Visual # Tool)VHT (Visual # Tool)
• Ambiente integrado para a programação #:Ambiente integrado para a programação #:
– Programação visual;Programação visual;
– Uso de XML como formato de intercâmbio;Uso de XML como formato de intercâmbio;
– Geração de código na linguagem # a partir das especificações visuais;Geração de código na linguagem # a partir das especificações visuais;
– Integração à ferramentas de análise de redes de Petri;Integração à ferramentas de análise de redes de Petri;
• Geração de código Geração de código PNMLPNML e e SPNLSPNL;;
– Execução do programa e Execução do programa e debugingdebuging;;
• Integrado ao LAM-MPI;Integrado ao LAM-MPI;
• Possível integração a ferramentas de Possível integração a ferramentas de debuggingdebugging de programas MPI; de programas MPI;
• EmEm fasefase desenvolvimento (prototipação).desenvolvimento (prototipação).
EstruturaEstrutura
• Motivações e objetivos;Motivações e objetivos;• O modelo #;O modelo #;• Análise de programas # com redes de Petri;Análise de programas # com redes de Petri;• Implementação de Haskell#;Implementação de Haskell#;• Avaliação de desempenho;Avaliação de desempenho;• Conclusões;Conclusões;• Propostas de trabalhos futuros.Propostas de trabalhos futuros.
Avaliação de DesempenhoAvaliação de Desempenho
• NAS Parallel BenchmarksNAS Parallel Benchmarks
– EPEP, , CGCG e e ISIS;;
• Ambiente de Ambiente de HardwareHardware::
– Cluster de PC’s: 8 Pentium IV 2GHzCluster de PC’s: 8 Pentium IV 2GHz
– RAM:RAM: 4 x 256MB, 2 X 512MB, 1 X 1GB 4 x 256MB, 2 X 512MB, 1 X 1GB
– Fast Ethernet (100MBs).Fast Ethernet (100MBs).
• Ambiente de Ambiente de SoftwareSoftware::
– Protocolo de rede: TCP/IP;Protocolo de rede: TCP/IP;
– LAM-MPI 6.5.9;LAM-MPI 6.5.9;
– Glasgow Haskell Compiler (GHC) 6.0;Glasgow Haskell Compiler (GHC) 6.0;
• Uso de ferramentas de Uso de ferramentas de profilingprofiling para análise de custos; para análise de custos;
Avaliação de DesempenhoAvaliação de DesempenhoRestrições e MetodologiaRestrições e Metodologia
• Diferenças entre as versões imperativa (C/Fortran) e Diferenças entre as versões imperativa (C/Fortran) e funcional (Haskell) dos funcional (Haskell) dos kernelskernels;;– Comportamento espacial (uso da memória);Comportamento espacial (uso da memória);– Maior granularidade de processos Haskell:Maior granularidade de processos Haskell:
• Ilusão de ser Haskell# muito mais eficiente que MPI;Ilusão de ser Haskell# muito mais eficiente que MPI;
• Metodologia:Metodologia:– Cáculo de tempo de execução e Cáculo de tempo de execução e speedupspeedup;;
• Cronometragem segundo os kernels originais;Cronometragem segundo os kernels originais;
– Casos: Sequencial; Paralelo: Casos: Sequencial; Paralelo: 22, , 44 e e 88 processadores; processadores;– Uso de Uso de profilingprofiling para análise dos pontos de ineficiência; para análise dos pontos de ineficiência;– 22 Tamanhos de Problema para cada kernel: Tamanhos de Problema para cada kernel:
• EP-1, EP-2, IS-1, IS-2, CG-1, CG-2;EP-1, EP-2, IS-1, IS-2, CG-1, CG-2;
Avaliação de DesempenhoAvaliação de Desempenho Curvas de DesempenhoCurvas de Desempenho
• EP: EP: speedupspeedup aproxima-se ao linear (ótimo); aproxima-se ao linear (ótimo);
• CGCG e e ISIS merecem atenção especial: merecem atenção especial:
– Uso extensivo de Uso extensivo de comunicação coletivacomunicação coletiva;;
– Presença de Presença de funções de ligaçãofunções de ligação;;
– SpeedupSpeedup não comporta-se linearmente: não comporta-se linearmente:
• Mesmo efeito observado nas versões originais MPI;Mesmo efeito observado nas versões originais MPI;
• Rede de alta latência;Rede de alta latência;
• ClusterCluster pouco sintonizado para execução em alto desempenho; pouco sintonizado para execução em alto desempenho;
– GHC Profiling ToolGHC Profiling Tool: estudo dos : estudo dos custoscustos do paralelismo; do paralelismo;
Avaliação de DesempenhoAvaliação de Desempenho Curvas de DesempenhoCurvas de Desempenho
• Custos observados:Custos observados:
i.i. Computação efetiva (trabalho útil);Computação efetiva (trabalho útil);
ii.ii. Avaliação de funções de ligação;Avaliação de funções de ligação;
iii.iii. ““Marshalling”Marshalling” (de valores Haskell a (de valores Haskell a buffersbuffers MPI); MPI);
iv.iv. Sincronização e Comunicação (MPI);Sincronização e Comunicação (MPI);
v.v. Gerenciamento Automático de Memória;Gerenciamento Automático de Memória;
Análise de Custos (IS)Análise de Custos (IS)
CasoCaso ProcsProcs.. ii iiii iiiiii iviv vv
IS-1IS-1
SEQSEQ 45,9%45,9% -- -- -- 54,1%54,1%
22 35,4%35,4% 3,0%3,0% 7,4%7,4% 4,6%4,6% 45,3%45,3%
44 37,6%37,6% 3,0%3,0% 7,2%7,2% 11,0%11,0% 35,7%35,7%
88 36,0%36,0% 2,7%2,7% 7,2%7,2% 20,8%20,8% 28,7%28,7%
IS-2IS-2
SEQSEQ 34,5%34,5% -- -- -- 65,5%65,5%
22 -- -- -- -- --
44 35,3%35,3% 2,8%2,8% 6,8%6,8% 11,7%11,7% 38,9%38,9%
88 32,8%32,8% 2,7%2,7% 7,0%7,0% 21,1%21,1% 32,6%32,6%
Análise de Custos (CG)Análise de Custos (CG)
CasoCaso ProcsProcs.. ii iiii iiiiii iviv vv
CG-1CG-1
SEQSEQ 90,2%90,2% -- -- -- 9,8%9,8%
22 79,1%79,1% 1,5%1,5% 2,1%2,1% 4,7%4,7% 7,7%7,7%
44 70,9%70,9% 1,8%1,8% 3,2%3,2% 11,6%11,6% 5,8%5,8%
88 57,5%57,5% 3,5%3,5% 5,6%5,6% 24,0%24,0% 2,7%2,7%
CG-2CG-2
SEQSEQ 84,5%84,5% -- -- -- 15,5%15,5%
22 68,5%68,5% 1,2%1,2% 1,7%1,7% 10,8%10,8% 11,6%11,6%
44 70,2%70,2% 1,5%1,5% 2,5%2,5% 12,9%12,9% 6,3%6,3%
88 61,1%61,1% 3,2%3,2% 5,1%5,1% 19,5%19,5% 4,5%4,5%
Análise de G.A.M. (IS)Análise de G.A.M. (IS)
CasoCaso NPROCSNPROCSEficiência Eficiência de coletade coleta
Tempo de Tempo de coletacoleta
Speedup Speedup coletorcoletor
Speedup Speedup mutadormutador
IS-1IS-1
SEQSEQ 38,1%38,1% 112,3112,3 -- --
22 36,1%36,1% 72,872,8 1,51,5 1,41,4
44 29,3%29,3% 28,128,1 4,04,0 2,72,7
88 25,9%25,9% 15,115,1 7,47,4 4,24,2
IS-2IS-2
SEQSEQ 41,4%41,4% 247,7247,7 -- --
22 38,9%38,9% 168,0168,0 1,41,4 1,31,3
44 34,4%34,4% 70,570,5 3,53,5 2,62,6
88 27,5%27,5% 31,931,9 7,77,7 4,14,1
Análise de G.A.M. (CG)Análise de G.A.M. (CG)
CasoCaso NPROCSNPROCSEficiência Eficiência de coletade coleta
Tempo de Tempo de coletacoleta
Speedup Speedup coletorcoletor
Speedup Speedup mutadormutador
CG-1CG-1
SEQSEQ 5,5%5,5% 143,1143,1 -- --
22 5,7%5,7% 72,272,2 1,91,9 2,02,0
44 4,9%4,9% 39,839,8 3,63,6 3,13,1
88 0,8%0,8% 4,74,7 30,430,4 4,44,4
CG-2CG-2
SEQSEQ 5,5%5,5% 350,5350,5 -- --
22 5,7%5,7% 152,0152,0 2,32,3 1,81,8
44 4,9%4,9% 61,161,1 5,75,7 3,13,1
88 0,8%0,8% 16,216,2 21,521,5 5,05,0
Análise de Análise de SpeedupSpeedup (IS) (IS)
CasoCaso NPROCSNPROCS ii + ii+ ii + iii+ iii + iv+ iv + v+ v
IS-1IS-1
22 2,12,1 1,91,9 1,61,6 1,51,5 1,21,2
44 4,14,1 3,83,8 3,23,2 2,62,6 2,52,5
88 7,57,5 7,07,0 5,95,9 4,04,0 4,44,4
IS-2IS-2
22 1,91,9 1,81,8 1,51,5 -- --
44 4,14,1 3,83,8 3,23,2 2,52,5 2,52,5
88 8,08,0 7,37,3 6,16,1 4,14,1 4,54,5
Análise de Análise de SpeedupSpeedup (CG) (CG)
CasoCaso NPROCSNPROCS ii + ii+ ii + iii+ iii + iv+ iv + v+ v
CG-1CG-1
22 2,02,0 2,02,0 1,91,9 1,81,8 1,91,9
44 3,93,9 3,83,8 3,63,6 3,23,2 3,23,2
88 7,97,9 7,47,4 6,76,7 4,94,9 5,35,3
CG-2CG-2
22 2,12,1 2,02,0 2,02,0 1,71,7 1,81,8
44 4,04,0 3,93,9 3,73,7 3,23,2 3,43,4
88 8,08,0 7,67,6 7,07,0 5,55,5 6,06,0
Influência da Coleta de LixoInfluência da Coleta de LixoResumoResumo
• Sobrecarga do G.A.M. diminui com o tamanho do problema:Sobrecarga do G.A.M. diminui com o tamanho do problema:
– Maior localidade dos dados;Maior localidade dos dados;
– Efeitos de Efeitos de cachecache;;
– Nas medições, utilizou-se o “tamanho ótimo” da Nas medições, utilizou-se o “tamanho ótimo” da heapheap;;
– Algoritmos de coleta não se comportam linearmente;Algoritmos de coleta não se comportam linearmente;
• Mais processadores Mais processadores menor tamanho de problema por menor tamanho de problema por
processador processador menor sobrecarga de gerenciamento menor sobrecarga de gerenciamento
automático de memória;automático de memória;
– Compensação do custo Compensação do custo 33;;
– Pode-se assumir nulo o custo de Pode-se assumir nulo o custo de run-timerun-time de Haskell#; de Haskell#;
• OBS:OBS: Marshalling Marshalling pode ser otimizado (dependente de GHC); pode ser otimizado (dependente de GHC);
EstruturaEstrutura
• Motivações e objetivos;Motivações e objetivos;• O modelo #;O modelo #;• Análise de programas # com redes de Petri;Análise de programas # com redes de Petri;• Implementação de Haskell#;Implementação de Haskell#;• Avaliação de desempenho;Avaliação de desempenho;• Conclusões;Conclusões;• Propostas de trabalhos futuros.Propostas de trabalhos futuros.
ConclusõesConclusões
• O modelo # oferece um arcabouço de alto nível para programação O modelo # oferece um arcabouço de alto nível para programação paralela, em qualquer escala, sobre arquiteturas distribuídas, sem paralela, em qualquer escala, sobre arquiteturas distribuídas, sem comprometimento inerente de comprometimento inerente de eficiênciaeficiência;;– Advento de Advento de grid computinggrid computing e e cluster computingcluster computing;;
• Programas de larga escala e topologias complexas;Programas de larga escala e topologias complexas;
– Total abstração entre os meios de Total abstração entre os meios de coordenaçãocoordenação e e computaçãocomputação;;– A noção de A noção de modularidademodularidade é levada ao extremo: é levada ao extremo:
• Favorece e estimula a Favorece e estimula a reusabilidadereusabilidade de componentes; de componentes; • Suporte a Suporte a composição hierárquicacomposição hierárquica;;• Suporte à noção de Suporte à noção de esqueletosesqueletos;;• Suporte à separação de módulos entrelaçados (Suporte à separação de módulos entrelaçados (aspectosaspectos););
– Suporte à programação em Suporte à programação em larga escalalarga escala::• Não torna complicada a programação em Não torna complicada a programação em pequena escalapequena escala;;
– Tradução direta para MPI (Tradução direta para MPI (eficiênciaeficiência e e portabilidadeportabilidade););– Suporte multi-lingual;Suporte multi-lingual;– Análise formal de propriedades e desempenho com redes de Petri;Análise formal de propriedades e desempenho com redes de Petri;
EstruturaEstrutura
• Motivações e objetivos;Motivações e objetivos;• O modelo #;O modelo #;• Análise de programas # com redes de Petri;Análise de programas # com redes de Petri;• Implementação de Haskell#;Implementação de Haskell#;• Avaliação de desempenho;Avaliação de desempenho;• Conclusões;Conclusões;• Propostas de trabalhos futuros.Propostas de trabalhos futuros.
Propostas de Trabalhos FuturosPropostas de Trabalhos Futuros
• Técnicas de Técnicas de alocação de processosalocação de processos à processadores: à processadores:
– Uso de esqueletos topológicos;Uso de esqueletos topológicos;
• Implementação de extensões # multi-linguais:Implementação de extensões # multi-linguais:
– Módulos funcionais em C, Fortran, JAVA;Módulos funcionais em C, Fortran, JAVA;
– Adaptação ao problema em consideração;Adaptação ao problema em consideração;
– HaskellHaskell é ideal para prototipação; é ideal para prototipação;
• Interfaces com Interfaces com bibliotecas científicasbibliotecas científicas::
– Bibliotecas, paralelizadas ou não, são largamente utilizadas em computação Bibliotecas, paralelizadas ou não, são largamente utilizadas em computação
científica;científica;
• PetsC, Lapack, IMSL, etc.PetsC, Lapack, IMSL, etc.
– Abstração por meio de esqueletos topológicos parciais;Abstração por meio de esqueletos topológicos parciais;
– Modelo # oferece naturalmente tal capacidade;Modelo # oferece naturalmente tal capacidade;
Propostas de Trabalhos FuturosPropostas de Trabalhos Futuros
• Ferramentas de alto nível para suporte à Ferramentas de alto nível para suporte à análise de análise de
propriedades formaispropriedades formais com redes de Petri: com redes de Petri:
– Implementação no topo de Implementação no topo de INA INA ee PEP PEP;;
– Integração à Integração à VHTVHT;;
• Ferramentas de alto nível para suporte à Ferramentas de alto nível para suporte à análise e simulação análise e simulação
de desempenhode desempenho de programas com redes de Petri e de programas com redes de Petri e
simuladores de rede:simuladores de rede:
– Implementações no topo Implementações no topo TimeNETTimeNET e e NS NS ((NetworkNetwork SimulatorSimulator););
• Estudos comparativos;Estudos comparativos;
– Integração à Integração à VHTVHT;;
Tese de DoutoradoTese de Doutorado
Francisco Heron de Carvalho JuniorFrancisco Heron de Carvalho Junior
Rafael Dueire LinsRafael Dueire LinsOrientadorOrientador
Programação Paralela Eficiente e de Alto Nível Programação Paralela Eficiente e de Alto Nível sobre Arquiteturas Distribuídassobre Arquiteturas Distribuídas
O Modelo #O Modelo #Ponto de Partida: Ponto de Partida: Limitações Limitações de Haskell#de Haskell#
• Hierarquia de processosHierarquia de processos restringe expressividade: restringe expressividade:
– Dificuldade para expressar padrões iterativos de paralelismo;Dificuldade para expressar padrões iterativos de paralelismo;
– Não permite intercalação de Não permite intercalação de comunicaçãocomunicação e e computaçãocomputação;;
• Reusabilidade restrita aos Reusabilidade restrita aos módulos funcionaismódulos funcionais;;– Pouco poder composicional em nível de coordenação;Pouco poder composicional em nível de coordenação;
……
1.Receber (portas de entrada) 2.Efetuar computação (main)3.Enviar (portas de saída)
ordem deleitura
ordem deescrita
O Modelo #:O Modelo #: Intercalação entre Intercalação entre computaçãocomputação e e comunicaçãocomunicação::
• Essencial em muitos padrões de interação; Essencial em muitos padrões de interação;
• Como não comprometer a Como não comprometer a hierarquia de processoshierarquia de processos ? ?
• A solução está em Haskell:A solução está em Haskell:– O conceito de comunicação via O conceito de comunicação via lazylazy streamsstreams;;
• Ativações de portas: Ativações de portas: linguagem recursivamente enumerávellinguagem recursivamente enumerável;;
• Redes de Petri: subconjunto das Redes de Petri: subconjunto das ling. sensíveis ao contextoling. sensíveis ao contexto;;
• Expressões regulares sincronizadas por semáforos;Expressões regulares sincronizadas por semáforos;– Equivalência com redes de PetriEquivalência com redes de Petri
– Usadas na especificação do Usadas na especificação do comportamento de processoscomportamento de processos;;
– A noção primitiva de interfaceA noção primitiva de interface; ;
O Modelo #O Modelo #
MotivaçõesMotivações
• Até a década de 80Até a década de 80– Supercomputação paralela restrita a grandes centros de Supercomputação paralela restrita a grandes centros de
pesquisa e indústrias;pesquisa e indústrias;– Tecnologia de interesse estratégico de países Tecnologia de interesse estratégico de países
desenvolvidos, sobretudo EUA;desenvolvidos, sobretudo EUA;– Supercomputadores Supercomputadores vetoriaisvetoriais e MPP’s (alto custo). e MPP’s (alto custo).
• A partir de meado da década de 80 (Bell 2002)A partir de meado da década de 80 (Bell 2002)– Consolidação das Consolidação das arquiteturas distribuídasarquiteturas distribuídas;;– Cluster computing (“Cluster computing (“Supercomputing for allSupercomputing for all”);”);
• Supercomputadores construídos com Supercomputadores construídos com hardwarehardware de prateleira; de prateleira;
– Novas classes de usuários para Novas classes de usuários para supercomputaçãosupercomputação::
MotivaçõesMotivações
MotivaçõesMotivações
• Centros de pesquisa em diversas áreas:Centros de pesquisa em diversas áreas:– Matemáticos, físicos, engenheiros, biólogos, químicos, etc.Matemáticos, físicos, engenheiros, biólogos, químicos, etc.
– Alta demanda de desempenho e uso de matemática avançados;Alta demanda de desempenho e uso de matemática avançados;
– Usuários leigos, com pouca habilidade em programação;Usuários leigos, com pouca habilidade em programação;
– Poucos recursos para contratar especialistas;Poucos recursos para contratar especialistas;
– Carência de programadores experientes em programação paralela eficiente Carência de programadores experientes em programação paralela eficiente sobre sobre clusters clusters para essas aplicações;para essas aplicações;
• Uso Uso comercialcomercial e e industrialindustrial tem se tornado comum: tem se tornado comum:– Bancos de dados de grande porte;Bancos de dados de grande porte;
– Sistemas de Mineração de dados;Sistemas de Mineração de dados;
– Simulações em indústrias:Simulações em indústrias:• Autombolística, aeroespacial, petrolífera, etc.;Autombolística, aeroespacial, petrolífera, etc.;
• Requisitos similares a computação científica;Requisitos similares a computação científica;
– Aplicações de maior complexidade estrutural.Aplicações de maior complexidade estrutural.
MotivaçõesMotivações
• Carência por melhores ferramentas para o construção de Carência por melhores ferramentas para o construção de programas paralelos programas paralelos eficienteseficientes;;– ““Parallel Programming for allParallel Programming for all”;”;
– Tecnologia de programação não evoluiu com o aumento de Tecnologia de programação não evoluiu com o aumento de complexidade das aplicações;complexidade das aplicações;
• Programação paralela é mais dificil inerentemente;Programação paralela é mais dificil inerentemente;
– Linguagens hoje usadas em Linguagens hoje usadas em computação científicacomputação científica::• Alta eficiência;Alta eficiência;
• Uso de primitivas de baixo nível intercaladas com o código que Uso de primitivas de baixo nível intercaladas com o código que implementa as computações;implementa as computações;
• pouco nível de abstração para lidar com aplicações complexas:pouco nível de abstração para lidar com aplicações complexas:
• Programs difíceis de manter e depurar;Programs difíceis de manter e depurar;
• Exemplos: MPI, PVM, HPF etc;Exemplos: MPI, PVM, HPF etc;
Objetivo GeralObjetivo Geral
• A proposta e implementação de um A proposta e implementação de um novo modelo novo modelo para programação paralela explícitapara programação paralela explícita que atenda que atenda aos novos requisitos exigidos para o aos novos requisitos exigidos para o processo de processo de desenvolvimentodesenvolvimento eficienteeficiente de de aplicações aplicações complexascomplexas, as quais tem se tornado comuns, sobre , as quais tem se tornado comuns, sobre as as arquiteturas emergentes de supercomputaçãoarquiteturas emergentes de supercomputação ((clustersclusters e constelações, em especial); e constelações, em especial);
Um novo modelo para Um novo modelo para programação paralelaprogramação paralela
• Adaptado às modernas técnicas de eng. de Adaptado às modernas técnicas de eng. de softwaresoftware;;– Alto nível de abstração e modularidade;Alto nível de abstração e modularidade;– Reuso de componentes; Reuso de componentes;
• Alto desempenhoAlto desempenho, comparado à MPI;, comparado à MPI;• Simplicidade;Simplicidade;• Expressividade e Generalidade;Expressividade e Generalidade;• Análise de Análise de propriedades formaispropriedades formais de programas; de programas;• Fácil implementação no topo de MPI;Fácil implementação no topo de MPI;• Portabilidade;Portabilidade;
O modelo # (“Hash”)O modelo # (“Hash”)
• Hierarquia de processos:Hierarquia de processos:– ““Mundo dos processos”Mundo dos processos” “Mundo das computações” “Mundo das computações”
• Modelos de coordenação (coodernação Modelos de coordenação (coodernação vs.vs. computação); computação);
– Execução paralela e computações (sequenciais) devem ser especificadas em Execução paralela e computações (sequenciais) devem ser especificadas em etapas etapas distintasdistintas do desenvolvimento do do desenvolvimento do software software paralelo;paralelo;
– A noção de “mundo dos processos” busca capturar a abstração do que A noção de “mundo dos processos” busca capturar a abstração do que chamamos de “chamamos de “essência da programação paralelaessência da programação paralela”:”:
• Processos interagem e sincronizam por meio de Processos interagem e sincronizam por meio de comunicaçãocomunicação;;
• No No mundo dos processosmundo dos processos, a ordem em que ocorrem as operações de comunicações é , a ordem em que ocorrem as operações de comunicações é suficiente para descrever o comportamento de um programa paralelo;suficiente para descrever o comportamento de um programa paralelo;
• A classe de comportamentos deve ser equivalente à a classe de comportamentos que A classe de comportamentos deve ser equivalente à a classe de comportamentos que podem ser descritos por podem ser descritos por redes de Petri;redes de Petri;
• Suporte a noção de esqueletos e composição hierárquica;Suporte a noção de esqueletos e composição hierárquica;
O modelo # (Componentes)O modelo # (Componentes)• ComponentesComponentes: as peças básicas para compor : as peças básicas para compor
programas paralelos sob modelo #;programas paralelos sob modelo #;
Componente
i1
ono1
i2
o2
in…
…
pontos de entrada
Pontos de saída
O modelo # (Componentes)O modelo # (Componentes)• Componentes realizam uma tarefa específica;Componentes realizam uma tarefa específica;• Existem dois tipos de componentes:Existem dois tipos de componentes:
– Simples:Simples:• Entidades de execução sequencial;Entidades de execução sequencial;• Implementam computações;Implementam computações;• Descritos em uma linguagem sequencial;Descritos em uma linguagem sequencial;
– Compostos:Compostos:• Entidades de execução paralela (“mundo dos processos”);Entidades de execução paralela (“mundo dos processos”);• Mecanismo hierárquico de composição de programas;Mecanismo hierárquico de composição de programas;
• Um componente composto define a aplicação:Um componente composto define a aplicação:– Componente de aplicação;Componente de aplicação;– Como descrever componentes compostos ?Como descrever componentes compostos ?
O modelo # (Interfaces)O modelo # (Interfaces)
• A noção primitiva de interfaceA noção primitiva de interface– Descrição comportamental de unidades paralelas;Descrição comportamental de unidades paralelas;
in* out
x*y*
((x2)·(y//z))z*
0-counter synchronized regular expression ( redes de Petri)
(in) · out
Interface_A
Interface_A
Interface_B
10
i1
o2
o1unitA
unitB
merge
d* e
h
f*
c*
a*
b*
Int
[Int]
[Int]
Int
(Int, Float)
[Int]
Interface_B
Interface_A
O modelo # (Unidades)O modelo # (Unidades)
• Duas questões vêm à tona:Duas questões vêm à tona:
– Como definir o que uma unidade computa ?Como definir o que uma unidade computa ?• Unidades virtuais capturam somente o comportamento de Unidades virtuais capturam somente o comportamento de
comunicação da unidade em na rede;comunicação da unidade em na rede;
– Como componentes são integrados para compor Como componentes são integrados para compor aplicações ?aplicações ?
O modelo # (Unidades)O modelo # (Unidades)
• ProcessosProcessos: unidades cuja computação é descrita por um : unidades cuja computação é descrita por um componente simplescomponente simples;;– Processo são as unidades Processo são as unidades indivisíveisindivisíveis de programas dentro do de programas dentro do
modelo #;modelo #;
• ClustersClusters: unidades cuja computação é descrita por um : unidades cuja computação é descrita por um componente compostocomponente composto;;– Componentes podem ser aninhados a componentes;Componentes podem ser aninhados a componentes;
• Composição hierárquica (aninhamento) de programas;Composição hierárquica (aninhamento) de programas;
– Unidades podem ser entidade de execução paralela !!!Unidades podem ser entidade de execução paralela !!!
– Capturando hierarquias de exploração do paralelismo;Capturando hierarquias de exploração do paralelismo;• Constelaçãoes, cluster de multiprocessadores, etc.Constelaçãoes, cluster de multiprocessadores, etc.
O modelo # (Unidades)O modelo # (Unidades)
unitA
CompA(pode ser simples ou composto)a*
c
b[1]*
b[2]*
3
valor ignoradoArgumento passado
explicitamente
O modelo # (Unidades)O modelo # (Unidades)
• Visão hierárquica de um programaVisão hierárquica de um programa
Raiz é a unidade principal
Unidades nas folhas são processos
Units nos galhos são clusters
EsqueletosEsqueletos de Algoritmos de Algoritmos
• Importante técnica de programação introduzida Importante técnica de programação introduzida por Cole no final da década de 80;por Cole no final da década de 80;
• Captura de padrões reusáveis de algoritmos, de Captura de padrões reusáveis de algoritmos, de forma a abstrair o programador das preocupações forma a abstrair o programador das preocupações relativas a sua implementação eficiente;relativas a sua implementação eficiente;– Foco em concorrência;Foco em concorrência;
• Hoje, muitas linguagens suportam esqueletos:Hoje, muitas linguagens suportam esqueletos:– Caliban, SCL, Eden, P3L, etc.Caliban, SCL, Eden, P3L, etc.– Foco no algoritmo;Foco no algoritmo;
O modelo # (Esqueletos)O modelo # (Esqueletos)
• Componentes com pelo menos uma Componentes com pelo menos uma unidade virtualunidade virtual são ditos são ditos componentes virtuaiscomponentes virtuais;;– Esqueletos topológicos parciais;Esqueletos topológicos parciais;
• Os uso de Os uso de esqueletosesqueletos provê informações de alto nível sobre a provê informações de alto nível sobre a topologia da rede de processos de um componente, topologia da rede de processos de um componente, permitindo:permitindo:– Otimização na alocação de processos;Otimização na alocação de processos;
– Melhor uso das primitivas de MPIMelhor uso das primitivas de MPI• Exemplo: esqueletos p/ abstração das primitivas de comunicação coletiva Exemplo: esqueletos p/ abstração das primitivas de comunicação coletiva
de MPI;de MPI;
– Maior poder para análise formal com redes de Petri;Maior poder para análise formal com redes de Petri;
O modelo # O modelo # (Exemplos de Esqueletos)(Exemplos de Esqueletos)
• Esqueleto Esqueleto Pipe-LinePipe-Line::
…
pipe[1] pipe[2] pipe[N]
O modelo # (Esqueletos)O modelo # (Esqueletos)
• Esqueleto Esqueleto FarmFarm::
distributor collector
worker[1]
worker[2]
worker[N]
? ?
O modelo # (Esqueletos)O modelo # (Esqueletos)
• Esqueleto Esqueleto MeshMesh : :
…
…
…… … …
O modelo # (Esqueletos)O modelo # (Esqueletos)
• Esqueleto Esqueleto TorusTorus::
…
…
…… … …
O modelo # O modelo # (Operações sobre Unidades Virtuais)(Operações sobre Unidades Virtuais)
• UnificaçãoUnificação– Compõe uma nova unidade a partir de um conjunto de Compõe uma nova unidade a partir de um conjunto de
unidades pré-existentes;unidades pré-existentes;
• FatorizaçãoFatorização– Toma uma unidade e a divide em várias unidades;Toma uma unidade e a divide em várias unidades;
– Inverse of unification;Inverse of unification;
• ReplicaçãoReplicação– Cria várias cópias de um única unidade;Cria várias cópias de um única unidade;
– Útil para operações de Útil para operações de paralelismo de dados paralelismo de dados distribuído;distribuído;
O modelo # O modelo # (Operações sobre Unidades Virtuais)(Operações sobre Unidades Virtuais)
• Uma unidade não pode participar em mais de uma operação;Uma unidade não pode participar em mais de uma operação;
• Unidades originaisUnidades originais deixam de existir e são substituídas pelas deixam de existir e são substituídas pelas unidades resultantes;unidades resultantes;
• Comportamento das unidades originais é preservado; Comportamento das unidades originais é preservado; parcialmenteparcialmente pelas unidades resultantes; pelas unidades resultantes;
• Esqueleto e operações sobre unidades virtuais, podem ser usados Esqueleto e operações sobre unidades virtuais, podem ser usados para construir a para construir a topologia virtual da rede de processostopologia virtual da rede de processos; ; – Esqueletos podem ser Esqueletos podem ser sobrepostossobrepostos e e aninhadosaninhados;;
– Topologias complexas podem ser definidas de uma forma mais abstrata, Topologias complexas podem ser definidas de uma forma mais abstrata, estruturada e incentivando o reuso de componentes.estruturada e incentivando o reuso de componentes.
O modelo #O modelo #
• Em um programa válido no modelo # …Em um programa válido no modelo # …– … … todos os canais são todos os canais são ponto-a-pontoponto-a-ponto;;– … … não existem unidades virtuaisnão existem unidades virtuais;;
• Mas como substituir unidades virtuais por não-virtuais ?Mas como substituir unidades virtuais por não-virtuais ?– Unidade não-virtual podem ser nomeadas para ocupar o papel Unidade não-virtual podem ser nomeadas para ocupar o papel
de uma unidade virtual, deixando esta de existir;de uma unidade virtual, deixando esta de existir;– O comportamento da unidade nomeada deve ser compatível O comportamento da unidade nomeada deve ser compatível
com o comportamento da unidade substituída;com o comportamento da unidade substituída;– Exemplo:Exemplo:
• Multiplicação de Matrizes (Multiplicação de Matrizes (próximo slidepróximo slide););
FARM
FARM
TORUS
partition by ?
par
titi
on b
y ?
com
bine b
y ?
par
titi
on b
y D
istr
ibu
teM
atri
x
com
bin
e by
C
omb
ineM
atri
x
A Linguagem Haskell#A Linguagem Haskell#
• Uma implementação para o modelo #:Uma implementação para o modelo #:– Componentes simplesComponentes simples descritos em descritos em HaskellHaskell;;– Componentes compostosComponentes compostos descritos em descritos em HCLHCL ( (Haskell# Haskell#
Configuration LanguageConfiguration Language););
• O uso de Haskell permite a ortogonalização entre os O uso de Haskell permite a ortogonalização entre os meios de meios de coordenaçãocoordenação e e computaçãocomputação;;– Listas Listas lazylazy são associadas aos pontos de entrada e saída; são associadas aos pontos de entrada e saída;– Cada elemento da lista é um valor que trafega por um canal;Cada elemento da lista é um valor que trafega por um canal;
• Linguagens de configuraçãoLinguagens de configuração são ideais quando a noção são ideais quando a noção de processo e canal de comunicação é explícita;de processo e canal de comunicação é explícita;– Simplicidade e alto grau de modularidade;Simplicidade e alto grau de modularidade;– Paradigma bastante empregado em sistemas distribuídos;Paradigma bastante empregado em sistemas distribuídos;
• Atualmente, ausência ou fraco suporte à esqueletos;Atualmente, ausência ou fraco suporte à esqueletos;
A Linguagem Haskell#A Linguagem Haskell#((Visão Geral de HCLVisão Geral de HCL))
• Coleção de declarações que definem um Coleção de declarações que definem um componente compostocomponente composto::– Entidades:Entidades:
• Interfaces, unidades, canais, índices, componentes usados;Interfaces, unidades, canais, índices, componentes usados;
– Operações sobre unidades:Operações sobre unidades:• Unificação, fatoração, replicação e nomeação;Unificação, fatoração, replicação e nomeação;
– Ordem das declarações é irrelevante;Ordem das declarações é irrelevante;
• Gerenciando grande número de entidades; Gerenciando grande número de entidades; – Parâmetros estáticos;Parâmetros estáticos;– Notação indexada (Notação indexada (índicesíndices e e escopos de variaçãoescopos de variação) ;) ;– Expressões sobre índices, parâmetros e constantes;Expressões sobre índices, parâmetros e constantes;
A Linguagem Haskell#A Linguagem Haskell#((Declarações HCLDeclarações HCL))
Parâmetro Estático
Ponto de Entrada Ponto de
Saída• Cabeçalho:Cabeçalho:
– Nome do componenNome do componen te;te;
– Parâmetro(s) estático(s);Parâmetro(s) estático(s);
– Ponto(s) de entrada e/ou saída;Ponto(s) de entrada e/ou saída;
• Exemplo:Exemplo:
component PIPE<@N> # in -> out withcomponent PIPE<@N> # in -> out with
(…)(…)
-- declarações-- declarações
A Linguagem Haskell#A Linguagem Haskell#((Declarações HCLDeclarações HCL))
• Declarando Declarando componentescomponentes que serão usados: que serão usados:– Organizados em uma biblioteca hierárquica;Organizados em uma biblioteca hierárquica;
• Exemplos:Exemplos:
(…)(…)useuse modulemodule MatMultMatMultuseuse modulemodule ReadMatrixReadMatrix useuse modulemodule ShowMatrixShowMatrix
useuse configurationconfiguration Skeletons.Common. Skeletons.Common.TORUSTORUSuseuse configurationconfiguration Skeletons.Common. Skeletons.Common.MESHMESH
(…)(…)
ComponentesSimples
ComponentesCompostos
A Linguagem Haskell#A Linguagem Haskell#((Declarações HCLDeclarações HCL))
Portas de Entrada
Portas de Saída
• Declarando Declarando interfacesinterfaces– Portas, restrições comportamentais e comportamento;Portas, restrições comportamentais e comportamento;
• Exemplo:Exemplo:
interface GridElem # (left,above) -> (right,below) behaving as Pipe # left -> right, behaving as Pipe # above -> below,
behaving as: repeat alt {
right! -> above! above! -> right! common: par {left?;above?} }
A Linguagem Haskell#A Linguagem Haskell#((Declarações HCLDeclarações HCL))
• Declarando Declarando unidadesunidades;;• Exemplos:Exemplos:
virtualvirtual unitunit worker # Worker inp -> outp worker # Worker inp -> outp
unitunit random random asas Random seed -> rand_value Random seed -> rand_value ## IRandomIRandom seed -> rand_value seed -> rand_value
[/ [/ unitunit matmult[i][j] matmult[i][j] asas MatMult (N,a,b,l,t) -> (r,b,c) MatMult (N,a,b,l,t) -> (r,b,c) ## IMatMultIMatMult (a,b,l,t) -> (r,b,c)/] (a,b,l,t) -> (r,b,c)/]
Unidade virtual
Unidade não-virtual
Unidade não-virtual(notação indexada)
index i,j range [1, N]
A Linguagem Haskell#A Linguagem Haskell#((Declarações HCLDeclarações HCL))
• Declarando Declarando canaiscanais;;• Exemplos:Exemplos:
connect distributor->out to worker<-in connect worker->out to collector<-in
connect * unitA->b[2] to merge<-f[1] buffered 10
A Linguagem Haskell#A Linguagem Haskell#((Declarações HCLDeclarações HCL))
• Associando Associando pontos de entrada/saídapontos de entrada/saída do do componente para componente para portas de entrada/saída portas de entrada/saída das das unidades;unidades;
• Exemplo:Exemplo:bind unitA->b[1] to o1
bind pipe[1] <-in to in
bind pipe[N]->out to out
A Linguagem Haskell#A Linguagem Haskell#((Declarações HCLDeclarações HCL))
wire function
• Operação de Operação de unificaçãounificação;;• Exemplos:Exemplos:•
unify wA # a -> res, wB # b -> res, cell # (a,b) -> (c,d) to mm # MatrixMult (a,b) -> (c,d,res)
connections choice a
A Linguagem Haskell#A Linguagem Haskell#((Declarações HCLDeclarações HCL))
• Operação de Operação de fatoraçãofatoração;;• Exemplos:Exemplos:•
index i range [1,10]
factorize merge3 # [/s[i]/] -> o to [/pipe[i] # Pipe s[i] -> o/] connections some_strategy o
A Linguagem Haskell#A Linguagem Haskell#((Declarações HCLDeclarações HCL))
• Operação de Operação de replicaçãoreplicação;;• Exemplos:Exemplos:
replicate 3 u1 # a -> (b,_), u2 # (_,c) -> d connections some_strategy1 a, some_strategy2 b, broadcast c, choice d
A Linguagem Haskell#A Linguagem Haskell#((Declarações HCLDeclarações HCL))
• Operação de Operação de nomeaçãonomeação;;• Exemplos:Exemplos:
assign mB to farmB.distributor
assign unidade_X # (a,_) -> c to pipeline.pipe[1] # a -> c
Evolução de Haskell# em Evolução de Haskell# em relação a versão anteriorrelação a versão anterior
• Uma série de restrições tornavam Haskell# imprópria para especificação Uma série de restrições tornavam Haskell# imprópria para especificação da maioria das aplicações relevantes;da maioria das aplicações relevantes;
• A versão atual suporta A versão atual suporta maior expressividademaior expressividade;;– Consegue expressar um conjunto maior de padrões de interação entre Consegue expressar um conjunto maior de padrões de interação entre
processos, equiparado ao poder expressivo das redes de Petri P/T;processos, equiparado ao poder expressivo das redes de Petri P/T;– Intercalação entre Intercalação entre comunicaçãocomunicação e e computaçãocomputação sem comprometimento da sem comprometimento da
hierarquia de processos;hierarquia de processos;• Na versão anterior, processos não intercalavam comunicação e computação, uma Na versão anterior, processos não intercalavam comunicação e computação, uma
suposição bastante restritiva;suposição bastante restritiva;
• Fortalecimento da Fortalecimento da hierarquia de processoshierarquia de processos;;• Reuso de componentes à nível de coordenação;Reuso de componentes à nível de coordenação;
– Somente módulos funcionais Somente módulos funcionais podiampodiam ser reusados; ser reusados;– Suporte a esqueletos e componentes aninhados;Suporte a esqueletos e componentes aninhados;
Trabalhos em AndamentoTrabalhos em Andamentopara Conclusão da Tesepara Conclusão da Tese
• Implementação de Haskell#;Implementação de Haskell#;– Geração de código MPI;Geração de código MPI;
• Implementação dos esqueletos MPI;Implementação dos esqueletos MPI;
– Tradução de código HCL para PNML (Tradução de código HCL para PNML (Petri Net Petri Net Markup LanguageMarkup Language););
• Interface para ferramentas de análise de propriedadses formais Interface para ferramentas de análise de propriedadses formais de progrmas baseados em redes de Petri;de progrmas baseados em redes de Petri;
– VHT (Visual Haskell# Tool);VHT (Visual Haskell# Tool);• Atualmente sendo implementado em JAVA;Atualmente sendo implementado em JAVA;
• Suporte ao modelo # de programação;Suporte ao modelo # de programação;
Trabalhos em AndamentoTrabalhos em Andamentopara Conclusão da Tesepara Conclusão da Tese
• Avaliação da linguagem Avaliação da linguagem – Desempenho, expressividade e adequabilidade a Desempenho, expressividade e adequabilidade a
aplicações científicas e de engenharia reais;aplicações científicas e de engenharia reais;– BenchmarksBenchmarks,, comparando comparando speedupspeedup de aplicações de aplicações
Haskell# com implementações MPI destas;Haskell# com implementações MPI destas;• NAS Parallel Benchmarks;NAS Parallel Benchmarks;
– Aplicações reaisAplicações reais, com o fim de avaliar a linguagem do , com o fim de avaliar a linguagem do ponto de vista da engenharia de software parealelo;ponto de vista da engenharia de software parealelo;
• Simulação de bacias petrolíferas;Simulação de bacias petrolíferas;• Climate System Model (CSM);Climate System Model (CSM);
• Modificações sintáticas na linguagem ainda Modificações sintáticas na linguagem ainda podem ocorrerpodem ocorrer eventualmente; eventualmente;
Trabalhos FuturosTrabalhos Futuros
• O desenvolvimento do ambiente Haskell# nos O desenvolvimento do ambiente Haskell# nos sugere uma série de trabalhos futuros, que sugere uma série de trabalhos futuros, que extrapolam os objetivos da tese:extrapolam os objetivos da tese:– Uso de simuladores de rede para simulação de Uso de simuladores de rede para simulação de
programas e análise de desempenho (custo de programas e análise de desempenho (custo de comunicação), integrado ao VHT;comunicação), integrado ao VHT;
– Exploração de Exploração de paralelismo hierárquicoparalelismo hierárquico, com a , com a possibilidade de geração de código OpenMP para possibilidade de geração de código OpenMP para clusters alocados a um nó multiprocessado;clusters alocados a um nó multiprocessado;
• Não há linguagens paralelas de alto nível que suportem essa Não há linguagens paralelas de alto nível que suportem essa funcionalidade [Bell 2002];funcionalidade [Bell 2002];
Trabalhos FuturosTrabalhos Futuros
• Cont.:Cont.:– Suporte multilingual, permitindo que outras linguagens, Suporte multilingual, permitindo que outras linguagens,
em alternativa a Haskell sejam usadas para em alternativa a Haskell sejam usadas para programação dos componentes simples:programação dos componentes simples:
• Adaptabilidade a classes de aplicações;Adaptabilidade a classes de aplicações;– C e Fortran para computação científica, JAVA em aplicações C e Fortran para computação científica, JAVA em aplicações
comerciais, etc.comerciais, etc.
• Haskell poderia ser usada como uma Haskell poderia ser usada como uma linguagem de linguagem de especificaçãoespecificação, dentro desse contexto;, dentro desse contexto;
• Será Investigado o uso do Será Investigado o uso do paradigma de programação paradigma de programação orientado a aspectoorientado a aspecto (AOP), para ortognalizar os meios de (AOP), para ortognalizar os meios de coordenação e computação na ausência de coordenação e computação na ausência de lazy evaluationlazy evaluation;;
Trabalhos FuturosTrabalhos Futuros
• Cont.:Cont.:– Interface com bibliotecas científicas:Interface com bibliotecas científicas:
• Bibliotecas de uso científico são largamente usadas por Bibliotecas de uso científico são largamente usadas por cientistas de todas as áreas;cientistas de todas as áreas;
– Usam os melhores algoritmos;Usam os melhores algoritmos;
– Implementações eficientes;Implementações eficientes;
– Implementações estáveis; Implementações estáveis;
– Podem ser paralelizadas ou não;Podem ser paralelizadas ou não;
• Funções de bibliotecas científicas podem ser oferecidas como Funções de bibliotecas científicas podem ser oferecidas como componentes do ambiente paralelo, de forma transparente ao componentes do ambiente paralelo, de forma transparente ao programador;programador;
• Talvez incluiremos algo sobre isso na tese;Talvez incluiremos algo sobre isso na tese;
Estrutura da TeseEstrutura da Tese
• Capítulo 1Capítulo 1: Introdução, contextualização, motivação e objetivos ;: Introdução, contextualização, motivação e objetivos ;
• Capítulo 2Capítulo 2: Revisão de literatura estudada e introdução dos conceitos : Revisão de literatura estudada e introdução dos conceitos
básicos usados ao longo do texto;básicos usados ao longo do texto;
• Capítulo 3Capítulo 3: Descrição da Linguagem Haskell# e de seu modelo de : Descrição da Linguagem Haskell# e de seu modelo de
programação e implementação; programação e implementação;
• Capítulo 4Capítulo 4: Programação baseadas em esqueletos e seu emprego;: Programação baseadas em esqueletos e seu emprego;
• Capítulo 5Capítulo 5: Análise de propriedads de programas com redes de Petri;: Análise de propriedads de programas com redes de Petri;
• Capítulo 6Capítulo 6: Aplicações e avaliação de desempenho;: Aplicações e avaliação de desempenho;
• Capítulo 7Capítulo 7: Apresentação do ambiente VHT;: Apresentação do ambiente VHT;
• Capítulo 8Capítulo 8: Conclusões e linhas para futuro trabalhos;: Conclusões e linhas para futuro trabalhos;
ConclusõesConclusões
• Entrega da versão final para apreciação da banca: Entrega da versão final para apreciação da banca: 15/12/2003.15/12/2003.
• Previsão de defesa: 15/02/2004Previsão de defesa: 15/02/2004
• Entrega da versão final: 30/03/2004Entrega da versão final: 30/03/2004