드라이버가 GPU의 VRAM에 매핑되는 non-pageable memory 를 제공함
여기다가 보낼 데이터 복사.
read 할 일 없으니 write_combined 속성으로 최적화.
이제 전송을 할 건데 CPU가 이걸 하나하나 쏘고 있을 수 없으니 GPU쪽에서 DMA로 pcie 통해서 쭈아아압 가져감.
원래 이게 정석인데 이번에 또 판도가 뒤집힘
https://quasarzone.com/bbs/qn_hardware/views/1448743
Memory mapped i/o
옛날 cpu랑 주변장치 클럭이 비슷할 땐 유용했음
cpu가 빨라지면서 cpu가 대기해야 할 clock이 늘어나 aync i/o가 대세
하지만 이젠 또 PCIE 버젼이 오르면서 cpu의 대기가 줄어들었으므로
Mem-mapped io로 다시 감
사실 위에서 말한 cpu가 직접 주변장치에 쓰기이런게 가능한 이유는,옛날 cpu는 느렸고, 주변기기도 비슷하게 느렸기에둘이 비슷한 속도로 맞춰져주변기기에 곧바로 읽기 쓰기를 수행할 수 있었기 때문입니다.
하지만 이후에 cpu가 기하급수적으로 빨라졌지만주변기기나 버스(PCI-e)시스템은 cpu의 속도를 따라가지 못했기에Cpu가 직접 주변기기에 쓰려면 속도차이로 cpu측에 wait clock이 걸려 클럭 낭비가 되어버렸습니다.
이때부터 DMA같은 hardware async i/o가 생깁니다.현대 gpu에서는Gpu driver가 제공하는 특정 메모리주소(non-pageable)에 cpu가 써 넣으면Gpu측에서 DMA engine으로 램에서 PCI-e를 통해 쭈아아압 가져가는 방식을 사용합니다.(Cpu는 DMA controller 가 데이터를 옮기는 동안 다른 작업을 수행하고 있을 수 있습니다)
하지만 최근 몇년 간 pci-e의 버젼이 올라가며속도가 빨라져 cpu의 속도에 충분히 맞출 수 있게 되었고다시 DMA 없이 cpu가 gpu에 곧바로 읽고 쓸 수 있게 되어가는 추세입니다(https://quasarzone.com/bbs/qn_hardware/views/1448743최근 이런 뉴스가 나온 이유가이런 이유입니다)