软件流水线信息中出现下述定义的术语。请注意,这些项目中的许多项目仅在使用了 --debug_software_pipeline 选项时出现,或仅在发生特定条件时出现。
- 循环展开因子。专为提高性能而展开的循环的次数。
- 已知最小迭代计数。循环执行的最小次数。
- 已知最大迭代计数。循环执行的最大次数。
- 已知最大迭代计数因子。始终会平均划分循环迭代计数的因子。此信息可用于在可能的情况下展开循环。
- 循环携带依赖限制。最大循环携带路径的距离。当循环的一次迭代写入必须在未来迭代中读取的值时,便会出现循环携带路径。作为循环携带限制的一部分的指令用 ^ 符号标记。
- 启动间隔 (ii)。循环的连续迭代开始之间的周期数。启动间隔越小,执行循环所需的周期就越少。
- 资源限制。使用最多的资源限制了最小启动间隔。如果 4 条指令需要一个 .D 单元,则它们至少需要两个周期来执行(4 条指令/2 个并行 .D 单元)。
- 未分区资源限制。在循环中的指令被划分到特定的一侧之前的最佳资源限制值。
- 分区资源限制 (*)。在指令被划分之后的资源限制值。
- 资源分区。下表总结了如何划分指令。编写线性汇编时,使用这些信息帮助分配功能单元。每个表条目都有对于A侧和 B侧功能单元的值。星号标记条目将决定资源限制值。这些条目表示以下术语:
- .L 单元是仅需要 .L 单元的指令总数。
- .S 单元是仅需要 .S 单元的指令总数。
- .M 单元是仅需要 .M 单元的指令总数。
- .N 单元是仅需要 .N 单元的指令总数。
- .D 单元是仅需要 .D 单元的指令总数。
- .C 单元是仅需要 .C 单元的指令总数。
- .P 单元是仅需要 .P 单元的指令总数。
- .M/.N 单元是可以使用 .M 或 .M 单元的指令总数。
- .L/.S 单元是可以使用 .L 或 .S 单元的指令总数。
- .L/.S/.C 单元是可以使用 .L、.S 或 .C 单元的指令总数。
- .L/.S/.C/.M 单元是可以使用 .L、.S、.C 或 .M 单元的指令总数。
- .L/.S/.C/.M/.D 单元是可以使用 .L、.S、.C、.M 或 .D 单元的指令总数。
- .X 交叉路径是所需交叉路径的总数。
- Bound(.C2)。由可以使用 .C2 单元的指令数确定的资源限制。
- Bound(.D1 .D2 .D)。由可以使用 .D1 和 .D2 单元的指令数确定的资源限制。
- Bound(.M .N .MN)。由可以使用 .M 和 .N 单元的指令数确定的资源限制。
- Bound(.P2)。由可以使用 .P2 单元的指令数确定的资源限制。
- Bound(.L .S .LS)。由可以使用 .L 和 .S 单元的指令数确定的资源限制。
- Bound(.L .S .C .LS .LSC)。由可以使用 .L、.S 和 .C 单元的指令数确定的资源限制。
- Bound(.L .S .C .M .LS .LSC .LSCM)。由可以使用 .L、.S、.C 和 .M 单元的指令数确定的资源限制。
- Bound(.L .S .C .M .D .LS .LSC .LSCM .LSCMD)。由可以使用 .L、.S、.C、.M 和 .D 单元的指令数确定的资源限制。
- 最大加载推测量。推测出该循环中加载的最大字节数将超出数组末尾(后面或前面)。此处无需用户操作,因为编译器将使用可安全推测的加载指令。