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修订历史记录

循环和迭代计数信息

如果编译器使循环符合软件流水线作业,则前几行如下例所示:

;*----------------------------------------------------------------------------* 
;*   SOFTWARE PIPELINE INFORMATION
;*
;*      Loop found in file               : s.cpp
;*      Loop source line                 : 5
;*      Loop opening brace source line   : 6
;*      Loop closing brace source line   : 8
;*      Known Minimum Iteration Count    : 768                    
;*      Known Maximum Iteration Count    : 1024                    
;*      Known Max Iteration Count Factor : 256

循环计数器叫做“迭代计数器”,因为它是一个循环中的迭代次数。此注释块部分中提供的统计信息有:

  • 在文件中找到的循环循环源代码行循环左大括号源代码行循环右大括号源代码行:有关循环在原始的 C/C++ 源代码中的位置的信息。
  • 已知最小迭代计数:鉴于编译器可用的信息量,循环可能执行的最小次数。
  • 已知最大迭代计数:鉴于编译器可用的信息量,循环可能执行的最大次数。
  • 已知最大迭代计数因子:平均划分给迭代计数的最大数。即使不确定迭代计数的确切值,但可以知道该值是 2、4 等数值的倍数,可支持更积极的打包数据/SIMD 优化。

编译器尝试识别关于循环计数器的信息,例如最小值(已知最小迭代计数),以及它是否是某个数的倍数(有已知最大迭代计数因子)。

如果已知最大迭代计数因子大于 1,编译器可能会更积极地处理打包数据和优化循环展开。例如,如果循环计数器的确切值未知,但已知该值是某个数字的倍数,那么编译器也许能更好地展开循环以提高性能。