20160419

동시성 프로그램의 이해
– processor consistency는 W->R ordering은 relax하고, 나머지는 유지해준다. W->R ordering은 보장해주지 않는다. W->W ordering은 차례대로 write request를 queue에 넣음으로써 순서를 유지한다. R->W ordering도 queue를 사용하면 ordering을 지켜줄 수 있다. R->R ordering은 보장해주기는 하지만, update가 없다면 reorder되어도 된다. Reorder해서 실행하되, 중간에 update가 발생하면 순서대로 다시 실행한다. Reorder 이후 update가 발생하는 경우 흔하지 않으므로 괜찮음. Weak ordering은 Alpha, Itanium, ARM, PowerPC 등에서 채택하는 것. Ordering을 지켜주지 않는다. 프로그래머가 직접 필요한 시점에 memory fence instruction을 삽입해야 한다. fence instruction을 넣으면 reordering을 허용하지 않는다.

– Weak ordering machine이 있을 때, sequential consistency를 소프트웨어적으로 지켜줄 수 있나? 가능하다. 모든 메모리 명령에 fence instruction을 넣으면 sequential consistency를 지켜줄 수 있다. Amdahl’s Law는 weak ordering을 허용하는 중요한 이유가 된다. 대부분의 어플리케이션은 ordering이 문제가 되지 않기 때문이다.

– Java의 consistency model은 어떻게 될까? Java는 내부적으로 virtual machine을 실행한다는 점이 특이하다. JVM은 내부적으로 consistency model을 갖는다.

– Properly synchronized program의 경우에는 consistency 문제가 잘 생기지 않는다.

– 왜 last level cache를 공유하는가? 자원이 활용 가능성이 높아진다. 한 코어가 캐시를 사용하지 않을 때, 다른 코어가 캐시를 사용할 수 있다. 캐시를 공유해서 사용하므로 utilization이 높아지지만, 반대로 다른 코어의 데이터가 쫓겨날 수 있다. 한 개의 캐시 블록이 L1, L2, L3에 모두 있을 수 있다 (inclusive cache의 경우).

– Last level cache를 private하게 사용하면 hit time이 짧다는 장점이 있지만, communication이 필요하다. Last level cache를 share하면 hit time은 길어지지만, locality 사용 가능하며 utilization을 높일 수 있다. 간섭이 발생한다는 문제가 있다.

– 한 개의 캐시 블록이 여러 곳에 위치할 수 있으므로, 이를 해결하기 위해 coherence protocol이 필요하다. Coherence는 write propagation과 write serialization을 지원해야 한다. Write propagation은 한 개의 코어에서 다른 코어로 쓰기가 반드시 전달되어야 한다는 것을 의미한다. Write serialization은 write의 순서가 모든 코어에 동일하게 전달되어야 한다는 것을 의미한다. Coherence는 같은 주소에 대한 write 순서가 동일해야 함을 보장. Consistency는 다른 주소에 대한 write 순서가 동일하게 보여야 함을 보장.

– Directory based coherence protocol이 snoop based coherence protocol보다 효율적이다. Snoop based protocol은 broadcasting이라면 directory based coherence protocol은 multicasting이기 때문이다 (데이터를 갖고 있는 노드에만 메시지 전송). Directory coherence protocol은 large scale multicore system을 지원하기 위해 등장함. Directory coherence protocol은 bit vector로 구현하는 것이 가장 단순한 방법이지만, 그렇게 하면 크기가 너무 커지게 된다. Optimization 기법들이 있음.

– AMD Hypertransport는 snoop-based cache coherence protocol이다. multichip package에서 snoop based coherence protocol을 사용하면, 같은 주소에 대한 snoop message가 동시에 발생할 수 있다. 이는 write serialization property를 위반하게 된다. 이러한 일이 발생하지 않아야 한다. Hypertransport에서는 coherence message를 home node에 보내도록 한다. Home node에서 serialize하고, 그 순서에 따라 write serialization이 이뤄진다. AMD Hypertransport는 모든 요청이 home node로 가야 하므로 거리가 길어진다 (성능 저하). 이러한 것을 방지하고자 Intel QPI는 speculative하게 coherence protocol을 진행한다. 각 노드에 직접 메시지를 보내고, home node에도 동시에 메시지를 보낸다. 그리고 충돌이 발생할 것 같으면 home node가 해결한다.

Advertisements
Tagged with: , , , , , , , , , , , , , , , , , , , , ,
Posted in 1) Memo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

누적 방문자 수
  • 88,610 hits
%d bloggers like this: