陈工-创龙科技 发表于 2026-8-28 08:54:20

DMA、NEON、CPU这3种拷贝方式,怎么选

大家好,我是发际线守护者,一名坚守「一般情况不加班」原则的软件工程师。搞工控异构多核的兄弟们,核间通信传输带宽总是低,是不是很头疼?

在此推荐基于共享内存的核间通信机制,数据直接映射共享,配合RPMsg机制,具有“零拷贝”“高带宽”的显著优势,解决核间通信传输带宽低的难题!

https://file1.elecfans.com/web3/M00/74/7A/wKgZPGqQ2k6Adr-NAA5tMRjmvLw400.png
▍共享内存 + RPMsg方案
异构多核如何实现高效传输数据?核心思想是将数据与控制分离,即共享内存+ RPMsg机制:


(1)数据层:主核(Master Core)与从核(Remote Core)均可直接读写DDR中预留的共享内存区域,零拷贝完成大数据传输。


(2)控制层:RPMsg仅作为异步通知信号,告知对端“数据已就绪”,不承载数据本身。

https://file1.elecfans.com/web3/M00/74/7A/wKgZPGqQ2mCAVc8vAAIjxB4MADk819.png
▍拷贝方式怎么选
DMA、NEON、CPU这3种拷贝方式各有优劣,实际开发中无需盲目追求高带宽,应根据使用场景、资源占用情况进行选择:

DMA:传输稳定,CPU零负担

依靠专用硬件控制器搬运数据,不占用CPU资源,适合大数据量、高带宽需求的应用场景。

NEON:无DMA时的备选,CPU同样零负担

一般处理器的DMA控制器资源有限,在没有多余DMA控制器时,NEON方式是另一个不错的选择,它是CPU的辅助核,同样不占用CPU资源,利用CPU的单指令多数据流技术,实现并行数据搬运。

CPU:实现简单,但需消耗CPU资源

无需额外硬件资源,适用于小数据量、性能要求不高的简单应用,缺点是搬运过程会持续占用CPU资源,不适合复杂应用。

▍实测带宽演示
基于创龙科技全志T153工业评估板,实测DMA、NEON、CPU三种内存读写方式,在共享内存核间通信机制下的传输性能表现。

执行如下命令,测试2KByte、4KByte…8MByte等不同数据量的读写带宽。

https://file1.elecfans.com/web3/M00/74/78/wKgZO2qQ2oyAauWWAAIPeivKaRk081.png
以512KByte、8MByte传输数据量为例,三种内存拷贝方式的读写带宽如下:

https://file1.elecfans.com/web3/M00/74/7A/wKgZPGqQ2qGAGdH4AADAV_qnhgE102.png
经过本次测试可知:

(1)DMA方式读写性能均衡、带宽稳定,大小块传输表现都很平稳。

(2)NEON、CPU方式在写带宽上表现出色,但读带宽偏低。这是由于写操作可借助写合并机制提升写带宽,能将多个写操作合并为单次、大数据传输,减少总线事务,因此写带宽表现亮眼。而读操作无法合并,每次读取需等待内存响应,导致读带宽显著偏低。

(3)随着数据量增大,NEON与CPU方式的写带宽明显下滑,而DMA方式性能影响较小。

通过共享内存 + RPMsg机制,解决了核间通信时传输带宽低的问题,让数据直接在共享内存中零拷贝传输,传输带宽得到质的飞跃!

页: [1]
查看完整版本: DMA、NEON、CPU这3种拷贝方式,怎么选

Baidu
map