sliver__

2.11 Parallelism and Instructions : Synchronization 본문

CS/컴퓨터 구조

2.11 Parallelism and Instructions : Synchronization

sliver__ 2023. 10. 21. 13:27
728x90

Parellel execution에서는 data race를 조심해야 한다.

multiple processor들이 하나의 data를 read/write할 때, 해당 동작은 atomic 해야만 한다.

 

load link(ll)와 store conditional(sc) 명령어를 사용하여 공유 데이터의 read / write를 수행한다.

Ex)

again: addi $t0,$zero,1       ;copy locked value 
   ll       $t1,0($s1)        ;load linked
   sc       $t0,0($s1)        ;store conditional 
   beq      $t0,$zero,again   ;branch if store fails 
   add      $s4,$zero,$t1     ;put load value in $s4

sc 가 실패하면 0을 반환하고 다시 again으로 이동한다.

sc 가 성공하면 1을 반환하고 add instruction이 수행된다.

 

ll 후 sc를 여러 synchronization에서 사용가능하다.

ll - sc 사이에 명령어가 사용될 수 있지만 적은게 좋다.

ll - sc 사이에 명령어가 사용된 경우에 sc가 실패하면 다시 again으로 이동하게 된다. 반복되는 경우에 예상치 못한 dead lock이 발생할 가능성도 있다.

 

728x90
Comments