Skip to main content

Docs

God shall bless us; and all the ends of the earth shall fear him.

쓰레드 수준 병렬화

Directory-Based Cache Coherence Protocols​

  1. directory protocol op 캐시안된 블록에서 read miss -> shared

write miss -> exclusive

shared block에서 read miss -> 노드를 sharing set에 추가

write miss -> invalidating existing copy -> exclusive

exclusive block에서 read miss

data write back -> block becomes uncached

write miss -> block remains exclusive

Synchronizations​

lock

(load reserved)/(store conditional), lrsc

Impl a spin lock(primitive)​

try: mov x3, x4 ;mov exchage value lr x2, 0(x1) ;load reserved from sc x3, 0(x1) ;store conditional bnez x3, try ;branch store fails mov x4, x2 ;put load value in x4

ex1: if no coherence(everything is exclusive)

    ADDI R2, R0, #1 ;load locked value

lockit: EXCH R2, 0(R1) BNEZ R2, lockit

ex2: if coherence

lockit: LD R2, 0(R1) ;load of lock BNEZ R2, lockit ;not available-spin ;0이 아니면 계속 반복 ADDI R2, R0, #1 ;load locked value (aquire lock) EXCH R2, 0(R1) ;swap BNEZ R2, lockit ;branch if lock wasn't 0

=> release는 lock variable에 0 store

Memory Consistency​

assum a,b = 0,0 p1: a=1; -> b=2; p2: print b; -> print a;

possible output a b 0 0 1 2 0 2 -> depends on memory consistency 1 0

Sequential Consistency(SC)에서 (0,2)가 안되는 것은 프로그램 순서가 정해져 있기 때문 p1a->p1b, p2a->p2b A=0은 묵시적으로 p2b가 p1a보다 먼저 실행되었다는 것. 따라서 p2a다음에 p1b가 나올 수 밖에 없다. 대신 - 순차적 일관성이 아닌것은 (0,2)도 가능!

Memory Consistency Model​

메모리 연산의 순서 제약

  • 순서가 보존되는가?
  • 주어진 부하에서, 가능한 반환값 수를 제한한다

메모리 연산 순서 없이 병렬 프로그램은 이야기할게 없음 프로그래머와 시스템 디자이너에 의해 묵시적으로 구현

  • 프로그래머는 올바름과 가능한 결과에 대한 이유로 사용
  • 시스템 디자이너는 컴파일러나 하드웨어에서 얼마나 재구성(reordered) 가능한지 제약으로 사용

프로그래머와 시스템 디자이너 사이의 계약

순차적 일관성​

Sequential Consistency

메모리 연산에서 프로세스가 프로그램 순서에 따라 가시성(visible)을 가짐

부분적 순서로 이루어진 전체 순서가 존재
(i.e. interleaving) => 섞여도 전체 순서가 보존된다

순차적 일관성 = 임의 순서-보존 interleaving 메모리 참조

메모리 장벅​

Memory Fences

Memory barrier