重组计算
概念
重组计算(Reassociation)通过改变运算的结合顺序,打破数据依赖链,利用流水线的并行执行能力。
原理
在同一加法单元中,即使只有一个加法器,也可以利用其流水线结构:前一个运算的结果不需要完全写回就可以开始下一个不依赖它的运算。
示例
// 原始:串行依赖链
acc = acc OP data[i] OP data[i+1];
// 重组:创建两个独立的依赖链
acc = acc OP (data[i] OP data[i+1]);编译器可以在不改变结果(对整数)的情况下重新结合括号,使 data[i] OP data[i+1] 与主累加器并行执行。
效果对比
| 方式 | 关键路径 | CPE(整数加法) |
|---|---|---|
| 原始 | 1 条链 | 1.00 |
| 2×1展开+重组合 | 2 条独立子链 | 0.50+ |
适用条件
- 整数运算:重新结合不改变结果(结合律成立)
- 浮点运算:可能有精度变化,编译器默认不会执行
- 需要保证操作的结合律成立