linux中是否有任何异步memcpy函数?我希望它与 DMA 一起工作,并在完成时通知我。
问问题
3805 次
3 回答
8
据我所知,CPU 不能/不能对自己进行 DMA。因此,您需要总线上的外部硬件来为您解决问题。
但是,大多数硬件无法寻址所有物理内存,因此除非您在用例中对内存地址范围有非常严格的定义,否则不可能进行精确的 memcpy 克隆。否则内核将不得不将该块 memcpy 到您自己的内存块本身,这将首先杀死克隆 memcpy 的目的:)
但是,如果您想在不使用 memcpy 的情况下创建内存块的“克隆”(顺便说一句,这仍然是个坏主意,因为 DMA 内存访问通常比 CPU 慢),您可以将内存块发送到视频卡并将其拉回到另一个缓冲区。您甚至可以将块放入视频内存 (putbitmap()?:)) 并执行硬件加速 bitblt() 以动态创建副本。
你介意分享你的实际目标,以便人们可以想出更聪明/更好的技巧吗?
于 2009-11-25T16:26:42.370 回答
4
在多核处理器甚至只是具有超线程memcpy
的处理器上,您可以通过在单独的线程中执行通常的(同步)来获得您想要的东西。我并不是说这是一个好主意,只是指出显而易见的。
于 2009-11-25T16:54:06.793 回答
1
您可以使用 mremap 进行一些操作。或者您可以破解 FFmpeg 以对不同的帧使用不同的缓冲区。
于 2010-03-03T08:40:33.013 回答