我在程序中使用 memcpy() 。不幸的是,当我增加变量数量时,CPU 使用率会增加。就好像 memcpy 是通过使用 for 循环迭代来运行的。 linux 中也有快速的 memcpy 函数吗?我应该使用补丁并编译内核吗?
在某些架构中,CPU 和内存之间的总线相当薄弱;其中一些架构添加了 DMA 引擎,允许复制大内存块,而无需在 CPU 上运行循环。
在 Linux 中,您可以使用以下命令访问 DMA 引擎dmaengine
子系统,但这样的引擎是否实际可用非常依赖于硬件。
X86 CPU 具有良好的内存子系统,并且还具有用于复制大块的特殊硬件支持,因此使用 DMA 引擎不太可能有实际帮助。
(Intel 添加了一个名为 DMA 引擎I/OAT某些服务器主板,但总体而言results比普通的 CPU 副本好不了多少。)
DMA 会强制将数据移出 CPU 缓存,因此对程序变量进行 DMA 复制完全没有意义,因为之后的第一次 CPU 访问必须将它们读回到缓存中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)