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

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

时间:2026-08-20
编辑者:创龙科技

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


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


1787204659515920.png


共享内存 + RPMsg方案


异构多核如何实现高效传输数据?核心思想是将数据与控制分离,即共享内存+ RPMsg机制:


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


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


1787204810134459.jpg


拷贝方式怎么选


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等不同数据量的读写带宽。


1787204960457438.png


以512KByte、8MByte传输数据量为例,三种内存拷贝方式的读写带宽如下:


1787205023911941.jpg


经过本次测试可知:


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


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


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


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


客服
提交成功