멀티코어와 동기화

C11의 _Atomic이나 C++11의 std::atomic에서 메모리 오더(memory order)를 지정할 수 있게 되어 있는 이유로 올바른 것은?

  1. A아토믹 변수를 메모리의 어디에 둘지 지정하기 위해
  2. B필요한 순서 보장만 선택함으로써 불필요한 배리어를 피하고 성능을 유지할 수 있기 때문
  3. C스레드를 실행하는 순서를 미리 정해 두기 위해
정답과 해설 보기

정답: B. 필요한 순서 보장만 선택함으로써 불필요한 배리어를 피하고 성능을 유지할 수 있기 때문

아토믹 변수의 연산은 기본적으로 순차 일관성(memory_order_seq_cst)으로, 가장 이해하기 쉬운 대신 배리어의 부담이 커집니다. 단순한 카운터라면 불가분이기만 하면 되므로 relaxed, 데이터를 주고받는 플래그라면 acquire와 release로 충분합니다. 컴파일러는 지정에 맞춰 CPU의 메모리 모델에 필요한 최소한의 명령을 생성합니다.

  • A. 배치 장소의 지정이 아닙니다.
  • B. 맞습니다. 기본값은 가장 강한 순차 일관성입니다.
  • C. 스레드의 실행 순서를 정하는 것이 아닙니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 커다란 자료구조 전체를 하나의 락으로 보호하는 「거친 단위(coarse-grained) 락」과, 부분별로 다른 락으로 보호하는 「세밀한 단위(fine-grained) 락」을 비교한 설명으로 올바른 것은?
  2. 락프리(lock-free) 알고리즘의 성질로 올바른 것은?
  3. 임계 구역(critical section)에 대한 설명으로 올바른 것은?
  4. 병렬 프로그램에서 사용되는 배리어 동기화(barrier synchronization)에 대한 설명으로 올바른 것은?
  5. 64개의 코어가 하나의 공유 카운터를 아토믹 명령으로 동시에 계속 갱신하면, 코어를 늘려도 빨라지지 않는다. 주된 이유는?

이 분야의 비교