Modelo de Programação Paralela

Propaganda
Modelo de Programação Paralela
As arquiteturas paralelas e distribuídas possuem muitos detalhes
•  Como especificar uma solução paralela pensando em todos esses detalhes?
O que queremos?
•  Executar a solução paralela o mais rápido possível?
•  Todos os detalhes influem no desempenho eficiente da solução?
Então
•  Um modelo de programação paralela deve especificar a metodologia de
execução e detalhes que influenciam na execução da aplicação naquela
arquitetura
•  Um modelo não deve especificar detalhes de um sistema/máquina específico
Abstraindo para Programar
  Maior facilidade de programação: o esforço intelectual é reduzido quando
nos concentrarmos em "uma coisa de cada vez”
  duas dimensões:
–  dimensão espacial
–  dimensão temporal
Dimensão Espacial
  A cada momento, conjuntos de tarefas independentes são
implementadas
–  cada tarefa ou processador não sabe o que acontecerá "a seguir"
  detalhamento de informações globais levam a uma programação difícil
Dimensão Temporal
  programas são composições de ações seqüenciais que preenchem o
sistema computacional como um todo:
  pode-se definir com maior conhecimento o que vai acontecer a seguir
Níveis de Paralelismo
Dependendo do nível considerado, a exploração do paralelismo é diferente
  nível de aplicações ou fases de aplicações
  a nível de tarefas
  a nível de instruções - a execução da instrução necessita da busca, análise e
execução propriamente dita
  dentro dos circuitos aritméticos
Algoritmos
  Quando queremos resolver um problema computacionalmente, temos
que analisar a complexidade deste. No domínio seqüencial, se procura
definir um algoritmo que resolva o problema em tempo mínimo.
  Mas quando se tratando de algoritmos paralelos, mais um parâmetro
–  número de processadores
–  operações independentes devem ser executadas em paralelo.
  qual o tamanho dos processos? noção de granulosidade (granularity)
–  a razão entre o tempo de computação necessário para executar
uma tarefa e a sobrecarga de comunicação durante essa
computação.
Modelos de Computação
Modelo de Computação Seqüencial: von Neumann
  plataforma base para que usuários e projetistas
–  complexidade de tempo do pior caso:
tempo máximo que o
algoritmo pode levar para executar qualquer entrada com n
elementos
–  complexidade de tempo esperado: complexidade média
–  critério de custo uniforme: qualquer instrução RAM leva uma unidade
de tempo para ser executada e também o acesso a registradores
Modelos de Computação
Modelo de Computação Paralela
  O desempenho do programa paralelo depende de certos fatores
dependentes da máquina:
–  grau de concorrência;
–  escalonamento e alocação de processadores;
–  comunicação e sincronização.
Modelos de Computação Paralela
! 
Memória Compartilhada
•  Com ou sem uso de threads
! 
Memória Distribuída
•  Troca de mensagens
! 
Paralelismo de Dados
! 
Híbrido
Modelos de Computação Paralela
Memória Compartilhada sem uso de threads
•  Processos podem a vir compartilhar espaço de memória
•  Através de semáforos para não ocorrer deadlock
• 
Uma vantagem deste modelo:
•  todos os processos podem acessar igualmente
os dados compartilhados.
•  Não há necessidade de explicitar a troca de
dados entre processos (como em memória
distribuída)
• 
Uma desvantagem desse modelo:
•  o gerenciamento da localidade de dados: ou
seja, trazer dados para a cache para
economizar acesso a memória principal
Modelos de Computação Paralela
Threads
•  Utilização de múltiplos "light weight”
•  Por exemplo, podemos pensar que dependendo do
problema, uma sub-rotina possa ser definida como
uma thread
•  Comunicação entre threads realizada por memória
compartilhada
•  Sincronização entre as threads necessárias se duas ou
mais threads estão atualizando o mesmo endereço de
memória
Modelos de Computação Paralela
Memória Distribuída (troca de mensagens)
•  Cada tarefa tem sua memória local
•  Pode haver uma ou mais tarefas por processador e
em vários processadores
•  A troca de informações é realizada através de
mensagens
•  Para tal, geralmente é utilizada uma biblioteca de
troca de mensagens
• 
Exemplo: Message Passing Interface (MPI) library
•  Se tornou padrão entre aplicações industriais e
acadêmicas de fato
•  MPI-1 em 1994
•  MPI-2 em 1996
•  MPI-3 in 2012
Modelos de Computação Paralela
Modelo de Paralelismo de Dados
•  Paralelismo é realizado em uma estrutura global
comum
•  Um conjunto de tarefas trabalha em conjunto nesta
estrutura
•  A mesma operação sobre elementos diferentes
Pode ser implementado em memória compartilhada ou
memória distribuída
• 
• 
Compartilhada – estrutura na memória global
Distribuída – estrutura dividida entre as diferentes
memórias.
Modelo PRAM
  Mas como pensar em paralelo?
  Abstrair de formas de como implementar....
  O que tínhamos com computação sequencial?
Memória
CPU
Modelo PRAM
  Mas como pensar em paralelo?
  Abstrair de formas de como implementar....
  Como podemos pensar em paralelo?
Memória
Memória
CPU
CPU
CPU
CPU
Modelo PRAM – modelo ideal
  conjunto de p processadores operando sincronamente sob o controle
de um único relógio, compartilhando um espaço global de memória
  algoritmos desenvolvidos para este modelo geralmente são do tipo
SIMD
–  todos os processadores executam o mesmo conjunto de instruções,
e ainda a cada unidade de tempo, todos os processadores estão
executando a mesma instrução mas usando dados diferentes.
Modelo PRAM – modelo ideal
  propriedades chaves:
–  execução síncrona sem nenhum custo adicional para a
sincronização
–  comunicação realizada em uma unidade de tempo, qualquer que
seja a célula de memória acessada
–  comunicação é feita usando a memória global
Passo do algoritmo PRAM
  fase de leitura: os processadores acessam simultaneamente locais de
memória para leitura. Cada processador acessa no máximo uma
posição de memória e armazena o dado lido em sua memória local
  fase de computação: os processadores executam operações aritméticas
básicas com seus dados locais
  fase de gravação: os processadores acessam simultaneamente locais
de memória global para escrita. Cada processador acessa no máximo
uma posição de memória e grava um certo dado que está armazenado
localmente
Modelo PRAM
  análise e estudo de algoritmos paralelos
  definição de paradigma de programação paralela
  avaliação do desempenho desses algoritmos independentemente das
máquinas paralelas
  se o desempenho de um algoritmo paralelo para o modelo PRAM não é
satisfatório, então não tem sentido implementá-lo em qualquer que seja a
máquina paralela
  se eficiente, no entanto, podemos simulá-lo em uma máquina real :
simulação deve ser eficiente
Padrões de Acesso no Modelo PRAM
  Exclusive Read (ER): vários processadores não podem ler ao mesmo
tempo no mesmo local
  Exclusive Write (EW): vários processadores não pode escrever no
mesmo local de memória
  Concurrent Read (CR): vários processadores podem ler ao mesmo
tempo o mesmo local de memória
  Concurrent Write (CW): vários processadores podem escrever no
mesmo local de memória ao mesmo tempo
Combinações são usadas para formar as variantes do PRAM:
EREW, CREW, ERCW e CRCW
Prioridades do CRCW
Para resolver conflitos no caso de vários processadores tentarem escrever
ao mesmo tempo no mesmo local de memória global:
Comum - vários processadores concorrem a escrita no mesmo local de
memória global durante o mesmo instante de relógio - todos devem
escrever o mesmo valor;
Arbitrário - dentre os vários processadores, um é selecionado
arbitrariamente e seu valor armazenado no local de memória
disputado;
Prioridade - dentre os vários processadores, aquele com o menor índice é
escolhido para escrever o seu valor no local concorrido.
Memória Global
P1
P2
P3
P4
Pn
Comunicação em uma máquina PRAM
  Comunicação através da memória global: Pi quer passar x para Pj
–  Pi escreve x em um local de memória global em um determinado passo
–  Pj pode acessar o dado naquele local no próximo passo
Memória compartilhada
P1
d1
d1
P2
P3
Pn
Passo 1: cada processador realiza sua computação
Memória compartilhada
d1
P1
d1
d1
P2
P3
Passo 1: P1 escreve na memória
Pn
Memória compartilhada
d1
P1
d1
d1
P2
d1
Passo 2: P2 lê da memória
P3
Pn
Observações
  os processadores operam sincronamente: a cada
passo, todas os
processadores executam a mesma instrução sobre dados distintos
  uma instrução pode ser simplesmente uma operação aritmética ou uma
comparação de dois números
  processadores ativos: somente um subconjunto de processadores
executem uma instrução e processadores restantes ficam ociosos/inativos
Exemplo
V ⇒ vetor com n elementos.
x ⇒ um dado valor
Problema:
x∈V?
Ambiente: P processadores tipo EREW PRAM
Analisando o problema:
  todos os processadores tem que saber o valor de x
  não podem acessar a célula de x simultaneamente
  depois, cada processador tem que olhar os elementos de V
  sinalização da localização do valor x no vetor V
Solução
  todos os processadores devem saber sobre x: broadcasting ou difusão
  Pior caso deste procedimento log2 P passos
–  P1 acessa a memória global:
–  P2 comunica com P1 ou seja, de alguma forma, P1 informa x para
P2
–  P1 e P2 informam x para P3 e P4
–  assim por diante
  processadores não têm permissão de acesso simultâneo ⇒ gravam x em
lugares distintos: Mi é um dos P locais de memória global
  Um vetor M auxiliar é utilizado
Memória compartilhada
x
M1
P1
P2
M2
P3
M3
P4
M4
M5
P5
M6
P6
M7
M8
P7
P8
Memória compartilhada
x
M1
P1
x
PASSO 1
(inicialização)
P2
M2
P3
M3
P4
M4
M5
P5
M6
P6
M7
M8
P7
P8
Memória compartilhada
x
x
M1
P1
x
PASSO 1
(inicialização)
P2
M2
P3
M3
P4
M4
M5
P5
M6
P6
M7
M8
P7
P8
Memória compartilhada
x
x
M1
P1
P2
x
x
PASSO 2
M2
P3
M3
P4
M4
M5
P5
M6
P6
M7
M8
P7
P8
Memória compartilhada
x
P1
P2
x
x
x
x
M1
M2
PASSO 2
P3
M3
P4
M4
M5
P5
M6
P6
M7
M8
P7
P8
Memória compartilhada
x
x
x
M1
M2
M3
M4
P1
P2
P3
P4
x
x
x
x
PASSO 3
M5
P5
M6
P6
M7
M8
P7
P8
Memória compartilhada
x
x
x
x
x
M1
M2
M3
M4
P1
P2
P3
P4
x
x
x
x
PASSO 3
M5
P5
M6
P6
M7
M8
P7
P8
Memória compartilhada
x
x
x
x
x
M1
M2
M3
M4
M5
M6
M7
M8
P1
P2
P3
P4
P5
P6
P7
P8
x
x
x
x
x
x
x
x
PASSO 4
Memória compartilhada
x
x
x
x
x
M1
M2
M3
M4
x
M5
x
M6
x
x
M7
M8
P1
P2
P3
P4
P5
P6
P7
P8
x
x
x
x
x
x
x
x
PASSO 4
Solução do broadcasting (leitura)
  P1 lê x
  P1 escreve x em M1
  P2 lê M1
  P2 escreve em M2
  P3 e P4 lêem M1 e M2
  P3 e P4 escrevem em M3 e M4
  P5, P6, P7 e P8 lêem M1, M2, M3 e M4
  P5, P6, P7 e P8 escrevem M5, M6, M7 e M8
  e assim por diante
a cada passo: duas vezes o número de processadores ativos do passo
anterior podem ler e escrever ⇒ log P passos
broadcasting
P1 lê de x;
P1 escreve em M[1];
Para h:= 1 até log P faça {
se 2h-1 < i ≤ 2h então {
Pi lê de M[i - 2h-1];
Pi escreve em M[i];
}
}
A Procura
  o vetor V é divido em P pedaços: S1, S2, …, SP
–  Pi procura por x em Si
–  pior caso: n/P passos
Total: log P + n/P passos, no pior caso
  Como o algoritmo poderia ser melhorado??
–  Definição de uma variável Achou
  Com computador mais poderoso ⇒ algoritmo mais rápido.
PRAM mais poderoso: CREW PRAM
  para achar x, o algoritmo executa n/P passos
  leituras concorrentes são permitidas
–  todos os processadores podem acessar x em um passo
–  todos os processadores podem consultar Achou em um passo
–  mas ao encontrar, o processador tem que atualizar Achou
  Quantos passos nas seguintes situações?
–  somente um dos elementos tem valor x
–  x pode ser um valor repetido em V
•  mais de um processador pode atualizar Achou
simultaneamente.
Download