0

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

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

4

1 回答 1

3

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

于 2012-08-19T17:19:57.663 回答