Algoritmos Paralelos Introdução (Jaja)

Documentos relacionados
Universidade Estadual de Mato Grosso do Sul UEMS Curso de Ciência da Computação Disciplina de Algoritmos Paralelos e Distribuídos

Modelo de Programação Paralela

Exercícios (Ian Foster s Book)

Definindo melhor alguns conceitos

Modelos para Concorrência

Organização e comunicação em plataformas paralelas

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

Nem todos os problemas algorítmicos que podem ser resolvidos em princípio podem ser resolvidos na prática: os recursos computacionais requeridos

Algoritmos Paralelos usando CGM/MPI: Uma Introdução. Edson Norberto Cáceres e Siang Wun Song DCT/UFMS e DCC/IME/USP DCC-IME-USP - Aula 02

Computadores e Programação (DCC/UFRJ)

ANÁLISE DE ALGORITMOS: PARTE 1. Prof. André Backes. Como resolver um problema no computador? Precisamos descrevê-lo de uma forma clara e precisa

ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS

Análise de complexidade

Análise de Algoritmos Estrutura de Dados II

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

ao paradigma imperativo

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

Programação Concorrente e Paralela

Introdução à Ciência da Computação II

Toward an Architecture-Independent Analysis of Parallel Algorithms

Preliminares. Profa. Sheila Morais de Almeida. agosto

1. A pastilha do processador Intel possui uma memória cache única para dados e instruções. Esse processador tem capacidade de 8 Kbytes e é

Bacharelado em Sistemas de Informação Sistemas Operacionais. Prof. Filipo Mór

Complexidade de algoritmos Notação Big-O

Análise de Complexidade de Algoritmos. mario alexandre gazziro

2. Complexidade de Algoritmos

COMPLEXIDADE DE ALGORITMOS

ALGORITMOS AVANÇADOS UNIDADE I Análise de Algoritmo - Notação O. Luiz Leão

Faculdade de Computação 3 a Prova de Arquitetura e Organização de Computadores 2 Parte I Prof. Cláudio C. Rodrigues

Arquitetura e Organização de Computadores

Universidade Federal do RGS Instituto de Informática Departamento de Informática Aplicada

Teoria da computabilidade Indecidíveis Decidíveis

Introdução OpenMP. Nielsen Castelo Damasceno

Aula 1. Teoria da Computação III

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

Arquiteturas de Sistemas de Processamento Paralelo. Arquiteturas SIMD

OpenMP: Variáveis de Ambiente

CT-234. Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Benchmarks. 1. Introdução

Projeto e Análise de Algoritmos

Programação de Computadores:

Difusão e Coleta em uma rede. Algoritmos Distribuídos Andrews (C. Geyer) Difusão e Coleta: Probe/Echo 1

Parte I Multiprocessamento

Algoritmos Distribuídos. AD Modelo Computacional 1

SSC PROGRAMAÇÃO CONCORRENTE. Aula 03 Terminologia Geral de Computação Paralela Prof. Jó Ueyama

Teoria da Computação Aula 9 Noções de Complexidade

ESTRUTURA DE DADOS I AULA I

ESTRUTURAS DE DADOS prof. Alexandre César Muniz de Oliveira

Disciplina: Arquitetura de Computadores

Programação Distribuída e Paralela Apresentação

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

Decisões arquiteturais importantes. Projeto arquitetural x projeto de algoritmos. Decomposição de dados. Decomposição de dados

ESTRUTURAS DE DADOS E ALGORITMOS APRESENTAÇÃO DO CURSO E INTRODUÇÃO

PIPELINE. Introdução ao Pipeline. PIPELINE Ciclo de Instruções. PIPELINE Ciclo de Instruções. PIPELINE - Exemplo. PIPELINE Considerações

PROGRAMAÇÃO OBJECTIVOS DA CADEIRA

Complexidade de Tempo e Espaço

Cérebro humano versus Computador digital

4) Defina o que vem a ser um algoritmo, e porque, o mesmo depende do processo.

Multiprocessamento. Patterson & Hennessy Capítulo 9. Arquitetura e Organização de Computadores Juliano M. Vieira (c) 2011

Computação Paralela (CUDA)

SSC510 Arquitetura de Computadores. 6ª aula

Quantidade de memória necessária

Programação Paralela e Distribuída Lista de Exercícios P2 2008/1

Algoritmos e Estrutura de Dados. Aula 01 Apresentação da Disciplina e Introdução aos Algoritmos Prof. Tiago A. E. Ferreira

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

Modelagem e implementação de programas concorrentes

Algoritmo. Exemplo. Definição. Programação de Computadores Comparando Algoritmos. Alan de Freitas

Sistemas Distribuídos

Programação Paralela. Objetivo: Apresentar conceitos básico de programação paralela com MPI.

Estatística e Modelos Probabilísticos - COE241

Introdução ao CUDA. Material elaborado por Davi Conte.

Sistema Distribuído. Sistema Distribuído. Aplicações Distribuídas. Conceitos Básicos

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

Arquiteturas Paralelas

Análise de algoritmos

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data)

Programação: Vetores

Arranjo de Processadores

AULA 03: PROCESSAMENTO PARALELO: MULTIPROCESSADORES

TÉCNICO DE INFORMÁTICA - SISTEMAS

William Stallings Arquitetura e Organização de Computadores 8 a Edição

SEMÂNTICA 02/09/2013. Conceitos de LPs - Semântica

Introdução à Computação

PCC104 Projeto e Análise de Algoritmos

Paralelismo em Computadores com Tecnologia Multicore

Introdução à Programação Paralela através de Padrões. Denise Stringhini Calebe Bianchini Luciano Silva

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 02: PROCESSAMENTO PARALELO: PROCESSADORES VETORIAIS

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

Caracterização de Sistemas Distribuídos

Algoritmos Computacionais

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Teoria da Computação Aula 8 Noções de Complexidade

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

Aula 3: Algoritmos: Formalização e Construção

1 a Lista Professor: Claudio Fabiano Motta Toledo Estagiário PAE: Jesimar da Silva Arantes

Arquitetura de Computadores II

Ementário das disciplinas do curso de Engenharia de Software

Transcrição:

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