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.

[参考译文] 编译器:存储器访问的优化方法

Guru**** 2008950 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/568172/compiler-optimization-method-for-memory-access

工具/软件:TI C/C++编译器

大家好、

我在 TDA 2x、VisionSDK (2.10) Linux 上工作。

IAM 尝试优化 DSP 上花费约400ms 的循环。 环路的工作方式如下

(i=0;i<1800*450;i++)

mupFact = i%1800;

*(dstptr++)=*(srcptr++)* multipleArr[mupFact];//对于 R 组件

*(dstptr++)=*(srcptr++)* multipleArr[mupFact];//对于 G 组件

*(dstptr++)=*(srcptr)* multipleArr[mupFact];//对于 B 组件

}  

请指导我优化此类循环。我尝试了各种 C 优化技术、但无法实现任何增益。此处的 srctr 根据查找表计算、因此是随机数据。

我们如何使用 DMA 或任何其他 DSP 优化技术来实现这一目标。

此致、

Neha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    首先考虑性能是否由存储器访问决定。  例如、确保已启用缓存。  我们的编译器专家不了解这种系统效果。  这就是将此主题移至 C6000器件论坛的原因。  

    一旦您确信内存访问得到了正确处理,请在 wiki 上完成本教程: C6000 CGT 优化实验室 。  您可以利用该文章中显示的许多技术。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我看到的一件事是模数操作、除数不是2的幂。 这将以 remu()调用结束,该调用又会禁用循环流水线。 这是为了简要说明您观察到的不良性能。 但是、为了修复您的环路、我会像 George 那样为您布线。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对、%1800需要很长时间。 尝试添加一个外部环路 j=0;j<450。 则 mupFact 将仅为=I 即、i=0;i<1800。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    oops,mupFact = j,而不是 i,当然。