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

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

3天内不再提示

70行代码来打造MCU性能分析利器!

5RJg_mcuworld 来源:未知 作者:胡薇 2018-07-12 14:52 次阅读

前面小编对纯软件性能分析的理论与实践的分享,希望给大家找到了豪华待遇的感觉。当然了,自己当土豪爽一下也就过去了,但是性能的问题还摆在那里等待解决,接下来怎么办呢?

改善性能可以改进代码的写法或算法,这就要结合实际问题,各显神通了。但毕竟大牛人是来仰望的,咱们还需要更加立竿见影的招数,那就是给CPU占用最大的一些函数提供VIP的待遇,把它们放在VIP区中——执行性能更高的存储器。

以前介绍性能分析时曾提到,VIP区其实也是分等级的。不同的单片机,在存储器的设计,总线连接方式,访问控制策略都各有特色,对性能的影响也不一而足。嵌入式IoT的开发,处处彰显出碎片化和粉末化的特色,这可让人怎么整?

幸好,即使世界这么纷纷扰扰,还是有大类可循的。小编也试着结合NXPLPC54000系列和i.MX RT1050系列,给各类VIP区分了5类VIP特权等级。

VIP:C级(小V)

这主要是针对外置QSPI Flash的升级。

对于LPC540xx和LPC18x0/43x0系列,它们没有内置Flash。如果跑不动了,可以考虑升级到其对应的有内置Flash的pin2pin型号,比如LPC546xx,LPC18xx/43xx(尾号非0)。内置Flash跑血常规(CoreMark)的性能一般在外置QSPI的1.5倍以上,对于查表较多的程序甚至在数倍以上。内部Flash的带宽往往在128位甚至256位,还带有专用于加速循环结构的特制小cache,执行程序的性能还是很棒的。

为了呈现更高的性价比,i.MX RT系列全部没有内置Flash。不过,i.MX RT的FlexSPI支持高性能的DDR模式、双Flash交火、以及8线Flash模式。就拿EVK上的hyper flash为例,可高达332MB/s,而一般的QSPI Flash通常不过60MB/s。此外,i.MX RT的SEMC对于从SDRAM执行代码的性能也比较给力,如果系统中存在SDRAM,也可以使一些数据表和代码放在SDRAM中。

VIP:B级(中V)

各型Flash和SDRAM对于小循环体的性能尽管还可以,但是当程序跳转不规则,或者顺序结构较长时,以及数据访问随机性强时,性能的表现就变得很不均匀,让人有“虽然我表达不了太多的爱,唯有好多眼泪流出来”的感觉。

这个时候,可以使用单片机片上的系统RAM。对于LPC54系列的Cortex-M4/M0+单片机,可以放在内存地址为0x2000-0000开头的RAM中,对于i.MX RT系列则是地址为0x2020-0000的OCRAM中。这些RAM的工作频率和随机访问性能比Flash好得很多。但是因为在这个地址范围使用的AHB (LPC)或AXI (i.MX RT)系统总线的启动时序开销大,总线往往又比较忙,还要和诸多带DMA的总线主机抢带宽,性能加速可能得不到保证,因此充其量也就算是中V级吧。

VIP:A级(大V)

和中V级相比,大V的待遇就更好了,有了专属的紧密耦合RAM区。

以LPC5411x为例,它有32KB的”SRAMX”,这块SRAMX和192KB的全部容量相比只占1/6,但绝对配得上大V的待遇。它直接连接到Cortex-M4的I-Code和D-Code总线上。这两条总线也是“特供”于快速代码执行的绿色通道,其它总线主设备是没资格用的。

再看i.MX RT,它的Cortex-M7内核更是有过之而无不及,把I-Code和D-Code升级到64位的ITCM(指令紧密耦合存储器)和DTCM(数据紧密耦合存储器),并且片上的512KB内存可以自由分割,全部配置成ITCM和DTCM也可以。那没有了其它RAM,外设要访问怎么办呢?Cortex-M7留了个小后门——AHB-Slave给其它DMA主机访问TCM,当然是看M7脸色行事。

总之,大V待遇对于大多数程序代码已经相当有面儿了,性能提升也是杠杠的!

VIP:S级(超V)啥,还有超V级?难道还有比TCM更快的,莫非小编你疯到想把R0-R14也给卖了?

倒也不是,超V级其实可以看作是上述VIP的组合,给最关键的模块提供服务,占用多块RAM。比如一个压缩jpeg的模块,它既有代码又有只读数据。如果把代码与只读数据全放在一块RAM,就不能发挥M4/M7双总线的优势,比如没法取指令的同时访问数据。小编于是把代码放ITCM,只读数据放DTCM,相当于它自己左手一个右手一个拥抱了整个芯片中性能最强的两块RAM,让600MHz的M7火力全开,跑到QVGA分辨率下60帧每秒以上的图片压缩性能。

VIP:PS级(公共超V)

(仅适用于Cortex-M7)

在Cortex-M7内核的i.MX RT系列中,支持指令高速缓存(I-Cache)和数据高速缓存(D-Cache),各有32KB。这两个Cache的性能完全是TCM级别的。这是一项超V级水准的平民福利,献给全部没有享受到大V和超V待遇的代码和数据,就称作公共超V级吧。

有趣的是,它是全自动的——不管是什么代码和数据,上镜率越高,就越有机会多享受超V级待遇。但若是如果什么时候起受冷落了,就最终会被扫出门。

打个不严谨的比方,这就好比假设高铁中以商务座的标准建餐车,即使没买一等座和商务座,只要抢到了餐车座席吃饭,吃饭期间也享受商务座待遇。只不过,若是吃完饭想再歇会,又没空位子了,那就祈祷别人不要来吃饭吧,否则就会被赶走。

因此,这项复用型超V待遇是按需分配的。值得注意的是,在替换cache内容时会花时间,既对确定性产生影响,也降低平均性能。所以虽然比超V级弱一点,但它把福利普照给公众,这是前面任何VIP特权也提供不了的。

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

    关注

    146

    文章

    17148

    浏览量

    351178
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10863

    浏览量

    211740

原文标题:改善MCU性能,可以为一些函数提供VIP待遇!

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何简单快速的打造MCU性能分析利器的详细资料概述

    说出来不确定大家信不信,实现起来也就70算上大括号的代码,是不是很激动人心? 言归正传,再小的程序,也是数据结构+代码。咱们先来由表及
    的头像 发表于 07-05 09:23 4694次阅读
    如何简单快速的<b class='flag-5'>来</b><b class='flag-5'>打造</b><b class='flag-5'>MCU</b><b class='flag-5'>性能</b><b class='flag-5'>分析</b><b class='flag-5'>利器</b>的详细资料概述

    8位MCU——且且珍惜!

    细分产品啊!而且我们做工程研发的,只要性能够用就可以了,成本节约,用好用尽器件的每项性能才是真正该考虑的。很多8位MCU性能也很强大的。例如,世强研讨会上推荐的Silicon Lab
    发表于 06-26 17:32

    代码致敬,寻找你的第83

    那天代码评审现场,看到某代码片段最后结尾,多隆突然补上一句,往上翻看下第83代码一般都是几百,他看到最后,居然还记得第83
    发表于 05-04 16:36

    代码致敬,寻找你的第83

    结尾,多隆突然补上一句,往上翻看下第83代码一般都是几百,他看到最后,居然还记得第83的一个细微瑕疵,这得是对代码怀着怎样的敬畏之心
    发表于 05-07 17:32

    消灭EMC三大利器的原理

    来源:互联网滤波电容器、共模电感、磁珠在 EMC 设计电路中是常见的身影,也是消灭电磁干扰的三大利器。文章从设计中详细分析了消灭 EMC 三大利器的原理。
    发表于 10-22 08:55

    探求NVIDIA GPU极限性能利器

    1、探求 NVIDIA GPU 极限性能利器  在通常的 CUDA 编程中,用户主要通过 CUDA C/C++ 或 python 语言实现 CUDA 功能的调用。在 NVIDIA 对 CUDA C
    发表于 10-11 14:35

    如何从SPC584B70 MCU的Simulink模型生成C代码

    在我们的项目中,我们选择了 SPC584B70 作为 MCU。您能否提供帮助以支持使用 MATLAB/Simulink 为 SPC584B70 MCU 进行基于模型的设计和
    发表于 12-30 07:50

    全新代码生成工具(MG32CoGen 2.0)来啦! 轻松开发MCU最佳利器!

    全新MG32CoGen 2.0啦! 轻松开发MCU最佳利器! MG32CoGen是什么?“能否缩短开发时间?”是客户挑选MCU的主要考虑因素之一,为了协助
    发表于 10-23 09:50

    用于MPLAB X IDE代码性能分析插件的工作原理和代码性能分析参考

    MPLAB X IDE提供收集有关C代码函数的函数级性能分析(Function Level Profiling, FLP)数据的功能。但是,该数据无法在未安装MPLAB X IDE插件——代码
    发表于 06-11 04:28 11次下载
    用于MPLAB X IDE<b class='flag-5'>代码</b><b class='flag-5'>性能</b><b class='flag-5'>分析</b>插件的工作原理和<b class='flag-5'>代码</b><b class='flag-5'>性能</b><b class='flag-5'>分析</b>参考

    Python代码性能分析的命令合集

    。注意,在本教程中,我建议使用 Anaconda。1.分析代码要检查一 python 代码的执行时间,请使用**%timeit**。下
    发表于 11-25 10:43 10次下载

    用于MPLABX IDE的代码性能分析插件

    MPLAB X IDE提供收集有关C代码函数的函数级性能分析(Function Level Profiling,FLP)数据的功能。但是,该数据无法在未安装MPLAB X IDE插件——代码
    发表于 05-12 10:38 15次下载

    MCU开发代码量、数据量分析

      在使用MCU过程中,工程师们往往会格外关注代码体积,或者数据量占用情况。在MCU开发领域,硬件资源严苛是该领域的一大特点。在严苛条件下,设计出满足目标、程序运行稳定、体积小的程序代码
    发表于 10-28 18:06 7次下载
    <b class='flag-5'>MCU</b>开发<b class='flag-5'>代码</b>量、数据量<b class='flag-5'>分析</b>

    几种检查代码质量的利器介绍

    工欲善其事,必先利其器,因此,这篇文章给大家介绍几种检查代码质量的利器,Alibaba Java Coding Guidelines、CheckStyle、PMD、FindBugs
    的头像 发表于 11-02 11:04 1346次阅读

    怎么用模块观察代码性能表现

    这个神奇的模块能让你实时可视化地观察Python程序执行时每一代码性能表现。 左边的数字是每行被击中的次数。条形显示最近被击中的次数,较长的条意味着其被击中的次数更多。 颜色的深浅代表着命中
    的头像 发表于 10-21 10:53 353次阅读
    怎么用模块<b class='flag-5'>来</b>观察<b class='flag-5'>代码</b><b class='flag-5'>性能</b>表现

    键盘模组ATE手感测试机:打造舒适键盘的关键利器

    键盘模组ATE手感测试机:打造舒适键盘的关键利器?|深圳磐石
    的头像 发表于 12-13 09:11 891次阅读
    键盘模组ATE手感测试机:<b class='flag-5'>打造</b>舒适键盘的关键<b class='flag-5'>利器</b>