【发布时间】:2010-12-20 08:39:06
【问题描述】:
linux中有没有异步memcpy函数?我希望它与 DMA 一起工作,并在完成时通知我。
【问题讨论】:
-
ARM9处理器,飞思卡尔iMX233微控制器。
linux中有没有异步memcpy函数?我希望它与 DMA 一起工作,并在完成时通知我。
【问题讨论】:
据我所知,CPU 不能/不能对自己进行 DMA。因此,您需要总线上的外部硬件来为您解决问题。
但是,大多数硬件无法寻址所有物理内存,因此除非您在用例中对内存地址范围进行了非常严格的定义,否则无法进行精确的 memcpy 克隆。否则内核将不得不将该块存储到您自己的内存块本身,这将首先破坏克隆 memcpy 的目的:)
但是,如果您想在不使用 memcpy 的情况下创建内存块的“克隆”(顺便说一句,这仍然是个坏主意,因为 DMA 内存访问通常比 CPU 慢),您可以将内存块发送到视频卡并将其拉回另一个缓冲区。您甚至可以将块放入视频内存 (putbitmap()?:)) 并执行硬件加速 bitblt() 以动态创建副本。
您介意分享您的实际目标,以便人们可以想出更聪明/更好的技巧吗?
【讨论】:
在多核处理器上,甚至只是带有hyper-threading 的处理器上,您可以通过在单独的线程中执行通常的(同步)memcpy 来获得您想要的东西。我并不是说这是一个好主意,只是指出显而易见的。
【讨论】:
您可以使用 mremap 进行一些操作。 或者你可以破解 FFmpeg 来为不同的帧使用不同的缓冲区。
【讨论】: