멀티코어와 동기화

64개의 코어가 하나의 공유 카운터를 아토믹 명령으로 동시에 계속 갱신하면, 코어를 늘려도 빨라지지 않는다. 주된 이유는?

  1. A아토믹 명령은 하나의 코어에서만 실행할 수 있기 때문
  2. B코어 수가 많으면 카운터의 값이 자동으로 작아지기 때문
  3. C카운터의 캐시 라인이 코어 사이를 차례로 이동하여, 갱신이 하나씩밖에 진행되지 않기 때문
정답과 해설 보기

정답: C. 카운터의 캐시 라인이 코어 사이를 차례로 이동하여, 갱신이 하나씩밖에 진행되지 않기 때문

아토믹한 갱신을 하려면 그 코어가 라인을 M 상태로 가지고 있어야 하므로, 갱신할 때마다 라인이 다른 코어로 이동합니다. 이동에는 코어 간 통신 시간이 걸리고, 한 번에 하나의 코어만 갱신할 수 있으므로, 코어를 늘려도 대기만 길어질 뿐입니다. 각 코어가 자신의 위치에서 세고 마지막에 합계를 내는 등, 공유 쓰기를 줄이는 궁리가 필요합니다.

  • A. 어느 코어에서도 실행할 수 있습니다.
  • B. 값이 제멋대로 바뀌는 일은 없습니다.
  • C. 맞습니다. 라인을 두고 벌이는 다툼이 성능을 결정합니다.
이 분야 연습하기 분야로 돌아가기

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

  1. NUMA(Non-Uniform Memory Access, 불균일 메모리 접근) 시스템에 대한 설명으로 올바른 것은?
  2. Linux의 NUMA 시스템에서 자주 사용되는 퍼스트 터치(first-touch) 정책(처음 페이지에 쓴 스레드가 동작 중인 노드의 메모리에 그 페이지를 배치)에서 주의해야 할 점으로 올바른 것은?
  3. 병렬 프로그램에서 코어 수를 늘려도 성능이 기대만큼 늘지 않는 원인으로 해당하지 않는 것은?
  4. 루프의 반복을 여러 스레드로 나눌 때, 반복마다 계산량이 크게 들쭉날쭉한 경우에 적합한 나누기 방법은?
  5. 배열의 모든 요소의 합계를 여러 스레드로 구할 때, 성능을 위해 적합한 방법은?

이 분야의 비교