Algoritmos Paralelos Introdução (Jaja) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 1
Autoria! Autores " C. Geyer! Local " II-UFRGS " Disciplina: Programação Distribuída e Paralela " Versão # V35, abril de 2012 Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 2
Súmula! Súmula (slides) " conceitos básicos # algoritmos paralelos # speedup # eficiência # outros " modelos de máquina paralela # DAG: conceito # PRAM # outros # definição # exemplos: matriz X vetor, soma de n elementos, matriz X matriz Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 3
! Súmula (slides) Súmula " desempenho de algoritmos paralelos # outras medidas de desempenho # descrição de algoritmos paralelos em 2 níveis # princípio de escalonamento # noções de ótimo " técnicas básicas de paralelização (obs. outros slides) # árvore # divisão e conquista # particionamento # saltos via ponteiros Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 4
Bibliografia! Bibliografia " Jaja, J. An Introduction to Parallel Algorithms. Addison- Wesley, Reading, 1992. # algoritmos em máquina abstrata PRAM " Kumar, V. et alli. Introduction to Parallel Computing - Design and Analysis of Algorithms. The Benjamin/ Cummings Publishing Company, Redwood, 1994. # algoritmos em máquinas com topologia real # matrizes e hipercubos " Leighton, T. Introduction to Parallel Algorithms and Architectures: Arrays, Trees and Hypercubes. Morgan Kaufman, San Mateo, 1991. # algoritmos em máquinas com topologia real Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 5
! Termos e áreas Termos e Áreas " processamento paralelo " arquiteturas paralelas " programa paralelo " programação paralela (PP) " ambientes p/pp: linguagens, bibliotecas " algoritmos paralelos # complexidade, teoria " depuração " monitoração " visualização " prova, especificação " compilação: geração automática de código Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 6
Em PDP! Em PDP " 1. conceitos básicos de processamento/programação paralela " 2. máquina abstrata PRAM e algoritmos exemplos " 3. ambiente MPI # algumas técnicas de programação " 4. Ambiente OpenMP! Esses slides " Tópicos 1 e 2 Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 7
Conceitos Básicos! Conceitos básicos " processamento paralelo # executar computações de forma mais rápida que um único processador # usando vários processadores concorrentemente " aplicações # dinâmica de fluídos # previsão de tempo # modelagem e simulação de sistemas muito complexos # processamento de imagens # produção automatizada # inteligência artificial Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 8
Conceitos Básicos! Conceitos básicos " outras definições de processamento paralelo # Wikipedia # Parallel computing is a form of computation in which many calculations are carried out simultaneously, [1] operating on the principle that large problems can often be divided into smaller ones, which are then solved concurrently ("in parallel"). Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 9
Conceitos Básicos! Conceitos básicos " outras definições de processamento paralelo # De Blaise Barney, Lawrence Livermore National Laboratory # parallel computing is the simultaneous use of multiple compute resources to solve a computational problem: # To be run using multiple CPUs # A problem is broken into discrete parts that can be solved concurrently # Each part is further broken down to a series of instructions # Instructions from each part execute simultaneously on different CPUs # https://computing.llnl.gov/tutorials/parallel_comp/ Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 10
Conceitos Básicos! Conceitos básicos " outras definições de processamento paralelo # MS # Parallel computing is a form of computation in which many operations are carried out simultaneously. Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 11
Conceitos Básicos! Conceitos básicos " fatores (não tão) recentes favorecendo o processamento paralelo # redução do custo do hardware # permite produção simples de sistemas com muitos processadores # avanços do VLSI: construção de chips com milhões de transistores # cpu s de prateleiras de bom desempenho # capacidade de comunicação eficiente Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 12
Conceitos Básicos! Conceitos básicos " Fatores (não tão) recentes favorecendo o processamento paralelo # Possível aproximação dos limites físicos da velocidade do processador seqüencial # Clusters (máquinas de prateleiras ) # Processadores multicore # Processadores GPU Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 13
Conceitos Básicos! Conceitos básicos (cont.) " computador paralelo ([Jaja 1992]) # coleção de processadores, em geral do mesmo tipo, # localizados a curta distância um do outro # interconectados de algum modo, # que permita coordenação de atividades e troca de informações, # usados preferencialmente para resolver um problema em conjunto Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 14
Conceitos Básicos! Conceitos básicos (cont.) " Definição do Jaja # definição abstrata, suficiente para algoritmos paralelos " Para definições e classificações mais precisas, ver: # Cursos sobre Arquiteturas Paralelas das ERADs # ERAD: Escola Regional de Alto Desempenho # Culler, D. E. And Singh, J. P. Parallel Computer Architecture: A Hardware / Software Approach. Morgan Kaufmann, 1999. Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 15
Conceitos Básicos! Conceitos básicos (cont.) " estudo de algoritmos (Jaja) # apropriados para execução em computadores paralelos # ênfase em técnicas, paradigmas e métodos # não em aplicações específicas # critérios de avaliação de algoritmos sequenciais # tempo de execução, uso de espaço, facilidade de programação Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 16
Conceitos Básicos! Conceitos básicos (cont.) " estudo de algoritmos (Jaja) # critérios de avaliação de algoritmos paralelos # situação mais complexa devido parâmetros adicionais como # quantidade de processadores, # capacidade de memórias locais, # esquema de comunicação, # protocolos de sincronização Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 17
Conceitos Básicos! Conceitos básicos (cont.) " notação básica # P: # n: # T * (n): # problema computacional # tamanho da entrada # complexidade seqüencial # prova-se que não há algoritmo que resolva P em tempo menor Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 18
Conceitos Básicos! Conceitos básicos (cont.) " notação básica # A: # T p (n): # algoritmo paralelo # complexidade (tempo) do algoritmo A em p processadores Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 19
Conceitos Básicos! Conceitos básicos (cont.) " critério de speedup: S p (n) # Permite avaliar a qualidade de A # aumento de desempenho obtido por A sobre p processadores # S p (n) = T * (n) / T p (n) # S p (n)! p # idealmente, procura-se A que produza S p (n) " p (próximo de p) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 20
! Conceitos básicos (cont.) Conceitos Básicos " critério de speedup: S p (n) # ineficiências diminuem S p (n) # insuficiente concorrência para uso constante dos p processadores # obs: somente isto não reduz S p (n) # mas S p (n) não aumenta # para uma determinada entrada (n), a partir de um certo ponto não há mais tarefas para mais processadores # retardos de comunicação # criação (gerência) das tarefas # overheads para sincronização das tarefas Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 21
Conceitos Básicos! Conceitos básicos (cont.) " critério de speedup: S p (n) # em geral: T 1 (n) > T * (n) # se T * (n) não é conhecido: usa-se o melhor algoritmo seqüencial conhecido Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 22
Conceitos Básicos speedup Ideal 6 5 Normal: sem custos tempo constante 4 3 2 speedown Normal: com custos 1 1 2 3 4 5 6 cpus Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 23
Conceitos Básicos! Conceitos básicos (cont.) " critério de speedup: S p (n) # Motivos para redução de S p (n) : 2a curva # Custos de geração de tarefas # Custos de sincronização # Custos de comunicação # Espera em acesso a recursos exclusivos # RAM, HD,... # Limite de tarefas, dado um problema e uma entrada Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 24
Conceitos Básicos! Conceitos básicos (cont.) " critério de speedup: S p (n) # Dificuldade de uso # Como comparar 2 (algoritmos) speedups se # de cpus é diferente? # Exemplo # Alg A: S p (n) = 1000 com 10000 cpus # Alg B: S p (n) = 90 com 100 cpus # Qual o melhor algoritmo? Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 25
Conceitos Básicos! Conceitos básicos (cont.) " critério de eficiência # indica efetiva utilização dos p processadores # E p (n) = T 1 (n) / pt p (n) # se E p (n) = 1=> # indica que A é executado aproximadamente p vezes mais rápido usando p processadores que 1 processador # cada processador está fazendo trabalho útil Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 26
Conceitos Básicos! Conceitos básicos (cont.) " critério de eficiência # T # (n): limite inferior do tempo de A, qualquer que seja p # pelos mesmos motivos que reduzem S p (n) # => T # (n)! T p (n) E p (n)! T 1 (n) / pt # (n) # => eficiência diminui rapidamente quando p cresce acima de T 1 (n) / T # (n) # p cresce e T # (n) é constante # T 1 (n) / T # (n): speedup máximo # T 1 (n): constante # T # (n): minimo Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 27
Conceitos Básicos eficiência 1.8.6.4 Ideal Normal: somente p cresce, T # Com custos: Tp aumenta.2 1 2 3 4 5 6 cpus Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 28
Conceitos Básicos! Conceitos básicos " desenvolver algoritmos com o melhor (possível) speedup # modelo deve permitir derivação de estimações de T p (n) e de limites inferiores do melhor speedup Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 29
Conceitos básicos " linguagem mínima para expressão de algoritmos paralelos # atribuição variavel := expressao # blocos begin/end begin end comando comando... comando # comando condicional if (condição) then comando[else comando] Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 30
Conceitos Básicos! Conceitos básicos " loops # for variavel = valor_inicial to valor_final do comando # while condição do comando " término (saída) # Exit " Em resumo # Uma pseudo-linguagem convencional Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 31
Conceitos Básicos! Conceitos básicos " limites de tempo e espaço # expressos como função do tamanho da entrada (n) # quantidade de dados a processar # interesse pelo pior-caso # => expressões do valor máximo de recurso (tempo, espaço) # valores reais (de programas em execução) # normalmente piores devido custos maiores Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 32
Conceitos Básicos! Conceitos básicos (cont.) " notação de limites # T(n) = $ (f(n)); ($ = ómicron) # se existem constantes positivas c e n 0 tais que # T(n)! cf(n), para n % n 0 # T(n) = & (f(n)); (& = ômega) # se existem constantes positivas c e n 0 tais que # T(n) % cf(n), para n % n 0 # T(n) = ' (f(n)) (' = teta) # se T(n) = & (f(n)) e # se T(n) = $ (f(n)) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 33
Conceitos Básicos! Conceitos básicos (cont.) " estimativa do tempo de execução # pela quantidade de operações básicas # ler e gravar na memória (RAM) # operações básicas aritméticas e lógicas # critério de custo uniforme # o custo de uma operação independe da mesma e do tamanho da palavra Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 34
Modelos de Máquinas Paralelas! Objetivo de um modelo de máquina paralela " modelo geral para descrição e análise de algoritmos paralelos " Simplificar o projeto de algoritmos paralelos " Permitir / simplificar as comparações entre algoritmos! Características desejadas " simplicidade # descrição simples do algoritmo # permita análise matemática de medidas importantes de desempenho # independente de arquitetura de máquinas paralelas (hardware) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 35
! Características desejadas " implementabilidade Modelos de Máquinas Paralelas # algoritmos desenvolvidos para o modelo possam ser facilmente implementados em máquinas paralelas (reais) # análise de desempenho do algoritmo com o modelo seja uma boa aproximação do desempenho real do algoritmo na máquina paralela! Modelo único " Não há um modelo aceito pela maioria dos pesquisadores " Há modelos mais populares " Diferentes abordagens " Diferentes graus de complexidade e implementabilidade Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 36
Modelos de Máquinas Paralelas! Modelo grafos acíclicos diretos: DAG " entrada: nodo sem arcos de entrada " operação: nodo cujos arcos de entrada representam os operandos # grau máximo: 2 " saída: nodo sem arco de saída " custo de cada nodo: uniforme " grafo com n nodos de entrada: problema de tamanho de entrada n " mas é possível trabalhar para certos objetivos com grafos de tamanho de entrada genérico Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 37
Modelos de Máquinas Paralelas! Modelo grafos acíclicos diretos: DAG " um algoritmo é uma família de grafos {G n } onde G n representa o algoritmo para a entrada n " útil para análise de problemas numéricos " totalmente independente de arquitetura " condição para análise de desempenho: # cada processador pode acessar dado produzido por outro a custo zero Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 38
Modelos de Máquinas Paralelas! Modelo grafos acíclicos diretos: DAG (cont.) " Escalonamento # custo (tempo) de cada nó: 1 # associar cada nodo i a um processador, usando par (j i, t i ): # j i é o processador do nodo i # t i é a unidade de tempo em que a operação será executada em j i j i, t i j j, t j Nó j Nó i Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 39
Modelos de Máquinas Paralelas! Modelo grafos acíclicos diretos: DAG (cont.) " Escalonamento # custo (tempo) de cada nó: 1 # associar cada nodo i a um processador, usando par (j i, t i ): # considerando 2 nodos i e k se t i = t k então j i not = j k # se tempos iguais -> 2 cpus distintas # se (i, k) é um arco, então t k >= t i + 1 j i, t i Nó i j j, t j Nó j Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 40
Modelos de Máquinas Paralelas! Modelo grafos acíclicos diretos: DAG (cont.) " escalonamento # tempo de nodos entrada: zero => sem processador # um escalonamento # seqüência {(j i, t i ) i (N}, onde N é a quantidade de nodos # definir cpu e tempo para cada nó # complexidade de um escalonamento # max t i(i(n) # = tempo da execução paralela # maior tempo entre todos os nós Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 41
Modelos de Máquinas Paralelas! Modelo grafos acíclicos diretos: DAG (cont.) " complexidade do DAG: # Tp(n) = min{max t i(i(n) } # motivo: # pode-se ter vários escalonamentos para um DAG e p processadores # limite mínimo: # profundidade do DAG ou maior comprimento, para qualquer quantidade de processadores # problema complexo: # como obter o melhor? # dado um problema pode haver milhares de soluções Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 42
Modelos de Máquinas Paralelas! Modelo grafos acíclicos diretos: DAG (cont.) " Exemplo # Grafo para n = 8; 2 cpus # Escalonamento A: max ti = 6 # Escalonamento B: max ti = 4 (melhor) j i, t i Nó i 1, 1 1, 2 1, 3 1, 4 1, 1 2, 1 1, 2 2, 2 2, 3 A 2, 5 1, 3 B 2, 3 2, 6 1, 4 Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 43
Modelos de Máquinas Paralelas! Modelo de memória compartilhada " conjunto de processadores, cada com um índice i # modelo código único em todos os processadores # não há necessidade de criação de tarefas concorrentes (processos, threads, objetos ativos,...) # cada processador pode executar partes (funções) diferentes pelo teste de i " memória global acessível a todos os processadores em leitura/escrita # mas não para aritmética e outras eventuais operações Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 44
Modelos de Máquinas Paralelas! Modelo de memória compartilhada " uma memória local, privada, para cada processador " operações especiais para transferência de dados entre memória global e local # global read(x, y): # variável X global é copiada na local y # global write(u, V): # variável global V é escrita com local U Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 45
Modelos de Máquinas Paralelas Diagrama da arquitetura do modelo de memória compartilhada memória global X V global read(x, y) y u global write(u, V): memórias locais p 1 p 2... p P cpu s Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 46
Modelos de Máquinas Paralelas! Modelo de memória compartilhada (cont.) " submodelo síncrono # todos os processadores operam de forma síncrona; mesmo relógio # mas a cada tempo, cada cpu pode executar uma instrução diferente das executadas pelas outras cpu s # chamado de máquina paralela de acesso randômico (PRAM) # programação mais simples, sincronização implícita " submodelo assíncrono # programador é responsável por incluir mecanismo de sincronização (se necessário) # programação mais complexa Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 47
Modelos de Máquinas Paralelas! Modelo de memória compartilhada (cont.) " Cálculo da complexidade # Considera-se somente operações definidas na máquina " Diversas outras máquinas abstratas consideram # Custos de comunicação # Custos de sincronização " Globalread e Globalwrite # Equivalem a send/receive ao menos para efeito de custos? Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 48
Modelos de Máquinas Paralelas! Exemplo de memória compartilhada : matriz X vetor " solução simples relativamente à complexidade do problema original " entradas: " saída: # matriz A: [N, N] # vetor V: [N] # vetor R: [N] " definição: # R[i] := (A[i, 1] * V[1]) + (A[i, 2] * V[2]) +... (A[i, N] * V[N]) # cada elemento i de R é a soma dos produtos de cada coluna da linha i de A por cada elemento de V # Ri = Ai * V Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 49
Modelos de Máquinas Paralelas! Exemplo de memória compartilhada : matriz X vetor " seqüencial # loop para varrer as linhas de A e elementos de R # loop interno para varrer as colunas de uma linha e de V # multiplicação e soma Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 50
Modelos de Máquinas Paralelas! Exemplo de memória compartilhada : matriz X vetor " caso 2 3 4 5 A[2,2] X 6 7 V[2] (2*6) + (3*7) = 33 (4*6) + (5*7) = 59 = 33 59 R[2] Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 51
Modelos de Máquinas Paralelas! Exemplo de memória compartilhada : matriz X vetor " idéia de paralelização # considera-se: # p <= N # (N / p) é inteiro = q # divide-se a matriz A em p faixas compostas de q linhas # cada cpu calcula q elementos de R usando sua faixa de A e todo o vetor V A Cpu 1 N = 10 p = 2 q = 5 Cpu 2 R Cpu 1 Cpu 2 Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 52
Modelos de Máquinas Paralelas! Exemplo de memória compartilhada : matriz X vetor " aspectos memória compartilhada # a memória global contem A, V e R; # A e V inicializados # cada cpu precisa ler sua parte de A e todo V para sua memória local # matriz local Z: [q, N] # vetor local X: [N] # cada cpu precisa de um vetor de resultado local # vetor local Y: [q] # cada cpu grava sua parte de R Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 53
Modelos de Máquinas Paralelas! Exemplo de memória compartilhada : matriz X vetor " sintaxe especial memória compartilhada # A(i:j, k:l): # i: # referências parciais a arrays # faixa de A entre # as linhas i e j # e as colunas k e l (inclusives) # índice predefinido contendo o identificador de cada cpu: 1, 2,..., p Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 54
Modelos de Máquinas Paralelas! Exemplo de memória compartilhada : matriz X vetor " código # global_var A: [N, N] % inicializado V: [N] % inicializado R: [N] local_var Z: [N, N] % para qualquer p, q X: [N] Y: [N] % idem Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 55
Modelos de Máquinas Paralelas! Exemplo de memória compartilhada : matriz X vetor " código # begin global_read(a[(q*(i - 1) + 1) : q*i, 1:N], Z) % le faixa de A global_read(v, X) % le V compute Y := Z * X % vetorial: q linhas global_write(y, R[q*(i - 1) + 1) : q*i] % grava faixa de R end " Se N = 8 e p = 4 => q = 2 # Cpu 1: global_read(a[2*(1 1) +1) : 2*1, 1:8], Z) global_read(a[1:2, 1:8], Z) # Cpu 2: global_read(a[3:4, 1:8], Z) # Cpu 3: global_read(a[5:6, 1:8], Z) # Cpu 4: global_read(a[7:8, 1:8], Z) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 56
Modelos de Máquinas Paralelas! Exemplo de memória compartilhada : matriz X vetor exemplo: " Caso: # n = 8 # #p = 4 # q = 2; 2 linhas por cpu # i = 1(1a cpu) # read das linhas 1 e 2: # q*(i - 1) + 1) = 2*(1-1) + 1 = 1 # q*i = 2 # grava faixa de 1 a 2 nos resultados # idem Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 57
Modelos de Máquinas Paralelas! Exemplo de memória compartilhada : matriz X vetor " complexidade # passo 1: cada cpu transfere n números: O(1) # passo 2: cada cpu transfere n 2 /p números: O(1) # passo 3: cada cpu executa n 2 /p operações: O(n 2 /p) # passo 4: cada cpu transfere n/p números: O(1) # total: O (n 2 /p) # despreza-se os custos # padronização forte de tempos # p.ex.: transferir 1 ou 100 inteiros " complexidade seqüencial # O(n 2 ) # desconsidera-se as operações de loop Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 58
Modelos de Máquinas Paralelas! Exemplo de memória compartilhada : matriz X vetor " speedup # S p (n) = O(n 2 ) / O(n 2 /p) # S p (n) = p " eficiência # para p! n # E p (n) = p/p # E p (n) = 1 " Quantidade máxima de tarefas (cpus): # n " Tempo mínimo # T # (n) = n Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 59
Modelos de Máquinas Paralelas! Exemplo de memória compartilhada : matriz X vetor " exercício # calcular S e E considerando os custos para # n: 2, 4, 8, 16 # p: 1, 2, 4, 8, 16 # colocar em gráficos Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 60
Modelos de Máquinas Paralelas! Exemplo de memória compartilhada : matriz X vetor " sincronização # nenhuma: # não há compartilhamento de dados # não há dependência entre as tarefas # máquina pode ser PRAM (síncrona) ou não Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 61
Modelos de Máquinas Paralelas! Exemplo de memória compartilhada : matriz X vetor " algoritmo alternativo # divisão dos dados pelas colunas # matriz: p blocos Ai (n, q) # vetor: também p blocos Xi de tamanho q # Y := A1X1 + A2X2 +... + ApXp # cada produto interno (AiXi) produz q valores (parciais) de Y # cada cpu: calcula Zi := AiXi # uma cpu calcula Y: somatório de p blocos Zi # somente todos Zi # exige sincronização # só pode-se somar após cálculos parciais de Z [1-p] Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 62
Modelos de Máquinas Paralelas! Exemplo de algoritmo PRAM: soma de N elementos " entrada " saída # vetor V: [N] # S: " definição # S: V[1] + V[2] +... + V[N] Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 63
Modelos de Máquinas Paralelas! Exemplo de algoritmo PRAM: soma de N elementos " idéia de paralelização # q = N / p; log q é inteiro # não destruir valores de entrada # copiar em vetor auxiliar T # código a seguir: N = p # passo 1 e 2: copia V em um vetor T auxiliar # uso de N cpus # cada cpu soma dois elementos diferentes num 1o passo # passos seguintes somam as somas do passo anterior # quantidade de passos: logn # altura da árvore de tarefas (DAG) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 64
Modelos de Máquinas Paralelas! Exemplo de algoritmo PRAM: soma de N elementos " problemas # como em cada passo fazer cada cpu somar os elementos corretos? # cada cpu le 2 operandos definidos por i e grava operando i # dependência: cada cpu no passo i le 2 operandos produzidos no passo i-1 # sincronização desnecessária devido sincronismo da PRAM (relógio único e quantidade igual de passos) # a cada passo menos cpus são necessárias Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 65
Modelos de Máquinas Paralelas! Exemplo de algoritmo PRAM: soma de N elementos " exemplo com 8 elementos # log8 = 3 passos # passo 1: # cpu 1: soma T[1] e T[2] e grava T[1] # cpu 2: soma T[3] e T[4] e grava T[2] # cpu 3: soma T[5] e T[6] e grava T[3] # cpu 4: soma T[7] e T[8] e grava T[4] # passo 2: somente cpus 1 e 2 # passo 3: somente cpu 1 Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 66
Modelos de Máquinas Paralelas Soma com n=8 e 8 cpus S = T 1 T 1 Obs: é um DAG T 1 T 2 T 1 T 2 T 3 T 4 T 1 = V 1 T 2 = T 3 = T 4 = T T 8 = V V 2 3 V 5 = T 6 = T 7 = 4 V 5 V 6 V 7 V 8 p p 1 p 2 p p 8 3 4 p 5 p 6 p 7 Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 67
Modelos de Máquinas Paralelas! Exemplo de algoritmo PRAM: soma de N elementos " código # global_var V: [N] S T: [N] local_var A Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 68
Modelos de Máquinas Paralelas! Exemplo de algoritmo PRAM: soma de N elementos " código # begin 1. globalread(v[i], A) % copia vetor em 2 passos 2. glowrite(a, T[i]) 3. for (h = 1 to log N) do % loop altura do vetor if (i <= (N/2 h )) then % elimina cpus globalread(t[2i-1], X) globalread(t(2i]), Y) Z := X+Y; globalwrite(z, T[i]) 4. if (i = 1) then S := T[1] Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 69
Modelos de Máquinas Paralelas! Exemplo de algoritmo PRAM: soma de N elementos " complexidade seqüencial # O(n) " complexidade paralela # passos 1, 2 e 4: O(1) # considerando n cpus # passo 3: # loop: log n passos: O(log n) # considerando n/2 cpus # total: O(log n) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 70
Modelos de Máquinas Paralelas! Exemplo de algoritmo PRAM: soma de N elementos " desempenho # S n (n) = n / log n # E n (n) = n / (n log n) = 1 / log n # #máxima de tarefas # n nos passos 1 e 2 # n/2 no passo 3 (sub passo 1) # T # (n) = log n # usando n cpus # desprezando passos 1 e 2: usando n/2 cpus Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 71
Modelos de Máquinas Paralelas! Tipos de PRAM " critério # acessos concorrentes à mesma posição de memória " notação: # E: acesso exclusivo por uma cpu # C: acesso concorrente por várias cpus # R: em leitura # W: em escrita (e leitura) " EREW: nenhum tipo de acesso concorrente " CREW: leitura concorrente " CRCW: leitura e escrita concorrente Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 72
! Tipos de PRAM Modelos de Máquinas Paralelas " 3 subtipos de CRCW # semântica em caso de escrita concorrente # comum # permite se as cpus escrevem o mesmo valor # arbitrária # escolhe arbitrariamente uma cpu # prioritária # escolhe a cpu com menor índice " não há diferenças substanciais entre EREW, CREW e CRCW # mas concorrência oferece maior poder # segundo alguns estudos teóricos Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 73
Modelos de Máquinas Paralelas! Notação simplificada " omissão das leituras e escritas na memória global " acessos são implícitos pela referência a variáveis globais " exemplo # comando: A := B + C # onde A, B e C são variáveis globais # significa # global read(b, x) # global read(c, y) # z := x + y # global write(z, A) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 74
PRAM: matriz X matriz! Exemplo PRAM: matriz X matriz " entrada " saída # A, B: 2 matrizes n x n # n = 2 k, k é inteiro # C = A * B (matriz n x n) " especificação # C i,j = produto da linha Ai por coluna Bj # = A i,1 * B 1, j + A i,2 * B 2,j +... + A i,n * B n,j # total de n 3 multiplicações # cada C i,j : n multiplicações # n 2 C i,j # n 2 : cada linha de A multiplica por cada coluna de B Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 75
! Exemplo PRAM: matriz X matriz " características # n 3 processadores, indicados por P i,j,m # P i,j,m calcula produto A[i, m] * B[m, j] # para cada par (i, j): PRAM: matriz X matriz # os n processadores P i,j,m, 1! m! n, (variação de m) # calculam a soma dos A[i, m] * B[m, j], 1! m! n, # conforme exemplo soma de elementos de vetor # cada vetor m (m) de n processadores calcula o produto de 1 linha de A (i) por 1 coluna de B (j) # soma de n multiplicações # n 2 somas (n 2 produtos Ci,j) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 76
PRAM: matriz X matriz! Exemplo PRAM: matriz X matriz (cont.) " código: # referências implícitas à memória global # processadores indicados por i, j, m # C : # n matrizes de n 2 # algoritmo que consome muito espaço Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 77
! Exemplo PRAM: matriz X matriz (cont.) " código: PRAM: matriz X matriz begin // calcula todos os produtos; n 3 produtos 1. C [i, j, m] = A[i, m] * B[m, j] // loop normal da soma de n elementos (variação em m) // mas n 2 somas (variação em i,j) //! das cpus trabalham mas como na soma, umas mais 2. for h = 1 to log n do if (m! (n / 2 h )) then C [i, j, m) = C [i, j, 2m - 1) + C [i, j, 2m] // todos os p i, j, 1 efetuam cópia 3. if (m == 1) then C[i, j] = C [i, j, 1] end. Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 78
PRAM: matriz X matriz! Exemplo PRAM: matriz X matriz (cont.) " observações # leitura concorrente no passo 1 # por exemplo, P i,1,l, P i,2,l,..., P 1,n,l, acessam A[i, l] # PRAM deve ser CREW # complexidade: O(logn) # passo 1: 1 # passo 2: soma: O(logn) # passo 3: 1 # se o if do passo 3 é eliminado então PRAM deve ser CRCW com valores iguais Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 79
PRAM: matriz X matriz! Exemplo PRAM: matriz X matriz (cont.) " speedup # S(n) = n 3 /logn # Ep(n) = 1/logn # usa n 3 cpus Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 80
PRAM: matriz X matriz! Exercício " desenhe as curvas de S e E para n = 2, 4, 8, 16, 32, # obs: note que p varia com n Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 81
Princípio de Escalonamento! Exemplo soma de n elementos com poucos processadores " Não há cpus suficientes para # a cópia # e para os 1os níveis da árvore " n = 2 k ; p processadores = 2 q ; m = n/p = 2 k - q " Exemplo # n = 16 = 2 4 -> k = 4 # p = 4 = 2 2 => q = 2 # m = 4 # somente 4 cpus copiam # somente 4 cpus efetuam 8 somas (1º nível) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 82
Princípio de Escalonamento! Exemplo soma de n elementos com poucos processadores " escalonamento # dividir A[n] em p subvetores, cada um de tamanho m elementos # cada pi copia A((m(i - 1) + m), mi) # por exemplo: n = 8, p = 4, m = 2 p1: A(1,2) a B(1, 2) p2: A(3, 4) a B(3, 4) p3:... p4: A(7, 8) a B(7, 8) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 83
Princípio de Escalonamento! Exemplo soma de n elementos com poucos processadores " n = 2 k ; p processadores = 2 q ; m = n/p = 2 k q " escalonamento # a cada altura h da árvore binária (algoritmo anterior para p = n) # geração de cada B(m) é dividida entre p processadores # qtde de operações concorrentes = n/2 h = 2 k - h # conforme nível da árvore (h) # n = 2 k # se 2 k - h >= p (= 2 q ) ou k - h - q >= 0 então divide 2 k - h entre p processadores se não usar os 2 k - h processadores de menor índice (usual) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 84
Princípio de Escalonamento! exemplo soma de n elementos com poucos processadores (cont.) " algoritmo nível inferior entradas: A[n] n p: qtde. de processadores i: índice do processador saídas: SUM: soma dos n elementos de A Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 85
Princípio de Escalonamento! exemplo soma... com poucos processadores (cont.) " begin 1. % cópia de um B parcial; por cada processador i for j = 1 to m (= n/p) do B(m(i - 1) + j) := A(m(i - 1) + j) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 86
Princípio de Escalonamento! exemplo soma... com poucos processadores (cont.) " 2. for h = 1 to logn do % soma: logn passos 2.1. if (k - h - q >= 0) then % caso haja falta de cpus % cada p: efetua vários passos for j = (2k - h - q(i - 1) + 1) to (2k - h - qi) do B(j) := B(2j - 1) + B(2j) 2.2 else if (i <= 2 k- h) then % caso haja suficientes cpus B(i) := B(2i - 1 ) + B(2i) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 87
Princípio de Escalonamento! exemplo soma... com poucos processadores (cont.) " 3. if (i = 1) then SUM := B(1) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 88
Princípio de Escalonamento! exemplo soma... com poucos processadores (cont.) " Exercício # Para n = 16 e p = 4, indique o que faz a cpu 2 em cada passo Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 89
Outros Tópicos! Outros conceitos: cap. 1 do Jaja " Escalonamento " Ótimo " Trabalho! Técnicas básicas de paralelização (algoritmos): cap. 2 do Jaja " árvore " divisão e conquista " particionamento " saltos via ponteiros Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 90
Outros Tópicos! Outros algoritmos: resto do Jaja " Sobre strings " Classificação "... Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 91
Revisão! Revisão " áreas do processamento paralelo " razões para maior uso do processamento paralelo " diferenças entre algoritmos seqüenciais e paralelos " razões para estudo especial de algoritmos paralelos " speedup # definição # fórmula # curva ideal # curvas normais (2) # speedup superlinear Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 92
Revisão! Revisão " eficiência # definição # fórmula # limite de T* # curva ideal # curva normal " máquina abstrata ideal " linguagem para máquina abstrata (Jaja) Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 93
Revisão! Revisão " máquina DAG # definição e componentes # entrada # algoritmos família # vantagens e aplicações # desvantagens # escalonamento # restrições # escalonamento ótimo Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 94
Revisão! Revisão " máquina PRAM # memórias # quantidade e tipos # tipos de acesso x instruções # relógios x cpus (sincronização) # vantagem para programador # criação de processos # seleção de processadores/processos Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 95
! Revisão Revisão " algoritmo M*V # valores de n e p # idéia de paralelização # dependência de dados # S(n) e E(n)? " algoritmo soma de n # valores de n e p # idéia de paralelização # trabalho de cada cpu ao longo do algoritmo # dependência de dados # truque para uso correto dos valores anteriores # S(n) e E(n)? Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 96
Revisão! Revisão " M*M # quantas cpus? # o que faz cada cpu no 1o passo? # qual a memória auxiliar necessária no 1o passo? # o que é feito no 2o passo? # quais cpus trabalham no 2o passo? # o que é feito no 3o e último passo? # qual a complexidade? # qual o S(n)? e a Ep(n)? Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 97
Revisão! Revisão " soma de n elementos com p < n cpus # como é feita a cópia do vetor original (1o passo)? # quantas cpus trabalham? # qual a complexidade geral do 2o passo? # qual a regra para escolha das 2 alternativas no 2o passo? # explique a idéia geral da nova alternativa em relação ao algoritmo orginal (n = p)? Programação distribuída e paralela (C. Geyer) Algoritmos Paralelos 98