멀티코어와 동기화
멀티스레드 프로그램에서 일어나는 거짓 공유(false sharing)에 대한 설명으로 올바른 것은?
- A서로 다른 스레드가 서로 다른 변수를 갱신하고 있는데도, 그 변수들이 같은 캐시 라인에 있어서 라인이 코어 사이를 오가며 느려진다
- B두 스레드가 같은 변수를 동기화 없이 갱신하여 값이 깨진다
- C스레드끼리 서로의 락을 기다리며 멈춰 버린다
정답과 해설 보기
정답: A. 서로 다른 스레드가 서로 다른 변수를 갱신하고 있는데도, 그 변수들이 같은 캐시 라인에 있어서 라인이 코어 사이를 오가며 느려진다
일관성은 캐시 라인(일반적으로 64바이트) 단위로 관리됩니다. 코어 0이 변수 a, 코어 1이 변수 b만 갱신하더라도 a와 b가 같은 라인에 있으면, 쓸 때마다 상대의 복사본이 무효화되어 라인이 두 코어 사이를 오갑니다. 결과는 올바른데도 성능이 크게 떨어지는 것이 거짓 공유입니다. 스레드별 집계용 배열 등에서 일어나기 쉬운 문제입니다.
- A. 맞습니다. 데이터는 공유하지 않는데 라인을 공유하게 되는 현상입니다.
- B. 그것은 데이터 레이스입니다.
- C. 그것은 데드락입니다.