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 分离式数据路径和功能单元

以下方框图显示 C7100 DSP CPU 上的分离式数据路径。图中有 A 端数据路径和 B 端数据路径。图中显示了功能单元和多个异构寄存器文件。A 端数据路径负责标量计算,从存储器加载和在存储器中存储标量与矢量,以及控制流(分支、调用)。B 端数据路径处理矢量数学运算、数据排列和矢量谓词运算。

GUID-20200513-SS0I-GVDH-406R-GWV8NKTVNBTS-low.png图 2-1 C7000 数据路径方框图

为了简化上图,此图中未显示某些数据移动功能和数据路径。

  • 通常,功能单元可以写入同一数据路径上的任何寄存器文件。
  • 大多数功能单元可以从一个或两个流引擎中获取数据。
  • 每个数据路径 (A/B) 各有一个 64 位交叉路径。每个交叉路径允许每个周期从对侧全局寄存器文件读取一次。

C7100 和 C7120 器件具有 512 位向量宽度。C7504 和 C7524 器件具有 256 位向量宽度。寄存器每个寄存器有 64 位(“标量”)或每个寄存器有“向量宽度”位数。因此,C7100 和 C7120 器件具有 512 位向量寄存器,而 C7504 和 C7524 器件具有 256 位向量寄存器。

在给定的数据路径上,有若干不同类型的寄存器文件。在给定的数据路径上,每个功能单元都可以写入该数据路径上的全局寄存器文件以及该数据路径上的大部分“本地”寄存器文件。然而,只有一些功能单元可以从“本地”寄存器文件中读取。

  • D1 和 D2 单元:这些单元位于 A 端数据路径上,可从存储器加载并存储到存储器中。两个 64 位负载可并行执行。两个 64 位存储可并行执行。64 位和向量宽度加载可以与 64 位或向量宽度存储并行执行。两个向量宽度存储不能并行执行,两个向量宽度负载也不能并行执行。
  • L1、S1、M1 和 N1 单元:这些单元是通用功能单元,处理标量和小矢量计算的不同组合。M1 和 N1 功能单元执行各种乘法指令。
  • L2、S2、M2 和 N2 单元:它们也是通用功能单元,并且可以运行全宽向量数据。M2 和 N2 功能单元执行各种乘法指令。
  • B 单元:此单元处理间接的分支和调用。
  • C 单元:此单元对数据进行排列和打乱。
  • P 单元:此单元计算用于屏蔽矢量通道的谓词,如此,不用计算特定的通道,也无需将其存储到存储器中。

除了提供对存储器层次结构进行 CPU 访问的 D1 和 D2 单元之外,C7100 DSP 还有两个“流引擎”,便于快速从存储器获取数据。流引擎 是一种硬件特性,允许您(或编译器)指定存储器地址模式,以便从存储器中获取数据。流引擎尽力将数据从存储器层次结构预取到靠近 CPU 的暂存存储器,以最大限度地减少由于冷缓存未命中而导致的 CPU 停顿。