Definindo melhor alguns conceitos Processamento Paralelo: processamento de informação concorrente que pertencem a um ou mais processos que resolvem um único problema. Processamento Distribuído: processamento de informações em um sistema cujos recursos estão sendo compartilhados por vários programas Computador Paralelo: computador de múltiplos processadores capaz de realizar processamento paralelo Supercomputador: computador de propósito geral capaz de resolver problemas em alta velocidade, comparando com outras máquinas da mesma época.
Terminologia A vazão de um dispositivo é o número de resultados produzidos por unidade de tempo. (throughtput) Speedup (aceleração): razão entre o tempo de execução necessário para o algoritmo seqüencial mais eficiente e o tempo necessário para se realizar a mesma computação numa máquina paralela Existem diversas definições de speedup: speedup absoluto(n)= T(melhor alg. seq. )/ T( prog // c/ n proc.) speedup aproximado(n)= T(prog.// c/1 proc.)/t( prog // c/ n proc.) speedup relativo (n)= T(prog. // c/(n-1) proc.)/t(prog.// c/ n proc.)
Computação concorrente Duas formas de se explorar a concorrência em computação em computação Paralelismo de controle e de dados tempo t 7 + 3 string == casa? 32 * 14 7 + 3 10 + 200 33 + 329
Paralelismo de Controle aplicando-se operações diferentes a diferentes dados simultaneamente. fluxo de dados entre processos pode ser arbitrariamente complexo Exemplo: Pipelining: cada estágio trabalha em velocidade plena sobre uma parte particular da computação. A saída de um estágio é a entrada do estágio seguinte
Paralelismo de Controle tempo E1 E2 E3 E4 info 1 info 2 info 1 info 3 info 2 info 1 info 4 info 3 info 2 info 1
Paralelismo de Dados uso de vários processadores para executar a mesma operação ao mesmo tempo sobre elementos distintos de dados Um aumento de k vezes no número de unidades funcionais levaria a um aumento de k vezes a vazão do sistema 7 + 3 10 + 200 33 + 329
Aplicações Aplicações ou programas podem ser executados mais rapidamente, considerando duas formas de paralelismo tratar o programa seqüencial como uma série de tarefas cada tarefa = uma instrução ou blocos de instruções OU especificar um programa paralelo, que resolve o problema através da especificação de tarefas ou processos concorrentes
Exploração de paralelismo Particionamento identificar em um programa, as tarefas que possam ser executadas em paralelo (simultaneamente em mais de um processador) caso extremo: cada linha do programa correspondendo a uma tarefa um bom desempenho só é alcançado se um número máximo de comandos são executados simultaneamente É preciso considerar dependências de dados problema: se quase todos os comandos são dependentes
Exemplo: programa seqüencial! paralelismo de instruções program nothing(){ input (A,B,C); if A>B then { C=A-B; output (C); } else { C = B-A; output (A,B,C) } A=0; B=1; for i=1 to 3 { input(c); A=A+C; B=B*C; } output (A,B,C); }
Exemplo Tarefa T1 input (A,B,C); if A>B then{ C=A-B; output (C); }else{ } C = B-A; output (A,B,C) Tarefa T2 A = 0; Tarefa T3 B=1; Tarefa T4 for i=1 to 3 { input(c); A=A+C; B=B*C; } output (A,B,C)
Exemplo T1 4 T2 T3 1 1 T4 16
Exemplo: Soma n números Problema: somar n números quaisquer Programa seqüencial: read (n, vetor); soma = 0; for (i = 0; i < n; i++) soma = soma + vetor[i]; Como paralelizar o problema?
Modelando soma paralela de n números + + + + + + + + + + + + + + +
Speedup Factor S(p) = Execution time using one processor (best sequential algorithm) Execution time using a multiprocessor with p processors = t s t p where t s is execution time on a single processor and t p is execution time on a multiprocessor. S(p) gives increase in speed by using multiprocessor. Typically use best sequential algorithm with single processor system. Underlying algorithm for parallel implementation might be (and is usually) different. 1a.14
Speedup Factor Speedup factor can also be cast in terms of computational steps: S(p) = Number of computational steps using one processor Number of parallel computational steps with p processors 1a.15
Maximum Speedup speedup máximo usualmente p com p processadores (linear speedup). Suponha que o melhor algoritmo sequencial tenha tempo Ts Se S(p) = Ts Tp > p então podemos usar o algoritmo paralelo em um processador e seu tempo seria p Tp Se S(p) < P pois o algoritmo sequencial tem tempo menor que p Tp, 1a.16
Superlinear Speedup superlinear speedup: maior que p Possível, devido a razões como: tem mais memória em sistemas multiprocessados algoritmos não determinísticos 1a.17
Maximum Speedup - Amdahl s law The speedup using multiple processors is limited by the time needed for the sequential fraction of the program t s (a) One processor ft s Serial section (1 - f ) t s Parallelizable sections (b) Multiple processors p processors t p (1 - f ) t s / p 1a.18
Amdahl s law Let f = proportion of a program that can be totally parallelized (1 f) is the proportion that remains serial Then the maximum speedup that can be achieved by using P processors is Sp (P) = 1 (1-f)+ f/p Amdahl used this argument to support the design of ultrahigh speed single processor systems in the 1960s. (reflete monoprocessadores) 1a.19
Gustafson s law! Gustafon s Law - 1988 Tipicamente, o grande interesse não é executar um problema no menor período de tempo (o que advoga Amdahl), mas resolver problema de grandes dimensões em um tempo razoável! A parte não paralelizável não deve ser fixa, mas um percentual de acordo com a dimensão do problema. Se essa parte paralelizável cresce pouco com o aumento da instância, é possível escalar o speedup com o aumento de processadores. 1a.20
Gustafson s law f = fraction computed sequentially 1 f = parallel fraction Gustafson s so-called scaled speedup fraction S (p) = p + (1 p) f 1a.21
Para pensar/pesquisar Dê exemplo e discuta as reais diferenças entre Amdahl s e Gustafson s Law O que cada uma quer realmente representar?
Terminologias Um algoritmo é escalável se o nível de paralelismo aumenta no mínimo linearmente com o tamanho do problema. Uma arquitetura é dita escalável se continua a alcançar o mesmo desempenho por processador, mesmo para problemas maiores, com o aumento de processadores. Se aplicável, o usuário pode resolver problemas maiores no mesmo intervalo de tempo através da compra de uma máquina paralela com maiores dimensões Algoritmos paralelos-de-dados são mais escaláveis do que algoritmos com paralelismo de controle o nível de paralelismo de controle é geralmente constante, independente do tamanho do problema, enquanto o nível do paralelismo de dados é uma função crescente do tamanho do problema
Convergência entre Computação Paralela & Distribuída Existia uma grande dificuldade de manter máquinas paralelas a frente aos projetos de chip-único Computadores paralelos se tornaram mais difíceis de se construir e se usar do que se esperava. Motivo desta dificuldade: software Paralelizar e gerenciar algoritmos paralelos não é uma tarefa fácil
Programação Paralela No início dos anos 90: processamento paralelo foi retomado. O problema de programação paralela seria bem mais difícil de atacar do que se imaginava. Pesquisa na área de programação em paralelo tem sido um tópico importante. Mas ao mesmo tempo...
Internet Enquanto muitos estudavam processamento paralelo associado processadores ligados internamente em uma máquina, um outro grupo se concentrava em paralelismo externo através de redes de computadores a internet possibilitou a especificação de um tipo de paralelismo através de uma conexões entre processadores
Sistema Paralelo e Distribuído processamento distribuído renasceu como uma forma de paralelismo mais lenta computação distribuída e paralela são dois extremos num espectro de computação concorrente Sistema paralelo e distribuído é uma coleção de componentes de hardware e software que otimizam o desempenho por problema, vazão de múltiplos problemas e confiabilidade, ou uma combinação destes
Sistema Paralelo e Distribuído Problemas: a aglomeração de muitos processadores através de canais de comunicação: o desempenho pode cair muito. Para alcançar o máximo dos sistemas paralelos e distribuídos: projetistas e desenvolvedores de software precisam compreender a interação entre hardware e software
Sistema Paralelo e Distribuído computação distribuída é mais abrangente e universal do que computação paralela Paralelismo - forma restrita de computação distribuída sistema paralelo : voltado à solução de um problema único no menor tempo possível (otimização) Computação distribuída é mais geral e reúne outras formas de otimização...
Paralelismo é interessante? Na natureza, os eventos ocorrem em paralelo programação seqüencial ordena eventos paralelos essa ordenação dificulta a trabalho do compilador mas, maior desempenho com o uso de paralelismo no entanto, não é trivial atingir alto desempenho em computadores paralelos aplicações como os Grandes Desafios são limitados computacionalmente
Investindo em paralelismo Dificuldades encontradas pensar em paralelo é difícil conhecimento em paralelismo é recente pouco conhecimento sobre representações abstratas de computações paralelas
Investindo em paralelismo Em relação a características da máquina Relação entre a velocidade do processador Elementos de processamento heterogêneos Desempenho da interconexão de comunicação Latência de comunicação Congestionamento Topologia da rede Hierarquia de memória Tendência hoje: memória compartilhada distribuída superprocessadores distribuídos
Quais características importantes das aplicações? Processos/tarefas existe comunicação entre essas tarefas pode ser vantajoso executar várias tarefas em um só processador a tarefa perde o processador quando precisa de um dado a ser comunicado paralelismo virtual X real Por exemplo: existem 100 processadores disponíveis cada processador pode estar executando vários processos: virtualmente existem um total de 300 processos
Quais características importantes das aplicações? difícil definir processos/tarefas totalmente independentes comunicação entre processos pode gerar um tráfego de mensagens pesado comunicação entre processos: troca de mensagens: considera a topologia da rede de interconexão memória compartilhada: utilização de semáforos para proteção de regiões críticas direct remote-memory access: existência de processadores dedicados à comunicação
Modelos de Computação Paralela interface - uma máquina abstrata a abstração se faz necessária para facilitar a programação sem se preocupar com detalhes da máquina um modelo deve ser estável para ser um padrão um modelo contém os aspectos importantes tanto para os projetistas de software quanto para os da máquina as decisões de implementações são feitas para cada máquina destino, não havendo necessidade de se refazer programas
Aspectos Explorados pelo Modelo Independência da arquitetura Fácil entendimento
Aspectos Explorados pelo Modelo Facilidade de programação O programador não deve se preocupar com detalhes da máquina destino modelos abstratos: programação mais fácil O compilador é que deve traduzir para uma estrutura do programa em execução considerando o sistema computacional destino tarefa do compilador: mais árdua nível de abstração nível de máquina
Exercício Capitulo I do Livro disponibilizado por Ian Foster um resumo Exercícios 1, 2 e 3