2

我在我的程序中使用 memcpy()。随着我增加变量的数量,不幸的是 CPU 使用率增加了。就好像 memcpy 是通过使用 for 循环迭代来运行的。linux中也有快速的memcpy功能吗?我应该使用补丁并编译内核吗?

4

1 回答 1

6

在某些架构中,CPU 和内存之间的总线相当薄弱;其中一些架构添加了一个 DMA 引擎,以允许复制大块内存,而无需在 CPU 上运行循环。

在 Linux 中,您将能够使用dmaengine子系统访问 DMA 引擎,但这种引擎是否实际可用非常依赖于硬件。

X86 CPU 具有良好的内存子系统,并且还具有用于复制大块的特殊硬件支持,因此使用 DMA 引擎实际上不太可能有帮助。(英特尔在一些服务器主板上添加了一个称为I/OAT的 DMA 引擎,但总体结果并不比普通的 CPU 副本好多少。)

DMA 强制将数据从 CPU 缓存中取出,因此对程序变量进行 DMA 复制将完全没有意义,因为之后的第一次 CPU 访问必须将它们读回缓存中。

于 2013-06-18T14:31:31.833 回答