STM32 DMA的性能

[复制链接]
13130|17
 楼主| seawwh 发表于 2009-11-5 12:10 | 显示全部楼层 |阅读模式
为了快速传送一个数据块,使用 DMA 传送程序(Mem to Mem 16bits) 测量了一下传送的时间,128个16b数据大约用了12us (72Mhz 时钟)。 换句话来说,STM32 DMA 性能为10M/s

   又使用memcpy 来比对一下,用时约4us ,显然memcpy 要快很多。

   btw, 在ST的手册里面未见对DMA性能的表述。
香水城 发表于 2009-11-5 13:27 | 显示全部楼层
DMA传送数据的速度不会比CPU直接传送数据快,因为总线频率没有变。

当CPU也在运行执行指令时,DMA传送数据的速度会比CPU直接传送数据慢,这是因为DMA与CPU分时使用同一条总线的缘故。
lxyppc 发表于 2009-11-5 14:44 | 显示全部楼层
为了快速传送一个数据块,使用 DMA 传送程序(Mem to Mem 16bits) 测量了一下传送的时间,128个16b数据大约用了12us (72Mhz 时钟)。 换句话来说,STM32 DMA 性能为10M/s

   又使用memcpy 来比对一下,用时约4us ,显 ...
seawwh 发表于 2009-11-5 12:10


有一个专门讲DMA性能的手册的,你可以在官网上找到的
里面对DMA的性能描述得很清楚
AN2548 Using the STM32F101xx and STM32F103xx DMA controller
byeyear 发表于 2009-11-9 18:38 | 显示全部楼层
DMA传送数据的速度不会比CPU直接传送数据快,因为总线频率没有变。

当CPU也在运行执行指令时,DMA传送数据的速度会比CPU直接传送数据慢,这是因为DMA与CPU分时使用同一条总线的缘故。 ...
香水城 发表于 2009-11-5 13:27


这个说法有点问题
DMA数据传送是memory->memory
memcpy是memory -> cpu_internal_register -> memory

memcpy快应该是因为1. memcpy采用了ldm/stm指令,这个对提高速度很有帮助 2. 总线仲裁偏袒cpu core
香水城 发表于 2009-11-9 18:46 | 显示全部楼层
不错DMA数据传送是memory->memory,但是DMA控制器并不在memory之内,DMA控制器仍然要通过数据总线控制存储器。关于这一点,楼上可以看看STM32的内部框图。
byeyear 发表于 2009-11-10 17:51 | 显示全部楼层
恩............ DMA控制器并不在memory之内?我想你的意思是指MASTER DMA吧,像PCI那样。但即使是legacy dma,由dma controller通过硬件的方式存取memory在通常情况下也应该比cpu快,因为不需要取指/解码/执行这样的流程。不过stm32的controller不支持bust mode确实对其速度有很大影响,而ldm/stm指令实际上起到了bust mode的作用,可以在一次取指/解码/执行过程中操作多个数据。如果controller支持burst,相信就可以超越memcpy的速度了。目前来看stm32 dma的速度确实不如memcpy,其最大的好处在于cpu可以不参与其过程。

评分

参与人数 1威望 +8 收起 理由
香水城 + 8

查看全部评分

byeyear 发表于 2009-11-10 17:52 | 显示全部楼层
还有就是流水线可以弥补取指/解码/执行带来的损失
 楼主| seawwh 发表于 2009-11-10 18:42 | 显示全部楼层
非常同意byeyear 的解释,顺便问一句,其他品牌的M3的DMA是否也不支持 burst 模式?
TuBie 发表于 2009-11-12 13:16 | 显示全部楼层
DMA并不一定快,只是提高了有效代码的运行效率。
wupeng1 发表于 2014-11-27 09:40 | 显示全部楼层
香水城 发表于 2009-11-5 13:27
DMA传送数据的速度不会比CPU直接传送数据快,因为总线频率没有变。

当CPU也在运行执行指令时,DMA传送数据 ...

与不使用DMA的情况比,CPU的速度会不会也变慢呢?
244259402 发表于 2014-12-23 13:25 | 显示全部楼层
香水城 发表于 2009-11-9 18:46
不错DMA数据传送是memory->memory,但是DMA控制器并不在memory之内,DMA控制器仍然要通过数据总线控制存储 ...

我也有疑惑要请教一下香主,就是STM32的DMA在传输数据的时候CPU到底是在做什么?然后CPU可以做什么?可以继续运行程序吗?或者是说只能做运算?或者又是怎样一个状态呢?最近查资料感觉大家说得都不一样,有的说因为总线仲裁所以DMA在传输数据的过程中CPU不能访问数据总线,有的又说DMA在传输数据的过程中,CPU可以继续运行程序,只是不能对DMA传输的目标和地址进行访问.还望香主指点迷津
monkeypony 发表于 2014-12-30 21:58 | 显示全部楼层
学习学习
wtfyxk 发表于 2015-2-28 16:03 | 显示全部楼层
lxyppc 发表于 2009-11-5 14:44
有一个专门讲DMA性能的手册的,你可以在官网上找到的
里面对DMA的性能描述得很清楚
AN2548 Using the STM ...

Lxyppc你好,能给个连接吗,关于官网上DMA性能分析的文档,我找了下,没找到,多谢!
w_u123 发表于 2016-3-22 14:56 | 显示全部楼层
DMA可以设置32位传输,相比memcpy的8位传输是不是快了呢
xtong533 发表于 2016-10-24 10:16 | 显示全部楼层
w_u123 发表于 2016-3-22 14:56
DMA可以设置32位传输,相比memcpy的8位传输是不是快了呢

一般自带的memcpy,都做过了优化,会解决数据对其问题,是memcpy达到最高效率
cornrn 发表于 2017-6-16 09:48 | 显示全部楼层
骚哒斯呢
huzi2099 发表于 2017-6-16 10:41 | 显示全部楼层
244259402 发表于 2014-12-23 13:25
我也有疑惑要请教一下香主,就是STM32的DMA在传输数据的时候CPU到底是在做什么?然后CPU可以做什么?可以继 ...

dma的时候在执行指令,这才是dma的重点,dma会在指令不占用系统总线时完成传输。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

145

主题

368

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部