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

软件流水线处理阶段

对循环进行软件流水线处理时,C7000 编译器会经历三个基本阶段。这三个阶段是:

  1. 认证循环是否可进行软件流水线
  2. 收集循环资源和依赖图信息
  3. 尝试对循环进行软件流水线处理

当编译器试图对内循环进行软件流水线处理时,编译器可能已对循环中的代码应用了某些转换,也可能合并了相邻或嵌套循环。

阶段 1:认证

在编译器允许软件流水线或认为软件流水线合法之前,必须满足几个条件。导致软件流水线失败的两个最常见条件是:

  • 循环中不能有太多指令。循环太大,通常需要的寄存器超过可用数量,而且需要更长的编译时间。
  • 除非调用的函数已内联,否则无法在循环中调用另一个函数。控制流的任何中断都会使软件流水线无法进行,因为多个迭代正在并行执行。

如果软件流水线的任何条件无法 满足,流水线认证将会停止,并显示不合格消息。有关疑难解答,请参阅节 5.4.1,有关此阶段所提供的信息,请参阅节 5.2.1

如果满足软件流水线的所有条件,编译器继续进入阶段 2。

阶段 2:收集循环和依赖信息

软件流水线的第二阶段涉及收集循环资源和依赖图信息。有关此阶段输出的信息,请参阅节 5.2.2

阶段 3:软件流水线尝试

一旦编译器认证循环可进行软件流水线,对其进行分区,并分析必要的循环携带和资源要求后,便可以尝试执行软件流水线。

编译器尝试在特定启动间隔 (ii) 下开始对循环进行软件流水线处理。每当在特定启动间隔下编译器的软件流水线尝试失败时,ii 便会增加,并进行另一次软件流水线尝试。在软件流水线信息注释块中可看到此信息。这个过程一直持续到软件流水线尝试成功或 ii 等于未进行软件流水线的调度循环的长度。如果 ii 达到未进行软件流水线的调度循环的长度,软件流水线尝试将会停止,编译器则生成非软件流水线循环。更多有关此阶段中提供的信息,请参阅节 5.2.3

如果软件流水线尝试不成功,编译器会提供附加反馈来帮助说明原因。有关最常见的软件流水线故障列表和缓解策略,请参阅节 5.4.2

在特定启动间隔下找到成功的软件流水线调度和寄存器分配后,便会显示关于循环的更多信息。请参阅节 5.2.4节 5.2.5节 5.2.6节 5.2.7节 5.2.8