This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

为什么用了DMA之后速度不快



hi,ti专家们:

 

我在优化算法时候,用DMA搬数据,但是速度没有提高,反而更慢,用了ping pong的。

一般什么情况下,不适宜用DMA啊?

  • 你好,

    1. 大数据量搬移

    2.由于配置EDMA需要时间,如果可以,请使用Link

    3.EDMA文档里有介绍什么情况下EDMA效率最高,请也参考。

  • 对于EDMA3来说,qdma和edma的接口好像是完全一样的啊,从应用层角度,看不出

    两者有实质区别,从调用角度看的。

  • Chris Meng 说:

    你好,

    1. 大数据量搬移

    2.由于配置EDMA需要时间,如果可以,请使用Link

    3.EDMA文档里有介绍什么情况下EDMA效率最高,请也参考。

    1.多大算大数据量呢?
    2.使用link 但是, 我每次启动传输的地址不一样的。还是要重新更新地址的。
  • 你好,

    1. Link的参数更新是会隐藏在上一个传输中的。

    2. 如果需要修改参数表,建议只修改改变的那几个参数,不要全部写一遍。

    3. 什么叫大量我也没有定数。EDMA是传输是配置EDMA时间+传输时间。你可以测试一下,看你系统上传输多少byte后,比memcpy效率高。

  • Chris Meng 说:

    你好,

    2. 如果需要修改参数表,建议只修改改变的那几个参数,不要全部写一遍。

    3ks!Chis Meng:

    我尝试了你的第二条建议,我每次只改变 src 和dst  地址,其他的都不重新配置了。

    性能有所改善了,当我尝试去掉所有不必要的,没有改变参数的时候。出现了问题。

          不知道为什么,非要每次都要调用EDMA3_DRV_setTransferPaRams();里面的

    a cnt  bcnt  ccnt,因为这几个参数其实也没有改变过的,但是,如果不调用这个配置,

     程序就会死在DMA_wait里面,一直等待callback 返回。如果每次都配置,程序不会死,

    但是程序会很慢。

    谢谢!

    Best Regards!

  • 还有,我现在用DMA的函数,在程序中调用了很多次,如果我每次都requestChannel,

    然后DMA传输完成之后,释放freechannel。导致效率很低。

       如何解决,多次调用时候,创建和释放DMA通道带来的性能损失。

    Best Regards!