【问题标题】:how memcpy is handled by DMA in linuxlinux中的DMA如何处理memcpy
【发布时间】:2013-06-14 14:28:26
【问题描述】:

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

【问题讨论】:

  • 嗯? Windows 正在为 memcpy 使用 DMA? :)
  • 据我所知是 DMA
  • DMA 假设与其他设备通信;>
  • 您可能想看看here 的一些想法。
  • 我认为假设memcpy() 具有线性复杂性是公平的,不是吗?

标签: c linux-kernel memcpy


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2022-01-13
    • 1970-01-01
    • 2014-06-24
    • 2010-12-20
    • 1970-01-01
    相关资源
    最近更新 更多