멀티코어와 동기화
Linux의 NUMA 시스템에서 자주 사용되는 퍼스트 터치(first-touch) 정책(처음 페이지에 쓴 스레드가 동작 중인 노드의 메모리에 그 페이지를 배치)에서 주의해야 할 점으로 올바른 것은?
- A퍼스트 터치에서는 페이지가 무작위 노드에 배치된다
- Bmalloc을 호출한 시점에 모든 페이지의 배치 장소가 결정된다
- C큰 배열을 하나의 스레드만으로 0으로 초기화하면 전부가 하나의 노드에 배치되어, 다른 노드의 스레드가 먼 메모리를 사용하게 된다
정답과 해설 보기
정답: C. 큰 배열을 하나의 스레드만으로 0으로 초기화하면 전부가 하나의 노드에 배치되어, 다른 노드의 스레드가 먼 메모리를 사용하게 된다
malloc으로 확보만 해서는 물리 페이지가 할당되지 않으며, 처음 쓸 때의 페이지 폴트에서 그 스레드가 있는 노드의 메모리에 배치됩니다. 그래서 초기화를 하나의 스레드로 수행하면 배열 전체가 그 노드에 모이고, 병렬 계산에서 각 스레드가 담당하는 부분의 상당수가 먼 메모리가 됩니다. 초기화도 계산과 같은 분담으로 병렬 수행하면, 각 부분이 담당 스레드 가까이에 배치됩니다.
- A. 무작위가 아니라 처음 접근한 스레드에 의해 정해집니다.
- B. malloc 시점이 아니라 처음 쓰는 시점에 정해집니다.
- C. 맞습니다. 초기화도 나중에 사용할 스레드에게 분담시키는 것이 기본입니다.