멀티코어와 동기화

병렬 프로그램에서 사용되는 배리어 동기화(barrier synchronization)에 대한 설명으로 올바른 것은?

  1. A한 번에 하나의 스레드만 들어갈 수 있는 부분을 만든다
  2. B모든 스레드가 그 지점에 도착할 때까지, 먼저 도착한 스레드를 기다리게 한다
  3. C메모리 동작의 순서 변경을 막는 명령
정답과 해설 보기

정답: B. 모든 스레드가 그 지점에 도착할 때까지, 먼저 도착한 스레드를 기다리게 한다

시뮬레이션 등에서는 모든 스레드가 한 단계 분량의 계산을 끝낸 뒤에 다음 단계로 진행해야 합니다. 배리어 동기화에서는 각 스레드가 배리어 지점에서 멈추고, 마지막 스레드가 도착한 시점에 모두가 진행합니다. 계산량에 편차가 있으면 빠른 스레드가 느린 스레드를 기다리는 시간이 늘어나므로, 일을 균등하게 나누는 것이 성능을 위해 중요합니다.

  • A. 그것은 락에 의한 배타 제어입니다.
  • B. 맞습니다. 단계마다 모두의 보조를 맞춥니다.
  • C. 그것은 메모리 배리어이며, 이름은 비슷하지만 별개입니다.
이 분야 연습하기 분야로 돌아가기

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

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

이 분야의 비교