0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为您的 DSP 应用程序优化软件

张勇 来源:DengQilong 作者:DengQilong 2022-07-21 16:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

经验丰富的嵌入式系统程序员已经知道将代码优化到目标平台的大部分技巧,但是我们中的许多人相对较晚才接触到嵌入式系统编程,因为我们在限制较少的平台上学习了我们的编码技能。除了算法的一般效率之外,我们不必过多担心硬件细节,但在嵌入式应用程序中,我们需要更加小心,当然是为了性能,还要适应我们想要做的实际限制我们的硬件目标,尤其是可用内存的类型和大小。这些系统中的内存是您必须将所有软件和所有工作数据装入其中的手提箱,而且手提箱通常比您希望的要小得多。

作为一个额外的复杂因素,这些系统中通常有不止一种类型的内存。为了保持编程简单,您只看到一个逻辑内存空间,但某些地址范围可能以不同的方式在硬件中实现。一些空间可以实现为外部主存储器,可以通过一级或多级高速缓存从处理器访问。

一个常见的硬件优化将实现另一个范围作为紧耦合内存 (TCM)。它与处理器位于同一芯片内,通常紧邻该处理器。TCM 为存储在该内存中的任何指令或数据提供有保证的单时钟周期访问,这与标准内存不同,标准内存只有在指令/数据已经在缓存中时才能提供该性能;否则它必须进入主存储器,花费更多的时钟周期。TCM 是(内存映射)快速片上内存的一个例子;还有其他用途,例如用于图像处理中快速访问的图像缓冲区。

另一个考虑因素 - 使用片上存储器可降低功耗,而使用主存储器会消耗更多功率,这要归功于更高的电流来驱动所有这些封装引脚和芯片之间的电路板互连。这是低功耗应用中的一个重要考虑因素。

为什么不只使用大的片上存储器并从片外不频繁地加载/存储?不幸的是,大型片上存储器显着增加了芯片面积,并且随着芯片尺寸的增长,该设备变得更加昂贵且竞争力下降。系统架构师必须非常小心地平衡性能增益与此成本,考虑他们是否可能仅提供 16KB 的 TCM 与可能多达 1MB 的 TCM。这让程序员有很多责任要尽可能节俭和谨慎地使用或规划这些存储器(如果你在早期的芯片架构中有发言权),尤其是在涉及到你想要的功能或数据时使用快速内存。

您需要在这里做的一些事情是相当明显的;我假设您从基于 PC 的实现或为早期产品开发的实现开始。由于您显然对 DSP 感兴趣,因此您可能计划进行大量浮点计算。尽可能将数据类型从双精度减少到单精度;仅此一项就可能将数据大小减半。

临时内存池是一种一次性分配内存块以满足多个较小相关分配需求的方法,它在分配和释放速度方面很受欢迎,但在内存方面可能非常昂贵。尝试将所有这些合并到一个内存池中,只要它们不并行使用或硬着头皮返回堆上的传统malloc;这可能会慢一些,但在内存中效率会高很多。

特别是在 TCM 方面,分析代码以找到消耗最多运行时间的函数。您的策略将是从需求最高的功能开始,决定其中哪些可以适合 TCM。当然,这里必须有一些判断。如果一个高需求函数调用一个低需求函数,你能负担得起从缓存中拉出那个低需求函数吗?只要缓存命中率很高,或者偶尔较长的延迟是可以容忍的,这可能就可以了。

在支持 MP3 和 FLAC 解码器的音乐播放器中,较长的延迟可能是可以的。每首歌曲最多只能使用一个,因此它们不需要都驻留在快速内存中。接受延迟加载所需的任何内容,按需从片外加载到快速存储器中。

您希望将生产代码和数据压缩到尽可能小的大小,因此作为一般良好卫生的一点,请确保所有调试、分析和日志记录代码都包含在编译指示中,这些编译指示可以在生产构建中禁用。在 PC 代码中,您可能不会太担心这一点(特别是如果您想在生产软件上运行调试器),但在这里它是必不可少的。相反,您还应该确保在 禁用该代码的情况下运行所有回归测试。只需要在调试中忽略一个运行时依赖项即可创建下游噩梦。

同样,请确保您的软件中的每一段代码都在被使用。运行覆盖测试。如果您发现未使用的代码,则可能是早期版本的遗留问题,可能需要它。这里不是,所以你应该能够摆脱它,对吧?再次,你必须小心。也许这是对一个不能忽视的非常罕见的情况的错误处理。也许它应该包含在回归测试中,但直接触发太难了。您必须根据与架构师甚至硬件团队的讨论做出决定。

最后,与架构师(如果需要,还有营销人员)争论他们要求包含哪些功能是真正必要的。他们可能没有意识到,在您可能想到的每一次优化之后,手提箱仍然不会关闭。然后他们将不得不决定可能不得不牺牲他们真正想要的真正酷的功能。或者,也许他们必须回到业务团队并要求更大的片上存储器,使用您可以提供的关于这些存储器需要增长多少的信息。无论哪种方式,你都会看起来不错!

审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • dsp
    dsp
    +关注

    关注

    559

    文章

    8216

    浏览量

    364003
  • 嵌入式
    +关注

    关注

    5186

    文章

    20151

    浏览量

    328896
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【技术贴】解密艾飞天™DSP黑科技(三):特色算法与未来前瞻

    深度好文推荐优质的DSP产品需要承载优秀的DSP算法,方能体现产品的核心价值。数模龙头艾电子的艾飞天DSP特色算法,在提升产品性能和
    的头像 发表于 10-29 18:48 189次阅读
    【技术贴】解密艾<b class='flag-5'>为</b>飞天™<b class='flag-5'>DSP</b>黑科技(三):特色算法与未来前瞻

    【技术贴】解密艾飞天™DSP黑科技(二):产品迭代与性能飞跃

    深度好文推荐中国数模龙头艾电子推出的艾飞天DSP在产品演进过程中,始终致力于吸收先进的技术成果,并结合自身需求与产品特点,进行针对性的优化和创新,最终打造高度适配的产品解决方案。以
    的头像 发表于 10-29 18:47 194次阅读
    【技术贴】解密艾<b class='flag-5'>为</b>飞天™<b class='flag-5'>DSP</b>黑科技(二):产品迭代与性能飞跃

    如何在应用程序调试期间分析栈和堆使用情况

    随着 AMD Vitis 统一软件平台 2021.2 的发布,Vitis 引入了一个 Tcl 脚本,用于在应用程序运行的特定时间点协助查找栈和堆的内存使用情况。该脚本已延续到后续的 Vitis 版本
    的头像 发表于 10-24 16:54 589次阅读
    如何在<b class='flag-5'>应用程序</b>调试期间分析栈和堆使用情况

    学生适合使用的SOLIDWORKS 云应用程序

    随着科技的不断发展,计算机辅助设计(CAD)技术已经成为现代工程教育的重要组成部分。SOLIDWORKS作为一款CAD软件,其教育版云应用程序学生提供了强大而灵活的设计平台。本文将探讨
    的头像 发表于 09-15 10:39 528次阅读
    学生适合使用的SOLIDWORKS 云<b class='flag-5'>应用程序</b>

    华秋DFM软件升级时,提示“应用程序无法正常启动”怎么办?

    最近有用户反馈: 登录华秋DFM软件,点自动升级的时候有时会报错,导致无法正常升级。 其中有一种情况是: 软件自动升级时,弹出“应用程序无法正常启动(0xc000007b)。请单击“确定\"
    发表于 06-12 18:32

    FANUC程序传输软件的使用

    FANUC程序传输软件的使用
    发表于 06-04 16:23 0次下载

    VirtualLab:光栅的优化与分析

    光栅是光学工程师使用的最基本的工具。为了设计和分析这类组件,快速物理光学建模和设计软件VirtualLab Fusion用户提供了许多有用的工具。其中包括参数优化,以轻松优化系统,以
    发表于 05-23 08:49

    如何在 Raspberry Pi AI Camera 上构建开发人员提供实时的智能应用程序

    在这篇特邀文章中,我们的合作伙伴索尼公司的雷蒙娜-雷纳(RamonaRayner)将向展示如何快速探索不同的模型和人工智能功能,以及如何在RaspberryPi人工智能相机的基础上轻松构建应用程序
    的头像 发表于 03-25 09:37 615次阅读
    如何在 Raspberry Pi AI Camera 上构建<b class='flag-5'>为</b>开发人员提供实时的智能<b class='flag-5'>应用程序</b>!

    使用Ozone调试基于nRF9160 Zephyr应用程序

    Ozone是SEGGER免费的嵌入式软件调试器。它是一个强大的工具,可以让你深入了解嵌入式系统中发生的事情。它在调试nRF9160 Zephyr应用程序时特别有用。整理多个线程和多映像构建可能很困难,但这就是你想要的工具。
    的头像 发表于 02-25 17:07 1426次阅读
    使用Ozone调试基于nRF9160 Zephyr<b class='flag-5'>应用程序</b>

    AWTK-WEB 快速入门(5) - C 语言 WebSocket 应用程序

    导读WebSocket可以实现双向通信,适合实时通信场景。本文介绍一下使用C语言开发AWTK-WEB应用程序,并用WebSocket与服务器通讯。用AWTKDesigner新建一个应用程序先安装
    的头像 发表于 02-19 11:49 899次阅读
    AWTK-WEB 快速入门(5) - C 语言 WebSocket <b class='flag-5'>应用程序</b>

    基于HPM_SDK_ENV开发应用程序的升级处理

    基于HPM_SDK_ENV开发应用程序的方式HPM_SDK_ENV是先楫半导体MCU的Windows集成开发环境,其包含HPM_SDK,工具链,依赖工具(cmake,ninja,openocd等
    的头像 发表于 02-08 13:38 1446次阅读
    基于HPM_SDK_ENV开发<b class='flag-5'>应用程序</b>的升级处理

    AWTK-WEB 快速入门(4) - JS Http 应用程序

    导读XMLHttpRequest改变了Web应用程序与服务器交换数据的方式,fetch是其继任者。本文介绍一下如何使用JS语言开发AWTK-WEB应用程序,并用fetch访问远程数据。用AWTKDesigner新建一个应用程
    的头像 发表于 01-22 11:31 733次阅读
    AWTK-WEB 快速入门(4) - JS Http <b class='flag-5'>应用程序</b>

    ANACONDA——关于发布数据应用程序的新简单方法

    与 Anaconda 的云笔记本服务无缝集成,用户提供了一种轻松共享笔记本结果的方式,并让其他人也可以随意的访问它们。 下面我们来了解关于这项新功能的实际应用: 这项功能与 Panel 的多功能性相结合,将彻底改变发布数据应用程序
    的头像 发表于 01-17 11:39 644次阅读
    ANACONDA——关于发布数据<b class='flag-5'>应用程序</b>的新简单方法

    BQ78412应用程序编程接口

    电子发烧友网站提供《BQ78412应用程序编程接口.pdf》资料免费下载
    发表于 12-18 14:46 0次下载
    BQ78412<b class='flag-5'>应用程序</b>编程接口

    TAS2521应用程序参考指南

    电子发烧友网站提供《TAS2521应用程序参考指南.pdf》资料免费下载
    发表于 12-10 13:49 0次下载
    TAS2521<b class='flag-5'>应用程序</b>参考指南