1
Ferramentas para Programação
em Processadores Multi-Core
Prof. Dr. Gerson Geraldo H. Cavalheiro
Departamento de Informática
Universidade Federal de Pelotas
Programa de Verão 2008
Petrópolis, 14 a 17 de janeiro de 2008.
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008 14 a 17 de janeiro de 2008 2
Etapas do curso
Apresentação de modelos
Aplicação de modelos
Arquiteturas multi-core
Programação multithread
Ferramentas de programação
Prática de programação
Ferramentas para Programação em Processadores Multi-Core
Motivação 1/4
Existência de modelos bem aceitos para a
computação seqüencial:
Modelo de von Neumann
Para a arquitetura
Máquina de Turing
complexidade
Com estes modelos fica fácil o desenvolvimento
de programas...
Ferramentas para Programação em Processadores Multi-Core
Motivação 2/4
Não existe um modelo universal para
computação paralela;
Existem duas características antagônicas:
Simplicidade
Realidade
Modelos simples não aproximam o comportamento de
máquinas reais;
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
5
Motivação 3/4
Existem vários níveis de concorrência...
Muita fina
Intra-instrução
Proc. Superescalares
Fina
Entre-Instruções
Proc. Vetoriais
Fina/Média
Blocos
UMA
Média
Procedimentos
UMA/NUMA
Grossa
Processos
SC-NUMA/NORMA
Muito Grossa
Aplicações
Comp em grade ?...
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
6
Motivação 3/4
Existem vários níveis de concorrência...
Muita fina
Intra-instrução
Proc. Superescalares
Fina
Entre-Instruções
Proc. Vetoriais
Fina/Média
Blocos
UMA
Média
Procedimentos
UMA/NUMA
Grossa
Processos
SC-NUMA/NORMA
Muito Grossa
Aplicações
Comp em grade ?...
Motivação 4/4
X
Nosso escopo:
Multiprogramação leve
Diversos níveis de concorrência
Intra-instrução
CISC – Complex Instruction Set Computer, superescalares
Entre instruções
Hardware pipeline, registradores vetoriais
De bloco
Diretivas paralelizantes, compiladores paralelizantes
De processos
Funções, procedimentos, subprogramas
De processos
Troca de mensagens
De aplicações
Grades computacionais
Taxonomia: uma abordagem
Concorrência
Possibilidade de execução simultânea de dois ou mais fluxos
de execução, não impedindo disputa por recursos
Importante: a definição inclui a idéia de disputa por recursos
mas não é restrita à ela!
Ótica de Sistemas Operacionais
Mais ainda, concorrência incorpora a idéia de que existe uma
convergência dos fluxos para um ponto comum
Uma eventual sincronização
A produção do resultado final
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
9
Taxonomia: uma abordagem
Concorrência
Indica independência temporal
O número de atividades concorrentes pode ser maior que a
quantidade de recursos de processamento disponíveis
Paralelismo
Indica execução simultânea
A quantidade de recursos de processamento disponível permite que
duas ou mais atividades sejam executadas simultaneamente
É usual utilizar a expressão programação paralela para o tipo
de programação focada em desempenho
Na nossa terminologia, programação paralela e programação
concorrente são utilizadas com o mesmo significado
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
10
Taxonomia: uma abordagem
Programa concorrente:
Decomposto em atividades independentes.
Programa paralelo
Atividades são executadas em processadores
independentes, potencialmente ao mesmo tempo.
Programa distribuído
As atividades executam em processadores
independentes, cada um com sua própria memória.
Ferramentas para Programação em Processadores Multi-Core
Taxonomia: uma abordagem
Modelos de máquina:
Descrevem as características das máquinas.
Modelos para a aplicação:
Representam o paralelismo de um algoritmo.
Modelos de execução:
Detalham a forma de programação.
Ferramentas para Programação em Processadores Multi-Core
Criando uma aplicação paralela
1) Escolha de um modelo para a máquina;
2) Construa uma representação para o algoritmo;
3) Escolha de um modelo de execução;
4) Procura por um escalonamento;
5) Identifique a arquitetura;
6) Procure uma ferramenta de programação;
7) Implemente.
13
Modelos para máquinas
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
14
Arquitetura de von Neumann
Modelo de von Neumann
(von Neumann, 1945)Execução seqüencial
Memória para dados e programas
Efeito colateral
Processador
Memória
Unidade de controle Unidade lógica e aritmética Banco de registradores Entrada SaídaArquitetura de von Neumann
Modelo de von Neumann
Execução seqüencial
Memória para dados e programas
Efeito colateral
Gargalo de
von Neumann
Processador
Memória
Unidade de controle Unidade lógica e aritmética Banco de registradores Entrada SaídaArquitetura de von Neumann
Modelo de von Neumann
Gargalo de von Neumann
Introdução de cache
Processador
Memória
Unidade de controle Unidade lógica e aritmética Banco de registradores Entrada SaídaCache
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
17
Arquiteturas paralelas
Classificação de Flynn
(Flynn, 1972)Segundo fluxos de controle e de dados
MIMD
multicomputadores,
multiprocessadores
MISD
dataflow, pipeline
Múltiplo
SIMD
array, sistólico
SISD
von Neumann
Simples
Múltiplo
Simples
Dados
Controle
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
18
Arquiteturas paralelas
Classificação de Flynn
(Flynn, 1972)Classificação por compartilhamento de memória
Extensão a classificação de Flynn para a classe MIMD
considerando a apresentação da memória
MIMD
Fracamente acoplado
Espaço de endereçamento múltiplo
Fortemente acoplado
Espaço de endereçamento único
NORMA
NOn-Remote Memory Access
UMA
Uniform Memory Access
NUMA
Non Uniform Memory Access
Ferramentas para Programação em Processadores Multi-Core
Arquiteturas paralelas
UMA: Uniform Memory Access
Multi
processador
Memória global a todos os processadores
Tempo de acesso idêntico a qualquer endereço de memória
P
1Meio de
comunicação
P
2P
pM
1M
m. . .
. . .
Configuração de uma máquina UMA com
p processadores e m módulos de memória
Ferramentas para Programação em Processadores Multi-Core
Arquiteturas paralelas
UMA: Uniform Memory Access
Multi
processador
Memória global a todos os processadores
Tempo de acesso idêntico a qualquer endereço de memória
Cada processador pode contar com uma cache própria
P
1Meio de
comunicação
P
2P
pM
1M
m. . .
. . .
Configuração de uma máquina UMA com
p processadores e m módulos de memória
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
21
Arquiteturas paralelas
UMA: Uniform Memory Access
SMP: Symmetric MultiProcessor
Os processadores são idênticos e operam como definido pela
arquitetura von Neumann
O acesso a memória é compartilhado
P
1Barramento ou crossbar
P
2P
pMemória
. . .
22Modelos para aplicação
Grafos representando aplicações
Um grafo é a forma mais comum:
Grafos de tarefas
Grafo de precedência
Grafo de fluxo de dados
Grafos representando aplicações
O algoritmo é dividido em tarefas:
os vértices representam as tarefas
os arcos as relações de dependência
Em relação ao conhecimento do grafo
Em tempo de execução:
Escalonamento dinâmico
A priori (antes de executar):
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
25
Grafos de tarefas
O algoritmo é dividido em tarefas, as tarefas
compartilham recursos (dados) entre si:
Vértices representam as tarefas
Arcos representam os recursos compartilhados
1
5
3
2
7
6
4
1
1
1
2
2
2
2
2
3
6
5
Representação:
7 11 1 # 7 vértices 11 arcos 1 com peso
5 1 3 2 2 1 # vertice 1, liga com 5 peso: 1...
1 1 3 2 4 1 # vertice 2, ...
5 3 4 2 2 2 1 2
2 1 3 2 6 2 7 5
1 1 3 3 6 2
5 2 4 2 7 6
6 6 4 5 # vertice 7, ...
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008 14 a 17 de janeiro de 2008 26
Grafo de precedência
6
15
1
2
3
5
8
12
13
9
16
17
14
4
7
10
11
18
O algoritmo é dividido em tarefas, as tarefas
dependem de resultados prévios:
Vértices representam as tarefas
Arcos representam a ordem de execução das tarefas
Ferramentas para Programação em Processadores Multi-Core
Grafo de precedência
O algoritmo é dividido em tarefas, as tarefas
dependem de resultados prévios:
Informações do grafo:
Sucessores / Predecessores
Define ordem entre as tarefas
Largura
Quantidade máxima de concorrência
Caminho crítico
Maior caminho no grafo
Granularidade
Relação entre execução e comunicação
Ferramentas para Programação em Processadores Multi-Core
Grafo de fluxo de dados
6
15
1
2
3
5
8
12
13
9
16
17
14
4
7
10
11
18
Estende o grafo de precedência indicando o(s)
dado(s) comunicado(s) entre as tarefas.
29
Modelos de execução
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
30
Modelos de execução
Modelo usado no desenvolvimento
Predição de custos;
Planejamento da comunicação.
Ligado ao modelo da máquina
Bridge models
Modelos abstratos entre um programa real e
uma dada arquitetura
Principais modelos
PRAM
Modelos com atraso de comunicação
LogP
BSP / CGM
PRAM
Parallel Random Access Machine.
Surgiu em 1978 e é uma referência.
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
33
PRAM (características)
Parallel Random Access Machine
Primeiro modelo proposto
Abstração de arquitetura:
Síncrono
número infinito de processadores
memória compartilhada e ilimitada
Tempo de acesso uniforme à memória
Abstração de execução:
processadores executando de forma síncrona
operações lógicas e aritméticas e de acesso a
memória
Modelo não realista
manutenção da memória global não escalável
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008 14 a 17 de janeiro de 2008 34
PRAM
Arquitetura:
n processadores (ilimitado)
compartilhamento de memória global (de tamanho finito)
Programação:
Instruções de acesso a ULA
de acesso a memória (read, write)
Memória (de tamanho ilimitado)
P1
P2
P3
P4
P5
Pn
Ferramentas para Programação em Processadores Multi-Core
PRAM
Modelos restritos de PRAM: mais realistas
p-PRAM
limita o número de processadores
Limitações no acesso à memória compartilhada:
EREW: Exclusive Read, Exclusive Write
Uma célula de memória pode ser acessada por somente um
processador
CREW: Concurrent Read, Exclusive Write
Uma célula de memória pode ser acessada por vários
processadores para leitura, mas em caso de escrita, apenas um
pode ter acesso
CRCW: Concurrent Read, Concurrent Write
Vários processadores podem acessar (leitura ou escrita) uma
mesma posição
Regras para escrita concorrente (Maior, Soma, ...)
Ferramentas para Programação em Processadores Multi-Core
PRAM
Inicializar um vetor de tamanho n com valor 0 em todas
posições.
Entradas:
- Vetor A[n]
- Processador i, 0 <= i < p
For( j = 0 ; n/p
–
1 ; j++ )
If( (j*p + i) < n )
Write( 0, A[j*p + i] );
... ... Segmentos com p posições ......
Segmento 0
Segmento 1
Segmento n/p
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
37
Inicializar um vetor de tamanho n com valor 0 em todas
posições.
PRAM
Entradas:
- Vetor A[n]
- Processador i, 0 <= i < p
For( j = 0 ; j < (n/p – 1) ; j++ )
If( (j*p + i) < n )
Write( 0, A[j*p + i] );
... ... Segmentos com p posições ......
Segmento 0
Segmento 1
Segmento n/p
Supondo p = 100 e n = 1000
-O processador 0 inicializa as posições: 0
,
100
,
200
... 900
-O processador 1 inicializa as posições: 1
,
101
,
201
... 901
-O processador 99 inicializa as posições: 99
,
199
,
299
... 999
passos
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
38
Criar p-1 cópias de um vetor de tamanho n.
PRAM
Entradas:
- Vetor A[n]
- Processador i, 0 <= i < p
For( j = 0 ; j <= n ; j++ ) {
Read( A[j], x );
Write( x, A[n*i+j] );
}
...Vetor A
Criar p-1 cópias de um vetor de tamanho n = 2
k
PRAM
Entradas:
- Vetor A[n]
- Processador i, 0 <= i < p
For( j = 0 ; j <= n ; j++ ) {
Read( A[j], x );
Write( x, A[n*i+j] );
}
... ... ......
Vetor A
(original)
Cópia 1
Cópia p-1
Supondo p = 100
-O processador 0 sobre escreve A com o valor original.
-O processador 1 produz a cópia 1.
-O processador 99 produz a cópia 99.
PRAM
Dado um vetor
A
, com n elementos, tal que n = 2
k
,
encontrar a soma dos elementos deste vetor.
Entradas:
- Vetor A[n], n = 2k
- Processador i, 0 <= i < p
Read( A[i], a );
Write( a, B[i] );
For( j = 0 ; j < log n ; j++ ) {
If( i <= n/2 ) {
Read( B[2*i], x );
Read( B[2*i+1], y );
z = x + y;
Write( z, B[i] );
}
If( i == 0 ) Write( z, S );
A
B
+
j = 0
+
j = 1
+
j = 2
+
j = 3
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
41
PRAM
Dado duas matrizes
A
e
B
com m x m elementos,
encontrar a matrix
C = A * B
.
Entradas:
- Matrizes A[m,m] e B[m,m]
- Processador (i, j), 0 <= i,j < m
Atenção: m
2
processadores!
aux = 0;
For( j = 0 ; j < m-1 ; j++ ) {
For( k = 0 ; k < m-1 ; k++ ) {
Read( A[i,k], a );
Read( B[k,j], b );
aux = aux + a*b;
}
}
Write( aux, C[i,j] );
A
B
i
j
C
C[i,j]
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
42
Modelos com atraso de comunicação
Fornece um suporte para a comunicação
Processadores com memória local
Vários resultados teóricos
Considera o essencial das máquinas reais
Mas não considera
Overhead de comunicação, banda passante
Ferramentas para Programação em Processadores Multi-Core
Modelos com atraso de comunicação
Modelos
UET: Unit Execution Time
UCT: Large Communication Time
LCT: Unit Communication Time
SCT: Short Communication Time
Algoritmos de lista
Ferramentas para Programação em Processadores Multi-Core
Grafo para os exemplos
v1
v2
v4
v10
v3
v5
v7
v6
v8
v9
v11
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008 14 a 17 de janeiro de 2008 45
UET
v1
v2
v4
v10
v3
v5
v7
v6
v8
v9
v11
v4 v7 v9
v2 v5 v8 v10
v1 v3 v6 v11
Processador
Tempo
UET
Tempo de computação das tarefas é unitário, não considera custo de comunicação.
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008 14 a 17 de janeiro de 2008 46
UET – UCT
v1
v2
v4
v10
v3
v5
v7
v6
v8
v9
v11
v4
v7 v9
v2 v6 v3 v11
v1 v5 v8 v10
Processador
v5
v11
v8
v1’ v3
v11
v1 v4 v2 v6
Tempo
v1”
v9
v10
Tempo de computação das tarefas é unitário, não considera custo de comunicação.
Sem duplicação
Com duplicação
UET - LCT
v1
v2
v4
v10
v3
v5
v7
v6
v8
v9
v11
v5 v8
v11
v2 v6
v9
v10
v1 v3 v4 v7
v4
v7 v9
v2 v6
v3
v11
v1
v5 v8 v10
v1
v1
Tempo
Sem duplicação
Com duplicação
Processador
Tempo de computação das tarefas é unitário, mas o tempo de comunicação é dado
por
γ
> 1.
No exemplo,
γ
= 2,5 tempos
SCT
v1
v2
v4
v10
v3
v5
v7
v6
v8
v9
v11
v7
v2 v4
v9
v1 v3 v6 v11
v5
v7 v9
v8 v10
v3
v1
v6 v11
v2
v4
Tempo
Sem duplicação
Com duplicação
Processador
Premissa: a maior comunicação consome menos tempo que a menor computação.
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
49
Algoritmo de lista
O algoritmo é dividido em tarefas, as tarefas
dependem de resultados prévios:
Vértices representam as tarefas
Arcos representam a ordem de execução das tarefas
Propriedade interessante:
Onde:
T
1
: Custo total de computação
T
∞
: Custo de computação no caminho crítico
p
: número de processadores disponíveis
T
1
≤
T
p
≤
T
1
p p
≤
T
p
≤
+ T
∞
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
50
Algoritmo de lista
Teorema de Graham (1969):
O tempo de processamento paralelo é dependente do
tempo de processamento necessário para computar as
tarefas no caminho crítico.
Não considera outros custos (overhead, comunicação).
Existem heurísticas para implementação desta
estratégia em algoritmos de escalonamento dinâmicos.
T
1
≤
T
p
≤
T
1
p p
≤
T
p
≤
+ T
∞
Ferramentas para Programação em Processadores Multi-Core
Modelos realísticos
Duas categorias:
Aproximam máquinas de forma genérica
LogP
Permitem algoritmos portáveis e eficazes
BSP
Ferramentas para Programação em Processadores Multi-Core
LogP
Número finito de processadores, custos de
comunicação.
L
- Tempo de trânsito da mensagem
o
- custo adicional de envio e recepção
g
- intervalo entre envios/recepções seguidos
P
- número de processadores
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008 14 a 17 de janeiro de 2008 53
LogP
o
v1
Tempo
Processador
P
1P
2v3
. . .
v0
v2
v4
. . .
o
L
≥
g
L
- Tempo de trânsito da mensagem
o
- custo adicional de envio e recepção
g
- intervalo entre envios/recepções
seguidos
P
- número de processadores
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
54
LogP
Dados foram medidos em muitas máquinas
reais;
Pode-se prever o custo de programas com
precisão;
Existem extensões para mensagens grandes;
É difícil obter resultados para grafos genéricos.
LogP
v1
v2
v4
v10
v3
v5
v7
v6
v8
v9
v11
Tempo
Processador
v11
v2 v6
v1 v5 v8 v10
o = 0,125
L = 0,25
g <= 1
v3 v4 v7 v9
LogP
v1
v2
v4
v10
v3
v5
v7
v6
v8
v9
v11
v11
v2 v6
v1 v5
v8 v10
Tempo
o = 0,125
L = 0,25
g <= 1,5
Processador
v3 v4 v7
v9
v11
v2 v6
v1 v5 v8 v10
o = 0,125
L = 0,25
g <= 1
v3 v4 v7 v9
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
57
BSP - princípios
BSP – Bulk Synchronous Parallel
Modelo programação
Separação explícita do cálculo e da comunicação
Arquitetura:
p processadores com memória local
Meio de interconexão gerenciado por um roteador
Processadores são sincronizados em intervalos regulares de L
unidades de tempo
Algoritmo:
Seqüência de superpassos:
Computações locais
Comunicações com outros processadores
Uma barreira a cada L unidades de tempo
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008 14 a 17 de janeiro de 2008 58
BSP - princípios
Parâmetros:
n
– tamanho do problema
p
– número de processadores
L
– tempo mínimo entre duas sincronizações (latência)
g
– relação computação/comunicação da arquitetura
Modelo de custo:
T
1
+ gH + LT
T
1
: custo total da computação
H
: custo total de comunicação
T
: número de superpassos.
Ferramentas para Programação em Processadores Multi-Core
BSP – princípios
. . .
. . .
Superpasso
Barreira
Comunicação
Ferramentas para Programação em Processadores Multi-Core
BSP
BSP
Abstração para o multithreading
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
61
Classificação de Skillicorn e Talia
Paralelismo implícito
Paralelismo explícito, decomposição implícita
Decomposição implícita, mapeamento implícito
Mapeamento implícito, comunicações implícitas
Comunicação explícita, sincronizações implícitas
Programador faz tudo
Número de processos vs. Comunicações
Fixo/dinâmico
Ilimitado vs. limitado
62
Ferramentas de Programação
Ferramentas de programação
Modelos podem ser explorados em arquiteturas
reais através de ferramentas de programação
Compõem “níveis de abstração” dos recursos
oferecidos pelas arquiteturas e pelos modelos
Modelo
Arquitetura
Ferramenta de programação
Ferramentas de programação
Modelo von Neumann
Tarefa: instruções
Executadas seqüencialmente;
Lógicas e aritméticas;
Leitura e escrita em memória.
Comunicação: memória
Informações transmitidas entre instruções.
Sincronização: dependência de dados
Uma instrução inicia enquanto a anterior não tenha
terminado.
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
65
Ferramentas de programação
Execução Seqüencial: modelo von Neumann
I1: MOV DX, 0
I2: MOV AX, [313]
I3: ADD DX, AX
I4: DEC AX
I5: CMP AX, 0
I6: JNE I3
I7: MOV AX, [313]
I8: CALL RotinaImpressão
Efeito da execução de
uma instrução:
Escrita em memória
Comunicação
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
66
Ferramentas de programação
Execução Seqüencial: modelo von Neumann
I1: MOV DX, 0
I2: MOV AX, [313]
I3: ADD DX, AX
I4: DEC AX
I5: CMP AX, 0
I6: JNE I3
I7: MOV AX, [313]
I8: CALL RotinaImpressão
Premissa para executar
uma instrução:
Dados de entrada
em memória
Sincronização
Ferramentas para Programação em Processadores Multi-Core
Ferramentas de programação
Execução Seqüencial: modelo von Neumann
I1: MOV DX, 0
I2: MOV AX, [313]
I3: ADD DX, AX
I4: DEC AX
I5: CMP AX, 0
I6: JNE I3
I7: MOV AX, [313]
I8: CALL RotinaImpressão
I1
I2
I3
I4
I5
I6
I7
I8
Ferramentas para Programação em Processadores Multi-Core
Ferramentas de programação
Tarefa
Código
Seqüen-cial
Parte do
todo
Produz
resultado
Sincronização
Controle
Depen-
dência
Exclusi-vidade
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008 14 a 17 de janeiro de 2008 69
Ferramentas de programação
Tarefa
Código
Seqüen-cial
Parte do
todo
Produz
resultado
Sincronização
Controle
Depen-
dência
Exclusi-vidade
O que deve ser feito:
Comunicação
Sessões críticas e dependências entre tarefas
Troca de dados entre tarefas
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
70
De Modelos para Ferramentas
Modelos para aplicação:
Estratégia mais comum: Grafos
Um grafo representando as relações entre tarefas
pode incluir mais ou menos informações sobre
a execução:
• Dependência de execução; ou,
• Dependência de dados.
De Modelos para Ferramentas
Modelos para aplicação:
No modelo von Neumann
O grafo representa a ordem em que as instruções
devem ser executadas, considerando a ordem em
que encontram-se definidas no código-fonte.
Ordem Lexicográfica
De Modelos para Ferramentas
Modelos para aplicação:
Casos práticos na concorrência: Cilk
Linguagem:
spawn(função)
sync // aguarda o término de todos as filhas
Arquitetura:
n processadores executando
Memória compartilhada
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
73
De Modelos para Ferramentas
Modelos para aplicação:
Casos práticos na concorrência: Athapascan-1
Linguagem:
shared<x>
fork<função>(parâmetros) // modos de acesso
Arquitetura:
n processadores executando
Memória compartilhada
Grafo controlando a troca de dados entre tarefas
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
74
De Modelos para Ferramentas
Modelos para aplicação:
Casos práticos na concorrência: Anahy
Linguagem:
id = athread_create(função, parâmetros)
athread_join(id, res) // sincroniza e recupera
Arquitetura:
n processadores executando
Memória compartilhada
Grafo controlando a ordem de execução, informando
relações de troca de dados
Ferramentas para Programação em Processadores Multi-Core
De Modelos para Ferramentas
Modelos para máquinas:
Casos práticos na concorrência:multiprogramaçãoleve
Shared Memory Machines
Implementação do modelo MIMD (Flynn)
O programa em execução é composto possui diversos
fluxos de execução, cada um executando sua própria
seqüência de instruções e acessando um conjunto de dados
distintos em uma memória compartilhada.
Exemplo:
Threads POSIX, OpenMP, Cilk, Anahy
Ferramentas para Programação em Processadores Multi-Core
De Modelos para Ferramentas
Modelos para máquinas:
Casos práticos na concorrência: SPMD
Single Program, Multiple Data
Releitura do modelo SIMD (Flynn)
O programa em execução é composto de um único fluxo
de execução, sobre o qual é executado em várias
instâncias a mesma seqüência de instruções, sobre
conjuntos disjuntos de dados.
Exemplo:
MPI (Message Passing Interface), PVM (Parallel Virtual
Machine), aplicações escritas com sockets
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
77
De Modelos para Ferramentas
Modelos para máquinas:
Casos práticos na concorrência: MPMD
Multiple Program, Multiple Data
Releitura do modelo MIMD (Flynn)
O programa em execução é composto de diversos fluxos
de execução, sobre o qual é executado em várias
instâncias a mesma seqüência de instruções, sobre
conjuntos disjuntos de dados.
Exemplo:
MPI-2 (Message Passing Interface), PVM (Parallel Virtual
Machine), aplicações escritas com sockets
Gerson Geraldo H. Cavalheiro
Ferramentas para Programação em Processadores Multi-Core LNCC – Programa de Verão 2008
14 a 17 de janeiro de 2008
78