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

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

3天内不再提示

MCU软件基准测试实用技巧:编译器优化能力评测指引

li5236 来源:IAR Systems 作者:IAR Systems 2022-03-29 15:42 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

MCU开发和应用中,工程师都需要进行MCU的能力测试,通用的做法是用Benchmark(基准)程序来测试。然而,在做基准测试时,编译器的优化能力也在测试结果中有较为明显的影响,同一套硬件平台,选用不同的编译器和不同的优化选项,可能得出的结果相差较大。

为了最大程度释放MCU的性能,在基准测试中取得最理想的结果,往往需要工程师不仅对自身的硬件比较了解,更需要深入了解编译器的优化原理,并灵活应用,才能在基准测试中发挥出MCU的全部性能。IAR Systems作为全球知名嵌入式工具厂商,其编译器在优化能力上有独特的优势,MCU配合IAR的编译器往往能够得出较好的基准测试结果。

本文以已在MCU领域内广泛使用的IAR Embedded Workbench开发工具套件为例,来分享MCU软件基准测试应该注意的项目和以下技巧,从而帮助读者能够去生成业内最高效和最完备的代码。利用以下项目和设置,工程师可以精准调整优化等级,最大限度地进行测试和提升所开发和应用代码的性能。

poYBAGJCuFuAbhGVAADZAWuUulQ949.png

选择代码尺寸还是执行速度

利用IAR Embedded Workbench等开发工具套件,工程师可以对整个工程范围或对单个文件设定优化级别和类型。在源代码中,甚至可以对单个函数使用 #pragma optimize 指令来完成此操作。

优化的目的是减少代码尺寸和提高执行速度。如果只能满足其中一个目标,编译器会根据用户指定的设置进行优先处理。因此,在实际的软件基准测试中,工程师可以尝试各种设置来获得最佳效果。举个例子,由于函数内联更侧重于执行速度的优化,相较于采用通用代码尺寸优化设置,采用函数内联与通用代码执行速度优化设置将获得更小的程序代码

pYYBAGJCuFuAB1K_AADejuqRXu0400.png

选择小型内存模型

为了能够充分地发挥MCU器件的性能和减少应用中的问题,软件开发必须充分考虑MCU器件的内存等资源限制,因此需要为目标器件和项目选择尽可能小的内存模型。小型内存模型的优点包括:

· 更小尺寸的地址

· 更小尺寸的指令

· 更小尺寸的指针

· 效率更高

· 代码更少

诸如IAR Embedded Workbench这样的成熟的开发工具套件也集成了相关评估功能,可以对内存模型进行多方面评估,从而帮助工程师去测试软件的规模和优化设计。

选择合适的运行时库

默认情况下,运行时库是以最高代码尺寸优化级别进行编译的。如果您想要对速度进行优化,请考虑重新编译生成这些库。可以通过配置选项来设置某些标准库功能(如语言环境、文件描述符和多字节)最适合的级别。

根据具体需求,在库选项中选择 scanf 输入和 printf 的格式。默认选项并非最小格式。

poYBAGJCuFuAPyqLAAExte1Juaw740.png

pYYBAGJCuFuAZipbAACjCF3a-w8595.png

使用正确的数据类型

数据类型与代码尺寸或者执行速度息息相关,因此需要利用开发工具来对数据类型进行观察和分析,以便找到适合硬件资源的类型。在IAR Embedded Workbench开发工具套件中,开发人员可以从以下几个方面着手进行测试和优化:

· 选择最适合您应用程序的的数据类型尺寸

· 尽量使用无符号字符型,这样就能执行位操作而不是算术操作

poYBAGJCuFyALLTJAAAb1fU56_I713.png

检查目标特定选项

检查能提高性能的目标特定选项,这在日常的MCU设计和应用开发中往往需要工程师具有相当的经验,但是通过使用诸如IAR Embedded Workbench这类成熟的开发工具套件则可以快速而完善地完成必要的性能检查:

· 高效的寻址模式——可实现高效的内存访问

· 使用特定的寄存器来处理常量/变量——代码在寄存器上的操作效率比在内存上更高

· 偶对齐函数入口——偶对齐指令可以提高速度

· 字节对齐对象——更小的存储空间需求,但可能生成更大的代码尺寸

使用基准测试相关代码

所有的MCU开发工具都应该提供基准测试相关代码,但是成熟的通用开发工具的代码库都是这些提供商在相关领域经验的浓缩,因此更为全面和高效。其中的重要经验包括:

· 嵌入式系统的基准测试应该针对嵌入式程序的特点来设计。

· 实际的应用程序通常也适用于基准测试,但需要确保代码的可执行性。链接器会删除未引用的代码和变量,但并非所有的链接器都具备这种功能。

· 确保测试代码不受测试工具(测试相关函数)的影响。以下示例其实是对 printf() (测试相关函数)进行了基准测试。

pYYBAGJCuFyAUBB2AAA2GYGYZw8139.png

· 比较链接后生成的代码。一款编译器可能会采用内联代码,而另一款编译器可能会调用库。

· 充分了解用于执行基准测试的应用代码!

总结

通过使用诸如IAR Embedded Workbench这类成熟的开发工具套件,发挥其在几十年全球性应用中行汇聚和迭代出的知识,MCU设计和应用开发工程师可以快速完成上述这些必要的性能测试,同时也可以进一步有针对性地发挥MCU的性能,从而实现目标器件最优化的、软硬件合一的功能。

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

    关注

    147

    文章

    19111

    浏览量

    403366
  • 编译器
    +关注

    关注

    1

    文章

    1672

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    单片机开发功能安全中编译器

    的问题是,防御性编码和外部数据访问等实践并不属于编译器认可的领域。例如,C和C ++都没有为内存损坏留出任何余地,因此,除非在没有这种损坏的情况下可以访问旨在防止内存损坏的代码,否则在对代码进行优化
    发表于 12-01 06:44

    性能突破 | SpacemiT-X60 在 LLVM 编译器上实现 16% 显著提升

    2025年10月,在北美RISC-V峰会上,Igalia编译器工程师Mikhail发表专题演讲《Unlocking15%MorePerformance
    的头像 发表于 11-21 18:04 9097次阅读
    性能突破 | SpacemiT-X60 在 LLVM <b class='flag-5'>编译器</b>上实现 16% 显著提升

    开源鸿蒙技术大会2025丨编译器与编程语言分论坛:语言驱动系统创新,编译赋能生态繁荣

    在万物智联的时代背景下,操作系统底层能力的构建离不开编程语言与编译器的关键支撑。作为开源鸿蒙生态的核心技术,语言设计与编译器、虚拟机实现的进步直接关系到开发效率、运行性能与系统安全。本次分论坛聚焦
    的头像 发表于 11-20 17:24 1136次阅读
    开源鸿蒙技术大会2025丨<b class='flag-5'>编译器</b>与编程语言分论坛:语言驱动系统创新,<b class='flag-5'>编译</b>赋能生态繁荣

    通过优化代码来提高MCU运行效率

    调用开销。 使用 const 和 volatile 关键字,帮助编译器进行更好的优化。 数据类型选择 使用与MCU字长匹配的数据类型。在32位MCU上,int 和 uint32_t
    发表于 11-12 08:21

    Coremark测试集分析与性能优化思路

    实际上暴露了编译器优化工作负载的能力,而不是MCU或CPU的功能”的问题。因此要创建不能在编译时计算而必须在运行时计算的工作,因此coreM
    发表于 10-24 08:21

    提高RISC-V在Drystone测试中得分的方法

    编译器如何优化生成的机器代码也会影响Drystone的得分。优化编译器能够生成更高效的机器代码,从而提高性能。 提高 RISC-V 在 Drystone
    发表于 10-21 13:58

    请问如何在keil μVision 5上进行ARM编译器的代码优化

    如何在keil μVision 5上进行ARM编译器的代码优化
    发表于 08-20 07:37

    如何在Keil中将NuMicro BSP从Arm编译器5迁移到编译器6?

    在Keil中将NuMicro BSP从Arm编译器5迁移到编译器6!
    发表于 08-20 06:29

    边缘设备AI部署:编译器如何实现轻量化与高性能?

    、ASIC等)上高效执行的机器代码。AI编译器在AI模型的部署和优化中扮演着关键角色,能够显著提升模型的运行效率和性能。   AI编译器的主要功能   AI编译器的主要功能包括模型
    的头像 发表于 07-06 05:49 6912次阅读

    编译器功能安全验证的关键要素

    在汽车、工业、医疗等安全关键型应用中,确保功能安全合规性需要严格的工具链验证。开发安全关键型软件的企业必须遵守ISO 26262、IEC 61508、ISO 62304等国际标准对编译器工具链进行全面的验证。
    的头像 发表于 07-05 13:37 1685次阅读

    兆松科技发布高性能RISC-V编译器ZCC 4.0.0版本

    近日,兆松科技(武汉)有限公司(以下简称“兆松科技”)宣布正式发布高性能 RISC-V 编译器 ZCC 4.0.0 版本。新版本在性能优化、厂商自定义指令支持和软件库等方面实现全面升级,并同步推出
    的头像 发表于 06-27 14:48 3716次阅读
    兆松科技发布高性能RISC-V<b class='flag-5'>编译器</b>ZCC 4.0.0版本

    兆松科技ZCC编译器全面支持芯来科技NA系列处理

    近日,兆松科技(武汉)有限公司(以下简称“兆松科技”)宣布正式发布高性能RISC-V编译器ZCC 4.0.0版本。
    的头像 发表于 06-11 09:56 1979次阅读

    RISC-V架构下的编译器自动向量化

    高性能算力生态的建设,正投入编译器自动向量化优化等多项关键技术,全面助力RISC-V的高性能发展。RISC-V向量设计SpacemiT在现代CPU中,向量支持是算力的
    的头像 发表于 06-06 16:59 1428次阅读
    RISC-V架构下的<b class='flag-5'>编译器</b>自动向量化

    RVCT编译器是否比GNU的编译器的代码执行速度更快?

    使用FX3S遇到了RVCT编译器的问题。 1、在SDK的release note中有支持RVCT的描述, 但是在EZ USB Suite的设置中没有找到RVCT的选项, 请问支持的具体版本
    发表于 05-08 07:49

    HighTec编译器全面支持芯驰科技车规MCU芯片E3650

    近日,HighTec与芯驰科技共同宣布HighTec编译器套件将全面支持芯驰新一代旗舰智控MCU-E3650芯片。此次合作,进一步丰富了芯驰车芯产品的工具链生态,双方将携手为客户提供高性能、高安全性的解决方案。
    的头像 发表于 04-28 15:20 1968次阅读