gpt4 book ai didi

c - Linux 中的 DMA 如何处理 memcpy

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:17 26 4
gpt4 key购买 nike

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

最佳答案

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

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

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

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

关于c - Linux 中的 DMA 如何处理 memcpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17503753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com