0

CUDAC++のRAM<->GPUにDMAを使用する場合、メモリがCPUキャッシュからではなく、固定された(ロックページ)RAMから読み取られるようにするにはどうすればよいですか?

結局のところ、DMAの場合、CPUは、誰かがメモリを変更したという事実と、CPU(Cache <-> 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 に答える