멀티코어와 동기화

ARM이나 RISC-V(RVWMO)와 같은 약한 메모리 일관성 모델에 대해 올바른 것은?

  1. A서로 다른 주소에 대한 읽기·쓰기의 많은 순서 변경을 허용하며, 순서가 필요한 곳에는 프로그램에서 배리어 등을 넣는다
  2. B순서 변경을 일절 허용하지 않으므로 배리어 명령은 존재하지 않는다
  3. C같은 주소에 대한 읽기·쓰기의 순서조차 보장하지 않는다
정답과 해설 보기

정답: A. 서로 다른 주소에 대한 읽기·쓰기의 많은 순서 변경을 허용하며, 순서가 필요한 곳에는 프로그램에서 배리어 등을 넣는다

약한 모델에서는 의존 관계가 없는 서로 다른 주소에 대한 읽기·쓰기를 하드웨어가 상당히 자유롭게 바꿀 수 있습니다. 회로를 단순하게 하고 성능과 전력 효율을 높이기 쉬운 반면, 다른 코어와 데이터를 주고받을 때는 fence 명령이나 acquire·release 의미를 가진 읽기·쓰기 명령으로 순서를 명시해야 합니다. 고수준 언어에서는 아토믹 변수를 사용하면 컴파일러가 적절한 명령을 생성해 줍니다.

  • A. 맞습니다. 하드웨어의 자유도가 높은 만큼 순서 지정은 명시적으로 수행합니다.
  • B. RISC-V에도 fence 명령이 있습니다.
  • C. 같은 주소에 대한 순서는 일관성(coherency)에 의해 유지됩니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 메모리 배리어(펜스) 명령의 역할로 올바른 것은?
  2. 위 코드에서 스레드 1이 data를 준비한 뒤 flag로 알리고, 스레드 2가 flag를 확인한 뒤 data를 읽는다. 약한 메모리 일관성 모델의 CPU에서 스레드 2가 확실히 42를 읽기 위해 필요한 것으로 올바른 것은?
  3. 획득(acquire)과 해제(release)의 의미를 가진 메모리 동작에 대해 올바른 것은?
  4. C 언어에서 스레드 간에 주고받는 플래그 변수에 volatile을 붙이는 것만으로는 동기화로 불충분한 이유로 올바른 것은?
  5. C11의 _Atomic이나 C++11의 std::atomic에서 메모리 오더(memory order)를 지정할 수 있게 되어 있는 이유로 올바른 것은?

이 분야의 비교