-
Notifications
You must be signed in to change notification settings - Fork 0
05. Prior works on NVIDIA kernel module
본문: https://dl.acm.org/doi/abs/10.1145/3373376.3378529
CUDA Unified Memory(UM) 는 하나의 pointer가 가리키는 data를 CPU와 GPU 모두에서 접근할 수 있게 합니다.
UM을 사용하지 않으면 host memory와 GPU memory를 따로 할당한 후 명시적으로 memory 복사를 해야 하지만,
UM을 사용하면 GPU driver가 두 memory 사이의 data migration을 자동으로 관리해주기 때문에 사용자는 그것에 대해 신경쓰지 않아도 됩니다.
모든 data를 한 번에 이동하는 것은 아니고, 필요한 순간에 필요한 부분만 이동하는 demand paging 방식으로 작동합니다.
이 기능은 memory 관리의 편리함을 제공하지만 성능상의 overhead가 있는 것으로 알려져 있습니다.
(참고)
https://developer.nvidia.com/blog/unified-memory-cuda-beginners/
http://on-demand.gputechconf.com/gtc/2017/presentation/s7285-nikolay-sakharnykh-unified-memory-on-pascal-and-volta.pdf
https://on-demand.gputechconf.com/gtc/2018/presentation/s8430-everything-you-need-to-know-about-unified-memory.pdf
GPU에서 접근한 data가 GPU memory에 없으면 page fault가 발생하고, GPU runtime이 migration을 수행합니다.
이 때 수행하는 migration은 큰 cost를 동반하는데 그 원인은 아래와 같습니다.
- PCIe bus를 통한 CPU-GPU간 data 이동 과정에서 긴 latency가 발생함
- GPU driver의 fault handling service routine이 큰 오버헤드를 가짐
GPU driver는 PCIe bus 전송 latency를 줄이기 위해 여러 개의 page fault를 batch로 모아서 처리합니다.
논문에서는 이 batch processing mechanism의 두 가지 문제를 제기합니다.
- Page fault batch가 연속적으로 발생하는 경우 성능이 저하됨 (본문의 figure 2 참조)
- Page eviction이 발생하면 page migration 과정에서 serialization이 발생함
Eviction 상황에서 serialization이 발생하는 것은 새로 migrate된 page가 evict 될 page를 overwrite하는 것을 방지하기 위함이라고 합니다.
Page fault batch가 연속적으로 발생하는 상황에 대한 해결책으로 batch size를 늘리는 방법을 제시합니다.
Page eviction serialization을 해결하기 위해서는 preemptive eviction 방법을 사용해서 겹칠 수 있는 data transfer를 겹칩니다.
아직 이 부분은 이해가 잘 안 돼서 다시 읽어볼 예정입니다.