ZHCU881C May   2020  – December 2023

 

  1.   1
  2.   请先阅读
    1.     关于本手册
    2.     相关文档
    3.     商标
  3. 2引言
    1. 2.1 C7000 数字信号处理器 CPU 架构概述
    2. 2.2 C7000 分离式数据路径和功能单元
  4. 3C7000 C/C++ 编译器选项
    1. 3.1 概述
    2. 3.2 为性能选择编译器选项
    3. 3.3 了解编译器优化
      1. 3.3.1 软件流水线
      2. 3.3.2 矢量化和矢量谓词
      3. 3.3.3 自动使用流引擎和流地址生成器
      4. 3.3.4 循环折叠和循环合并
      5. 3.3.5 自动内联
      6. 3.3.6 if 转换
  5. 4基本代码优化
    1. 4.1  迭代计数器和限制的有符号类型
    2. 4.2  浮点除法
    3. 4.3  循环携带依赖和 restrict (限制)关键字
      1. 4.3.1 循环携带依赖
      2. 4.3.2 restrict (限制)关键字
      3. 4.3.3 运行时别名消歧
    4. 4.4  函数调用和内联
    5. 4.5  MUST_ITERATE 和 PROB_ITERATE Pragma 与属性
    6. 4.6  if 语句和嵌套的 if 语句
    7. 4.7  内在函数
    8. 4.8  矢量类型
    9. 4.9  待使用和避免的 C++ 特性
    10. 4.10 流引擎
    11. 4.11 流地址生成器
    12. 4.12 优化库
    13. 4.13 存储器优化
  6. 5了解汇编注释块
    1. 5.1 软件流水线处理阶段
    2. 5.2 软件流水线信息注释块
      1. 5.2.1 循环和迭代计数信息
      2. 5.2.2 依赖和资源限制
      3. 5.2.3 启动间隔 (ii) 和迭代
      4. 5.2.4 常量扩展
      5. 5.2.5 使用的资源和寄存器表
      6. 5.2.6 阶段折叠
      7. 5.2.7 存储器组冲突
      8. 5.2.8 循环持续时间公式
    3. 5.3 单个调度迭代注释块
    4. 5.4 识别流水线故障和性能问题
      1. 5.4.1 阻止循环进行软件流水线作业的问题
      2. 5.4.2 软件流水线故障消息
      3. 5.4.3 性能问题
  7. 6修订历史记录

待使用和避免的 C++ 特性

某些 C++ 特性会造成运行时损失。在编译时完全处理了其他特性,因此不会造成运行时损失。本文档不会全面论述哪些 C++ 特性会造成运行时损失以及哪些不会;相关论述可参见互联网上和印刷版的若干资源。

某些特性确实会造成运行时损失,但在提供所需的抽象和/或安全级别方面非常有用,因此无论如何都应该考虑使用它们。一些较常用的特性的指导原则如下:

这些特性可能产生运行时开销。请考虑其优势是否值得所投入的成本:

  • 尽管其开销基本上并不比 malloc() 高或低,但请调用 new()
  • 使用标准模板库 (STL),主要是由于对 new() 的隐藏调用
  • 异常/异常处理
  • 运行时类型信息 (RTTI)
  • 多重继承
  • 虚函数(尽管运行时成本通常很小)

请随意使用这些特性,因为这些特性运行时开销很小甚至无开销:

  • 模板
  • 运算符重载
  • 函数重载
  • 内联
  • 精心设计的继承。特别是,如果在编译时已知对象类型,则调用衍生类的成员函数不会造成损失。

以下特性可提高性能,应该尽可能使用:

  • 使用 const
  • 使用 constexpr
  • 按引用传递对象,而非按值传递对象
  • 可在编译时与运行时计算的构造和表达式