Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... ·...

56
Sincronização José Nelson Amaral, U of Alberta (adaptado por Guido Araujo)

Transcript of Sincronização+ - Unicampoxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/... ·...

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+

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+

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+

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+

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+

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+

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+

//  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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

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+

•  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+

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+

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+

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+

Outros  Topicos  de  Sincronizacao  

•  Barreiras  

Baer,  p.  288