멀티코어와 동기화

일관성 프로토콜에는 무효화형과 갱신형이 있다. 많은 CPU가 무효화형을 채택하는 이유로 가장 적절한 것은?

  1. A같은 코어가 같은 라인에 여러 번 쓸 때, 처음 한 번의 무효화만으로 끝나 통신이 적기 때문
  2. B갱신형에서는 다른 코어가 오래된 값을 읽게 되기 때문
  3. C무효화형에서는 캐시 용량이 2배가 되기 때문
정답과 해설 보기

정답: A. 같은 코어가 같은 라인에 여러 번 쓸 때, 처음 한 번의 무효화만으로 끝나 통신이 적기 때문

갱신형은 쓸 때마다 새 값을 다른 코어의 복사본에 보내므로, 다른 코어가 곧바로 읽는다면 유리하지만, 하나의 코어가 연속해서 쓰는 경우에는 매번 통신이 발생합니다. 무효화형이라면 첫 번째 쓰기에서 다른 복사본을 무효화한 뒤, M 상태의 라인에는 통신 없이 쓸 수 있습니다. 실제 프로그램에서는 연속해서 쓰는 경우가 많으므로 무효화형이 일반적입니다.

  • A. 맞습니다. 갱신형은 쓸 때마다 값을 보냅니다.
  • B. 갱신형도 올바른 값을 유지할 수 있습니다. 문제는 통신량입니다.
  • C. 용량은 달라지지 않습니다.
이 분야 연습하기 분야로 돌아가기

멀티코어와 동기화의 다른 문제

  1. 멀티스레드 프로그램에서 일어나는 거짓 공유(false sharing)에 대한 설명으로 올바른 것은?
  2. 스레드별 카운터를 「long cnt[8];」처럼 나란히 둔 배열에서 거짓 공유가 발생하고 있다. 대책으로 가장 적절한 것은?
  3. 데이터 레이스(data race)에 대한 설명으로 올바른 것은?
  4. 위 코드를 두 스레드에서 동시에 실행하면 counter의 최종 값이 200000보다 작아지는 경우가 있다. 그 이유로 올바른 것은?
  5. 아토믹 명령(atomic instruction, 불가분 명령)에 대한 설명으로 올바른 것은?

이 분야의 비교