sincronização+ - unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... ·...
TRANSCRIPT
![Page 1: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/1.jpg)
Sincronização
José Nelson Amaral, U of Alberta (adaptado por Guido Araujo)
![Page 2: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/2.jpg)
Jean-‐Loup Baer – University of Washington
Livro Texto
![Page 3: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/3.jpg)
A Necessidade de Sincronização
Qual o valor de A depois que os processos P1 e P2 executam?
Process P1:
A ← A + 1
Process P2:
A ← A + 2
// IniVally A == 0
Baer, p. 282
![Page 4: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/4.jpg)
Time
Process P1: Process P2:
A ← A + 1 A ← A + 2
// IniVally A == 0
load R1, A addi R1, R1, 1 store R1, A
load R1, A addi R1, R1, 2 store R1, A
load R1, A load R1, A Loads value 0 Loads value 0
addi R1, R1, 2
store R1, A Stores value 2
add R1, R1, 1
store R1, A Stores value 1 O resultado da computação paralela pode ser 1, 2, or 3. Baer, p. 282
A Necessidade de Sincronizacao Manter as caches coerentes resolve este
problema?
Não, a invalidação de A vinda de P2 pode chegar em P1 depois do valor ter sido carregado em R1
![Page 5: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/5.jpg)
Nós precisamos de uma lock!
![Page 6: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/6.jpg)
Código Sincronizado
Qual é o valor de A depois que os processos P1 e P2 executam agora?
// IniVally A == 0
Baer, p. 282
Process P1:
A ← A + 1
while (! acquire(lock)) wait();
release(lock);
Process P2:
A ← A + 2
while (! acquire(lock)) wait();
release(lock);
Agora A certamente tem o valor 3.
![Page 7: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/7.jpg)
// IniVally A == 0
Baer, p. 283
Process P1:
A ← A + 1
while (! acquire(lock)) wait();
release(lock);
Process P2:
A ← A + 1
while (! acquire(lock)) wait();
release(lock);
busy wait or spin lock: o processo conVnua executando enquanto espera
Duas opções para wait():
blocking: o processo suspende a execução enquanto espera, libera a CPU e é acordado quando a lock é liberada.
Como acquire(lock) funciona?
Código Sincronizado
![Page 8: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/8.jpg)
Problema de Aquisição de Lock
• “lock” é simplesmente uma variável armazenada em memória compaVlhada
• A lock pode ter dois valores: • 0 (lock esta livre) • 1 (lock esta adquirida)
• Passos para adquirir uma lock: – testa se o valor é 0 ou 1 – se o valor é 0, muda para 1 para adquirir a lock
Complicação: tem que prevenir outros processadores de modificar a lock entre test e set
Usa uma operação indivisível: test-‐and-‐set. Baer, p. 283
![Page 9: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/9.jpg)
Instrução test-‐and-‐set
• ISA guarante que não existe nenhum outro acesso à variável entre test e set
1964: a IBM já Vnha uma instrução test-‐and-‐set no seu mais novo computador: o IBM 360.
Hoje todo processador tem uma operação atômica.
Baer, p. 283
![Page 10: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/10.jpg)
Variações do test-‐and-‐set
• exchange-‐and-‐swap: Permite outros valores além de 0 e 1 – troca os valores entre um registrador e uma posição de memória
• compare-‐and-‐swap: a memória só é modificada se ela contém o valor do teste especificado.
Baer, p. 283 Intel Architecture 32 SPARC
![Page 11: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/11.jpg)
fetch-‐and-‐Θ
• O carregamento de um valor de uma posição da memória e a realização de uma operação na mesma posição sao indivisíveis
• Exemplos: – fetch-‐and-‐increment
– fetch-‐and-‐add – fetch-‐and-‐store
Baer, p. 283
![Page 12: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/12.jpg)
Usando fetch-‐and-‐Θ no exemplo
Process P1:
fetch-‐and-‐increment A
Process P2:
loadi, R1, 2 fetch-‐and-‐add A, R1
// IniVally A == 0
Baer, p. 282
![Page 13: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/13.jpg)
load-‐locked e store-‐condi;onal
Baer, p. 284
![Page 14: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/14.jpg)
Chapter 2 — Instructions: Language of the Computer — 14
Sincronização na arquitetura MIPS
• Load linked: • Store condiVonal:
– Sucesso se a posição não mudou desde o úlVmo ll • Retorna 1 em rt
– Falha se a posição mudou • Returns 0 em rt
• Exemplo: atomic swap (para testar/setar uma lock)
ll rt, offset(rs)
sc rt, offset(rs)
P-‐H p. 138 Baer, p. 284
![Page 15: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/15.jpg)
Exemplo: (atomic swap)
Chapter 2 — Instructions: Language of the Computer — 15
Usada para testar/setar uma variável
Shared
$s1: address of shared $s4: local value to be swapped
Processor P0
$s1: address of shared $s4: local value to be swapped
Processor P1
Baer, p. 284
![Page 16: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/16.jpg)
try: move $t0, $s4 # copy exchange value ll $t1 , 0($s1) # load linked sc $t0 , 0($s1) # store condiVonal beq $t0 , $zero,try # branch store fails move $s4 , $t1 # put load value in $s4
Exemplo: (atomic swap)
Chapter 2 — Instructions: Language of the Computer — 16
42
Shared
$s1: 0x1000 10E0 $s4: 15
Processor P0
$s1: 0x1000 10E0 $s4: 37
Processor P1
0x1000 10E0
$t0: 15 $t0: 37
ll
$t1: 42
ll
$t1: 42
sc
15
$t0: 1
Load-‐link address Valid
0x1000 10E0 1 Load-‐link address Valid
0x1000 10E0 1
sc
$t0: 0 $s4: 42
Baer, p. 284
Linked Register
Linked Register
0
![Page 17: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/17.jpg)
try: move $t0, $s4 # copy exchange value ll $t1 , 0($s1) # load linked sc $t0 , 0($s1) # store condiVonal beq $t0 , $zero,try # branch store fails move $s4 , $t1 # put load value in $s4
Example: (atomic swap)
Chapter 2 — Instructions: Language of the Computer — 17
42
Shared
$s1: 0x1000 10E0 $s4: 15
Processor P0
$s1: 0x1000 10E0 $s4: 37
Processor P1
0x1000 10E0
$t0: 15 $t0: 37
ll
$t1: 15 $t1: 42
15
$t0: 1
Load-‐link address Valid
0x1000 10E0 0
sc
$t0: 1 $s4: 42 $s4: 15
37
Baer, p. 284
Linked Register
1
![Page 18: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/18.jpg)
Contenção por Locks
![Page 19: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/19.jpg)
spinning locks
RepeVdamente tenta adquirir uma lock que um outro processador possui.
Problema: test-‐and-‐set sempre invalida a posição de memória nas outras caches.
Baer, p. 285
![Page 20: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/20.jpg)
Example
P1 cache P2 cache P3 cache I I
Split-‐TransacVon Bus
Modified lock = 1
Memory lock 0
test-‐and-‐set read-‐invalidate
I
Serve Miss
Receives lock = 0 (succeed)
Baer, p. 285
![Page 21: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/21.jpg)
Example
P1 cache P2 cache P3 cache I I
Split-‐TransacVon Bus
Modified lock = 1
Modified lock = 1
Memory lock 0
test-‐and-‐set read-‐invalidate
I
Read lock =1 (fail)
Serve Miss read-‐invalidate
Baer, p. 285
![Page 22: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/22.jpg)
Example
P1 cache P2 cache P3 cache I I
Split-‐TransacVon Bus
Modified lock = 1
Memory lock 0
Serve miss test-‐and-‐set read-‐invalidate
I
read-‐Invalidate
Modified lock = 1
Read lock = 1 (fail)
Baer, p. 285
![Page 23: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/23.jpg)
Example
P1 cache P2 cache P3 cache I I
Split-‐TransacVon Bus
Modified lock = 1
Memory lock 0
test-‐and-‐set read-‐invalidate
Serve miss
I
Modified lock = 1
Read lock =1 (fail)
read-‐invalidate
Baer, p. 285
![Page 24: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/24.jpg)
Example
P1 cache P2 cache P3 cache I I
Split-‐TransacVon Bus
Modified lock = 0
Modified lock = 1
Memory lock 0
I
Invalidate Invalidate
Para liberar a lock, este processador terá que compeVr pelo barramento com os processadores que estão spinning. Baer, p. 285
![Page 25: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/25.jpg)
Example
P1 cache P2 cache P3 cache I I
Split-‐TransacVon Bus
Modified lock = 0
Modified lock = 1
Memory lock 0
I
Muito tráfego no barramento ou um ponto quente na rede de interconexão.
test-‐and-‐set read-‐invalidate
Read lock =0 (succed)
Serve Miss read-‐invalidate
Baer, p. 285
![Page 26: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/26.jpg)
P4 P3
P1
Processors
Caches
Local memories
Switches ⋅⋅⋅
Directories
Test-‐and-‐set read invalidate por P1 para uma linha no estado Exclusive ou Shared:
Baer p. 277
I
M
E
S
Request Cache Line
S M
invalidaVon req.
all caches must acknowledge
E
P2
![Page 27: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/27.jpg)
P4 P3
P1
Processors
Caches
Local memories
Switches ⋅⋅⋅
Directories
Test-‐and-‐set read invalidate by P2
Baer p. 277
I
M
E
S
Request
M
E
P2
writeback inv. req.
writeback
Invalidates line
Cache Line
![Page 28: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/28.jpg)
StarvaVon
P1 cache P2 cache P3 cache
Split-‐TransacVon Bus
Se P2 adquire a lock depois de P1 e P1 adquire a lock depois de P2 e assim por diante, então P3 ficará faminto (starve).
Baer, p. 285
![Page 29: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/29.jpg)
Back-‐off exponenVal
P1 cache P2 cache P3 cache
Split-‐TransacVon Bus
Quando P2 tenta adquirir a lock e falha, P2 espera por um tempo t antes de tentar de novo.
Se P2 falha de novo, P2 espera por um tempo 2t antes de tentar de novo.
Depois espera por 4t, 8t, e assim por diante.
Alivia contenção e o risco de starvaVon.
Baer, p. 285
![Page 30: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/30.jpg)
test-‐and-‐test-‐and-‐set
P1 cache P2 cache P3 cache I I
Split-‐TransacVon Bus
Shared lock = 0
Memory lock 0
test-‐and-‐set read-‐invalidate
I
read miss
(for test)
Serve Miss
Receives lock = 0
Exclusive lock = 1
Receives lock = 0 (succeds)
Baer, p. 285
![Page 31: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/31.jpg)
test-‐and-‐test-‐and-‐set
P1 cache P2 cache P3 cache I I
Split-‐TransacVon Bus
Shared lock = 1
Memory lock 0
read miss read miss
I
Receive lock = 1
Shared lock = 1
Receive lock=1
Exclusive lock = 1
serve miss read miss
Shared lock = 1
invalidate Invalidate Invalidate
Baer, p. 285
que acontece quando o processador que possui a lock (P1 neste exemplo) libera a lock?
A compeVção pela lock será pior do que antes.
![Page 32: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/32.jpg)
test-‐and-‐test-‐and-‐set
P1 cache P2 cache P3 cache I I
Split-‐TransacVon Bus
Memory lock 0
read miss read miss
I
Receive lock = 0
Receive lock=0
Exclusive lock = 1
serve miss read miss
Exclusive lock = 0 Shared lock = 0
Shared lock = 0
Shared lock = 0
Baer, p. 285
![Page 33: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/33.jpg)
test-‐and-‐test-‐and-‐set
P1 cache P2 cache P3 cache I I
Split-‐TransacVon Bus
Memory lock 0
test-‐and-‐set read-‐invalidate
I
Receive lock = 0
invalidate Invalidate
Shared lock = 0
Shared lock = 0
Shared lock = 0
Exclusive lock = 1
Baer, p. 285
![Page 34: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/34.jpg)
test-‐and-‐test-‐and-‐set
P1 cache P2 cache P3 cache I I
Split-‐TransacVon Bus
Memory lock 0
Serve miss
I
Receive lock = 1
Exclusive lock = 1
test-‐and-‐set read
Read miss
Shared lock = 1
Shared lock = 1
Baer, p. 285
![Page 35: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/35.jpg)
Contenção por Lock Ciclo de Realimentação PosiVva
Um processador P1 adquire uma lock para executar uma curta sessao de codigo que accessa variaveis comparVlhadas.
Depois de adquirir a lock, P1 compete pelo barramento/rede com os outros processadores que ainda estao rodando o protocolo de lock.
Quanto mais contencao, mais longa e’ a sessao criVca.
Uma sessao criVca longa aumenta o numero de processadores que estao compeVndo pela lock.
Baer, p. 286
![Page 36: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/36.jpg)
Filas de Espera Para Locks Uma fila de espera (distribuida) em hardware para processadores
enqueue: 1. alloca uma copia da linha que contem a lock na cache do processador. 2. entra o processor na fila 3. Se a lock esta’ ocupada, spin na cache local
dequeue: ocorre quando o processor que segura a lock libera ela 2. manda a lock liberada e os dados da mesma linha para o proximo processador que esta’ esperando
Complicacoes:
-‐ requer transferencias diretas de uma cache para outra.
-‐ mais estados para coerencia na cache.
-‐ tem que executar algumas operacoes for a do protocolo de coerencia. Baer, p. 286
![Page 37: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/37.jpg)
Full-‐Empty Bit Um bit para synchronizaVon em cada posicao de memoria.
bit = 0: nenhum valor foi escrito na posicao.
bit = 1: um valor foi escrito
Uma leitura (load) entra em espera.
Uma leitura (read) conVnua e reseta o bit para 0.
Uma escrita (store) entra em espera.
Uma escrita (store) conVnua e seta o bit para 1.
Muito uVl para sincronizacao produtor-‐consumidor.
Baer, p. 287
![Page 38: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/38.jpg)
Modelos de Memoria
Qual e’ a intencao do programador?
Process P1:
write (A);
Process P2:
while (flag != 1); /* spin on flag */
flag ← 1 read (A);
// iniVally flag = 0
P1 produz o valor de A para ser consumido por P2
E’ possivel que P2 leia o valor anVgo de A?
Nao existe depencencia entre A e flag.
O compilador pode reordenar as duas escritas.
O hardware pode reordenar as duas escritas. Baer, p. 291
![Page 39: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/39.jpg)
Qual e’ a intencao da programadora?
Process P1:
X ← 0;
Process P2:
Y ← 0;
… …
// iniVally X = 1 and X = 1
No maximo um dos dois processos devem ser eliminados.
Poderiam os dois serem eliminados?
Se leituras podem pular sobre escritas os dois podem ser eliminados.
if (Y = 0) then kill P2; if (X = 0) then kill P1;
Baer, p. 291
Modelos de Memoria
![Page 40: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/40.jpg)
O que o programador espera?
Baer, p. 291
![Page 41: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/41.jpg)
LocaVon Consistency
1. Cada processo e’ executado em alguma ordem sequencial que segue sua “ordem de programa.”
2. Todos os processos veem a mesma ordem de operacoes
Baer, p. 291
![Page 42: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/42.jpg)
LocaVon Consistency
Memory
P1 P2
1. Existe um unico tubo para a memoria onde todas as operacoes teriam que passar.
2. Todos os processos teriam que “ver” as operacoes passando por este tubo na mesma ordem.
O resultado e’ o mesmo como se fosse:
Baer, p. 291
![Page 43: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/43.jpg)
Program Order
Program order requer que cada instrucao complete sua execucao antes que a proxima instrucao seja executada.
Program order proibe reordenacao de loads e stores.
Baer, p. 291
![Page 44: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/44.jpg)
Como implementar SequenVal Consistency?
No write buffers? (loads pulam sobre stores do ponto de vista de outros processadores)
E’ necessario aguardar por confirmacao de invalidacao/update de todas as caches antes de comecar a excucao da proxima instrucao?
Loads nao podem passar sobre stores?
Proibir loads especulaVvos?
Baer, p. 292
![Page 45: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/45.jpg)
Primeira Abordagem: Strict SequenVal Consistency Tenta Melhorar Desempenho
Configuracao: processadores for a de ordem
mulVprocessdor com protocolo de coerencia baseado em invalidacao
protocolo de coerencia baseado em snooping
Baer, p. 292
![Page 46: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/46.jpg)
Desempenho com SequenVal Consistency (cont.)
• ObjeVvo: reduzir os custos de cache misses – Solucao 1:
• read-‐prefetch para loads • read-‐exclusive prefetch para stores
– se ainda esta’ exclusive quando o store commit, esta’ ok.
– Solucao 2: especula que a posicao de memoria do load nao sera’ invalidada. • Verifica quando o load esta’ no topo do reorder buffer.
Baer, p. 292
![Page 47: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/47.jpg)
SequenVal Consistency e’ um Modelo de Memoria Forte
Ele requer que todas as operacoes de memoria sejam totalmente ordenadas na ordem do programa.
Baer, p. 292
![Page 48: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/48.jpg)
Modelos de Memoria Relaxados
• weak ordering: alguns loads e sotres sao marcados como pontos de sincronizacao.
• Exemplo: uma instrucao fence
…. …. fence …. …. ….
Todas as instrucoes que acessam a memoria antes da fence tem que executar.
Antes que qualquer instrucao que acessa a memoria depois da fence seja executada.
Baer, p. 293
![Page 49: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/49.jpg)
Processor Consistency
• escritas (stores) tem que ser executadas em program order
• leituras (loads) podem pular sobre stores – Uso de FIFO write buffers e’ ok.
Baer, p. 293
![Page 50: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/50.jpg)
Processor Consistency
Qual e’ a intencao do programador?
Process P1:
write (A);
Process P2:
while (flag != 1); /* spin on flag */
flag ← 1 read (A);
// iniVally flag = 0
P1 produz o valor ode A a ser consumido por P2
A Processor Consistency e’ equivalente `a SequenVal Consistency?
Sim, escritas para A e flag nao podem ser reordenadas.
Baer, p. 293
![Page 51: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/51.jpg)
Processor Consistency
Qual e’ a intencao da programadora?
Process P1:
X ← 0;
Process P2:
Y ← 0;
… …
// iniVally X = 1 and X = 1
No maximo um dos dois processos pode ser eliminado
Poderiam os dois ser eliminados?
Sim, em P1 a leitura de Y pode ocorrer antes da escrita de X e em P2 a leitura de X pode ocorrer antes da escrita de Y.
if (Y = 0) then kill P2; if (X = 0) then kill P1;
Baer, p. 293
![Page 52: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/52.jpg)
• Loads nao sao reordenados com outros loads • Stores nao sao reordenados com outros stores • Stores nao sao reordenados com loads mais velhos
• Em um mulVprocessor, stores para a mesma posicao de meoria tem uma ordem total
• Loads podem ser reordenados com stores mais anVgos para posicoes diferentes de memoria, mas nao com stores para a mesma posicao.
Baer, p. 293
Regras para Processor Consistency
![Page 53: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/53.jpg)
Exemplo de Processor Consistency
O resultado poderia ser R1 = R2 = 1?
Process P1:
R1 ← x
Process P2:
R2 ← y
y ← 1 x ← 1
// iniVally x = y = 0
Nao, stores nao podems ser reordenados com loads mais anVgos.
![Page 54: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/54.jpg)
Processor Consistency Example
O resultado poderia ser R1 = R2 = 0?
Process P1:
x ← 1
Process P2:
y ← 1
R1 ← y R2 ← x
// iniVally x = y = 0
Sim, loads podem pular sobre stores.
![Page 55: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/55.jpg)
Desempenho de Processor Consistency
Desempenho melhora por aproximadamente 10% em relacao a sequenVal consistency para computacoes cienVficas.
![Page 56: Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... · 2014-05-20 · Contenção+porLock++ Ciclode+ Realimentação+PosiVva+ Um processadorP1 adquire+umalock+](https://reader034.vdocuments.site/reader034/viewer/2022042316/5f0571407e708231d412fc3a/html5/thumbnails/56.jpg)
Outros Topicos de Sincronizacao
• Barreiras
Baer, p. 288