Multiprocessadores e
Paralelismo nível de Thread
Roteiro da Aula
• Revisando o problema coerência
• Protocolo de coerência para memória baseado
em Snooping
• Protocolo de coerência baseado em diretórios
– Como funciona
• Implementando protocolo baseado em diretórios
– Tipos de mensagens na rede
– Mudanças do estado do bloco de cache e no diretório
• Sincronização de processos
– Problema em processadores DSM
– Solução para processadores DSM
• Comparação uniprocessadores vs.
multiprocessadores
Coerência
• Só uma pessoa pode falar no
microfone por vez
• Toda modificação em conta deve ser
comunicada entre os funcionários
através do alto falante
• Após modificações cópias devem ser
inutilizadas
Protocolo Snooping de Coerência de Cache
State
Tag
Data
Pn
P1
Bus snoop
$
$
Mem
I/O devices
Cache-memory
transaction
• Controladores de Cache “snoops” todas as transações no
barramento
– Transações relevantes : envolvem bloco que a cache possui
– Realiza ação para garantir coerência
• invalida, atualiza, ou fornece valor
– Atualiza estado de compartilhamento do bloco de cache
Protocolo Snooping de Coerência de Cache
State
Tag
Data
Pn
P1
Bus snoop
$
$
Mem
I/O devices
Cache-memory
transaction
• Problemas:
– Aumento no número de processadores
• Mais acessos à memória
• Congestionamento na utilização do barramento
– Aumento no número de faltas devido à invalidação
por compartilhamento
Memória Distribuída
• Cada nó de processamento inclui cache e memória
local
• Comunicação entre nós: Rede de Interconexão
C - Cache
M
P0
P1
Pn
C
C
C
IO
M
IO
...
Interconnection Network
7
M
M - Memory
IO - Input/Output
IO
Memória Distribuída
• Pro: Abordagem eficaz para um grande número de
processadores
• Pro: reduz tempo de acesso à memória local
• Con: Comunicação bem mais complexa
C - Cache
M
P0
P1
Pn
C
C
C
IO
M
IO
...
Interconnection Network
8
M
M - Memory
IO - Input/Output
IO
Modelos de Comunicação vs. Modelo de
Memória
1.
Comunicação através de endereços compartilhados
(via loads e stores):
multiprocessadores de memória compartilhada
• Memória Centralizada (Symmetric shared memory - SMPs)
• Memória Distribuída
2.
Comunicação explícita através de passagem de
mensagens entre processadores
• Memória Distribuída
Comunicação por Variável Compartilhada
• As memórias fisicamente separadas são
endereçadas como Espaço Compartilhado
Logicamente
– As memórias locais podem ser acessadas por
qualquer processador
• Estes multiprocessadores são denominados
Processadores DSM (distributed shared
memory)
Como garantir Coerência?
• Cada bloco de memória tem informação de
compartilhamento armazenada em um
componente chamado diretório
• O que faz o diretório?
• Tem informação de onde estão as cópias e do
estado de cada cópia
• Manda informação para as caches em caso de
escritas
• Faz a transferência de informações de memória
requisitada entre nós de processamento
Coerência:
Diretório
• Acessos às pastas somente através
do diretório
• Toda modificação em qualquer cópia
deve ser comunicada ao diretório
• Diretório comunica a necessidade de
inutilização
• Diretório envia cópia mais atualizada
Protocolo baseado em Diretório
Interconnection Network
Directory
Directory
Directory
Local Memory
Local Memory
Local Memory
Cache
Cache
Cache
CPU 0
CPU 1
CPU 2
Protocolo baseado em Diretório
Interconnection Network
Bit Vector
X U000
Directories
X 7
Memories
Caches
CPU 0
CPU 1
CPU 2
CPU 0 lê X
Interconnection Network
Read Miss
X U000
Directories
X 7
Memories
Caches
CPU 0
CPU 1
CPU 2
CPU 0 lê X
Interconnection Network
X S100
Directories
X 7
Memories
Caches
CPU 0
CPU 1
CPU 2
CPU 0 lê X
Interconnection Network
X S100
Directories
X 7
Memories
Caches
X 7
CPU 0
CPU 1
CPU 2
CPU 2 lê X
Interconnection Network
X S100
Directories
Memories
Caches
Read Miss
X 7
X 7
CPU 0
CPU 1
CPU 2
CPU 2 lê X
Interconnection Network
X S101
Directories
X 7
Memories
Caches
X 7
CPU 0
CPU 1
CPU 2
CPU 2 lê X
Interconnection Network
X S101
Directories
X 7
Memories
Caches
X 7
CPU 0
X 7
CPU 1
CPU 2
CPU 0 escreve 6 em X
Interconnection Network
Write Miss
X S101
Directories
X 7
Memories
Caches
X 7
CPU 0
X 7
CPU 1
CPU 2
CPU 0 escreve 6 em X
Interconnection Network
X S101
Directories
Invalidate
Memories
Caches
X 7
CPU 0
X 7
X 7
CPU 1
CPU 2
CPU 0 escreve 6 em X
Interconnection Network
X E100
Directories
X 7
Memories
Caches
X 6
CPU 0
CPU 1
CPU 2
CPU 1 lê X
Interconnection Network
Read Miss
X E100
Directories
X 7
Memories
Caches
X 6
CPU 0
CPU 1
CPU 2
CPU 1 lê X
Interconnection Network
Switch to Shared
X E100
Directories
X 7
Memories
Caches
X 6
CPU 0
CPU 1
CPU 2
CPU 1 lê X
Interconnection Network
X E100
Directories
X 6
Memories
Caches
X 6
CPU 0
CPU 1
CPU 2
CPU 1 lê X
Interconnection Network
X S110
Directories
X 6
Memories
Caches
X 6
CPU 0
X 6
CPU 1
CPU 2
CPU 2 escreve 5 em X
Interconnection Network
X S110
Directories
Memories
Caches
Write Miss
X 6
CPU 0
X 6
X 6
CPU 1
CPU 2
CPU 2 escreve 5 em X
Interconnection Network
X S110
Directories
X 6
Memories
Caches
X 6
CPU 0
X 6
CPU 1
CPU 2
CPU 2 escreve 5 em X
(Write back)
Interconnection Network
X E001
Directories
X 6
Memories
X 5
Caches
CPU 0
CPU 1
CPU 2
CPU 0 escreve 4 em X
Interconnection Network
X E001
Directories
X 6
Memories
X 5
Caches
CPU 0
CPU 1
CPU 2
CPU 0 escreve 4 em X
Interconnection Network
X E100
Directories
Memories
Take Away
X 6
X 5
Caches
CPU 0
CPU 1
CPU 2
CPU 0 escreve 4 em X
Interconnection Network
X E100
Directories
X 5
Memories
X 5
Caches
CPU 0
CPU 1
CPU 2
CPU 0 escreve 4 em X
Interconnection Network
X E100
Directories
X 5
Memories
Caches
CPU 0
CPU 1
CPU 2
CPU 0 escreve 4 em X
Interconnection Network
X E100
Directories
X 5
Memories
Caches
X 5
CPU 0
CPU 1
CPU 2
CPU 0 escreve 4 em X
Interconnection Network
X E100
Directories
X 5
Memories
Caches
X 4
CPU 0
CPU 1
CPU 2
Diretório
P
P
Cache
Cache
Interconnection Netw ork
Me mory
• •
•
pr ese nce bits
Dir ectory
dir ty bit
• k processadores: k bits
• Cada bloco de memória: k presence-bits, 1 dirty-bit
• Cada bloco na cache: 1 valid bit, e 1 dirty (owner) bit
Operação Básica de Diretório
P1
Directory Memory
$
CA
Pn
…
$
Directory
Memory Directory
••
•
CA
presence bitsdirty bit
Scalable Interconnection network
• N processadores: N bits
• Cada bloco de memória: N presence-bits, 1 dirty-bit
• Cada bloco na cache: 1 valid bit, e 1 dirty (owner) bit
Operação Básica de Diretório
• k processadores.
P
P
Cache
Cache
• Cada bloco de cache na memória:
k presence-bits, 1 dirty-bit
Int erconnection Netw ork
• •
Me mory
pr ese nce bits
•
Dir ect ory
• Cada bloco na cache:
1 valid bit, e 1 dirty (owner) bit
dir ty bit
• Falta na Leitura da memória pelo processador i:
• Se dirty-bit está OFF então
• leitura da memória;
• atualiza p[i] para ON;
• Se dirty-bit está ON então
•
•
•
•
acessa linha de cache do processador owner (na cache: shared);
atualiza memória;
faz dirty-bit igual a OFF;
faz p[i] igual a ON;
Operação Básica de Diretório
P
P
Cache
Cache
• k processadores.
• Cada bloco de cache na memória:
k presence-bits, 1 dirty-bit
Int erconnection Netw ork
• •
Me mory
pr ese nce bits
•
Dir ect ory
dir ty bit
• Cada bloco na cache:
1 valid bit, e 1 dirty (owner) bit
• Falta devido a Escrita na memória pelo processador i:
• Se dirty-bit igual a OFF então
•
•
•
•
fornece dado para i;
envia invalidations para todas as caches que tem cópia do bloco;
faz dirty-bit igual a ON;
faz p[i] igual a ON;
Protocolo de Diretório
• Estados dos blocos de memória : Três estados
– Shared: ≥ 1 processador tem dado, memória
atualizada
– Uncached: nenhum nó (processador e cache) tem o
endereço; não é válido em nenhuma cache.
– Exclusive: 1 processador (owner) tem o dado;
memória desatualizada.
• Princípios básicos:
– Escrita em dado non-exclusive
=> write miss
– Processador fica esperando até que todos invalidates
tenham sido enviados e confirmados
Protocolo de Diretório
• Não tem barramento para broadcast:
– Todas as mensagens devem ter o recebimento
confirmado
• Cada mensagem pode envolver até 3
processadores
– Local node onde a requisição origina
– Home node onde reside o endereço de memória
– Remote node tem uma cópia do bloco de cache em
estado exclusive ou shared
• Composição da mensagem:
– P = processor number, A = address
Estados dos Blocos de Cache
• Para cada bloco de cache em um sistema
baseado em diretório:
– Estados idênticos ao snoopy:
• Invalid
• Shared
• Exclusive
– Transições causadas por:
•
•
•
•
read misses
write misses
Invalidates
busca de dado (fetch)
Estados dos Blocos de Cache
• Controlador envia mensagens de read
miss e write miss para o diretório do
processador que tem o dado na memória
local
Estados da Cache (Write Back) CPU
• Estados da cache
para requisições
da CPU para cada
bloco de cache
• Blocos que não
estão na cache
não são válidos
CPU Read hit
Invalid
CPU Read
Shared
(read/only)
Send read miss msg
CPU Write
Send Write
Miss msg
Cache Block
State
CPU read hit
CPU write hit
Exclusive
(read/write)
CPU Write Miss
Write back cache block
Send write miss msg
Estados da Cache (Write Back)
Diretório
• Estados da
cache para
requisições do
Directory para
cada cache
block
Invalidate msg
Invalid
Shared
(read/only)
Fetch invalidate
for this block
Write Back
Block; (abort
memory access)
Exclusive
(read/write)
Read miss
for this block
Write Back
Block; (abort
memory access)
Estados da Cache (Write Back) CPU
Estados da cache para
requisições da CPU
para cada
cache block e
para requisições do
directiory para cada
cache block
CPU Read hit
Write miss
for this block
CPU Read
Send read miss
CPU Write
Send Write
Miss
Invalid
Write miss
for this block
Write Back
Block; (abort
memory access)
Cache Block
State
Exclusive
(read/write)
CPU read hit
CPU write hit
Shared
(read/only)
CPU Read miss
Send read miss
CPU Write
Send Write Miss
Write Back
Block; (abort
memory access)
CPU Write Miss
Write back cache block
Place write miss on bus
Estados do Diretório
Estados do Directory
requisição para cada
memory block
Estado Uncached se
estiver não tiver cópias
na cache
Uncached
Data Write Back:
Sharers = {}
(Write back block)
Write Miss:
Sharers = {P};
send Fetch/Invalidate
to remote cache;
send Data Value Reply
msg
Read miss:
Sharers = {P}
send Data Value
Reply
Write Miss:
Sharers = {P};
send Data
Value Reply
msg
Exclusive
(read/write)
Read miss:
Sharers += {P};
send Data Value Reply
Shared
(read only)
Write Miss:
send Invalidate
to Sharers;
then Sharers = {P};
send Data Value
Reply msg
Read miss:
Sharers += {P};
send Fetch to remote
cache;send Data Value
Reply msg
(Write back block)
Exemplo
P
P1
Cache
2
Cache
Interconnection
BusNetw ork
Me mory
• •
•
pr ese nce bits
Dir ectory
dir ty bit
• 2 processadores: 2 bits
• Cada bloco de memória: 2 presence-bits, 1 dirty-bit
• Cada bloco na cache: 1 valid bit, e 1 dirty (owner) bit
Exemplo
P
P1
Cache
2
Cache
Interconnection
BusNetw ork
Me mory
• •
pr ese nce bits
•
Dir ectory
dir ty bit
Estados Cache: Invalid, Shared, Exclusiv
Estados Diretório (memória): Uncached, Shared,
Exclusiv
Exemplo
P
P1
Cache
2
Cache
Interconnection
BusNetw ork
Me mory
• •
pr ese nce bits
•
Dir ectory
dir ty bit
Mensagens do controlador de cache (requisitante do
bloco) para o diretório:
• Read Miss
• Write Miss
Exemplo
P
P1
Cache
2
Cache
Interconnection
BusNetw ork
Me mory
• •
pr ese nce bits
•
Dir ectory
dir ty bit
Mensagens do diretório para os controladores de cache:
• Data reply
• Fetch/Invalidate
• Invalidate
• Fetch
Exemplo
P
P1
2
Cache
Cache
Interconnection
BusNetw ork
• •
Me mory
pr ese nce bits
•
Dir ectory
dir ty bit
Mensagens do controlador de cache (owner do bloco)
para o diretório:
• Data write back
P
P
1
Exemplo
2
Cache
Cache
Interconnection
BusNetw ork
• •
Me mory
pr ese nce bits
•
Dir ectory
dir ty bit
Processor 1 Processor 2 Interconnect
P1
step
P2
State Addr
Bus
Value State Addr Value Action Proc. Addr
Directory Memory
Directory
Value Addr
P1: Write 10 to A1
P1: Read A1
P2: Read A1
P2: Write 20 to A1
P2: Write 40 to A2
A1 and A2 map to the same cache block
State {Procs}
Memory
Value
P
P
1
Exemplo
2
Cache
Cache
Interconnection
BusNetw ork
• •
Me mory
pr ese nce bits
•
Dir ectory
dir ty bit
Processor 1 Processor 2 Interconnect
P1
step
P2
State Addr
A1
Directory
Value State Addr Value Action Proc. Addr
P1: Write 10 to A1
Excl.
Bus
10
Directory Memory
WrMs
P1
A1
DaRp
P1
A1
Value Addr
A1
0
P1: Read A1
P2: Read A1
P2: Write 20 to A1
P2: Write 40 to A2
A1 and A2 map to the same cache block
Memory
State {Procs}
Ex
{P1}
Value
P
P
1
Exemplo
2
Cache
Cache
Interconnection
BusNetw ork
• •
Me mory
pr ese nce bits
•
Dir ectory
dir ty bit
Processor 1 Processor 2 Interconnect
P1
step
P2
State Addr
Directory
Value State Addr Value Action Proc. Addr
P1: Write 10 to A1
P1: Read A1
Bus
Excl.
A1
10
Excl.
A1
10
Directory Memory
WrMs
P1
A1
DaRp
P1
A1
Value Addr
A1
0
P2: Read A1
P2: Write 20 to A1
P2: Write 40 to A2
A1 and A2 map to the same cache block
Memory
State {Procs}
Ex
{P1}
Value
P
P
1
Exemplo
2
Cache
Cache
Interconnection
BusNetw ork
• •
Me mory
•
pr ese nce bits
Dir ectory
dir ty bit
Processor 1 Processor 2 Interconnect
P1
step
P2
State Addr
Bus
P1: Read A1
Excl.
A1
10
Excl.
A1
10
P2: Read A1
Shar.
Shar.
A1
Directory
Value State Addr Value Action Proc. Addr
P1: Write 10 to A1
A1
10
Shar.
A1
10
Directory Memory
Value Addr
A1
Memory
State {Procs}
Ex
Value
WrMs
P1
A1
{P1}
DaRp
P1
A1
RdMs
P2
A1
Ftch
P1
A1
10
A1
A1
10
DaRp
P2
A1
10
A1 Shar. {P1,P2}
10
0
P2: Write 20 to A1
10
10
P2: Write 40 to A2
10
Write Back
A1 and A2 map to the same cache block
P
P
1
Exemplo
2
Cache
Cache
Interconnection
BusNetw ork
• •
Me mory
•
pr ese nce bits
Dir ectory
dir ty bit
Processor 1 Processor 2 Interconnect
P1
step
P2
State Addr
Bus
P1: Read A1
Excl.
A1
10
Excl.
A1
10
P2: Read A1
Shar.
Shar.
P2: Write 20 to A1
Inv.
A1
Directory
Value State Addr Value Action Proc. Addr
P1: Write 10 to A1
A1
10
Directory Memory
Value Addr
State {Procs}
P1
A1
DaRp
P1
A1
RdMs
P2
A1
Ftch
P1
A1
10
A1
A1
10
10
A1 Shar. {P1,P2}
10
A1
10
DaRp
P2
A1
Excl.
A1
20
WrMs
P2
A1
Inval.
P1
A1
Ex
Value
WrMs
Shar.
A1
Memory
{P1}
0
10
A1
P2: Write 40 to A2
Excl.
{P2}
10
10
A1 and A2 map to the same cache block
P
P
1
Exemplo
2
Cache
Cache
Interconnection
BusNetw ork
• •
Me mory
pr ese nce bits
•
Dir ectory
dir ty bit
Processor 1 Processor 2 Interconnect
P1
step
P2
State Addr
Bus
P1: Read A1
Excl.
A1
10
Excl.
A1
10
P2: Read A1
Shar.
Shar.
P2: Write 20 to A1
A1
Directory
Value State Addr Value Action Proc. Addr
P1: Write 10 to A1
A1
10
Directory Memory
Value Addr
A1
Memory
State {Procs}
Ex
Value
WrMs
P1
A1
{P1}
DaRp
P1
A1
RdMs
P2
A1
Ftch
P1
A1
10
A1
A1
10
10
A1 Shar. {P1,P2}
10
0
Shar.
A1
10
DaRp
P2
A1
Excl.
A1
20
WrMs
P2
A1
Inval.
P1
A1
A1
Excl.
{P2}
10
WrMs
P2
A2
A2
Excl.
{P2}
0
WrBk
P2
A1
20
A1
Unca.
{}
20
DaRp
P2
A2
0
A2
Excl.
{P2}
0
Inv.
P2: Write 40 to A2
Excl.
A2
40
10
A1 and A2 map to the same cache block
Desafios da Coerência baseada em
Diretórios
• Devemos assumir operações atômicas:
– Difícil implementação em redes
• Problema na sincronização de processos
– Necessidade de leitura e escrita em variável
compartilhada de forma indivisível
– operações atômicas
Sincronização
• Por que sincronizar? Necessidade de saber
quando é seguro para diferentes processos usar
um dado compartihado.
• Garantindo a Sincronização :
– Instrução que acessa variável compartilhada não
pode ser interrompida entre a leitura e escrita na
memória (operação atômica)
Problema da Sincronização
• Processos necessitam de receber
enviar dados de/para outros
processos
• Exemplo básico:
produtor/consumidor
– Processo A produz dados, Processo
B consome dados produzidos
– Ex: A decodifica pacotes de vídeo, B
mostra pacotes decodificados na
tela
Encoded
video packets
processA() {
// Decode packet
// Communicate
packet to B
}
}
Decoded
video packets
void processB() {
// Get packet from A
// Display packet
}
• Como a comunicação é feita?
– Memória Compartilhada
– Passagem de Mensagem
To display
Problema da Sincronização
•
Exemplo: Produtor/Consumidor com erro
– Compartilham buffer[N], count
– ProcessA produz dados e armazena no buffer
• Se buffer está cheio deve esperar
– processB consome dados do buffer
• Se buffer estiver vazio deve esperar
– Erro quando os processos tentam atualizar o
contador (linhas 10 e 19) e a seguinte sequencia
ocorre
– Considere que “count” é 3.
• A carrega count (count = 3) no registrador
R1 (R1 = 3)
• A incrementa R1 (R1 = 4)
• B carrega (count = 3) no registrador R2 (R2
= 3)
• B decrementa R2 (R2 = 2)
• A armazena R1 na memória na variável
(count = 4)
• B armazena R2 na memória na variável
count (count = 2)
– count tem um valor incorreto
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
data_type buffer[N];
int count = 0;
void processA() {
int i;
while( 1 ) {
produce(&data);
while( count == N );/*loop*/
buffer[i] = data;
i = (i + 1) % N;
count = count + 1;
}
}
void processB() {
int i;
while( 1 ) {
while( count == 0 );/*loop*/
data = buffer[i];
i = (i + 1) % N;
count = count - 1;
consume(&data);
}
}
void main() {
create_process(processA);
create_process(processB);
}
Memória Compartilhada: Exclusão Mútua
• Algumas partes do código que não
podem ser executadas de forma
concorrente
–Região Crítica
• Região do código onde as variáveis
compartilhadas são lidas ou escritas
Memória Compartilhada: Exclusão Mútua
• Quando um processo começa a executar código da
região crítica, todos os outros processos deveriam
esperar até que o processo termine a execução da
região crítica
– Mutex
• Um objeto compartilhado usado para bloquear ou
desbloquear a entrada na região crítica
• Desabilita o acesso de leitura/escrita no endereço que
ele guarda
• Vários processos podem tentar dar lock simultaneamente
mas apenas UM consegue sucesso
• Os demais processos ficam bloqueados até que a
operação de unlock seja realizada pelo processo na
região crítica
• Os processos competirão novamente para entrar na
região crítica
Solução para o Produtor/Consumidor
•
•
Uso da variável count_mutex do tipo mutex
Sequencia de execução
– A/B executam operação de lock em
count_mutex
– Ou A ou B terão sucesso
• Vamos considerar que B conseguiu o lock
• A é bloqueado
– B lê count (count = 3) no registrador R2 (R2 = 3)
– B decrementa R2 (R2 = 2)
– B escreve R2 back na memória (count = 2)
– B executa operação de unlock
• A volta para o estado de execução
– A carrega (count = 2) no registrador R1 (R1 = 2)
– A incrementa R1 (R1 = 3)
– A escreve count na memória (count = 3)
•
Count tem o valor correto: 3
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
data_type buffer[N];
int count = 0;
mutex count_mutex;
void processA() {
int i;
while( 1 ) {
produce(&data);
while( count == N );/*loop*/
buffer[i] = data;
i = (i + 1) % N;
count_mutex.lock();
count = count + 1;
count_mutex.unlock();
}
}
void processB() {
int i;
while( 1 ) {
while( count == 0 );/*loop*/
data = buffer[i];
i = (i + 1) % N;
count_mutex.lock();
count = count - 1;
count_mutex.unlock();
consume(&data);
}
}
void main() {
create_process(processA);
create_process(processB);
}
Como implementar variável lock?.
• Atomic exchange: troca os valores entre um
registrador e um endereço de memória.
– 0  variável de sincronização está livre
– 1  variável de sincronização está locked e não
disponível
Como
garantir
a operação
seja
• Seta
registrador
para que
1 & troca
valor do registrador
com
endereço dede
memória
executada
forma indivisível em
– Novo valor no registrador determina o sucesso em ter
acesso ao lock
DSMs com diretórios?
• 0 se teve sucesso (chegou primeiro)
• 1 se outro processo chegou primeiro
– O segredo é que a operação de exchange seja indivisível
Estratégia para leitura e atualização de memória
de forma atômica
• Dificuldade em ter leitura e escrita na
memória de forma indivisível por apenas 1
instrução
• Processadores possuem 2 instruções
• Load linked (or load locked) + store
conditional
– Load linked retorna o valor inicial
– Store conditional retorna 1 se foi sucesso
(nenhum outro store acessou o endereço
de memória desde o último load) e 0 caso
contrário.
Estratégia para leitura e atualização de memória
de forma atômica
• Load linked (or load locked) + store conditional
– Load linked retorna o valor inicial
– Store conditional retorna 1 se foi sucesso (nenhum outro store acessou
o endereço de memória desde o último load) e 0 caso contrário.
• Exemplo swap atômico com LL & SC:
try: mov R3,R4
; mov exchange value
ll
R2,0(R1)
; load linked
sc
R3,0(R1)
; store conditional
beqz R3,try
; branch store fails (R3 = 0)
mov R4,R2
; put load value in R4
Exemplo T1
• Oito cores: cada um
suporta até 4 threads.
• Cada core consiste num
pipeline de 6 estágios
• Tl usa fine-grained
multithreading,
• Os cores acessam 4
caches de 2 níveis
• Existe coerência entre
caches L1 e um diretório
com cada cache L2
• LI data cache é write
through,
Exemplo T1
Comparação T1 e Superescalares
Comparação T1 e Superescalares
Comparação T1 e Superescalares
Conclusões
• Protocolo de coerência para memória baseado em Snooping
• Problemas
• Protocolo de coerência baseado em diretórios
– Idéia Básica
– Como funciona
• Implementando protocolo baseado em diretórios
– Tipos de mensagens na rede
– Mudanças do estado do bloco de cache
– Mudanças de estado no diretório
• Problemas na Sincronização de processos
– Suporte para sincronização em uniprocessadores
– Problema em processadores DSM
– Solução para processadores DSM
• Exemplo Processador T1 da Sun
• Comparação monoprocessadores vs. multiprocessadores
Download

coerencia-cache-diretorio