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

流引擎

C7100 CPU 有两个流引擎。流引擎是 C7000 CPU 内核的一个特性,有助于将数据从存储器加载到 CPU。流引擎可以将数据从存储器预取到 CPU 附近的位置,从而显著提高存储器层次结构的性能。预取数据可以显著减少数据载入 CPU 所需的时间。它还可以减少 L1 数据缓存容量的未命中次数,因为通过流引擎访问数据时会绕过 L1 缓存。

流引擎支持多达六维地址访问模式。当性能瓶颈涉及到存储器读取时(如果 D 单元资源限制占主导或缓存未命中占主导),如果提前知道存储器中对象的访问模式,请考虑使用一个或两个流引擎。流引擎与手动矢量化的循环结合使用时效果最好。更多有关流引擎和代码示例的信息,请参阅 C71x DSP CPU、指令集和矩阵乘法加速器技术参考手册 (SPRUIP0)、C7000 优化 C/C++ 编译器用户指南 (SPRUIG8) 以及编译器安装目录中的 include 目录下的 c7x_strm.h 文件。

C7000 编译器尚未自动使用流引擎特性。