我如何从固定(锁定页)RAM读取,而不是从CPU缓存读取(使用GPU的DMA零拷贝)



如果我对RAM使用DMA<->CUDA C++上的GPU,我如何确定内存将从固定(锁定页)RAM读取,而不是从CPU缓存读取?

毕竟,使用DMA,CPU对有人更改内存的事实以及同步CPU的必要性一无所知(Cache<->RAM)。据我所知,C++11中的std::memory_barier()对DMA没有帮助,也不会从RAM中读取,只会导致缓存L1/L2/L3之间的一致性。此外,通常情况下,没有解决CPU上缓存和RAM之间冲突的协议,而只有同步不同级别的CPU缓存L1/L2/L3和NUMA中的多CPU的协议:MOESI/MESIF

在x86上,CPU会监听总线流量,因此这不是一个问题。在Sandy Bridge类CPU上,PCI Express总线控制器集成到CPU中,因此CPU实际上可以为GPU从其L3缓存读取提供服务,或者根据GPU的写入更新其缓存。

最新更新