有些架构的CPU和内存之间的总线相当弱;其中一些架构添加了一个DMA引擎,允许复制大块内存,而无需在CPU上运行循环。
在Linux中,您可以使用dmaengine
子系统访问DMA引擎,但无论这种引擎是否实际可用,它都与硬件有关。
X86 CPU具有良好的内存子系统,并且还具有用于复制大块的特殊硬件支持,因此使用DMA引擎实际上不太可能提供帮助。
(英特尔在一些服务器主板上添加了一个名为I/OAT的DMA引擎,但总体results并不比普通的CPU副本好很多。)
DMA强制数据从CPU缓存中移出,因此为程序的变量执行DMA复制将完全没有意义,因为之后的第一次CPU访问必须将它们读回缓存。