打印

STM32 DMA的性能

[复制链接]
11683|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

使用特权

评论回复
5
香水城| | 2009-11-9 18:46 | 只看该作者
不错DMA数据传送是memory->memory,但是DMA控制器并不在memory之内,DMA控制器仍然要通过数据总线控制存储器。关于这一点,楼上可以看看STM32的内部框图。

使用特权

评论回复
6
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
7
byeyear| | 2009-11-10 17:52 | 只看该作者
还有就是流水线可以弥补取指/解码/执行带来的损失

使用特权

评论回复
8
seawwh|  楼主 | 2009-11-10 18:42 | 只看该作者
非常同意byeyear 的解释,顺便问一句,其他品牌的M3的DMA是否也不支持 burst 模式?

使用特权

评论回复
9
TuBie| | 2009-11-12 13:16 | 只看该作者
DMA并不一定快,只是提高了有效代码的运行效率。

使用特权

评论回复
10
wupeng1| | 2014-11-27 09:40 | 只看该作者
香水城 发表于 2009-11-5 13:27
DMA传送数据的速度不会比CPU直接传送数据快,因为总线频率没有变。

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

与不使用DMA的情况比,CPU的速度会不会也变慢呢?

使用特权

评论回复
11
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传输的目标和地址进行访问.还望香主指点迷津

使用特权

评论回复
12
monkeypony| | 2014-12-30 21:58 | 只看该作者
学习学习

使用特权

评论回复
13
wtfyxk| | 2015-2-28 16:03 | 只看该作者
lxyppc 发表于 2009-11-5 14:44
有一个专门讲DMA性能的手册的,你可以在官网上找到的
里面对DMA的性能描述得很清楚
AN2548 Using the STM ...

Lxyppc你好,能给个连接吗,关于官网上DMA性能分析的文档,我找了下,没找到,多谢!

使用特权

评论回复
14
w_u123| | 2016-3-22 14:56 | 只看该作者
DMA可以设置32位传输,相比memcpy的8位传输是不是快了呢

使用特权

评论回复
15
xtong533| | 2016-10-24 10:16 | 只看该作者
w_u123 发表于 2016-3-22 14:56
DMA可以设置32位传输,相比memcpy的8位传输是不是快了呢

一般自带的memcpy,都做过了优化,会解决数据对其问题,是memcpy达到最高效率

使用特权

评论回复
16
cornrn| | 2017-6-16 09:48 | 只看该作者
骚哒斯呢

使用特权

评论回复
17
huzi2099| | 2017-6-16 10:41 | 只看该作者
244259402 发表于 2014-12-23 13:25
我也有疑惑要请教一下香主,就是STM32的DMA在传输数据的时候CPU到底是在做什么?然后CPU可以做什么?可以继 ...

dma的时候在执行指令,这才是dma的重点,dma会在指令不占用系统总线时完成传输。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

145

主题

368

帖子

0

粉丝